Дорожная карта по изучению C++
Привет!
Представляем вашему вниманию дорожную карту для изучения языка программирования C++. Идея дорожной карты возникла после проведения десятков собеседований молодых разработчиков, которые претендовали на роль Junior Developer C++, но обладали довольно слабой подготовкой. Часто можно наблюдать, что у молодых разработчиков формируется некорректное представление о языке по нижеперечисленным причинам:
поверхностное изучение в ВУЗе, мнимое представление о том, что C++, это просто «Си с классами»
страх проникаться философией языка, т.к. им была внушена различная мифология, которые отмерли и остались далеко позади
параллельное изучение C++ с иным более простым языком, например Python, и попытки натянуть практики других языков в обход философии C++
TL; DR
Мы создали роадмапу в которой собрали полезную информацию для тех, кто начинает знакомиться с языком, либо пытается понять, каких навыков ему не хватает для более уверенного владения.
Вот ссылка.
Если вам интересна история создания, то читайте данную статью дальше.
Предыстория
Насмотревшись на страдания юных падаванов, возникли навязчивые вопросы: А почему так происходит? Каковы причины такой слабой подготовки у огромного количества джунов? Задав себе эти вопросы, я решил, что следует провести небольшое исследование: какие материалы представлены и по-прежнему актуальны для начинающих?
Я изучил текущее состояние и количество доступных материалов как по C++, так и по другим языкам (Java, C#, JavaScript и т.д.). Результаты поиска для других языков привели к следующим наблюдениям:
Наличие актуальной книжной библиотеки, в особенности обилие материалов для новичков
Обилие различных видеокурсов в свободном доступе
Наличие дорожных карт, которые помогают сориентироваться новичкам при обучении
По всем вышеперечисленным пунктам у C++ оказались сплошные провалы:
Много литературы, которая потеряла свою актуальность, или написана сложным языком, отпугивающий новичков. Я не сторонник жевания кактуса, потому начал копаться в этом направлении: какие источники могут стать полезными в 2021 по C++.
Качество большинства доступных видеокурсов редко выдерживает какую-либо критику: либо это очередной незаконченный курс от %yet_another_indian_guy% с жутким хинди акцентом, либо запись аудиторных занятий, где сложно что-либо адекватно расслышать.
Дорожная карта. А что это вообще такое? Лучшее, что я смог найти — довольно вялые попытки братских народов из азиатских и индийской республик. Большая часть попыток умерла, так и оставшись в зародыше
Создание видеокурса требует колоссальных ресурсов, к тому же на СНГ рынке представлены пара достойных онлайн курсов/видеокурсов, потому в эту сторону было решено не идти. А вот собрать литературу, отрисовать дорожную карту и сопроводить материалы различными комментариями выглядели вполне посильными задачами. На том и было решено остановиться.
Для чего это всё?
Можно бесконечно долго спорить, что язык C++ — это умирающий язык, что его победит %yet_another_brilliant_language%. Для этих обсуждений мы приглашаем вас в комментарии. Тем временем рынок и желание кандидатов говорят совершенно об обратном: специалисты, владеющие языком, по-прежнему требуются на рынке, а также ощущается их острая нехватка не только в России, но и на международном рынке. Данной дорожной картой мы хотим попытаться хоть немного заполнить имеющуюся брешь. Опять же, каким-то образом надо переписывать миллионы строк кода с C++ на %yet_another_brilliant_language% ;)
Первые шаги
Преисполнившись отсутствием внятной дорожной карты, я принялся за работу. Основной целью карты стала попытка систематизировать актуальную информацию вокруг C++ и экосистемы языка, а также предоставить актуальные источники информации, по которым можно построить свое обучение.
Все началось с того, что я решил попробовать написать несколько статей для репозитория, где хотелось осветить различные темы, которые относятся к языку. Давалось это тяжко. В какой-то момент размер задачи начал давить на меня. Попытки удержать мотивацию к данному проекту, стали выходить на первый план.
По какой-то счастливой случайности на работе зашел разговор на данную тему с коллегой. Оказалось, что у него в голове вертятся похожие идеи. В особенности его интересовало создать дорожную/ментальную карту, чтобы систематизировать свои знания по языку. Поведав коллеге о своих планах и предложив присоединиться к проекту, он без колебаний согласился поучаствовать.
Основная стадия
В конце апреля началась работа над дорожной картой. Для более продуктивной работы мы устраивали регулярные созвоны, чтобы обсуждать и отрисовывать дорожную карту шаг за шагом. Через пару месяцев удалось получить черновую версию.
На тот момент она из себя представляла ментальную карту. Мы поняли, что нам необходима обратная связь, чтобы получить больше понимания: куда двигаться дальше. Для этого мы обратились к коллегам, знакомым, а также энтузиастам из различных социальных сетей, которые интересовались проектом.
Собрав порцию фидбека, мы двинулись дальше. Более-менее определились с базовыми разделами. Началось погружение в детали и более тщательная проработка. В основе философии дорожной карты лежит идея представить усредненный набор компетенций и знаний C++ разработчика, которые повсеместно могут встретиться на проектах. Углубляться в специализированные ниши мы посчитали бессмысленным, т.к. потребовалось бы собрать все знания мира. Перед нами стояла задача «дать удочку» для желающих, а не «накормить рыбой».
К концу Сентября наши силы и мотивация стали иссекать. Потому было решено сделать последний рывок, и выкатить в свет MVP версию карты. Навалившись на последние крупные пробелы, мы дописали необходимые статьи и комментарии к дорожной карте.
Наконец репозиторий переведен в публичный режим. Безусловно, нам хотелось пустить дорожную карту в массы, чтобы понять, насколько наш труд окажется осмысленным и полезным, а также получить ещё больше фидбека из внешнего мира.
Мы решили попробовать пустить инфошум в какой-нибудь социальной сети. В качестве стартовой площадки выбрали твиттер, т.к. обитаем в местном айтишном окружении. Был опубликован твит-анонс со ссылкой на репозиторий. Чтобы придать больше огласки, мы попросили поретвитить сообщение твиттерян-тысячников, за что им неземная благодарность!
Следующие 48 часов представляли собой нескончаемый дофаминовый трип, т.к. мощь и величина реакции сообщества была несколько неожиданной. Придя в себя, мы принялись за обработку обратной связи. Столь бурная реакция придала нам хороший импульс, чтобы оперативно обработать входящие рекомендации и критику, и внедрить большую часть предложений в карту/репозиторий.
После первого анонса мы принялись за доработки и добавление большого количества дополнительной информации, а также занялись переводом всех материалов на английский язык. К нам присоединился ещё один энтузиаст, который активно следил за нашей работой, а также регулярно предоставлял обратную связь. Благодаря этому, мы за несколько дней перевели весь контент в три пары рук.
Покончив с английским, мы отправились на поиски новых каналов распространения информации, чтобы расширить её распространение среди людей, особенно было интересно выйти на англоговорящую аудиторию. Площадки мы нашли, и получили оттуда ещё более колоссальную волну заинтересовавшихся. Это также спровоцировало ещё одну итерацию доработок.
В заключение
Спустя ~6 месяцев работ над картой и её публикацией в разных источниках мы видим устойчивый спрос на информацию, представленную в дорожной карте и в репозитории. Суточная посещаемость репозитория составляет ~100 уникальных пользователей в день. Это отличный результат, на который не было никакого расчета, когда затевался весь этот проект.
Какие преимущества данного проекта хочется выделить:
Графическая дорожная карта, которая с недавнего времени стала доступна для модификации/доработки любым желающим при помощи GraphML
Сформированный список литературы, под конкретный грейд разработчика
Наличие списка пет-проектов, которые могут быть взяты за основу для наработки практического опыта в применении языка или библиотек/фреймворков
Проект выполнен на русском и английском языке, что расширяет границы целевой аудитории
Финальным аккордом данного проекта мы поставили для себя публикацию на Хабре, про что вы любезно читали на протяжение всей статьи. За это вам огромное спасибо!
Обратная связь
Мы открыты для обратной связи, потому любые идеи и предложения вы можете описать в комментариях статьи, в разделе «Issues» репозитория, или же самолично поучаствовать в развитии ресурса, присылая Pull Requests.
Ссылки: