Подтвердить что ты не робот

Если программист обладает мастерством над С++

Мне было интересно, нужно ли программистам обладать знаниями по крайней мере на одном языке программирования?

Языки программирования, такие как С#, java, VB.Net и т.д. изменяются каждый год или два. Должен ли программист овладеть С++, который является стабильным языком и редко претерпевает изменения?

Я разработчик С# и использую его примерно 7 лет, я все еще не владею им.

ИЗМЕНИТЬ Я думаю, что мой вопрос неправильно понял. Я не против изменений или эволюции. Мне нравятся новые функции и абстракции, предоставляемые такими языками, как С#, VB, Java. И я продолжаю ждать новых функций, если это облегчит жизнь программистам. Но этот факт также затрудняет освоение этих языков. Они постоянно развиваются. Языки, подобные С++, имеют медленный цикл эволюции. Итак, учитывая этот сценарий, полезно ли быть мастером С++? Это то, что имел в виду мой первоначальный вопрос. Примечание. - Основываясь на ответах друзей ниже, я понял, что языки и рамки - это инструменты для выражения понятий. Также может быть хорошей идеей выразить концепции на разных языках программирования.

4b9b3361

Ответ 1

Языки программирования, такие как С#, java, VB.Net и т.д. изменяются каждый год или два.

Они не "меняются", а эволюционируют. Ваши знания и опыт не теряются.

Должен ли программист овладеть С++, который является стабильным языком и редко претерпевает изменения?

Программирование - это все новое и изменение. Если вам это не нравится, рассмотрите другую профессию.

Я разработчик С# и использую его примерно 7 лет, я все еще не владею им.

Если бы вы достигли мастерства, жизнь стала бы скучной и, возможно, даже бессмысленной. Может быть, это не цель, а дорога, которая имеет значение?

EDIT: прочитав ваши комментарии, я чувствую, что вы неправильно присваиваете объем библиотеки классов .NET сложности самого языка С#. Не смешивайте их. Язык С# относительно прост, легко "освоить". То, что вы упоминаете как полезные методы типа данных char, - это просто вспомогательные методы из библиотеки .NET. Это одно из активов платформы. Это делает разработчиков .NET настолько продуктивными, потому что им не нужно тратить часы на разработку сторонних библиотек, чтобы сделать для них основные операции: создание XML, изображений, сетей, баз данных и многое другое, доступное непосредственно из библиотеки .NET. Естественно, его чистый размер может напугать вас и создать впечатление, что он бесконечен. Это не так! Просто используйте то, что вам нужно, и оставьте остальные.

Ответ 2

С++ сильно изменился за время, когда я использовал его, и вот-вот претерпит еще одно огромное изменение с принятием стандарта С++ 0x. Если вам не нравятся изменения, вы ошибаетесь.

Что касается "мастерства", я бы сказал, что любой, кто претендует на полное овладение всеми аспектами С++, вероятно, лежит через их зубы (и это будет включать таких людей, как Страуструп, если он когда-либо говорил это). Большинство опытных программистов на C++ являются экспертами в подмножестве языка, который полезен для решения конкретных проблем, которые им интересны, - выведите их за пределы подмножества, и их отсутствие знаний становится очевидным. Но, конечно, они могут так же быстро изучить новый материал.

Ответ 3

Мне было интересно, нужно ли программистам обладать знаниями по крайней мере на одном языке программирования?

Более одного! ACM Distinguished Scientist Кэтлин Фишер написала "Нам нужно больше, чем один" , что объясняет почему так важно понимать несколько языков программирования. Эссе широко распространено, но в нем упоминается С++.

Должен ли программист овладеть С++, который является стабильным языком и редко претерпевает изменения?

Не обязательно. Две точки:

  • С++ выглядит стабильным только потому, что он в конце жизненного цикла и остается относительно устойчивым, в то время как другие языки становятся более популярными. Если бы вы работали в 1990-х годах, вы бы рассматривали С++ как очень неустойчивый. См. Jim Waldo отличную книгу Эволюция С++. Даже сейчас С++ собирается претерпеть еще одну судорогу, когда наконец будет принят стандарт С++ 0x.

  • Очень важно, чтобы любой программист имел глубокое понимание некоторого языка, который имеет явное управление памятью и в котором вы программируете на уровне машины, используя биты, байты и слова. С этой целью язык C немного лучше, но С++ - отличный язык программирования на уровне машинного уровня. Однако, по крайней мере, по моему мнению, важно понимать, как программировать байты, слова и указатели, а не темные углы, такие как шаблоны или поля защищенных членов.

  • Очень важно, чтобы любой программист имел глубокое понимание того, как программировать с помощью дженериков. Шаблоны С++ едва пригодны, потому что он (еще) не может самостоятельно проверить шаблон С++. Более совершенные модели включают в себя Java-генераторы, генераторы С# и параметрический полиморфизм, которые были найдены в Haskell и ML

  • Почти невозможно овладеть чем-либо сложным, как С++ или mdash, или, если на то пошло, Haskell или Perl или Common Lisp. Если вы хотите полностью овладеть чем-то, вы должны придерживаться очень простого языка, такого как Lua.

Ответ 4

Я считаю, что истинный "мастер" программист имеет разнообразный набор инструментов. Она может быть специализирована на одном или нескольких языках, но в целом она будет следить за тем, чтобы охватить более широкий набор баз, а не углубляться в крошечные особенности.

Некоторые вещи, которые я считаю полезными:

  • Один язык, который приближается к металлу. C, С++, язык ассемблера, чтобы узнать, как ваши программы могут взаимодействовать с оборудованием.
  • Один относительно чистый язык OO (С#, Java), чтобы изучить концепции OO одновременно с пониманием того, что OO не является серебряной пулей.
  • Один функциональный язык программирования (Lisp, Haskell,...), чтобы выйти за рамки процедурного/императивного.
  • Один "язык сценариев" - это оболочка script, или что-то вроде Python и Ruby, потому что рано или поздно вам нужно что-то, что "имеет все", чтобы быстро собрать некоторые утилиты.

Наличие под вашим поясом сделает вас лучшим программистом на любом языке.

Ответ 5

Я программирую в полдюжины языков, но полное понимание концепций "голого металла" - это, пожалуй, ваш лучший костыль, который поможет вам между языками.

Для меня это означает знание c/С++. Например, вы можете оценить объектно-ориентированный дизайн ядра Linux - написанный на C - легко оценить "короткие сокращения" (читать функции основного языка), предоставляемые другими языками, и когда и как оценить эффективность.

Итак, да, я думаю, что хорошее понимание языка низкого уровня - отличный инструмент для любого программиста. C/С++ отлично подходит для этого счета.

Ответ 6

Если вы используете С++, вы должны знать особенности языка. Раньше я был очень высоким С++, но теперь я использую С#, тогда мне нужно будет обновить его. Иногда слишком много знаний может быть помехой, поэтому мне все равно.

Ответ: код С++ каждый день = да, код С# = нет

Будьте ясны, вы не можете овладеть чем-то подобным, если это не все, что вы делаете, или, по крайней мере, каждый день, по крайней мере, для меня это было так.

Ответ 7

Большинство языков программирования меняются и развиваются непрерывно, и то же самое относится к С++. Синтаксические изменения приходят с каждой новой версией стандарта, и major (С++ 0x) находится на горизонте. Но даже если новые версии Стандарта могут быть довольно редкими по сравнению с достижениями в области технологий, понимание этой технологии продолжает развиваться. Например, когда появился первый стандарт С++, большинство людей не использовали шаблоны или исключения. По мере того, как люди приобретали опыт работы с новыми функциями, они изучали не только синтаксис самого механизма, но и большие последствия использования этих средств. Если вы посмотрите на приложение, написанное сегодня, оно может сильно отличаться от приложения, написанного всего несколько лет назад, даже если оба они были написаны "экспертами".

Если вы хотите стать мастером-программистом, то путь к мастерству - это обучение. Как можно больше, как можно больше различных областей. Я считаю, что один из лучших способов сделать это - научиться как можно большему количеству языков, хотя бы для того, чтобы получить рудиментарное понимание этого языка. Изучите все "большие" языки, такие как С++, VB, Java, С# и т.д. Но не ограничивайте их. Изучите маленькие языки, а также более академические языки. Каждый изучаемый вами язык учит вас не только этому языку, но и тому, как программировать.

Взгляните на эту книгу, 7 языков за 7 недель

Ответ 8

Хороший программист должен знать как можно больше языков. У С++ нет особого статуса. Программист, который знает С++, лучше, чем тот, кто этого не делает, точно так же, как программист, который знает, что Python лучше, чем тот, кто этого не делает.

Если вам не нужно писать код на С++, тогда нет, вам не обязательно быть экспертом на С++. Это не больно, и изучение языка обязательно научит вас тому, что вы можете использовать и на других языках.

Но то же самое верно и для других языков.

Ответ 9

Программист должен обладать знаниями по концепции, что почти все:)

Ответ 10

У вас есть "мастерство" над английским (или на каком-либо другом языке, на котором вы говорите)? Я говорю по-английски уже 30 лет и до сих пор не владею им. В этом отношении я не вижу большой разницы между английским и С# (С++, VB, Javascript....) языки развиваются, продолжайте учиться, это лучшее, что вы можете сделать.

Ответ 11

Я думаю, что вы смешиваете языки и библиотеки. В то время как языки, о которых вы упомянули, меняются, их изменения обычно затмеваются (и часто сочетаются) с изменениями в их библиотеках классов.

Говоря об этом, нет ничего "неустойчивого" в отношении этих языков. Они "меняются", растут, не двигаются. Тот факт, что С++ (как язык) остается в значительной степени статичным, не является ни хорошим, ни плохим в этом отношении.

Ответ 12

Чтобы справиться с чем-то, на самом деле требуется много работать с этим. Языки - это всего лишь инструмент, а не прерогатива, такие как текстовые редакторы и синтаксические анализаторы xml. Программист должен обладать сильным языковым независимым знанием, которое может применяться на каждом инструменте и языке для решения проблем.

Кто-то говорит, что программирование - это искусство, а искусство все еще искусство, независимо от используемого инструмента и техник.

Ответ 13

Я тоже поставил себе под сомнение. Мое мнение (от программиста "ничего-на-C" ) заключается в том, что вы достигаете стадии, когда язык становится средством для достижения цели. Вы можете делать вещи на любом языке, пока вы знаете основы в нем (мне приходилось делать биты в С++, VB и Python).

Его расширенные области языка, которые позволяют вам контролировать и что вы будете спорить, отделяют программиста "Professional X" от прогемблера "Хоббист/Случайный X" (я знаю С++, но я использую его время от времени. Я знаю С# и использую его каждый день.).

Не беспокойтесь о том, чтобы не знать определенного языка - в конце дня языки будут продолжать развиваться - ни один из них не будет существовать на протяжении всей вашей профессиональной карьеры (хотя некоторые из них очень склонны к лол).

Ответ 14

Я думаю, что ответ заключается в том, что это зависит от того, что вам нужно делать, и хотите ли вы специализироваться или иметь более общий опыт/навыки (не уступайте последним, даже если это не всегда так модно). Это похоже на большинство инженерных (и действительно других) дисциплин, и я не думаю, что есть правильный или неправильный подход.

Использование автомобильной промышленности в качестве простой аналогии, открытие специалиста Volvo в маленьком сельском городе вряд ли будет разумным деловым движением, где более общий бизнес по ремонту автомобилей, вероятно, будет более подходящим предприятием (если вы не живете в Швеции конечно...). В большой богатой городской зоне вполне может быть наоборот. Для каждого бизнеса требуются разные уровни специальных и "универсальных" технических навыков (и инструментов).

Сказав, что если у вас есть возможность получить глубокое знание одного языка и/или среды, вы, вероятно, обнаружите, что ваш опыт работы с ним также поможет вам в других языках и средах.

Ответ 15

Я думаю, что С++ - ошибка. Совместимость с C с самого начала убила язык, отсутствие хорошей библиотеки шаблонов в течение многих лет помешало программистам.

Теперь, когда он относительно стабилен и зрелый, он остается ошибкой, и многие объекты инфраструктуры пытаются убить вас, а какая-то инфраструктура действительно поможет вам.

Я подписываюсь на большинство вопросов, поднятых в этом "интервью" .

Дизайнеры языка пытались исправить проблемы языка сначала с дизайном Java и С#, слишком сильно полагающимся на безопасную сторону.

Go - это более новая попытка создать C с классами со скоростью, скоростью, скоростью в своем дизайне. Go по-прежнему не является основным, но это было бы, если бы оно зависело от меня.

В целом, я думаю, что ANSI C по-прежнему является мощным и полезным языком, инструментом номер один, когда производительность идет сначала (или номер два, учитывая Go).

А, и вы можете определенно овладеть C через несколько месяцев, дизайн языка не заставит задавать вопросы о структуре решения.

Я бы определенно научил C ученикам и, возможно, Python или Java (или Go), чтобы показать методы и дизайн OO.

Ответ 16

Я бы сказал, что для программистов необходимо иметь опыт по крайней мере на одном языке программирования и предпочтительно два.

Ключевое слово здесь - "опыт", а не мастерство; Я согласен с мнением нескольких плакатов о том, что истинное овладение большинством языков программирования общего назначения является неуловимым и туманным уровнем передового опыта, возможно, за пределами достижения большинства профессионалов в области программного обеспечения. Проблема заключается не столько в нехватке времени или способности, сколько в отсутствии всестороннего воздействия на очень широкий спектр проблем программирования. В конечном итоге вы ограничены типом проектов, которые вы можете сейчас выполнять в своей организации (организации) и т.д.

Потребность в экспертизе на одном языке очевидна. Достойный уровень знаний и опыта как минимум на двух языках полезен для лучшего понимания ограничений любого языка, а также для обеспечения жизнеспособных вариантов выбора подходящего инструмента для данного проекта. Экспертиза на более чем двух языках также может быть желательной, но на практике я нахожу это трудным на любой глубине. Как правило, одна способность поддерживать высокий уровень знаний в нескольких языках программирования быстро снижается после первых 2-3.

В конечном счете, важно создать и поддерживать знания в отношении любых языков, которые наиболее полезны для того типа работы, который в настоящее время выполняется и/или ожидает выполнения в ближайшем будущем. Будьте в курсе изменений, попробуйте новые инструменты и будьте готовы принять и принять что-то принципиально новое, когда возникнет такая необходимость.

Ответ 17

Моя проблема связана со словом "мастерство".

Я сомневаюсь, что вы изучили всю свою жизнь, чтобы понять каждый нюанс любого предмета. Я говорю по-английски в течение 33 лет и все еще не понимаю, как это часто бывает.

Ответ 18

"Проблема" с Java, С# заключается в том, что вам не просто нужно изучать язык, но и библиотеки, которые поставляются вместе с ним. Теперь возьмите С++, что, если бы я сказал вам, вам также нужно изучить ATL и MFC с ним и запомнить все эти вещи... это было бы невозможно

Ответ 19

В нашей вселенной все постоянно меняется.

Ответ 20

Что действительно важно, не теряйте несколько минут, отправляя ответ на лучший способ написать что-нибудь, это способность писать хороший код или возможность и желание его искать, С#, java, VB.Net - это предназначенные для абстракций, которые сделали вашу модель чистой, безопасной и менее подверженной ошибкам, и написав код как можно более читаемый. Если вы хотите разрабатывать игры, программы для окон, Linux, драйверов или всего, что действительно нуждается в лучшей производительности или, возможно, выиграть конкурс для большинства скрытых строк кода, выберите С++, с другой стороны, вы должны выбрать другую платформу. Мне нравятся технологии, которые развиваются, что заслуга не является дефектом.

Ответ 21

Я не считаю необходимым преподавать себе язык, который вы не думаете, что собираетесь использовать. Некоторые знания C/С++ хороши в вашем репертуаре, и если у вас есть некоторый интерес и некоторое время на изучение С++, то непременно пойдете прямо вперед. Никогда не больно учиться чему-то новому. Я сторонник разработчиков, которые являются обобщающими, со специализациями в определенных областях.

Владение языком - это то, чего трудно достичь... это предполагает знание большого фрагмента библиотеки из сердца. Это требует много времени для написания кода с большим количеством различных пакетов/пространств имен из библиотеки. Как кто-то, кто проработал несколько C/С++ и Java/С# в течение примерно четырех лет, я бы сказал, что я нахожусь в основе знаний для библиотеки. Я постоянно сталкиваюсь с новыми частями библиотеки, которые мне нужно изучить/использовать. Задача программирования .NET для меня - это научиться использовать новые части фреймворка. Написание кода состоит из тех же самых передовых навыков программирования, которые я использовал в течение многих лет.

Позвольте мне задать вам вопрос:

На каком языке вы, естественно, "думаете"? Я знаю, что, когда я впервые сталкиваюсь с проблемой, мне кажется, что я, естественно, думаю в C для простого/низкого уровня, и С++, когда я имею дело с проектом, который поддается объектной ориентации.

Ответ 22

Тот же фактор, который делает С++ stable, затрудняет его освоение: он большой, сложный и относительно полный.