Советы сеньоров: как прокачать знания junior C++

0
844
views

Советы сеньоров — постоянная рубрика на DOU.UA, в которой опытные специалисты делятся практическими советами с джуниорами — общие лайфхаки по обучению, какие книги и ресурсы читать, какие навыки осваивать и многое другое. В этом выпуске сеньоры говорили о C++.

Советы для junior C++

Алексей Цой, Senior Developer в Luxoft Ukraine

14 лет опыта

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

Поэтому в целях самообразования очень пригодится свой «домашний» проект. На этой тестовой площадке вы сможете принимать абсолютно все решения. Начиная с требований, процессов и планирования и заканчивая стеком технологий, имплантацией функционала и его тестированием. Экспериментируйте, применяйте новые подходы, технологии, паттерны проектирования — делайте все, что считаете нужным и интересным. Ведь в реальных проектах такая свобода действий у новичков встречается крайне редко.

Насчет качества сделанной работы. Стремитесь давать грамотные оценки, решайте задачи минимальным количеством кода и не допускайте в нем багов. Воспринимайте каждый конкретный баг как свое личное поражение.

Естественно, в этом вам помогут книги, ставшие классикой. Это Герб Саттер и его «Exceptional C++»«More Exceptional C++» и «Exceptional C++ Style». Это Андрей Александреску и его «Modern C++ Design: Generic Programming and Design Patterns Applied» и «C++ Coding Standards: 101 Rules, Guidelines, and Best Practices», написанная вместе с Саттером. И, конечно же, книги Скотта Майерса.

А вот чего не следует делать, так это браться за задачи, в которых не понятна их постановка. Это относится не к технической части, каким образом написать код, а именно к требованиям. Задавайте вопросы. Иначе есть риск сделать бессмысленную вещь, потратить проектное время, создать угрозу срыва дедлайнов. Такое не понравится никому.

И напоследок, более философское. Ответственно подходите к поиску места работы. Не стоит тратить свое время и силы на проекты, которые вам не нравятся, не интересны, кажутся неактуальными. Ведь без интереса в работе вероятность профессионального развития очень низка. И не только в IT.

Советы для junior C++

Андрей Каличак, C++ Competence Lead в Perfectial

14 лет опыта

Язык С++ — один из древнейших, и по нему существует бесконечное множество документации, уроков, советов, тренингов и курсов. Несмотря на то, что некоторые могут одолеть этот язык за 21 день, я уверен, что большинство программистов учатся его использовать правильно и эффективно постоянно.

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

Для начинающего программиста очень важно как можно быстрее расширить свои знания. Как только будет получен критически минимальный порог знаний по стандарту языка, смежным базовым технологиям его использования (XML, DB, basic patterns/idioms), и это закрепится первым опытом, тогда свои знания можно углублять в выбранном направлении.

Не буду оригинальным и посоветую почитать в первую очередь классический труд Б. Страуструпа. И лишь потом, имея за плечами несколько килобайт написанного кода, можно приступать к более специализированным материалам, к примеру книгам Скотта Мэйерса или Герба Саттера. Они написаны в виде отдельных уроков, очень легко усваиваются. При определённом опыте и понимании это будет хорошим подспорьем в дальнейшем становлении профессионала.

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

Понятно, что вряд ли кто-то изъявит собственное желание менторить тебя, поэтому тут следует быть очень настойчивым и не стесняться просить старших ребят сделать код-ревью или помочь правильно имплементировать паттерн. Оптимально, если у тебя будет официальный ментор, в обязанности которого будет входить помощь в твоём обучении. Тогда все стороны будут заинтересованы в конечном результате. Но всё же крайне важно понимать, что это твой личный путь и только ты отвечаешь за его направление и результат. Организация обучения, скорость продвижения, его направление — это то, что решаешь только ты. Не жди — действуй! Время бесценно.

Обязательно паралельно необходимо осваивать последние стандарты и технологии — C++11/14/17, библиотека Boost, Gtest, Git. Обрети уверенность в использовании хотя бы одной IDE (поиск, дебаг, рефакторинг). Это всё значительно повысит твою ценность на рынке труда.

И несколько маленьких советов, которые бы мне помогли в начале карьеры:

  • Выделяй себе время на обучение: понятно, что проект может занять всё свободное время, и на первых порах действительно все мысли лишь об удачном старте, но потом, когда войдешь в спокойное русло, не забывай постоянно увеличивать свои знания.
  • Отдавайся работе чуть больше, чем требуется: изучи часть чужого кода и найди баг, найди не очевидное, а оптимальное решение, углубись в новую библиотеку больше, чем требует этого выполнение задачи.
  • Выпрашивай себе всё более сложные задачи, даже на первый взгляд непосильные для тебя: именно так и развивается разработчик. Плюс это хорошая мотивация для тех, у кого повышено чувство собственного достоинства и амбиции.
  • Разбирай open-source код: там можно подсмотреть и научиться многим вещам.
  • Старайся посещать собрания сообщества разработчиков: тут можно позадавать вопросы на более узкие темы и познакомиться с экспертами в разных сферах.
  • Регулярно (не обязательно часто) проходи онлайн-тренинги или уроки: это разнообразит твою подготовку и позволит взглянуть под новым углом на некоторые вещи.
  • Держи баланс во всём.

Главное — помнить, что никто не стал экспертом сразу. Все прошли через определённые этапы развития, хоть и в индивидуальном русле. И ещё — это всё должно быть в кайф!

Советы для junior C++

Володимир Корнийчук, Senior Software Engineer в Infopulse

12 лет опыта

Зачем?

Прежде всего я бы посоветовал новичку ответить для себя на вопрос: «Почему я хочу писать на С++?». Есть целая куча причин выбрать другие языки программирования — многие из них легче в изучении и ежедневном использовании. Но в С++ есть то, благодаря чему он держится среди лидеров. С++ выбирают за его быстродействие, эффективность, контроль аппаратных ресурсов, кроссплатформенность, распространенность. Если эти вещи соответствуют вашим идеалам — идите в бой. Если хочется, чтобы «раз-раз и в продакшн» — возможно, стоит выбрать что-то попроще?

Кто и когда?

Для понимания философии С++ стоит немного почитать об истории его создания и взгляде на этот язык его авторов. Еще не читали книг Страуструпа? Самое время. Совет банальный, но без этого действительно никак. Только берите последние издания, а не первые.

Стоит читать стандарт?

Стандарт языка программирования С++ в одной из последних редакций, попавшейся мне на глаза, насчитывает 1622 страниц. Как это все прочитать (с учетом стиля документа) и остаться в здравом уме, я лично не представляю. Изучение С++ по стандарту — худшая идея в мире. Есть много книг, объясняющих С++ проще и с теоретической, и с прикладной точки зрения. Можно начать со списка на Isocpp. А стандарт оставьте разработчикам компиляторов.

IDE

Подберите удобную среду разработки. Я использую Visual Studio с дополнительно установленным плагином Visual Assist X. Эта связка знает о языке С++ больше всего остального, что я перебрал. Знаю людей, пользующихся VS + ReSharper, CLion, Qt Creator, Vim. Мне не подошло, но вы попробуйте и тогда сможете составить собственное мнение.

Debugger

Научитесь пользоваться дебаггером (как встроенным в вашу IDE, так и внешним, типа GDB или WinDbg). Это, на удивление, мощные инструменты, иногда позволяющие делать невероятные вещи. Большинство разработчиков используют их довольно примитивно, в режиме «поставили точку остановки — остановились на ней», даже не зная о возможности удаленной работы, time-travel debugging, подтягивании внешних символьных файлов и кода, остановки по модификации адреса памяти и т.п.

Профайлер

Эффективность и скорость — одни из главных причин использования С++ в современных проектах. Без профайлера вы никогда не догадаетесь, где именно в вашем коде находится «узкое место». Для простых случаев подойдет та же Visual Studio, для более сложных — Windows Performance Analyzer или инструменты от Intel. Не пытайтесь угадать, что именно у вас работает медленно. Я видел, как на это попусту тратились недели. Просто сделайте замер профайлером и осознайте факты. В большинстве случаев проблема будет совсем не там, где вы ее ожидаете.

Инструменты статического анализа

Сейчас есть много инструментов, позволяющих указать программисту на возможную ошибку в коде на C++. Есть предупреждения стандартного компилятора, есть новые возможности Visual Studio по анализу С++ кода на соответствие рекомендациям C++ Core Guidelines, есть анализ кода в Visual Assist X, есть Cppcheck и Clang. Много чего есть, вон одна только Википедия сколько всего знает. Обязательно выберите себе что-то и используйте. Особенно хорошо эти инструменты работают в сочетании с системами непрерывной интеграции.

Специализированные инструменты разработки

Какую бы отрасль программирования вы не выбрали — скорее всего вы не будете первым, кто начал в ней работать. Ваши предшественники написали много полезных утилит — попробуйте найти их и использовать. Есть хорошие программы для помощи системному программисту, есть полезные утилиты для графики и геймдева, есть куча библиотек с алгоритмами. Не пишите своего велосипеда, пока не потратите крайней мере несколько часов на поиски уже существующего.

Держитесь на острие прогресса

Найдите себе какое-то источник новостей о С++. Язык развивается, выходят новые стандарты и компиляторы. Лично я читаю новости на Isocpp, обсуждение — на Reddit, смотрю видео с конференций C++ Now и CppCon. Это требует не так много времени, как может показаться, но дает возможность планировать как развитие вашего проекта, так и ваше личное.

Советы для junior C++

Николай Родин, С++ Developer в Dev-Pro

8 лет опыта

Мой выбор, когда я заканчивал институт 18 лет назад, был невелик. Web-направление только набирало обороты, и у меня фактически был выбор только между Visual C++ и Delphi. Сегодня же вариантов очень много, а применение С++ найти не так легко. В стремительно развивающейся Web-индустрии ему по-прежнему нет места. Вытесняется он и из кроссплатформенного программирования. Если вам интересен этот язык — осталось всего несколько направлений, в которых С++ (и С) еще удерживают позиции (подробнее об этом можно прочитать здесь):

  1. Поддержка легаси проектов под Windows — речь о проектах, которым не один год, а может быть и не один десяток лет. Возможно, некоторым не по душе это направление, но саппорт важен и нужен. Новые проекты появляются редко, в них GUI пишется в основном с использованием библиотеки Qt.
  2. Game Development — здесь C++ актуален, ибо важно быстродействие в сочетании с определенной безопасностью.
  3. С++ под Linux — здесь С++ по-прежнему востребован ввиду развитости экосистемы. GUI вполне можно писать на Qt, драйвера и некоторые сетевые приложения пишутся даже на С.
  4. А. Embedded — здесь С и С++ удерживают твердые позиции, особенно если речь заходит о системах, работающих в реальном времени и на ограниченных мощностях.
    Б. Internet of Things все быстрее набирает популярность, активно использует C++, здесь можно добиться больших успехов.

Важно отметить, что язык C++ продолжает развиваться: от версий C++98, C++03, C++11 (C++0x), C++14 (C++1y), C++17 (C++1z) двигается к C++20 в 2020 году.

Кому стоит его изучать

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

Я бы порекомендовал этот язык тем, кто имеет тягу к написанию программ на Linux, стремится в GameDev или хочет стать Embedded Engineer и работать в перспективном IoT. Язык подойдет тем новичкам в IT-индустрии, которые считают себя перфекционистами и ищут как можно большего контроля над тем, что они делают.

Если же человек стремится скорее конструировать, чем программировать, ждет быстрой реализации своих идей — тогда лучше смотреть в сторону web и скриптовых языков. Да и изучить тот же JavaScript гораздо проще.

Как изучить С++

Осваивать C++ я предлагаю от простого к сложному, начав с С. С считается низкоуровневым и поддерживает в основном процедурную парадигму. Но на его примере можно получить представление об указателях и прямой работе с памятью. Вы также научитесь мыслить битами и тактами, а не только абстракциями языка программирования и шагами алгоритмов. Помимо того, операционные системы до сих пор имеют API, написанный на С, и с ним нужно учиться взаимодействовать.
С++ поддерживает и процедурную, и объектно-ориентированную парадигму (ООП).

Основным при переходе к ООП является поворот мышления от «пассивных» данных и набора процедур для их обработки к «активным» данным, предоставляющим набор операций для работы с ними и скрывающим детали своей реализации. Также важная часть С++ — шаблоны, с помощью которых реализуются в том числе «умные» указатели, позволяющие существенно повысить безопасность С++ кода. В целом С++ является сложным языком и требует существенных усилий на изучение.

Полезная литература

Базовой книгой для изучения С считается книга Брайана Кернигана и Денниса Ритчи «Язык программирования С». Из нее можно почерпнуть информацию о стиле написания кода, основных контейнерах и обработке ошибок. Книга также приучит к ясности изложения мысли, потому что авторы всегда предлагают сначала писать комментарии, а потом уже под ними блоки кода. Это достаточно полезный навык независимо от языка.

Для изучения С++ желательно прочитать больше литературы. С++ я изучал по следующим книгам:

Советы новичкам

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

Помните, что когда попадаете в IT, как бы не готовились заранее — начинаете чувствовать пробелы в знаниях и опыте, которые даже не касаются технической квалификации. Soft skills действительно играют роль, и многие из них вы освоите, только присоединившись к реальному проекту. Здесь есть процессы, тестирование, проджект-менеджер, который держит руку на пульсе, следит за сроками и приоритетами. Иногда это тяжело принять, но окончательное решение не за тем, кто пишет код, а за тем, кто несет за него ответственность.

Присоединившись к команде, учитесь на примере того кода, который уже существует на проекте. Работающий код, каким бы он не был, — это наилучший способ изучения С++ и любого другого языка программирования. Кам минимум поймете, как делать не нужно. Надеюсь, у вас все получится.

Советы для junior C++

Михайло Рудый, Senior Software Developer в Vakoms

6 лет опыта

Поскольку ты уже встал на этот путь, то, наверное, понимаешь, что выбрал один из лучших языков, на котором можно писать все, начиная от hardware, заканчивая web.

Я бы хотел поделиться несколькими советами.

Указатель — твой лучший друг. Указатели, указатели, указатели и еще раз указатели, потому что это наше все и они повсюду. Чем больше ты знаешь о них, тем лучше.

Memory management. Научись правильно работать с памятью. В C++ за память отвечаешь ты сам. Пока ты не скажешь «удалить» — никто за тебя это не сделает. Не хочешь сам управлять памятью — тогда учи smart pointers.

Классы и три страшные буквы (ООП). Работа с классами — это очень круто, потому старайся знать и уметь использовать все возможности классов и ООП.

Не выдумывай велосипед. В стандартной библиотеке есть уже много готовых алгоритмов, особенно для работы с контейнерами. Поэтому перед тем, как писать свой метод, сначала проверь — возможно, он уже готов.

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

Design patterns. Это мегакрутая вещь. Начни свое знакомство с ними с простого и двигайся к более сложным, заканчивай архитектурными. Главное, научись их правильно применять.

Просто, как двери. Реализуй задачи как можно проще. Это будет удобно для всех: и для тебя, и для твоих коллег по проекту, и для тех, кто будет продолжать после тебя.

Заимствуй. Хочешь улучшить свой код — попробуй найти хотя бы 2 решения подобной задачи. Возможно, ты найдешь там что-то полезное для себя.

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

Ментор. Это твой помощник, который подскажет, даст совет и обругает, если ты делаешь что-то очень неправильно. Он нужен.

Не бойся. Не бойся тяжелых тасок (иногда они только кажутся тяжелыми). Не бойся спросить совета. Не бойся сказать: «Я уже все попробовал и не знаю, как это сделать. Подскажите, куда двигаться».

Будь уверен. Умей отстаивать свою точку зрения. Иногда твоя идея или вариант реализации может быть лучше, чем у других, но нужно это доказать и объяснить.

Критика это не зло. Учись воспринимать критику, если она уместна. Будь стоек к ней. Умей взять с нее как можно больше полезного для себя.

И напоследок главное. Практика залог успеха. Чем больше практики — тем лучше, тем больше опыт, тем быстрее твои пальцы сами «знать», что писать. Практикуйся как можно больше. Прочитал что-то интересное в книге или статье услышал от кого-то — попробуй реализовать, поэкспериментировать. Так ты быстрее все запомнишь.

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

Ресурсы, которые помогут:

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here