Skip to the content.

:ghost: Легенды и мифы про C++

:question: Язык C++ умер, на нем невозможно что-либо писать

Живее всех живых.

На сегодняшний день находится в топах различных рейтингов языков программирования и даже набирает очки популярности, например: индекс Tiobe. Дурную славу “мертвого языка” он сыскал в 2000-е годы, когда его развитие временно застыло, а комитет по стандартизации приостановил свою активность. Но начиная со стандарта C++11, язык пережил ренессанс. Сегодня он активно обновляется и пополняется новым функционалом, в среднем, каждые три года. Многие проблемы, о которых заявляют свидетели “мертвого” C++ уже решены. Но в силу того, что такие специалисты скорее всего перестали работать с C++, либо по верхам изучили в ВУЗе/на курсах, то и продолжают порождать и сеять различные мифы о том, насколько C++ ужасен.

:question: Настоящие программисты начинают изучать C++ сразу под Linux/Vim/gcc

Если вышеперечисленная связка инструментов выглядит для вас малознакомой, то на таком этапе обучения стоит сконцентрироваться только на изучении основ языка C++. Рекомендуем вам попробовать написать свои первые приложения в Microsoft Visual Studio IDE (подробнее см. PreJunior Books).

Пойти по наиболее трудному пути выглядит благородно. Но есть высокая доля вероятности, что объем информации, который придется изучить для сборки “Hello World” в связке Linux + Vim + gcc будет чрезмерно большим. Это чревато быстрой демотивацией и разочарованием в программировании.

Старайтесь идти по пути: от простого к сложному. В спортзале новички не пытаются поднять самую тяжелую штангу на первой тренировке, т.к. понимают, чем это может быть чревато. Это же правило работает и при обучении. Когда более-менее освоитесь с языком, то можете попробовать поиграться с написанием кода в любом ином IDE, операционной системе и т.д.. Но это уже совершенно другая история…

:question: Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc.

Нет, нет и ещё раз нет!

Такое утверждение живо из-за двух распространенных ситуаций: так учили в ВУЗе (Assembler -> C -> C++), либо от “старой гвардии” разработчиков, т.к. многие из таких специалистов проходили подобный карьерный путь. Современный C++ не требует подобного подхода к изучению. Этот язык полностью автономен. Гораздо вероятнее, у вас возникнет путаница в голове, а также устойчивое желание писать на C++ в стиле “Си с классами”. А ассемблер потребуется только в особых ситуациях.

:question: Изучайте C++ по книге Страуструпа

Крайне спорный тезис. Вероятнее всего что этот совет предлагают те, кто уже имел большой опыт разработки на других языках (C, Fortran, Delphi, и т.д.) и переходил с них на C++. Книга Страуструпа написана больше как справочник: (Язык программирования C++). Потому и работать с ней требуется соответственно, что уже требует наличие знаний о C++ и практики использования. Рекомендуем заглянуть в раздел Книги, где вы найдете материал для любого уровня владения языком программирования.

:question: Изучайте C++ только по стандарту

Тоже крайне опасный тезис. Во-первых, современный стандарт C++ уже превысил объем в 2000 страниц. Во-вторых, доступ к актуальной версии стандарта платный. В-третьих, стандарт написан не самым “дружелюбным” способом. Тем кто изучил язык по стандарту можно пожать руку, но мы не рекомендуем такой путь, ибо он долог и тернист. Лучше загляните в раздел Книги, там вы найдете материал для любого уровня владения языком.

:question: Undefined Behavior преследует разработчика повсюду

Скорее нет, чем да.

Современный C++, а также имеющийся инструментарий, позволяют избежать львиную долю проблем, связанных с неопределенным поведением. Здесь можно дать совет: если сомневаетесь, что делает та или иная конструкция, то попробуйте поискать информацию на CppReference, StackOverflow или иных профильных порталах. Если же после прочтения конструкция остается непонятной, то попробуйте переписать блок кода альтернативным и более простым способом, чтобы избежать неопредленного поведения. В простоте кроется великая сила!

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

Это утверждение также идет от представителей “старой гвардии”, которые перестали писать на языке до появления стандарта C++11, или же от тех, кто слабо знаком с последними стандартами языка. Современный C++ имеет в своей библиотеке набор примитивов, который отвечает за автоматическое выделение и освобождение памяти. Контроль за выделением памяти все больше и больше отходит на второй план. Во многих компаниях вы также встретите внутреннее правило: “не использовать сырых указателей”. И напоследок, не пренебрегайте современным инструментарием и санитайзерами. Они способны отыскать потенциальную утечку памяти ещё на этапе анализа исходного кода.

:question: C++ - это сплошной легаси-код

Отчасти правдивый миф, но стоит отметить, что это применимо и к другим языкам. На самом современном стеке может производиться “легаси”. Качество кода зависит от технической культуры внутри компании и команд разработки и их визионеров, т.к. легаcи-код порождается человеческим фактором: уровень разработчиков и компетенций, отношение к работе, горящие сроки, практики в команде и т.п. На C++ разработано огромное количество систем, которые не первый год работают в режиме 24/7. Такие системы могли быть написаны в прошлом без соблюдения всевозможных практик разработки. Они часто являются основой бизнеса, которые приносят значительную часть прибыли. Потому проводить в таких системах масштабные изменения очень рискованно. Разработчики работают с таким кодом предельно осторожно. Но не стоит думать, что с этим ничего невозможно поделать. Постепенно такие системы тоже переписываются с использованием современных практик и технологий. Такого рода задачи могут стать для вас не менее интересным вызовом, т.к. предоставляют отличную возможность освоить широкий спектр компетенций: чтение кода, реверс-инжениринг, написание тестов, проектирование архитектуры ПО, автоматизация, сбор требований и т.д.


На главную страницу