mirror of
https://github.com/salmer/CppDeveloperRoadmap.git
synced 2025-12-18 04:54:38 +03:00
Added Emojis to all pages and their titles/subtitles (#74)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Области применения C++
|
||||
# :clipboard: Области применения C++
|
||||
|
||||
У языка С++ довольно широкая сфера применения. Преимущественно его используют там, где требуется высокая производительность или низкое потребление памяти. Ниже представлены материалы, в которых более подробно рассказывается о сферах применения C++:
|
||||
- [Язык программирования С++. Антон Полухин](https://www.youtube.com/watch?v=pic8c9_snJw)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Junior
|
||||
# :yum: Junior
|
||||
|
||||
## Мотивация и опыт
|
||||
## :innocent: Мотивация и опыт
|
||||
|
||||
- [Роберт Мартин - Идеальный программист](https://www.ozon.ru/product/idealnyy-programmist-kak-stat-professionalom-razrabotki-po-martin-robert-k-211433126/?asb=z4%252BBD7UDRGAKgK5PMnilay5QBkwvjGXgnMhfF1fAOWM%253D&asb2=Gvhxd5LT0NA_AobRO1muUz0icHnQ6j-JL2zxEOH1wzQ&keywords=%D0%B8%D0%B4%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82&sh=6BDpuJeM)
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
|
||||
Не смотря на почтенный возраст книги, её можно считать библией разработчика. Она системно описывает устройство индустрии, а также дает массу советов: каким образом расти и развиваться, чтобы стать эффективным специалистом.
|
||||
|
||||
## Computer Science
|
||||
## :bar_chart: Computer Science
|
||||
|
||||
- [Томас Кормен - Алгоритмы. Вводный курс](https://www.ozon.ru/product/algoritmy-vvodnyy-kurs-24903185/?sh=oABFs2sD)
|
||||
|
||||
Хорошее продолжение после книги "Грокаем алгоритмы". Книга знакомит с базовыми распространенными алгоритмами сортировок, работа со списками и т.д., но на более глубоком уровне. Все ещё написана довольно простым языком, потому она может помочь подготовиться к глубокому погружению в алгоритмы.
|
||||
|
||||
## C++
|
||||
## :pencil: C++
|
||||
|
||||
- [Скотт Мейерс - Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ](https://www.ozon.ru/product/effektivnoe-ispolzovanie-c-55-vernyh-sovetov-uluchshit-strukturu-i-kod-vashih-programm-2610625/?sh=VdYASWTH)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
Небольшая книга, которая описывает общепринятые практики и правила написания кода в коммерческих проектах. Данная книга - это агрегация правил из различных компаний. Данная работа стала прообразом сайта: [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). Тем не менее рекомендуем прочитать данную книгу, т.к. даст вам общее представление, какие правила написания кода распространены во многих проектах.
|
||||
|
||||
## Технические навыки
|
||||
## :electric_plug: Технические навыки
|
||||
|
||||
- [Фримен Эрик, Робсон Элизабет - Head First. Паттерны проектирования](https://www.ozon.ru/product/head-first-patterny-proektirovaniya-obnovlennoe-yubileynoe-izdanie-144233005/?sh=VWSHgt2E)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Middle
|
||||
# :sunglasses: Middle
|
||||
|
||||
## C++
|
||||
## :pencil: C++
|
||||
|
||||
- [Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14](https://www.ozon.ru/product/effektivnyy-i-sovremennyy-s-42-rekomendatsii-po-ispolzovaniyu-c11-i-c14-effektivnyy-i-sovremennyy-34747131/?sh=CHL5ECEP)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
Наиболее свежая и актуальная работа по использованию шаблонов в C++. Это фундаментальная работа, которая описывает актуальные механизмы применения шаблонов, внедренные в новых стандартах, вплоть до C++17. Если вам необходимо писать параметризуемый код, то этот справочник станет мощной опорой. Вы познакомитесь, как с азами метапрограммирования, так и с различными нюансами того или иного приема.
|
||||
|
||||
|
||||
## Оптимизация приложений
|
||||
## :bicyclist: Оптимизация приложений
|
||||
|
||||
- [Курт Гантерог - Оптимизация программ на C++](https://www.ozon.ru/product/optimizatsiya-programm-na-c-proverennye-metody-povysheniya-proizvoditelnosti-140145932/?sh=OlHzzZHG)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
Практические руководства, которые дают исчерпывающую информацию о потенциальных возможностях оптимизации приложений, разработанных на C++, или связанных с взаимодействием с центральным процессором, памятью и т.д.
|
||||
|
||||
|
||||
## Технические навыки
|
||||
## :electric_plug: Технические навыки
|
||||
|
||||
- [Джонсон Ральф, Хелм Ричард - Приемы объектно-ориентированного проектирования. Паттерны проектирования](https://www.ozon.ru/product/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-2457392/?sh=U_1tfTeu)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
Краткое практическое пособие о том, как подходить к написанию программ посредством конечных автоматов. Наверно более простого и элегантного описания теории конечных автоматов и её практического применения будет сложно отыскать. Рекомендуем оизучить пару коммерческих работ, выполненных в описанной парадигме. Ссылки к исходному коду вы найдете в конце книги.
|
||||
|
||||
|
||||
## Операционные системы
|
||||
## :zap: Операционные системы
|
||||
|
||||
- [Эндрю Таненбаум - Современные операционные системы](https://www.ozon.ru/product/sovremennye-operatsionnye-sistemy-tanenbaum-endryu-bos-herbert-211432884)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
Хорошая обзорная статья, дающая представление о том, как устроена память компьютера и зачем она так устроена. Даёт как высокоуровневое представление, так и набрасывает низкоуровневых деталей, если есть желание в них углубляться.
|
||||
|
||||
|
||||
## Компьютерные сети
|
||||
## :globe_with_meridians: Компьютерные сети
|
||||
|
||||
- [Эндрю Таненбаум - Компьютерные сети](https://www.ozon.ru/product/kompyuternye-seti-tanenbaum-endryu-uezeroll-devid-tanenbaum-endryu-uezeroll-devid-211432815)
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# Книги и материалы
|
||||
# :books: Книги и материалы
|
||||
|
||||
В данных статьях собраны книги, которые помогут вам сориентироваться, и задать свой вектор обучения. Все книги поделены на несколько разделов, которые касаются различных навыков. Рекомендуем обзорно посмотреть каждый раздел, и подобрать набор литературы под свои нужды. В данных разделах собраны книги для получения общих знаний по C++, которые пригодятся в большинстве коммерческих проектов.
|
||||
|
||||
Представленная библиотека не концентрируется на книгах, не связанных с какой-либо предметной областью или узкоспециализированными направлениями. Идея этого проекта состоит в том, чтобы помочь людям получить общие знания о C++ и разработке программного обеспечения. Если вы ищете специализированные материалы, то рекомендуем обратиться к экспертам, в интересующей вас области.
|
||||
|
||||
- [PreJunior](PreJunior.md)
|
||||
- [Junior](Junior.md)
|
||||
- [Middle](Middle.md)
|
||||
- [Senior](Senior.md)
|
||||
- :blue_book: [PreJunior](PreJunior.md)
|
||||
- :green_book: [Junior](Junior.md)
|
||||
- :orange_book: [Middle](Middle.md)
|
||||
- :closed_book: [Senior](Senior.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# Pre-Junior
|
||||
# :alien: Pre-Junior
|
||||
|
||||
## Мотивация и опыт
|
||||
## :innocent: Мотивация и опыт
|
||||
|
||||
- [Фаулер Чед - Программист-фанатик](https://www.ozon.ru/product/programmist-fanatik-32218784)
|
||||
|
||||
Эту книгу можно считать признанной классикой в мире разработки, в которой Чед Фаулер пытается поделиться своим видением: как стать высококлассным, востребованным специалистом, и оставаться на гребне волны.
|
||||
|
||||
## Computer Science
|
||||
## :bar_chart: Computer Science
|
||||
|
||||
- [Фило Владстон Феррейра - Теоретический минимум по Computer Science](https://www.ozon.ru/product/teoreticheskiy-minimum-po-computer-science-vse-chto-nuzhno-programmistu-i-razrabotchiku-144946027)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
Отличное вводное пособие в мир алгоритмов. Написано легким языком, который поймет большинство новичков. Также есть немного практических задач, чтобы попробовать написать свои первые алгоритмы.
|
||||
|
||||
## C++
|
||||
## :pencil: C++
|
||||
|
||||
- [Стивен Прата - Язык программирования C++. Лекции и упражнения (шестое издание)](https://www.ozon.ru/product/yazyk-programmirovaniya-c-lektsii-i-uprazhneniya-147417584)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
- [Лекции C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fItmofHO4KuGjfGtbQtEj-x)
|
||||
- [Алгоритмы и структуры данных на C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fL_5Xvnufpwj2uYZnZBBnsr)
|
||||
|
||||
## Технические навыки
|
||||
## :electric_plug: Технические навыки
|
||||
|
||||
- [MSDN](https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160)
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# Senior
|
||||
# :smiling_imp: Senior
|
||||
|
||||
## C++
|
||||
## :pencil: C++
|
||||
|
||||
- Сложно посоветовать что-то конкретное для разработчиков уровня Senior. Разработчики такого уровня уже должны уверенно владеть C++ и понимать его возможности/ограничения. Основная задача, которая стоит на этом уровне: мониторить появления новых стандартов и фич для языка, а также обновления библиотек/фреймворков.
|
||||
|
||||
|
||||
## Управление командой
|
||||
## :muscle: Управление командой
|
||||
|
||||
- [Дж. Ханк Рейнвотер - Как пасти котов](https://www.ozon.ru/product/kak-pasti-kotov-nastavlenie-dlya-programmistov-rukovodyashchih-drugimi-programmistami-147226659)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
Классическая книга о логических ошибках мышления человека. Полезна тем, что это поможет более рационально подходить к принятию различных решений, беря в расчет когнитивные искажения в человеческом мышлении. Необходимый навык для специалистов, которые находятся в зоне принятия ключевых решений. Книга может показаться довольно занудной, в таком случае вы можете попробовать поискать альтернативные работы, которые повествуют о когнитивных искажениях.
|
||||
|
||||
|
||||
## Требования и архитектура ПО
|
||||
## :clipboard: Требования и архитектура ПО
|
||||
|
||||
- [Карл Вигерс - Разработка требований к программному обеспечению](https://www.ozon.ru/product/razrabotka-trebovaniy-k-programmnomu-obespecheniyu-vigers-karl-i-bitti-dzhoy-221778297)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Community sources
|
||||
# :gem: Community sources
|
||||
|
||||
## C++ общее
|
||||
## :bookmark_tabs: C++ общее
|
||||
|
||||
- [CppReference](https://en.cppreference.com)
|
||||
- [CPlusPlus](https://www.cplusplus.com/reference)
|
||||
@@ -10,28 +10,28 @@
|
||||
- [Новости от комитета стандартизации С++ (ENG)](https://isocpp.org/)
|
||||
- [C++ Online Compiler Explorer](https://gcc.godbolt.org)
|
||||
|
||||
## Популярные конференции по С++
|
||||
## :satellite: Популярные конференции по С++
|
||||
|
||||
- [C++ Russia](https://cppconf.ru/)
|
||||
- [Cpp Con](https://cppcon.org/)
|
||||
- [Meeting C++](https://meetingcpp.com/)
|
||||
- [C++ Now](https://cppnow.org/)
|
||||
|
||||
## Каналы конференций по C++ на YouTube
|
||||
## :tv: Каналы конференций по C++ на YouTube
|
||||
|
||||
- [C++ Russia](https://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA)
|
||||
- [Cpp Con](https://www.youtube.com/user/CppCon)
|
||||
- [Meeting C++](https://www.youtube.com/user/MeetingCPP)
|
||||
- [C++ Now](https://www.youtube.com/user/BoostCon)
|
||||
|
||||
## Альтернативные источники для изучения С++
|
||||
## :exclamation: Альтернативные источники для изучения С++
|
||||
|
||||
- [Hackingcpp.com](https://hackingcpp.com/index.html) - Портал с различным набором структурированных материалов по C++: книги, шпаргалки, видео с конференций
|
||||
- [Awesomecpp.com](https://awesomecpp.com) - Коллекция различных ресурсов по C++.
|
||||
- [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e)
|
||||
- [Learncpp.com](https://www.learncpp.com/) - C++ курс для изучения основ языка. Обновляется и дополняется.
|
||||
|
||||
## Другие интересные репозитории
|
||||
## :star: Другие интересные репозитории
|
||||
|
||||
- [Краткий обзор библиотечных функций C++11 и выше (ENG)](https://github.com/AnthonyCalandra/modern-cpp-features)
|
||||
- [Путеводитель C++ программиста по неопределенному поведению](https://github.com/Nekrolm/ubbook)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# C++ — это просто!
|
||||
# :space_invader: C++ — это просто
|
||||
|
||||
Современный C++ гораздо проще, чем принято считать. За годы трансформаций язык успел сильно преобразиться и обрасти возможностями, которые позволяют писать безопасный и эффективный код. Если использовать примитивы из последних стандартов, то больше не нужно беспокоиться о возможных утечках памяти.
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
Несмотря на весь бэкграунд и информационный шлейф, который тянется за C++, мы считаем, что его современная версия стала в разы проще, чем это было в прошлом.
|
||||
|
||||
Потому не бойтесь изучать его!ы
|
||||
Потому не бойтесь изучать его!
|
||||
|
||||
Удачи!
|
||||
Удачи! :dizzy:
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Junior C++
|
||||
# :yum: Junior C++
|
||||
|
||||
## Кто это?
|
||||
## :question: Кто это?
|
||||
|
||||
Это разработчик, который имеет теоретические знания по разработке ПО, а также небольшой практический опыт в рамках личных/учебных проектов. Также может иметь теоретическое представление о том, как работает индустрия и рабочие процессы. Такой разработчик способен выполнять несложные задачи на реальном проекте под руководством опытных коллег, обычно миддлов или синьоров.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
## :computer: Что ожидается по умению написания кода?
|
||||
|
||||
- Умение читать документацию библиотек, фреймворков и т.д.
|
||||
- Умение собирать и подключать сторонние библиотеки к проекту
|
||||
@@ -13,14 +13,14 @@
|
||||
- Писать тесты к коду
|
||||
- Базовые знания и опыт работы с Git
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
## :bust_in_silhouette: Что ожидается по общим навыкам?
|
||||
|
||||
- Быстрое обучение
|
||||
- Умение самостоятельно искать информацию в интернете, книгах и т.д.
|
||||
- Умение своевременно задавать вопросы коллегам
|
||||
- Способность работать в команде
|
||||
|
||||
## Рекомендации и советы
|
||||
## :eyes: Рекомендации и советы
|
||||
|
||||
- Постарайтесь найти парочку энтузиастов на проекте и присоединитесь к ним. Они могут стать вашим источником знаний и опыта.
|
||||
- Задавайте вопросы старшим коллегам. Нет глупых вопросов, есть глупые ответы.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# Middle C++
|
||||
# :sunglasses: Middle C++
|
||||
|
||||
## Кто это?
|
||||
## :question: Кто это?
|
||||
|
||||
Это разработчик, который понимает технический контекст разработки и способен создать дизайн/решение для функционала в рамках компонента/приложения, даже в случае неполноты требований. Также имеет практический опыт работы на проектах, в рамках принятых бизнес-процессов.
|
||||
|
||||
В основном решает технические задачи, но в отличие от джуниора, способен сделать это самостоятельно или под менторством синьора/тимлида.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
## :computer: Что ожидается по умению написания кода?
|
||||
|
||||
- Компилятор и язык его больше не пугают и практически не приносят сюрпризов. А если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь
|
||||
- Ориентируется в базовых концепциях языка, а также понимает, какие ещё языки программирования существуют, и чем они отличаются
|
||||
@@ -22,7 +22,7 @@
|
||||
- Выполнение на целевой системе
|
||||
- Глубже знает и понимает базовую информатику (структуры данных, конечные автоматы, алгоритмы)
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
## :bust_in_silhouette: Что ожидается по общим навыкам?
|
||||
|
||||
- Способен самостоятельно ориентироваться в технической части проекта и принимать решения, которые вписываются в него
|
||||
- Понимает, когда нужно остановиться, чтобы не переусложнить решение
|
||||
@@ -31,15 +31,15 @@
|
||||
- Имеет практический опыт работы по различным методологиям: Kanban, Agile/Scrum, Waterfall и т.д.
|
||||
- Помогает другим членам команды
|
||||
|
||||
## Рекомендации и советы
|
||||
## :eyes: Рекомендации и советы
|
||||
|
||||
### Про обучение
|
||||
### :arrow_forward: Про обучение
|
||||
- Начинайте прокачивать софт-скиллы, если хотите вырасти до синьора. На синьорском уровне техническая экспертиза часто отходит на второй план, а на первый план выходит умение вести диалог и договариваться. Хороший разработчик, не тот кто пишет много кода, а тот кто понимает, как решить проблему максимально просто и эффективно. В идеале - без написания нового кода, а ещё лучше - если будут удалены пара десятков/сотен строк.
|
||||
- Стадия миддла самая энергозатратная с точки зрения обучения. От вас требуется не только прокачивать технические скиллы, но также навыки коммуникации и погружение в проблемы бизнеса. Это значит, что вам требуется одновременно развиваться в нескольких направлениях. Уделяйте внимание в равной степени как "хард", так и "софт" скиллам.
|
||||
- Должное внимание "софт" скиллам повышает вероятность того, что вы быстрее станете более востребованным профессионалом на рынке. Вы можете попытаться стать узконаправленным техническим специалистом и игнорировать коммуникативные навыки, но, во-первых, компаниям нечасто нужны узкопрофильные эксперты в больших количествах, а во-вторых, вам придется конкурировать с лучшими из лучших. Если вы действительно готовы состязаться с лучшими специалистами на рынке, то смело идите вперед, но все же рекомендуем подумать о диверсификации своих навыков.
|
||||
|
||||
|
||||
### Про опыт
|
||||
### :arrow_forward: Про опыт
|
||||
- Основная ловушка многих мидлов: фанбойство по технологиям, фреймворкам, внедрением паттернов или подходам к разработке. Постарайтесь прагматично подходить к выполнению задач на проекте. Не нужно пытаться затянуть все последние новинки, только чтобы поиграться с ними или ради строчки в резюме. На этом этапе очень велик соблазн проявить свое мастерство через обилие используемых технологий или оверинжиниринг.
|
||||
- Если вы действительно считаете, что проекту нужна новая библиотека или фреймворк - обсудите это с синьором/тимлидом. Предложите им попробовать создать прототип, где сможете проверить их в действии прежде чем втягивать в проект. Пожалуйста, никогда не добавляйте их за спиной всей команды! Это станет головной болью в будущем, т.к. это повысит стоимость поддержки проекта, и принесёт неожиданные проблемы.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Уровень разработчиков
|
||||
# :chart_with_upwards_trend: Уровень разработчиков
|
||||
|
||||
> Уровень разработчика (eng.: *grade*) - это попытка классифицировать разработчиков по навыкам, компетенциям и практическому опыту. По нему возможно сопоставить потенциальную сложность задач с требуемым набором компетенций и навыков для их успешного решения.
|
||||
|
||||
@@ -17,13 +17,10 @@
|
||||
|
||||
В нижеперечисленных статьях мы попытались дать осредненное описание для каждого уровня разработчика:
|
||||
|
||||
- [Pre-Junior C++](PreJunior.md)
|
||||
|
||||
- [Junior C++](Junior.md)
|
||||
|
||||
- [Middle C++](Middle.md)
|
||||
|
||||
- [Senior C++](Senior.md)
|
||||
- :alien: [Pre-Junior C++](PreJunior.md)
|
||||
- :yum: [Junior C++](Junior.md)
|
||||
- :sunglasses: [Middle C++](Middle.md)
|
||||
- :smiling_imp: [Senior C++](Senior.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Pre-Junior C++
|
||||
# :alien: Pre-Junior C++
|
||||
|
||||
## Кто это?
|
||||
## :question: Кто это?
|
||||
|
||||
Это человек, который освоил синтаксис языка и способен написать несложную программу без использования сторонних библиотек. Программа способна выполнять различные действия, например:
|
||||
- выполняет арифметические вычисления
|
||||
@@ -10,7 +10,7 @@
|
||||
- и т.д.
|
||||
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
## :computer: Что ожидается по умению написания кода?
|
||||
|
||||
- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д.
|
||||
- Умение пользоваться отладчиком при помощи IDE
|
||||
@@ -22,15 +22,15 @@
|
||||
- Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция
|
||||
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
## :bust_in_silhouette: Что ожидается по общим навыкам?
|
||||
|
||||
- Желание учиться и впитывать новые знания
|
||||
- Желание разбираться в возникающих проблемах
|
||||
- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или соответствующей литературе
|
||||
|
||||
## Рекомендации и советы
|
||||
## :eyes: Рекомендации и советы
|
||||
|
||||
### Про обучение
|
||||
### :arrow_forward: Про обучение
|
||||
- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала, прежде чем сможете пройти собеседование, и получить свой первый оффер.
|
||||
- Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники.
|
||||
- Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется.
|
||||
@@ -38,7 +38,7 @@
|
||||
- Не хватайтесь сразу за большую задачу, например: "написать свою игру". Скорее всего вам не хватит знаний и опыта на первых порах, чтобы осилить задачу в одиночку. Такого рода путь быстро демотивирует, что в итоге может привести к разочарованию, и вы забросите свое обучение. Идите по пути "от простого к сложному", постепенно придумывая себе все более сложные задачи.
|
||||
- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих площадок - отработать навыки применения классических алгоритмов и структур данных. Эти платформы спроектированы таким образом, чтобы максимально отгородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях.
|
||||
|
||||
### Про английский язык
|
||||
### :arrow_forward: Про английский язык
|
||||
- Большинство проблем проще искать на английском языке, но если текущий уровень владения не очень высокий, то не мучайте себя. Так вы быстро потеряете мотивацию. Большая часть проблем в начале пути, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке.
|
||||
- Если чувствуете, что ваш английский слабоват, то лучше начните его изучение с более простых и приятных вещей: сериалы, видеоигры, художественные книги, новостные сайты или статьи на интересующие темы. За несколько месяцев можно значительно улучшить навыки восприятия информации на английском языке.
|
||||
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
# Senior C++
|
||||
# :smiling_imp: Senior C++
|
||||
|
||||
## Кто это?
|
||||
## :question: Кто это?
|
||||
|
||||
Это разработчик, который понимает не только технический, но и бизнес контекст, а также способен создать дизайн и решение для компонента/приложения/системы с учётом неполноты требований и общей сложности. Помимо этого, помогает другим членам команды развиваться, следит за техническими тенденциями мира разработки.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
## :computer: Что ожидается по умению написания кода?
|
||||
|
||||
- Способен переводить задачи с языка бизнеса на язык разработки, декомпозировать задачи
|
||||
- Способен вести диалог с бизнесом, объяснять технические детали и сложности людям вне команды
|
||||
- Способен не только принять решение о дизайне, но и создать архитектуру компонента/приложения
|
||||
- Понимание и использование архитектурных принципов
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
## :bust_in_silhouette: Что ожидается по общим навыкам?
|
||||
|
||||
- Высокий навык коммуникации
|
||||
- Способен при необходимости самостоятельно собрать требования
|
||||
- Помогает развивать членов команды
|
||||
|
||||
## Рекомендации и советы
|
||||
## :eyes: Рекомендации и советы
|
||||
|
||||
В зависимости от специфики компании и ваших личных пожеланий, путь дальнейшего развития лежит, либо в освоении новых технологий и технических навыков, либо в области управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely. 🙂
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Как учиться?
|
||||
# :mortar_board: Как учиться?
|
||||
|
||||
Главное правило: только вы отвечаете за своё развитие. Безусловно, вы найдете вокруг немало энтузиастов, которые с радостью помогут вам советом, но никто не разработает за вас полноценную программу обучения. Лучший друг в этом деле - вы, учебники и поисковик.
|
||||
|
||||
## Как учить новые стандарты C++ 11/14/17/20?
|
||||
## :question: Как учить новые стандарты C++ 11/14/17/20?
|
||||
|
||||
Новичкам можно посоветовать сильно не акцентироваться на стандартах в начале своего обучения. Начните с книг из списка [для начинающих](Books/PreJunior.md), и начинайте изучать фундаментальные основы. Современные книги для новичков содержат в себе информацию о различных возможностях стандартов C++11 и новее.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
C++ развивается похожим образом, как и другие языки: берётся какая-то популярная идея из информатики (computer science) или удачная фича из других языков, и внедряется в язык. Изучать такие конструкции и использовать их важно, но на первых парах стоит изучить основы, которые были заложены более старыми стандартами (С++11/С++14). Они и описаны в большинстве современных книг для начинающих.
|
||||
|
||||
## По каким источникам изучать новые возможности стандартов C++?
|
||||
## :question: По каким источникам изучать новые возможности стандартов C++?
|
||||
|
||||
- Доклады на [конференциях по C++](CommunitySources.md)
|
||||
- На главной странице [CppReference](https://en.cppreference.com/w/cpp) вы найдете ссылки, со списками возможностей, введенные в каждом стандарте С++
|
||||
@@ -24,7 +24,7 @@ C++ развивается похожим образом, как и другие
|
||||
- Ролики с разбором новых возможностей стандартов на YouTube
|
||||
- [Краткий обзор библиотечных функций C++11 и выше (ENG)](https://github.com/AnthonyCalandra/modern-cpp-features)
|
||||
|
||||
## Рекомендации по обучению
|
||||
## :eyes: Рекомендации по обучению
|
||||
|
||||
- Учитесь в своем ритме, а также в любом возрасте! Не акцентрируйтесь на историях: "Я программирую с пеленок" и т.п.. Большинство подобных историй — [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего), или же попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++!
|
||||
- Большинство проблем с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте решить задачу более простым путем.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# Легенды и мифы про C++
|
||||
# :ghost: Легенды и мифы про C++
|
||||
|
||||
## Язык C++ умер, на нем невозможно что-либо писать
|
||||
## :question: Язык C++ умер, на нем невозможно что-либо писать
|
||||
|
||||
Живее всех живых.
|
||||
|
||||
На сегодняшний день находится в топах различных рейтингов языков программирования и даже набирает очки популярности, например: индекс [Tiobe](https://www.tiobe.com/tiobe-index/). Дурную славу "мертвого языка" он сыскал в 2000-е годы, когда его развитие временно застыло, а комитет по стандартизации приостановил свою активность. Но начиная со стандарта C++11, язык пережил ренессанс. Сегодня он активно обновляется и пополняется новым функционалом, в среднем, каждые три года. Многие проблемы, о которых заявляют свидетели "мертвого" C++ уже решены. Но в силу того, что такие специалисты скорее всего перестали работать с C++, либо по верхам изучили в ВУЗе/на курсах, то и продолжают порождать и сеять различные мифы о том, насколько C++ ужасен.
|
||||
|
||||
|
||||
## Настоящие программисты начинают изучать C++ сразу под Linux/Vim/gcc
|
||||
## :question: Настоящие программисты начинают изучать C++ сразу под Linux/Vim/gcc
|
||||
|
||||
Если вышеперечисленная связка инструментов выглядит для вас малознакомой, то на таком этапе обучения стоит сконцентрироваться только на изучении основ языка C++. Рекомендуем вам попробовать написать свои первые приложения в Microsoft Visual Studio IDE (подробнее см. [PreJunior Books](Books/PreJunior.md)).
|
||||
|
||||
@@ -16,36 +16,36 @@
|
||||
Старайтесь идти по пути: от простого к сложному. В спортзале новички не пытаются поднять самую тяжелую штангу на первой тренировке, т.к. понимают, чем это может быть чревато. Это же правило работает и при обучении. Когда более-менее освоитесь с языком, то можете попробовать поиграться с написанием кода в любом ином IDE, операционной системе и т.д.. Но это уже совершенно другая история...
|
||||
|
||||
|
||||
## Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc.
|
||||
## :question: Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc.
|
||||
|
||||
Нет, нет и ещё раз нет!
|
||||
|
||||
Такое утверждение живо из-за двух распространенных ситуаций: так учили в ВУЗе (Assembler -> C -> C++), либо от "старой гвардии" разработчиков, т.к. многие из таких специалистов проходили подобный карьерный путь. Современный C++ не требует подобного подхода к изучению. Этот язык полностью автономен. Гораздо вероятнее, у вас возникнет путаница в голове, а также устойчивое желание писать на C++ в стиле "Си с классами". А ассемблер потребуется только в особых ситуациях.
|
||||
|
||||
|
||||
## Изучайте C++ по книге Страуструпа
|
||||
## :question: Изучайте C++ по книге Страуструпа
|
||||
|
||||
Крайне спорный тезис. Вероятнее всего что этот совет предлагают те, кто уже имел большой опыт разработки на других языках (C, Fortran, Delphi, и т.д.) и переходил с них на C++. Книга Страуструпа написана больше как справочник: ([Язык программирования C++](https://www.ozon.ru/product/yazyk-programmirovaniya-c-spetsialnoe-izdanie-straustrup-bern-straustrup-bern-210215691)). Потому и работать с ней требуется соответственно, что уже требует наличие знаний о C++ и практики использования. Рекомендуем заглянуть в раздел [Книги](Books.md), где вы найдете материал для любого уровня владения языком программирования.
|
||||
|
||||
|
||||
## Изучайте C++ только по стандарту
|
||||
## :question: Изучайте C++ только по стандарту
|
||||
|
||||
Тоже крайне опасный тезис. Во-первых, современный стандарт C++ уже превысил объем в 2000 страниц. Во-вторых, доступ к актуальной версии стандарта платный. В-третьих, стандарт написан не самым "дружелюбным" способом. Тем кто изучил язык по стандарту можно пожать руку, но мы не рекомендуем такой путь, ибо он долог и тернист. Лучше загляните в раздел [Книги](Books.md), там вы найдете материал для любого уровня владения языком.
|
||||
|
||||
|
||||
## Undefined Behavior преследует разработчика повсюду
|
||||
## :question: Undefined Behavior преследует разработчика повсюду
|
||||
|
||||
Скорее нет, чем да.
|
||||
|
||||
Современный C++, а также имеющийся инструментарий, позволяют избежать львиную долю проблем, связанных с неопределенным поведением. Здесь можно дать совет: если сомневаетесь, что делает та или иная конструкция, то попробуйте поискать информацию на [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) или иных профильных порталах. Если же после прочтения конструкция остается непонятной, то попробуйте переписать блок кода альтернативным и более простым способом, чтобы избежать неопредленного поведения. В простоте кроется великая сила!
|
||||
|
||||
|
||||
## Нужно вручную управлять памятью, в языке нет сборщика мусора
|
||||
## :question: Нужно вручную управлять памятью, в языке нет сборщика мусора
|
||||
|
||||
Это утверждение также идет от представителей "старой гвардии", которые перестали писать на языке до появления стандарта C++11, или же от тех, кто слабо знаком с последними стандартами языка. Современный C++ имеет в своей библиотеке набор примитивов, который отвечает за автоматическое выделение и освобождение памяти. Контроль за выделением памяти все больше и больше отходит на второй план. Во многих компаниях вы также встретите внутреннее правило: "не использовать сырых указателей". И напоследок, не пренебрегайте современным инструментарием и санитайзерами. Они способны отыскать потенциальную утечку памяти ещё на этапе анализа исходного кода.
|
||||
|
||||
|
||||
## C++ - это сплошной легаси-код
|
||||
## :question: C++ - это сплошной легаси-код
|
||||
|
||||
Отчасти правдивый миф, но стоит отметить, что это применимо и к другим языкам. На самом современном стеке может производиться "легаси". Качество кода зависит от технической культуры внутри компании и команд разработки и их визионеров, т.к. легаcи-код порождается человеческим фактором: уровень разработчиков и компетенций, отношение к работе, горящие сроки, практики в команде и т.п. На C++ разработано огромное количество систем, которые не первый год работают в режиме 24/7. Такие системы могли быть написаны в прошлом без соблюдения всевозможных практик разработки. Они часто являются основой бизнеса, которые приносят значительную часть прибыли. Потому проводить в таких системах масштабные изменения очень рискованно. Разработчики работают с таким кодом предельно осторожно. Но не стоит думать, что с этим ничего невозможно поделать. Постепенно такие системы тоже переписываются с использованием современных практик и технологий. Такого рода задачи могут стать для вас не менее интересным вызовом, т.к. предоставляют отличную возможность освоить широкий спектр компетенций: чтение кода, реверс-инжениринг, написание тестов, проектирование архитектуры ПО, автоматизация, сбор требований и т.д.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Пет-проекты
|
||||
# :telescope: Пет-проекты
|
||||
|
||||
Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, библиотек и фреймворков. Они могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру.
|
||||
|
||||
Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать хорошим началом для последующего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему.
|
||||
|
||||
## Сторонние ресурсы
|
||||
## :arrows_counterclockwise: Сторонние ресурсы
|
||||
|
||||
* [Google Summer of Code](https://summerofcode.withgoogle.com/archive)
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
Рулетка с идеями для пет-проектов. Настраиваете ожидаемую сложность проекта и запускаете рулетку. Дальше случайность решит за вас, какую задачу придется решать :)
|
||||
|
||||
|
||||
## Список идей для пет-проектов
|
||||
## :boom: Список идей для пет-проектов
|
||||
|
||||
### Игры
|
||||
### :arrow_forward: Игры
|
||||
|
||||
Ниже представлен список классических видеоигр, которые не содержат в себе сложного искусственного интеллекта или динамическую генерацию мира. Вы можете попробовать реализовать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [SFML](https://www.sfml-dev.org/). Это простая в использовании библиотека, которая предоставляет достаточный набор возможностей для создания несложных графических интерфейсов для 2D или 2.5D игр при помощи [спрайтов](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)). Если же вы захотите сделать что-то более сложное, где применяется физика, то можете начать с простых движков, например: [Box2D](https://box2d.org/). Или же освоить более продвинутые: [Cocos2D](https://www.cocos.com/en/), [Unreal Engine](https://www.unrealengine.com/en-US/) и т.п. Не забывайте о правиле: "от простого, к сложному". Начинайте с простого, и постепенно повышайте сложность.
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
---
|
||||
|
||||
### Приложения
|
||||
### :arrow_forward: Приложения
|
||||
|
||||
При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Помните о принципе: "от простого к сложному".
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
---
|
||||
|
||||
### Студенческие приложения
|
||||
### :arrow_forward: Студенческие приложения
|
||||
|
||||
Нижеперечисленные примеры больше подойдут для студентов, которые изучают или недавно изучили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. свежи знания по академическим дисциплинам.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# C++ Developer Roadmap
|
||||
# :bulb: C++ Developer Roadmap
|
||||
|
||||
## Additional languages: [English](../README.md)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
1. :flashlight: [Почему появилась дорожная карта](Rationale.md)
|
||||
1. :mag: [А нужен ли вам C++?](SelfIdentification.md)
|
||||
1. :space_invader: [C++ - это просто!](FunCpp.md)
|
||||
1. :space_invader: [C++ - это просто](FunCpp.md)
|
||||
1. :clipboard: [Области применения языка](AreasOfApplication.md)
|
||||
1. :ghost: [Легенды и мифы про C++](Mythbusters.md)
|
||||
1. :chart_with_upwards_trend: [Грейды разработчиков](Grades/Overview.md)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Почему появилась дорожная карта
|
||||
# :flashlight: Почему появилась дорожная карта
|
||||
|
||||
C++ активно используется во многих коммерческих проектах. Сегодня язык претерпел большие изменения. Это сделало C++ гораздо более удобным для повседневного использования. Но вокруг языка витает много домыслов, мифов и страхов. Это отпугивает большое количество желающих. Наша цель - помочь новичкам развеять миф о сложности C++ и сориентироваться в его изучении.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# А нужен ли вам C++?
|
||||
# :mag: А нужен ли вам C++?
|
||||
|
||||
Первое, о чем действительно стоит подумать: для чего вам требуется изучение C++?
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
- В специфичных сферах может быть популярен иной инструментарий. К примеру: в машинном обучении наиболее распространен язык Python и специализированные библиотеки к нему.
|
||||
|
||||
|
||||
# Я уже знаю C/C#/Java/Python и т.д. Могу ли я сразу начать работать на C++?
|
||||
# :question: Я уже знаю C/C#/Java/Python и т.д. Могу ли я сразу начать работать на C++?
|
||||
|
||||
И да, и нет. :)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Инструментарий для работы с языком
|
||||
# :triangular_ruler: Инструментарий для работы с языком
|
||||
|
||||
Начинающие разработчики имеют малый кругозор по доступному инструментарию, который облегчает работу с кодом, повышает эффективность и оберегает от многих ошибок. Все представленные инструменты - не серебряная пуля от всех бед языка, но значительно сглаживают имеющиеся углы. Ниже представлен список распространенных и популярных инструментов, признанных разработчиками по всему миру. Данный список - лишь малая часть доступного инструментария. Со временем вы начнете лучше ориентироваться в них и найдете для себя что-то новое.
|
||||
|
||||
## Текстовые редакторы
|
||||
## :page_facing_up: Текстовые редакторы
|
||||
|
||||
* **Visual Studio Code**
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
Легковесный редактор текстовых файлов и исходного кода. Поддерживает синтаксис и подсветку распространенных языков программирования. По сравнению с Visual Studio Code, его удобно использовать для быстрого открытия и просмотра файлов. За счет своей легковесности комфортно работать с большим количеством текстовых файлов.
|
||||
|
||||
|
||||
## IDE (Integrated Development Environment)
|
||||
## :open_file_folder: IDE (Integrated Development Environment)
|
||||
|
||||
* **Microsoft Visual Studio IDE**
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
Мощная мультиплатформенная IDE от компании JetBrains. Как и другие IDE, она содержит полный набор инструментов для комфортной разработки программного обеспечения. Удобен для кроссплатформенной разработки как на Cи, так и на C++.
|
||||
|
||||
|
||||
## Расширения
|
||||
## :flashlight: Расширения
|
||||
|
||||
* **JetBrains ReSharper C++**
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
Приложение/расширение для распределенной сборки проектов. Объединяет рабочие станции разработчиков в единую сеть, за счет чего сборка исходного кода может производиться одновременно на десятках машин параллельно. Это позволяет ускорить скорость сборки больших проектов в несколько раз.
|
||||
|
||||
|
||||
## Пакетные менеджеры и системы сборки
|
||||
## :electric_plug: Пакетные менеджеры и системы сборки
|
||||
|
||||
* **Cmake**
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
Менеджер сборки проектов для приложений, написанных на Си и C++. Основное преимуществ менеджера: быстрая сборка проектов. Поддерживает кроссплатформенную разработку, поддерживает все популярные компиляторы.
|
||||
|
||||
|
||||
## Анализаторы кода
|
||||
## :mag: Анализаторы кода
|
||||
|
||||
* **PVS Studio**
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
|
||||
Набор инструментов, который поможет исследовать разнообразные проблемы во время работы приложения: утечка памяти, профилирование тормозов и т.д. Заточен для работы с различными дистрибутивами Linux.
|
||||
|
||||
## Git клиенты
|
||||
## :floppy_disk: Git клиенты
|
||||
|
||||
* **SmartGit**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user