Если у программиста есть мастерство по [закрытому] C++

16
задан 3 revs, 2 users 100% 4 June 2010 в 15:19
поделиться

22 ответа

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

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

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

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

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

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

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

69
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

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

0
ответ дан 30 November 2019 в 15:01
поделиться

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

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

0
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

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

1
ответ дан 30 November 2019 в 15:01
поделиться

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

0
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

4
ответ дан 30 November 2019 в 15:01
поделиться

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

Больше, чем один! Заслуженный ученый ACM Кэтлин Фишер написала статью "We Need More Than One", в которой объясняет, почему так важно понимать несколько языков программирования. Эссе имеет широкий охват, но в нем конкретно упоминается C++.

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

Не обязательно. Два момента:

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

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

  • Для любого программиста очень ценно иметь глубокое понимание того, как программировать с помощью дженериков. Шаблоны C++ едва ли подходят, потому что (пока) невозможно проверить тип шаблона C++ независимо. Лучшие модели включают в себя Java generics, C# generics и параметрический полиморфизм, как в Haskell и ML

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

17
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

1
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

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

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

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

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

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

1
ответ дан 30 November 2019 в 15:01
поделиться

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

Это продвинутые области языка, которые позволяют вам дополнительно контролировать, и то, что, как вы утверждаете, отделяет программиста «Professional X» от программиста «Hobbyist / Occasional X» (я знаю C ++, но время от времени использую его. Я знаю C # и использую его каждый день.)

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

1
ответ дан 30 November 2019 в 15:01
поделиться

Мне кажется, вы смешиваете языки и библиотеки. Хотя упомянутые вами языки действительно меняются, их изменения обычно затмеваются изменениями в библиотеках классов (и часто происходят в паре с ними).

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

1
ответ дан 30 November 2019 в 15:01
поделиться

«Проблема» Java, C # заключается в том, что вам нужно не только изучать язык, но и библиотеки, которые идут с ним. А теперь возьмем C ++, а что, если бы я сказал вам, что вам также нужно изучить ATL и MFC с его помощью и запомнить все эти вещи ... это было бы невозможно

0
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

2
ответ дан 30 November 2019 в 15:01
поделиться

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

0
ответ дан 30 November 2019 в 15:01
поделиться

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

0
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

2
ответ дан 30 November 2019 в 15:01
поделиться

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

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

  • Один язык, который приближается к металлу. C, C ++, язык ассемблера, чтобы узнать, как ваши программы могут взаимодействовать с оборудованием.
  • Один относительно чистый объектно-ориентированный язык (C #, Java), позволяющий изучать концепции объектно-ориентированного программирования одновременно с пониманием того, что объектно-ориентированный объект - не панацея.
  • Один функциональный язык программирования (Lisp, Haskell, ...), позволяющий выйти за рамки процедурных / императивных правил.
  • Один «язык сценариев» - язык сценариев оболочки или что-то вроде Python и Ruby, потому что рано или поздно вам понадобится что-то, что «имеет все», чтобы быстро собрать некоторые утилиты.

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

6
ответ дан 30 November 2019 в 15:01
поделиться

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

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

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

2
ответ дан 30 November 2019 в 15:01
поделиться

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

1
ответ дан 30 November 2019 в 15:01
поделиться

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

1
ответ дан 30 November 2019 в 15:01
поделиться

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

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

1
ответ дан 30 November 2019 в 15:01
поделиться

C++ сильно изменился за то время, что я его использую, и вот-вот претерпит еще одно огромное изменение с принятием стандарта C++0x. Если вам не нравятся перемены, вы находитесь не в том бизнесе.

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

32
ответ дан 30 November 2019 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: