Added base for English version
|
Before Width: | Height: | Size: 338 KiB After Width: | Height: | Size: 338 KiB |
|
Before Width: | Height: | Size: 262 KiB After Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 180 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 176 KiB |
|
Before Width: | Height: | Size: 259 KiB After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 339 KiB After Width: | Height: | Size: 339 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 326 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
71
English/README.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# C++ Roadmap
|
||||
|
||||
С++ всё ещё является одним из [самых популярных](https://insights.stackoverflow.com/survey/2021#technology-most-popular-technologies) языков разработки. Есть немало желающих начать его изучать и стать C++ разработчиками. Перед такими людьми встают вопросы: "С чего мне начать? Что и в каком порядке мне изучать? Какие книги стоить почитать?"
|
||||
|
||||
Мы попытались ответить на эти вопросы в представленной дорожной карте. Карта акцентируется на общих компетенциях и навыках, которые встречаются в большинстве проектов. Она призвана помочь тем, кто только начинает свое обучение или имеет небольшой опыт. Изучив набор перечисленных материалов, вы сможете составить более продуктивный план обучения, не отвлекаясь на побочную информацию. Это поможет вам освоить C++ на том уровне, который встречается во многих коммерческих проектах.
|
||||
|
||||
Прежде чем начать изучать карту рекомендуем прочитать статьи, перечисленные ниже.
|
||||
|
||||
|
||||
# Статьи
|
||||
|
||||
1. [Почему появилась дорожная карта](Rationale.md)
|
||||
1. [А нужен ли вам C++?](SelfIdentification.md)
|
||||
1. [C++ - это просто!](FunCpp.md)
|
||||
1. [Области применения языка](AreasOfApplication.md)
|
||||
1. [Легенды и мифы про C++](Mythbusters.md)
|
||||
1. [Грейды разработчиков](Grades/Overview.md)
|
||||
1. [Книги и прочие материалы по С++](Books/Overview.md)
|
||||
1. [Инструментарий для С++](Tooling.md)
|
||||
1. [Ресурсы по C++: документация, каналы конференций и т.д.](CommunitySources.md)
|
||||
|
||||
# Дорожная карта
|
||||
|
||||
**Ссылка**: [Miro - C++ Developer Roadmap](https://miro.com/app/board/o9J_lFH_iBs=/)
|
||||
|
||||
|
||||
# Лицензия
|
||||
Карта распространяется по лицензии **CC BY-NC-SA 4.0**: [RUS](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ru) || [ENG](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en). Если вкратце:
|
||||
|
||||
- Вы можете делиться, адаптировать и копировать весь представленный материал, но с указанием ссылки на оригинал
|
||||
- **НЕ** допускается использование любой части представленных материалов в коммерческих целях
|
||||
|
||||
|
||||
# Предложения и замечания
|
||||
|
||||
Если у вас есть замечания, вопросы или предложения, будем рады получить любую помощь и поддержку. Мы открыты для общения :)
|
||||
|
||||
Для этого используйте следующие механизмы Github:
|
||||
- Предложения/правки **по репозиторию** - создавайте и присылайте новый PR в [Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls)
|
||||
- Предложения/правки **по дорожной карте в Miro** - создавайте и присылайте новый запрос в [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (в Miro нет возможности вести историю изменений, потому доступ к изменениям в карте ограничен. Все правки мы вносим сами после ознакомления с предложениями).
|
||||
|
||||
|
||||
# Контакты
|
||||
|
||||
Авторы:
|
||||
- [Евгений Мельников](https://github.com/salmer),
|
||||
- [Дмитрий Дмитриев](https://github.com/DmitrievDmitriyA)
|
||||
|
||||
Рецензенты:
|
||||
- [Сергей Тюленев](https://github.com/marleeeeeey),
|
||||
- [Константин Комаров](https://github.com/MolinRE),
|
||||
- [Дмитрий Савин](https://github.com/SD57),
|
||||
- [Сергей Скляр](https://github.com/SergeiSkliar)
|
||||
- Сообщество :)
|
||||
|
||||
# TO DO Backlog
|
||||
|
||||
Список вещей, которые мы хотим улучшить, но до которых ещё не добрались:
|
||||
|
||||
- [ ] Больше книг богу книг
|
||||
- [ ] Заполнить карточки по каждому листу роадмапа
|
||||
- [ ] перевод на английский, когда роадмапа утрясётся
|
||||
- [ ] поискать и добавить больше видеоматериалов по C++: курсы лекций/полезные видео с конференции и т.д.
|
||||
- [ ] Намутить рисовалку майндмапы
|
||||
- [ ] версионирование
|
||||
- [ ] markdown -> mind map
|
||||
- [ ] экспорт в картинку (svg)
|
||||
- [ ] экспорт в html страницу (???)
|
||||
- [ ] возможность задавать цвета листьев
|
||||
- [ ] nice to have: наличие фреймов (чтобы этапы выделить)
|
||||
- [ ] nice to have: слои - отображать только определённые этапы
|
||||
18
README.md
@@ -9,15 +9,15 @@
|
||||
|
||||
# Статьи
|
||||
|
||||
1. [Почему появилась дорожная карта](Rationale.md)
|
||||
1. [А нужен ли вам C++?](SelfIdentification.md)
|
||||
1. [C++ - это просто!](FunCpp.md)
|
||||
1. [Области применения языка](AreasOfApplication.md)
|
||||
1. [Легенды и мифы про C++](Mythbusters.md)
|
||||
1. [Грейды разработчиков](Grades/Overview.md)
|
||||
1. [Книги и прочие материалы по С++](Books/Overview.md)
|
||||
1. [Инструментарий для С++](Tooling.md)
|
||||
1. [Ресурсы по C++: документация, каналы конференций и т.д.](CommunitySources.md)
|
||||
1. [Почему появилась дорожная карта](Russian/Rationale.md)
|
||||
1. [А нужен ли вам C++?](Russian/SelfIdentification.md)
|
||||
1. [C++ - это просто!](Russian/FunCpp.md)
|
||||
1. [Области применения языка](Russian/AreasOfApplication.md)
|
||||
1. [Легенды и мифы про C++](Russian/Mythbusters.md)
|
||||
1. [Грейды разработчиков](Russian/Grades/Overview.md)
|
||||
1. [Книги и прочие материалы по С++](Russian/Books/Overview.md)
|
||||
1. [Инструментарий для С++](Russian/Tooling.md)
|
||||
1. [Ресурсы по C++: документация, каналы конференций и т.д.](Russian/CommunitySources.md)
|
||||
|
||||
# Дорожная карта
|
||||
|
||||
|
||||
10
Russian/AreasOfApplication.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Области применения C++
|
||||
|
||||
У языка С++ довольно широкая сфера применения. Преимущественно его используют там, где требуется высокая производительность или низкое потребление памяти. Ниже представлены материалы, в которых более подробно рассказывается о сферах применения C++:
|
||||
- [Язык программирования С++. Антон Полухин](https://www.youtube.com/watch?v=pic8c9_snJw)
|
||||
- [Антон Полухин — Незаменимый С++](https://www.youtube.com/watch?v=LZflL44SVVY&ab_channel=C%2B%2BUserGroup)
|
||||
- [АйТиБорода - ЯЗЫК ЯЗЫКОВ! / Всё про C++ и разработку игр / Интервью с Lead Core Developer World of Tanks Blitz](https://www.youtube.com/watch?v=QQZmDWnV618)
|
||||
- [Языки C и C++. Где их используют и зачем?](https://medium.com/nuances-of-programming/%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8-c-%D0%B8-c-%D0%B3%D0%B4%D0%B5-%D0%B5%D1%89%D1%91-%D0%B8%D1%85-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8E%D1%82-%D0%B8-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-9ff56559d5bf)
|
||||
- [Олимпиадное программирование](https://academy.yandex.ru/posts/sport-dlya-razrabotchikov-kak-ustroeno-olimpiadnoe-programmirovanie)
|
||||
- [What Can You Do With C++?](https://www.ko2.co.uk/what-can-you-do-with-c-plus-plus/)
|
||||
|
||||
BIN
Russian/Backup/1.png
Normal file
|
After Width: | Height: | Size: 338 KiB |
BIN
Russian/Backup/10.png
Normal file
|
After Width: | Height: | Size: 262 KiB |
BIN
Russian/Backup/2.png
Normal file
|
After Width: | Height: | Size: 186 KiB |
BIN
Russian/Backup/3.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
Russian/Backup/4.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
Russian/Backup/5.png
Normal file
|
After Width: | Height: | Size: 259 KiB |
BIN
Russian/Backup/6.png
Normal file
|
After Width: | Height: | Size: 339 KiB |
BIN
Russian/Backup/7.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
Russian/Backup/8.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
Russian/Backup/9.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
41
Russian/Books/Junior.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Junior
|
||||
|
||||
## Мотивация и опыт
|
||||
|
||||
- [Роберт Мартин - Идеальный программист](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)
|
||||
|
||||
Дядюшка Боб вывел набор советов и рекомендаций, которые помогут вам выжить в индустрии. Эта книга не только про технические навыки, но и про психологические аспекты работы, и как справляться с ними.
|
||||
|
||||
- [Роберт Мартин - Чистый код. Создание, анализ и рефакторинг](https://www.ozon.ru/product/chistyy-kod-sozdanie-analiz-i-refaktoring-chistyy-kod-sozdanie-analiz-i-refaktoring-142429922/?sh=awbarJsR)
|
||||
|
||||
Сегодня вокруг этой книги витает все больше и больше критики. Тем не менее мы считаем, что она принесет новичкам больше пользы, нежели чем вреда, в краткосрочной перспективе. Эта книга даст набор рабочих рекомендаций, которые помогут писать более структурированный, читаемый и поддерживаемый код. Как и с любым другим знанием, его не нужно слепо превращать в карго-культ. Используйте знания с умом. Подберите для себя те техники и приемы из книги, которые считаете разумными.
|
||||
|
||||
- [Стив Макконнелл - Совершенный код. Мастер-класс](https://www.ozon.ru/product/sovershennyy-kod-master-klass-138437220/?sh=dxL38m9c)
|
||||
|
||||
Не смотря на почтенный возраст книги, её можно считать библией разработчика. Она системно описывает устройство индустрии, а также дает массу советов: каким образом расти и развиваться, чтобы стать эффективным специалистом.
|
||||
|
||||
## Computer Science
|
||||
|
||||
- [Томас Кормен - Алгоритмы. Вводный курс](https://www.ozon.ru/product/algoritmy-vvodnyy-kurs-24903185/?sh=oABFs2sD)
|
||||
|
||||
Хорошее продолжение после "Грокаем алгоритмы". Книга знакомит с базовыми распространенными алгоритмами сортировок, работы со списками и т.д., но на более глубоком уровне. Все ещё написана довольно простым языком, потому она может помочь подготовиться к глубокому погружению в алгоритмы.
|
||||
|
||||
## C++
|
||||
|
||||
- [Скотт Мейерс - Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ](https://www.ozon.ru/product/effektivnoe-ispolzovanie-c-55-vernyh-sovetov-uluchshit-strukturu-i-kod-vashih-programm-2610625/?sh=VdYASWTH)
|
||||
|
||||
Отличный сборник практических рекомендаций по использованию различных языковых средств C++. Данная книга написана во времена стандарта C++03, но ценность информации по-прежнему остается актуальной. Все рекомендации, техники и советы, описанные в книге, масштабируются и активно переиспользуются в новых стандартах языка.
|
||||
|
||||
- [Александреску Андрей, Саттер Герб - Стандарты программирования на С++](https://www.ozon.ru/product/standarty-programmirovaniya-na-s-2381848/?sh=SUs05K52)
|
||||
|
||||
Небольшая книга, которая описывает общепринятые практики и правила написания кода в коммерческих проектах. Данная книга - это агрегация правил из многих компаний. Данная работа стала прообразом сайта: [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). Тем не менее рекомендуем прочитать данную книгу, т.к. она довольно короткая и даст вам общее представление, какие правила написания кода распространены во многих проектах.
|
||||
|
||||
## Технические навыки
|
||||
|
||||
- [Фримен Эрик, Робсон Элизабет - Head First. Паттерны проектирования](https://www.ozon.ru/product/head-first-patterny-proektirovaniya-obnovlennoe-yubileynoe-izdanie-144233005/?sh=VWSHgt2E)
|
||||
|
||||
Отличная книга для начала изучения паттернов проектирования. В качестве неплохой альтернативы можем также предложить сайт [refactoring.guru](https://refactoring.guru/design-patterns), но в данной книге также имеется масса практических заданий, которые помогут вам лучше усвоить идеи паттернов и в каких случаях их применять.
|
||||
|
||||
- [Андрей Созыкин - Компьютерные сети. Базовый курс](https://www.youtube.com/playlist?list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1)
|
||||
|
||||
Прекрасный курс видеолекций по компьютерным сетям. За основу взяты книги Таненбаума и других классиков по теме. В большинстве проектов этих знаний будет достаточно, чтобы не совершать очевидных ошибок при работе с сетями. Для более глубокого погружения в тему вы можете ознакомиться с книгами Таненбаума или других авторов, или же посмотреть другие курсы на канале Андрея.
|
||||
37
Russian/Books/Middle.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Middle
|
||||
|
||||
## 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)
|
||||
|
||||
Продолжение предыдущей книги Скотта Мейерса. Сборник советов для работы с новыми стандартами C++11 и C++14.
|
||||
|
||||
- [Параллельное программирование на С++ в действии. Практика разработки многопоточных программ](https://www.ozon.ru/product/parallelnoe-programmirovanie-na-s-v-deystvii-praktika-razrabotki-mnogopotochnyh-programm-217051361/?asb=uff2kmWPtH7totJyGfGyYsPFkTR%252BIxeTdrNvGvZlqzc%253D&asb2=L78tfqOpsfrZsUEmgaZ9kZgbmpv4Jyn9UhBcKxIEO3Q&keywords=%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+C%2B%2B&sh=nq_ppy1R)
|
||||
|
||||
Отличное руководство по многопоточному программированию в составе стандартной библиотеки C++. Представлено подробное описание ко всем примитивам библиотеки. Также даются объяснения работы этих примитивов, скрытыми под абстракциями.
|
||||
|
||||
- [Герб Саттер - Решение сложных задач на С++](https://www.ozon.ru/product/reshenie-slozhnyh-zadach-na-s-1273200/?sh=gy2qlNpv) и [Герб Саттер - Новые сложные задачи на C++](https://www.ozon.ru/product/novye-slozhnye-zadachi-na-c-2342923/?sh=PpLM-a9C)
|
||||
|
||||
Сборники, которые описывают разнообразные задачи с точки зрения проектирования и написания кода. Предлагают коллекцию эффективных решений, многие из которых считаются уже классическими идиомами языка. Многие идиомы, представленные в книге, встречаются на проектах практически повсеместно.
|
||||
|
||||
- [Курт Гантерог - Оптимизация программ на C++](https://www.ozon.ru/product/optimizatsiya-programm-na-c-proverennye-metody-povysheniya-proizvoditelnosti-140145932/?sh=OlHzzZHG)
|
||||
|
||||
Хороший сборник советов и рекомендаций по улучшению производительности приложений на языке C++. Некоторые советы основаны на идиомах и конструкциях языка, описанных Гербом Саттером в предложенных книгах выше или Скоттом Майерсом. Потому рекомендуется её прочтение после знакомства с предыдущими книгами.
|
||||
|
||||
## Технические навыки
|
||||
|
||||
- [Джонсон Ральф, Хелм Ричард - Приемы объектно-ориентированного проектирования. Паттерны проектирования](https://www.ozon.ru/product/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-2457392/?sh=U_1tfTeu)
|
||||
|
||||
Классический справочник по паттернам проектирования. Каждый паттерн детально разбирается и предлагаются случаи, где они могут быть применены. Это книга будет отличным продолжением после "Паттернов проектирования" от Эрика Фримена. Будьте готовы, что читается она тяжелее, чем предыдущая.
|
||||
|
||||
- [Гэри Маклин Холл - Адаптивный код: гибкое кодирование с помощью паттернов проектирования и принципов SOLID](https://www.ozon.ru/product/adaptivnyy-kod-gibkoe-kodirovanie-s-pomoshchyu-patternov-proektirovaniya-i-printsipov-solid-142089791/?sh=yQeAC0en)
|
||||
|
||||
Одна из достойнейших книг, которая простым языком объясняет принципы SOLID. Примеры написаны на языке C#, но это не должно вызвать сложностей при их чтении, т.к. используется минималистичный набор инструкций языка.
|
||||
|
||||
- [Надежда Поликарпова, Анатолий Шалыто - Автоматное программирование](https://www.ozon.ru/product/avtomatnoe-programmirovanie-28260411/?sh=KMISCILZ)
|
||||
|
||||
Отличное описание того, как подходить к написанию программ посредством конечных автоматов. Наверно более простого и элегантного описания теории конечных автоматов и её практического применения сложно будет отыскать. Рекомендуем вам поизучать пару коммерческих работ, выполненных в описанной парадигме. Ссылки к исходному коду вы найдете в конце книги.
|
||||
|
||||
- [Ulrich Drepper - What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)
|
||||
|
||||
Хорошая обзорная статья, дающая представление о том, как устроена память компьютера и зачем она так устроена. Даёт как высокоуровневое представление, так и набрасывает низкоуровневых деталей, если есть желание в них углубляться.
|
||||
8
Russian/Books/Overview.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Книги и материалы
|
||||
|
||||
В данных статьях собраны книги, которые помогут вам сориентироваться, и задать свой вектор обучения. Все книги поделены на несколько разделов, которые касаются различных навыков. Рекомендуем вам обзорно посмотреть каждый раздел, согласно желаемому грейду, и подобрать набор литературы под свои нужды.
|
||||
|
||||
- [PreJunior](PreJunior.md)
|
||||
- [Junior](Junior.md)
|
||||
- [Middle](Middle.md)
|
||||
- [Senior](Senior.md)
|
||||
43
Russian/Books/PreJunior.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Pre-Junior
|
||||
|
||||
## Мотивация и опыт
|
||||
|
||||
- [Фаулер Чед - Программист-фанатик](https://www.ozon.ru/product/programmist-fanatik-32218784/?asb=ccybIdrVOtKbfO3XYxD6qZu%252BqA4iy4P%252BHkGUikETAiA%253D&asb2=cy4OBlq-08U5_VqkoPsv0ezJyaKuhUMmccxNvr2bH8A&keywords=%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82+%D1%84%D0%B0%D0%BD%D0%B0%D1%82%D0%B8%D0%BA&sh=etF_rKzq)
|
||||
|
||||
Эту книгу можно считать признанной классикой в мире разработки, в которой Чед Фаулер пытается поделиться своим видением: как стать высококлассным, востребованным специалистом и оставаться на гребне волны.
|
||||
|
||||
## Computer Science
|
||||
|
||||
- [Фило Владстон Феррейра - Теоретический минимум по Computer Science](https://www.ozon.ru/product/teoreticheskiy-minimum-po-computer-science-vse-chto-nuzhno-programmistu-i-razrabotchiku-144946027/?sh=1zjF0Mqn)
|
||||
|
||||
Обзорная книга, которая рассказывает о различных направлениях Computer Science: математический аппарат, обзор алгоритмом, базы данных, устройство компьютера и т.д. Она может стать хорошей отправной точкой, чтобы подыскать интересующие направления и расставить приоритеты для себя.
|
||||
|
||||
- [Чарльз Петцольд - Код. Тайный язык информатики](https://www.ozon.ru/context/detail/id/125884/)
|
||||
|
||||
Прежде чем начать изучение языка, рекомендуем почитать данную книгу. Она расскажет простым языком о том как устроен компьютер, как он работает на физическом уровне. Здесь отсутствуют какие-либо сложные технические или академические детали. Книга содержит в себе основы основ, которые вряд ли в скором времени потеряют свою актуальность. Это поможет вам лучше понять фундаментальные идеи языка C++ позднее. Является отличным дополнением к предыдущей книге, т.к. глубже раскрывает устройство компьютера.
|
||||
|
||||
- [Адитья Бхаргава - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих](https://www.ozon.ru/product/grokaem-algoritmy-illyustrirovannoe-posobie-dlya-programmistov-i-lyubopytstvuyushchih-139296295/?sh=MERnHW_O)
|
||||
|
||||
Отличное вводное пособие в мир алгоритмов. Написано легким языком, который поймет большинство новичков. Также есть немного практических задач, чтобы попробовать написать свои первые алгоритмы.
|
||||
|
||||
## C++
|
||||
|
||||
- [Липпман Стенли - Язык программирования C++. Базовый курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-bazovyy-kurs-147417585/?sh=QOX3qGug)
|
||||
|
||||
Отличное дополнение к книге Стивена Праты. К ней хорошо обращаться параллельно с предыдущей. Рекомендуем вам сами найти баланс между двумя книгами, т.к. информация подается по-разному, и шанс понять ту или иную тему у вас повысится.
|
||||
|
||||
- [Стивен Прата - Язык программирования C++. Лекции и упражнения (шестое издание)](https://www.ozon.ru/product/yazyk-programmirovaniya-c-lektsii-i-uprazhneniya-147417584/?utm_source=google&utm_medium=cpc&utm_campaign=RF_Product_Shopping_Books_super&gclid=CjwKCAjw7diEBhB-EiwAskVi11zEQ2QeqLjT8AEBCYC5IWzgpdgLIErY3c7eLfgnPSFic9M8Eh2pPRoCSHIQAvD_BwE)
|
||||
|
||||
Наиболее актуальная для новичков, с которой стоит начать свой путь изучения C++. Не требует наличия каких-то специфичных знаний, а также имеет набор упражнений к каждой главе. Они помогут вам отработать и понять фундаментальные возможности языка.
|
||||
|
||||
- В дополнение к учебнику можно порекомендовать следующие видео от лекторов МФТИ:
|
||||
- Илья Мещерин: [Курс лекций по C++](https://www.youtube.com/playlist?list=PL4_hYwCyhAvY2dY_tnTv3-TJThzcloCvM)
|
||||
- Тимофей Хирьянов:
|
||||
- [Лекции C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fItmofHO4KuGjfGtbQtEj-x)
|
||||
- [Алгоритмы и структуры данных на C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fL_5Xvnufpwj2uYZnZBBnsr)
|
||||
|
||||
## Технические навыки
|
||||
|
||||
- [MSDN](https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160)
|
||||
|
||||
Если вы начинаете изучать язык самостоятельно, то рекомендуем вести разработку первых программ или выполнять упражнения в IDE: Microsoft Visual Studio (Community Edition). На сегодняшний день, это маскимально дружелюбная IDE к новичкам, как в установке, так и в использовании (и при этом абсолютно бесплатно!). Это позволит максимально сконцентрироваться на изучении языка, а не на борьбе с рабочим окружением. На сайте вы найдете небольшой учебник, который расскажет: как установить Visual Studio, создать первый консольный проект и написать первое приложение:
|
||||
3
Russian/Books/Senior.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Senior
|
||||
|
||||
- Преисполняться в познании индустрии
|
||||
35
Russian/CommunitySources.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Community sources
|
||||
|
||||
## C++ общее
|
||||
|
||||
- [CppReference](https://en.cppreference.com)
|
||||
- [CPlusPlus](https://www.cplusplus.com/reference)
|
||||
- [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)
|
||||
- [Рабочая группа C++ - представители комитета по стандартизации языка в России](https://stdcpp.ru/)
|
||||
- [Новости от комитета стандартизации С++ (ENG)](https://isocpp.org/)
|
||||
|
||||
## Популярные конференции по С++
|
||||
|
||||
- [C++ Russia](https://cppconf.ru/)
|
||||
- [Cpp Con](https://cppcon.org/)
|
||||
- [Meeting C++](https://meetingcpp.com/)
|
||||
- [C++ Now](https://cppnow.org/)
|
||||
|
||||
## Каналы конференций по 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)
|
||||
|
||||
## Альтернативные источники для изучения С++
|
||||
|
||||
- [Прародитель идеи по дорожной карте](https://www.cjdb.com.au/sg20-and-videos.html)
|
||||
- [Коллекция различных ресурсов по C++](https://awesomecpp.com)
|
||||
- [Cpp con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e)
|
||||
|
||||
## Другие интересные репозитории
|
||||
|
||||
- [Путеводитель C++ программиста по неопределенному поведению](https://github.com/Nekrolm/ubbook)
|
||||
- [Коллекция библиотек и фреймворков для C++](https://github.com/fffaraz/awesome-cpp)
|
||||
|
||||
19
Russian/FunCpp.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# C++ — это просто!
|
||||
|
||||
Современный C++ гораздо проще, чем принято считать. За годы трансформаций язык успел сильно преобразиться и обрасти возможностями, которые позволяют писать безопасный и эффективный код. Если использовать примитивы из последних стандартов, то больше не нужно беспокоиться о возможных утечках памяти. Также компилятор стал гораздо умнее. Он способен выполнять огромное число оптимизаций над вашим кодам, выдавая максимальную производительность. Если потребуется, то все по-прежнему возможно сделать код оптимальнее при помощи самостоятельных манипуляций и ухищрений.
|
||||
|
||||
У языка всё же есть и недостатки. Главным из них является отсутствие стандартного пакетного менеджера. Есть куча разных продуктов, которые пытаются занять эту нишу, но пока ни один из них так и не смог этого сделать.
|
||||
|
||||
С++ также стал жертвой собственной парадигмы: "разработчик не платит за то, что ему не требуется". Практика же показывает, что в коммерческих проектах разработчики не слишком аккуратно обходятся с зависимостями, потому породилась обратная ситуация: разработчик платит каждый раз, когда ему нужно втащить новую зависимость. Это провоцирует всякие "интересные" побочные эффекты во время сборки проекта. Но и этот вопрос постепенно решается.
|
||||
|
||||
Чтобы приступить к изучению языка потребуется набор базовых школьных знаний:
|
||||
- Арифметика;
|
||||
- Булева алгебра;
|
||||
- Составление блок-схем;
|
||||
- Представление чисел в различных системах счисления.
|
||||
|
||||
Несмотря на весь бэкграунд и информационный шлейф, который тянется за C++, мы считаем, что его современная версия стала в разы проще, чем это было в прошлом.
|
||||
|
||||
Потому не бойтесь изучать его!
|
||||
|
||||
Удачи!
|
||||
29
Russian/Grades/Junior.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Junior C++
|
||||
|
||||
## Кто это?
|
||||
|
||||
Это разработчик, который имеет теоретические знания по разработке ПО, а также небольшой практический опыт в рамках личных/учебных проектов. Помимо этого может иметь теоретическое представление о том, как работает индустрия и рабочие процессы. Человек способен выполнять несложные задачи на реальном проекте под руководством опытных коллег, обычно миддлов или синьоров.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
|
||||
- Умение читать документацию библиотек, фреймворков и т.д.
|
||||
- Умение собирать и подключать сторонние библиотеки к проекту
|
||||
- Читать чужой код и разбираться в нем
|
||||
- Искать и фиксить баги при момощи отладчика или по логам приложения
|
||||
- Писать тесты к коду
|
||||
- Базовые знания и опыт работы с Git
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
|
||||
- Быстрое обучение
|
||||
- Умение самостоятельно искать информацию в интернете, книгах и т.д.
|
||||
- Умение своевременно задавать вопросы коллегам
|
||||
- Способность работать в команде
|
||||
|
||||
## Рекомендации и советы
|
||||
|
||||
- Постарайтесь найти парочку энтузиастов на проекте и присоединитесь к ним. Они могут стать вашим истончником знаний и опыта.
|
||||
- Задавайте вопросы старшим коллегам. Нет глупых вопросов, есть глупые ответы.
|
||||
- Не закапывайтесь в задачу слишком долго. Если после нескольких вариантов нет сдвига, тут же обращайтесь к коллегам за помощью. Они рассчитывают, что задача будет вами решена в разумные сроки. Ваша основная цель - решать проблемы, а не создавать их для команды.
|
||||
- При возникновении сложностей старайтесь попробовать найти парочку возможных решений самостоятельно, а затем подходите к своему наставнику. Ваш наставник подкорректирует ваши варианты решеения или дополнит их.
|
||||
- Многие джуны попадают в распространненную ловушку: чем больше строк кода написано, тем они круче как разработчики. Не попадайтесь в неё! Помните, что чем больше кода написано, тем выше вероятность ошибки. В идеале код должен быть написан так, чтобы при возвращении к нему через полгода, вы быстро могли вспомнить что он делает. Хороший разработчик не тот, кто пишет много кода. Хороший разработчк ведет себя как самурай: наносит один точный и смертельный удар, а не бессмысленно машет мечом, чтобы попасть по врагу.
|
||||
43
Russian/Grades/Middle.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Middle C++
|
||||
|
||||
## Кто это?
|
||||
|
||||
Это разработчик, который понимает технический контекст разработки и способен создать дизайн и решения для функционала внутри компонента/приложения даже в случае неполноты требований. Также имеет практический опыт работы на проектах и в рамках принятых бизнес-процессов.
|
||||
|
||||
В основном решает технические задачи, но, в отличие от джуна, способен делать это самостоятельно или под менторством синьора/тимлида.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
|
||||
- Компилятор и язык его больше не пугают и практически не приносят сюрпризов, а если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь
|
||||
- Ориентируется в базовых концепциях языка и понимает, какие ещё языки существуют и чем они отличаются
|
||||
- Пишет понятный и поддерживаемый код
|
||||
- Знает базовые принципы дизайна и на их основе способен принять техническое решение
|
||||
- Понимает не только язык программирования, но и его технический контекст, то есть понимает весь технический цикл, через который проходит код и ориентируется в инструментах, которые помогают этот цикл поддерживать:
|
||||
- Написание кода (IDE, текстовые редакторы, практики программирования, качество кода)
|
||||
- Хранение исходного кода и продуктов (системы контроля версий, пакетные менеджеры, серверы)
|
||||
- Компиляция (компиляторы, системы сборки, библиотеки)
|
||||
- Тестирование (фреймворки, стратегии тестирования)
|
||||
- Доставка
|
||||
- Выполнение на целевой системе
|
||||
- Глубже понимает и знает базовую информатику (структуры данных, конечные автоматы, алгоритмы)
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
|
||||
- Способен самостоятельно ориентироваться в технической части проекта и принимать решения, которые вписываются в него
|
||||
- Понимает, когда нужно остановиться, чтобы не переусложнить решение
|
||||
- Имеет практический опыт работы в команде
|
||||
- Способен формулировать и доносить идеи и мысли до других членов команды
|
||||
- Имеет практический опыт работы по различным методологиям: Kanban, Agile/Scrum, Waterfall и т.д.
|
||||
- Помогает другим членам команды
|
||||
|
||||
## Рекомендации и советы
|
||||
|
||||
### Про обучение
|
||||
- Начинайте прокачивать софт-скиллы, если хотите вырасти в синьора. На синьорском уровне техническая экспертиза часто отходит на второй план, а на первый выходит умение вести диалог и договариваться. Хороший разработчик, не тот кто пишет много кода, а тот, кто понимает как решить проблему максимально просто и эффективно. В идеале - без написания нового кода, а ещё лучше - если ещё удалится пара десятков/сотен строк.
|
||||
- Стадия миддла самая энергозатратная с точки зрения обучения. От вас требуется не только прокачивать технические скиллы, но также навыки коммуникации и погружение в проблемы бизнеса. Это значит, что вам требуется одновременно развиваться в нескольких направлениях одновременно. Уделяйте внимание в равной степени как "хард", так и "софт" скиллам.
|
||||
- Должное внимание "софт" скиллам также повышает вероятность того, что вы быстрее станете востребованным профессионалом на рынке. Вы можете попытаться стать узконаправленным техническим специалистом и игнорировать коммуникативные навыки, но, во-первых, компаниям нечасто нужны подобные кадры в больших количествах, во-вторых, вам придется конкурировать с лучшими из лучших. Если вы действительно готовы состязаться с лучшими специалистами на рынке, то смело идите вперед, но все же рекомендуем подумать о диверсификации своих навыков.
|
||||
|
||||
|
||||
### Про опыт
|
||||
- Основная ловушка для многих мидлов: фанбойство по технологиям, фреймворкам, внедрением паттернов или подходам к разработке. Постарайтесь прагматично подходить к выполнению задач на проекте. Не нужно пытаться затянуть все последние новинки, только чтобы поиграться с ними или ради строчки в резюме. На этом этапе очень велик соблазн проявить свое мастерство через обилие технологий или оверинжиниринг.
|
||||
- Если вы действительно считаете, что проекту нужна новая библиотека или фреймворк - обсудите это с синьором/тимлидом. Предложите им попробовать создать прототип, где сможете проверить их в действии прежде чем втягивать в проект. Пожалуйста, никогда не втягивайте их в обход всей команды или втихаря! Для вас - это развлечение, но для проекта/тимлида это станет головной болью в будущем, т.к. это повысит стоимость поддержки проекта и принесёт неожиданные проблемы.
|
||||
27
Russian/Grades/Overview.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Уровень разработчиков
|
||||
|
||||
> Уровень разработчика (eng.: *grade*) - это попытка классифицировать разработчиков по навыкам, компетенциям и практическому опыту. По нему возможно сопоставить потенциальную сложность задач с требуемым набором компетенций и навыков для их успешного решения.
|
||||
|
||||
В индустрии разработки существует более-менее устоявшаяся классификация разработчиков. Выделим эти уровни:
|
||||
- Junior;
|
||||
- Middle;
|
||||
- Senior.
|
||||
|
||||
Многие компании имеют персональное видение по набору обязанностей и компетенций, предъявлемые к разработчкам разного уровня. Легко встретить ситуацию: работая в одной компании, вы можете быть Senior разработчиком, а в другой - еле-еле дотягиваете до Middle. Тем не менее можно охарактеризовать общие ожидания для любого уровня во многих компаниях. В дальнейшем будет использоваться упрощенная классификация, описанная выше.
|
||||
|
||||
**Пример:** Ознакомиться с принятыми классификациями в различных компаниях можно здесь: https://www.levels.fyi/
|
||||

|
||||
|
||||
|
||||
## Описание
|
||||
|
||||
В нижеперечисленных статьях мы попытались дать осредненное описание для каждого уровня разработчика:
|
||||
|
||||
- [Pre-Junior C++](PreJunior.md)
|
||||
|
||||
- [Junior C++](Junior.md)
|
||||
|
||||
- [Middle C++](Middle.md)
|
||||
|
||||
- [Senior C++](Senior.md)
|
||||
|
||||
51
Russian/Grades/PreJunior.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Pre-Junior C++
|
||||
|
||||
## Кто это?
|
||||
|
||||
Это человек, который освоил синтаксис языка и способен написать несложную программу без использования сторонних библиотек. Программа способна выполнять различные действия, например:
|
||||
- выполняет арифметические вычисления
|
||||
- взаимодействует с файлами: чтение и запись
|
||||
- ожидает ввод данных с клавиатуры
|
||||
- выводит результаты работы и иные данные данные в консольное окно
|
||||
- и т.д.
|
||||
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
|
||||
- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д.
|
||||
- Умение пользоваться отладчиком при помощи IDE
|
||||
- Понимание процесса компиляции и сборки программы на C++
|
||||
- Способность написать приложение, содержащее арифметические или логические операции и алгоритмы, условия и циклы
|
||||
- Умение написать приложение по работе со стандартным потоком ввода/вывода;
|
||||
- Умение работать с указателями и ссылками
|
||||
- Знание из какого вида памяти состоит приложение
|
||||
- Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция
|
||||
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
|
||||
- Желание учиться и впитывать новые знания
|
||||
- Желание разбираться в возникающих проблемах
|
||||
- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или соответствующей литературе
|
||||
|
||||
## Рекомендации и советы
|
||||
|
||||
### Про обучение
|
||||
- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала из различных источников, прежде чем вы сможете пройти собеседование, и получить свой первый оффер.
|
||||
- Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники.
|
||||
- Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется.
|
||||
- Не пытайтесь писать идеальный код. Ваша основная задача - написание много РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Это сродни изучению иностранных языков. Сначала вы говорите много и небрежно, но со временем ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д.
|
||||
- Не хватайтесь сразу за большую задачу, например: "написать свою игру". Скорее всего вам не хватит знаний и опыта на первых порах, чтобы осилить задачу в одиночку. Такого рода путь быстро демотивирует, что в итоге может привести к разочарованию в себе и своих спосбностях. В итоге вы забросите свое обучение. Идите по пути "от простого к сложному", постепенно придумывая себе все более сложные задачки.
|
||||
- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих порталов - отработать навыки применения классических алгоритмов и структур данных. Эти площадки спроектированы таким образом, чтобы максимально огородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях.
|
||||
|
||||
### Про мотивацию
|
||||
- Учитесь в своем ритме, а также в любом возрасте! Не ведитесь на истории: "я программирую с пеленок", "паяльником владею с яслей", "вывожу из запоя/снимаю порчу при помощи ассемблера". Большинство подобных историй - это [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего) или попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++!
|
||||
- Большинство проблем, с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте решить задачу более простым путем.
|
||||
- Помните, вы должны изучать язык, а не бороться с рабочим окружением на первых порах. Борьба с окружением может вас привести к полному разочарованию и потере мотивации.
|
||||
- Помните, что многие опытные разработчики тоже встречают проблемы и застревают в "очевидных" местах. Просто возьмите паузу, позанимайтесь чем-то другим, а через какое-то время возвращайтесь к задаче.
|
||||
- Найдите единомышленников, которые также начинают свой путь. Так вам будет интереснее погружаться в изучение языка, а также делиться знаниями и опытом друг с другом. Это также поможет выработать в себе навык командной работы. Времена "вольных художников" подошли к концу. Практически везде вам придется работать в команде.
|
||||
- Попробуйте также найти себе опытного ментора. Под его руководством вы сможете избежать различные ловушки и потерю времени на них.
|
||||
|
||||
### Про английский язык
|
||||
- Большинство проблем проще искать на английском языке, но если текущий уровень владения не очень высокий - не мучайте себя. Так вы можете быстро потерять мотивацию и разочароваться. Большая часть проблем в начале пути, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке.
|
||||
- Если чувствуете, что ваш английский слабоват, то лучше начните его изучение с более простых и приятных вещей: сериалы, видеоигры, художественные книги, новостные сайты или статьи на интересующие темы. За несколько месяцев можно значительно улучшить навыки восприятия информации на английском языке.
|
||||
22
Russian/Grades/Senior.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Senior C++
|
||||
|
||||
## Кто это?
|
||||
|
||||
Это разработчик, который понимает не только технический, но и бизнес контекст и способен создать дизайн и решение для компонента/приложения/системы с их учётом. Помимо этого, помогает другим членам команды развиваться и следит за техническими тенденциями мира разработки.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
|
||||
- Способен переводить задачи с языка бизнеса на язык разработки и декомпозировать задачи
|
||||
- Способен вести диалог с бизнесом и объяснять технические детали и сложности людям вне команды
|
||||
- Способен не только принять решение о дизайне, но и создать архитектуру компонента/приложения
|
||||
- Понимание и использование архитектурных принципов
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
|
||||
- Высокий навык коммуникации
|
||||
- Способен при необходимости самостоятельно собрать требования
|
||||
- Помогает развивать членов команды
|
||||
|
||||
## Рекомендации и советы
|
||||
|
||||
В зависимости от специфики компании и от ваших желаний путь дальнейшего развития лежит либо в освоении новых технологий и технических навыков, требующихся в выбранной вами области знаний (например, специальные разделы математики, физика и т.д. - путь технического эксперта), либо в область управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely. 🙂
|
||||
BIN
Russian/Grades/Source/GradeTable.PNG
Normal file
|
After Width: | Height: | Size: 68 KiB |
199
Russian/LICENSE.md
Normal file
@@ -0,0 +1,199 @@
|
||||
# Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
[English](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) || [Русский](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.ru)
|
||||
|
||||
---
|
||||
|
||||
## Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
|
||||
|
||||
---
|
||||
|
||||
## Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
|
||||
|
||||
* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors).
|
||||
|
||||
* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees).
|
||||
|
||||
---
|
||||
|
||||
## Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
||||
|
||||
---
|
||||
|
||||
## Section 1 – Definitions.
|
||||
|
||||
a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
|
||||
|
||||
b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. __BY-NC-SA Compatible License__ means a license listed at [creativecommons.org/compatiblelicenses](http://creativecommons.org/compatiblelicenses), approved by Creative Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
|
||||
|
||||
e. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
|
||||
|
||||
f. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
|
||||
|
||||
g. __License Elements__ means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike.
|
||||
|
||||
h. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
||||
|
||||
i. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License.
|
||||
|
||||
i. __NonCommercial__ means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
|
||||
|
||||
j. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
|
||||
|
||||
k. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
|
||||
|
||||
l. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
|
||||
|
||||
---
|
||||
|
||||
## Section 2 – Scope.
|
||||
|
||||
a. ___License grant.___
|
||||
|
||||
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
|
||||
|
||||
B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.
|
||||
|
||||
2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
|
||||
|
||||
3. __Term.__ The term of this Public License is specified in Section 6(a).
|
||||
|
||||
4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
|
||||
|
||||
5. __Downstream recipients.__
|
||||
|
||||
A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
|
||||
|
||||
B. __Additional offer from the Licensor – Adapted Material.__ Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.
|
||||
|
||||
C. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
|
||||
|
||||
6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. ___Other rights.___
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
|
||||
|
||||
---
|
||||
|
||||
## Section 3 – License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
|
||||
|
||||
a. ___Attribution.___
|
||||
|
||||
1. If You Share the Licensed Material (including in modified form), You must:
|
||||
|
||||
A. retain the following if it is supplied by the Licensor with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
|
||||
|
||||
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
|
||||
|
||||
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
|
||||
|
||||
b. ___ShareAlike.___
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
|
||||
|
||||
---
|
||||
|
||||
## Section 4 – Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;
|
||||
|
||||
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
|
||||
|
||||
---
|
||||
|
||||
## Section 5 – Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__
|
||||
|
||||
b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
|
||||
|
||||
---
|
||||
|
||||
## Section 6 – Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
|
||||
|
||||
---
|
||||
|
||||
## Section 7 – Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
|
||||
|
||||
---
|
||||
|
||||
## Section 8 – Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
|
||||
|
||||
> Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
|
||||
>
|
||||
> Creative Commons may be contacted at creativecommons.org
|
||||
41
Russian/Mythbusters.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Легенды и мифы про C++
|
||||
|
||||
## Язык C++ умер, на нем невозможно что-либо писать
|
||||
|
||||
Живее всех живых.
|
||||
|
||||
На сегодняшний день находится в топах различных рейтингов языков программирования и даже набирает очки популярности, например: индекс [Tiobe](https://www.tiobe.com/tiobe-index/). Дурную славу "мертвого языка" он сыскал в нулевые годы, когда язык временно впал в анабиоз, а комитет стандартизации растворился во тьме. Но начиная со стандарта C++11, язык пережил ренессанс. Сегодня он активно продолжает пополняться и обновляться новым функционалом каждые три года. Многие проблемы, о которых заявляют свидетели "мертвого" C++ уже решены, но в силу того, что такие специалисты перестали вести разработку на C++, либо по верхам изучили его в ВУЗе/на курсах (наслушались баек от свидетелей "смерти"), то они продолжают порождать и сеять различные "мифы и легенды" о том, насколько C++ ужасен и страшен.
|
||||
|
||||
## "Настоящие программисты" начинают изучать C++ сразу под Linux/Vim/gcc
|
||||
|
||||
Если вышеперечисленная связка инструментов выглядит для вас малознакомой, то на данной стадии рекомендуем вам сконцентрироваться только на изучении основ языка C++. Мы также рекомендуем начать писать свои первые приложения в Microsoft Visual Studio IDE (подробнее см. [PreJunior Books](Books/PreJunior.md)).
|
||||
|
||||
Пойти по наиболее трудному пути выглядит пафосно, но есть высокая доля вероятности, что тот объем информации, который необходимо изучить для сборки "Hello World" в связке Linux + Vim + gcc , будет слишком большим. Это чревато быстрой демотивацией и разочарованием в программировании. Старайтесь идти по пути: от простого к сложному. В спортзале новички не пытаются поднять самую тяжелую штангу на первом занятии, т.к. знают, чем это может быть чревато. Это же правило работает и при обучении. Когда более-менее освоитесь с языком, то можете попробовать поиграться с написанием кода в любом дистрибутиве Linux. Но это уже совершенно другая история...
|
||||
|
||||
## Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc.
|
||||
|
||||
Нет, нет и ещё раз нет!
|
||||
|
||||
Такое утверждение до сих пор живо из-за двух распространенных ситуаций: так учили в ВУЗе (Assembler -> C -> C++), либо от "старой гвардии" плюсовиков, т.к. они в своей практике проходили похожий путь. Современный C++ не требует подобного рода мучений. Этот язык автономен и может быть изучен без какого-либо бекграунда. Намного вероятнее, что при изучении в режиме "Си -> С++" у вас возникнет путаница в голове, а также устойчивое желание писать на C++ в стиле "Си с классами".
|
||||
|
||||
## Изучайте C++ по книге Страуструпа
|
||||
|
||||
Крайне вредный тезис, который пришел от "старогвардейцев", либо от тех, кто родился с клавиатурой в руках.
|
||||
|
||||
Скорее всего этот совет произносят те, кто уже имел большой опыт разработки на других языках (C, Fortran, Delphi, и т.д.) и переходил с них на C++. Книга Страуструпа написана больше как справочник, потому и работать с ней требуется соответсвенно, но для этого уже надо хоть немного разбираться в языке. Лучше загляните в раздел [Книги](Books.md), там вы найдете книги для любого уровня владения языком.
|
||||
|
||||
## Изучайте C++ только по стандарту
|
||||
|
||||
Тоже крайне снобисткий тезис.
|
||||
|
||||
Во-первых, современный стандарт C++ уже превысил размер в 2000 страниц. Во-вторых, доступ к актуальной версии стандарта платный. И, в-третьих, стандарт написан не самым "дружелюбным" способом. Тем кто изучил язык по его стандарту можно пожать руку, но мы не рекомендуем так издеваться над собой. Опять же, лучше загляните в раздел [Книги](Books.md), там вы найдете книги для любого уровня владения языком.
|
||||
|
||||
## Undefined Behavior преследует разработчика повсюду
|
||||
|
||||
Скорее нет, чем да.
|
||||
|
||||
Современный C++, а также инструментарий, возникший вокруг языка, позволяют избежать львиную долю проблем, связанных с неопределенным поведением. Здесь мы можем дать довольно простой совет: если сомневаетесь, что делает та или иная конструкция, то почитайте о ней на [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) или иных профильных порталах. Если после прочтения конструкция остается непонятной, то попробуйте переписать блок кода альтернативным и более простым способом, чтобы избежать неопредленного поведения. В простоте кроется великая сила!
|
||||
|
||||
## Нужно вручную управлять памятью, в языке нет сборщика мусора
|
||||
|
||||
Это байка также идет от "старогвардейцев", которые перестали писать на языке до появления стандарта C++11, либо от тех, кто поверхностно его изучал в ВУЗе без погружения в последние стандарты. Современный C++ имеет в составе своей библиотеки набор примитивов, который отвечает за автоматическое выделение и освобождение памяти. Контроль за выделением памяти отошел на второй план. Во многих компаниях и командах вы также встретите правило: "не используйте сырых указателей". Опять же, не пренебрегайте современным инструментарием и санитайзерами. Они способны детектировать потенциальную утечку памяти ещё на этапе исходного кода.
|
||||
0
Russian/Notes/HardSkills/General/ComputerScience.md
Normal file
0
Russian/Notes/HardSkills/LanguageTools/Compiler.md
Normal file
0
Russian/Notes/HardSkills/OS/Memory.md
Normal file
5
Russian/Notes/HardSkills/ReadMe.md
Normal file
@@ -0,0 +1,5 @@
|
||||
Структура заметки про хард скилл:
|
||||
1. Определение
|
||||
2. Зачем оно надо? И что вообще даёт?
|
||||
3. Примеры (опционально)
|
||||
4. Полезные ссылки
|
||||
0
Russian/Notes/SoftSkills/LearningSkills.md
Normal file
5
Russian/Notes/SoftSkills/ReadMe.md
Normal file
@@ -0,0 +1,5 @@
|
||||
Структура заметки про софт скилл:
|
||||
1. Определение
|
||||
2. Зачем оно надо? И что вообще даёт?
|
||||
3. Как развивать (накидать идей)?
|
||||
4. Полезные ссылки
|
||||
11
Russian/Rationale.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Зачем и почему появилась данная роадмапа
|
||||
|
||||
C++ активно используется во многих коммерческих проектах. Сегодня этот язык претерпел большие изменения. Это сделало C++ гораздо более удобным для повседневного использования. Но вокруг языка всё ещё витает много домыслов, мифов и страхов. Это отпугивает большое количество желающих. Наша цель - помочь новичкам развеять миф о сложности C++ и помочь сориентироваться в его изучении.
|
||||
|
||||
Рынок испытывает недостаток в специалистах, способных писать на C++. Исходя из нашего опыта, складывается впечатление, что многие практикующие разработчики выучили язык "вопреки": методом проб и ошибок, и настойчивого самостоятельного изучения. Нечасто можно встретить человека, который освоил C++ исключительно по программам обучения. Большая доля учебных заведений или курсов не могут предложить качественный материал: либо предлагается курс по "верхам", либо курс отстает от актуального состояния на несколько лет. А этого недостаточно, чтобы начать успешно выполнять задачи в коммерческих проектах.
|
||||
|
||||
По-прежнему порог входа в разработку на языке C++ выше по сравнению с другими языками. Большая часть имеющихся ресурсов заточена под практикующих разработчиков. Это и подогревает мифы об исключительной сложности языка. На деле же не хватает актуальных материалов для новичков.
|
||||
|
||||
Данная дорожная карта пытается заполнить образовавшуюся пустоту. Идея создания возникла после большого количества интервью с неопытными кандидатами, на позицию разработчика C++. Их объединяли общие черты: пробелы в базовых знаниях и непонимание каким образом изучать язык, откуда черпать знания.
|
||||
|
||||
Также карта может пригодиться и тем, кто уже практикует какое-то время использование C++ в личных и рабочих проектах. Она может помочь вам понять каких знаний не хватает для того, чтобы углубить уровень владения языком, а также стать высококлассным специалистом.
|
||||
25
Russian/SelfIdentification.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# А нужен ли вам C++?
|
||||
|
||||
Первое, о чем действительно стоит подумать: для чего требуется изучать C++?
|
||||
|
||||
Язык имеет конкретные ниши применения. Прежде чем начать изучать его, попробуйте поискать и погрузиться в сферы применения. Найдите ту, которая заинтересует вас. Внимательно присмотреть к нишам, о которых вы имеете общее представление. Возможно ваши ожидания окажутся иными, по сравнению с реальным положением вещей. Вот некоторый набор примеров, почему это стоит сделать "на берегу":
|
||||
|
||||
- Некоторые сферы разработки выглядят иначе, в отличие от их романтизированного образа. В качестве примера возьмем разработку игр. Данное направление имеет много темных сторон: кранчи (переработки в режиме "живем в офисе следующие полгода"), отсутствие внятного менеджмента, работа в стол и т.д.
|
||||
|
||||
- В специфичных сферах может быть популярен иной инструментарий. К примеру, в машинном обучении наиболее распространен язык Python и специализированные библиотеки к нему.
|
||||
|
||||
|
||||
# Я уже знаю C/C#/Java/Python и т.д. Могу ли я сразу начать работать на C++?
|
||||
|
||||
И да, и нет. :)
|
||||
|
||||
Вам помогут фундаментальные знания, такие как: понимание процедурной/ООП/иных парадигм или других знаний общего характера. Но полностью на них полагаться не стоит. Наиболее распространенный случай в котором часто оказываются новички: попытка писать на C++ в парадигмах другого языка. Пример подобной ловушки у разработчиков на Си: писать на C++ в процедурном стиле или "Си с классами".
|
||||
|
||||
C++ очень богат на идеи и подходы написания кода. Потому рекомендуется начать языка изучение с чистой головой. Подойдите к изучению языка основательно и разберитесь в его идеях. Это поможет вам эффективно использовать язык в рабочих задачах. Знание других языков поможет сравнивать их друг с другом и обнаруживать сильные/слабые стороны.
|
||||
|
||||
|
||||
# Как учиться?
|
||||
|
||||
Главное, что стоит усвоить для себя - только вы отвечаете за свое развитие. В ваших интересах стать профессионалом. Конечно вы найдете вокруг полно энтузиастов, которые с радостью помогут вам советом, но никто не придумает за вас конкретные задачи или программу обучения. Лучший друг в этом деле - вы, Google и учебники.
|
||||
|
||||
Учитесь учиться и искать ответы на возникающие вопросы. Ваше будущее в IT исключительно в ваших руках и упорстве. Эта сфера награждает тех, кто направленно идет к своей цели. Удачи!
|
||||
169
Russian/Tooling.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# Инструментарий для работы с языком
|
||||
|
||||
Начинающие разработчики имеют малый кругозор по доступному инструментарию, который облегчает работу с кодом, а также повышает эффективность и оберегает от многих ошибок. Все эти инструменты не серебряная пуля от многих бед языка, но они значительно сглаживают имеющиеся углы. Ниже представлен список распространенных и популярных инструментов, признанных разработчиками по всему миру. Данный список - лишь малая часть доступного инструментария. Со временем вы начнете лучше ориентироваться в них и найдете для себя что-то новое.
|
||||
|
||||
## Текстовые редакторы
|
||||
|
||||
* **Visual Studio Code**
|
||||
|
||||
Сайт: https://code.visualstudio.com/
|
||||
|
||||
Стоимость: Community Edition - бесплатно
|
||||
|
||||
Мощный и эффективный редактор текстовых файлов и исходного кода. Имеет богатую библиотеку расширений, которая позволит настроить его под себя. Также возможно настроить его под работу с исходным кодом: компиляция, запуск и отладка. Обладает мощным поисковым движком, по файлам и папкам, что повышает эффективность поиска, чтения и работы с большими проектами.
|
||||
|
||||
|
||||
* **Notepad++**
|
||||
|
||||
Сайт: https://notepad-plus-plus.org/
|
||||
|
||||
Стоимость: Community Edition - бесплатно
|
||||
|
||||
Легковесный редактор текстовых файлов и исходного кода. Поддерживает синтаксис и подсветку распространенных языков программирования. По сравнению с Visual Studio Code его удобно использовать для быстрого открытия и просмотра файлов. За счет своей легковесности комфортно работать с большим количеством текстовых файлов.
|
||||
|
||||
|
||||
## IDE (Integrated Development Environment)
|
||||
|
||||
* **Microsoft Visual Studio IDE**
|
||||
|
||||
Сайт: https://visualstudio.microsoft.com
|
||||
|
||||
Стоимость: Community Edition - бесплатно
|
||||
|
||||
Интегрированная среда разработки от компании Microsoft. Предоставляет весь необходимый набор инструментов (редактор кода, компилятор, отладчик, профилировщик и т.д.) из коробки. Поддерживает разработку на различных языках программирования, а также кроссплатформенную разработку. Отличное начало для новичков, т.к. современный интерфейс студии максимально дружелюбен, и практически не требует какой-либо "доработки напильником" из коробки.
|
||||
|
||||
|
||||
* **Qt Creator IDE**
|
||||
|
||||
Сайт: https://www.qt.io/product/development-tools
|
||||
|
||||
Стоимость: бесплатно в open source проектах (более подробно: [Qt Open Source](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5))
|
||||
|
||||
Изначально Qt Creator позиционировался как IDE для разработки графических интерфейсов приложений, разрабатываемых на языке C++. Но со временем фреймворк оброс огромными возможностями. В итоге фреймворк перерос в полноценную экосистему для разработки кроссплатформенных приложений. Он предоставляет большую библиотеку примитивов для различных потребностей: работа с сетью, графический интерфейс, работа с базами данных, работа с популярными форматами: изображения, текстовые файлы и т.д. Современный Qt Creator выступает в роли конкурента для Visual Studio, но в основном он снискал славу в среде разработчиков, которые разрабатывают приложения под различные дистрибутивы Linux.
|
||||
|
||||
|
||||
* **Eclipse IDE**
|
||||
|
||||
Сайт: https://www.eclipse.org/downloads/packages
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Довольно мощная мультиплатформенная среда разработки, но при этом тяжеловесная. Ключевая особенность Eclipse - модульность. Философия Eclipse состоит в том, что любой разработчик может доработать среду разработки под себя посредством подключения дополнительных расширений. Взята за основу некоторыми разработчиками компиляторов под специализированные ОС или микроконтроллеры (например: ОС реального времени QNX).
|
||||
|
||||
|
||||
* **JetBrains Clion IDE**
|
||||
|
||||
Сайт: https://www.jetbrains.com/clion
|
||||
|
||||
Стоимость: бесплатная для учебных заведений, в ином случае - платная
|
||||
|
||||
Мощная мультиплатформенная IDE от российской компании JetBrains. Как и другие IDE, она содержит полный набор инструментов для комфортной разработки программного обеспечения. Удобен для кроссплатформенной разработки как на Cи, так и на C++.
|
||||
|
||||
|
||||
## Расширения
|
||||
|
||||
* **JetBrains ReSharper C++**
|
||||
|
||||
Сайт: https://www.jetbrains.com/resharper-cpp
|
||||
|
||||
Стоимость: бесплатная для учебных заведений, в ином случае - платная
|
||||
|
||||
Расширение для MS Visual Studio. Добавляет дополнительные возможности для работы с исходным кодом: расширенная подсветка кода и подсказки по нему, построение диаграмм зависимостей между проектами, рекомендации по типовым ошибкам в коде и по его улучшению, расширенная информация во время отладки, продвинутый поиск, навигация по проектам и т.д. Является конкурентом Visual Assist.
|
||||
|
||||
* **Visual Assist**
|
||||
|
||||
Сайт: https://www.wholetomato.com
|
||||
|
||||
Расширение для MS Visual Studio. Добавляет дополнительные возможности для работы с исходным кодом: расширенная подсветка кода и подсказки по нему, расширенная информация во время отладки или при написании кода, продвинутый поиск, навигация по проектам и т.д. Является конкурентом JetBrains ReSharper.
|
||||
|
||||
|
||||
* **Incredibuild**
|
||||
|
||||
Сайт: https://www.incredibuild.com
|
||||
|
||||
Стоимость: платно, актуальная цена указана на сайте
|
||||
|
||||
Приложение/расширение для распределенной сборки проектов. Объединяет все рабочие станции разработчиков в единую сеть, за счет чего сборка исходного кода может производиться одновременно на десятках машин. Это позволяет ускорить скорость сборки больших проектов в несколько раз.
|
||||
|
||||
|
||||
## Пакетные менеджеры и системы сборки
|
||||
|
||||
* **Cmake**
|
||||
|
||||
Сайт: https://cmake.org
|
||||
|
||||
Кроссплатформенная система автоматизации сборки приложения из исходного кода. Генерирует необходимые артефакты для последующей сборки приложения на целевой платформе. На текущий момент считается "стандартным" инструментом для сборки различных библиотек, в случае поставки в качестве исходного кода.
|
||||
|
||||
* **Conan**
|
||||
|
||||
Сайт: https://conan.io
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Пакетный менеджер, а также менеджер зависимостей для организации C++ библиотек и фреймворков. Поддерживает работу с различными платформами: Windows, Linux, etc. Поддерживает интеграцию с CMake, Visual Studio и т.д.
|
||||
|
||||
|
||||
* **Ninja**
|
||||
|
||||
Сайт: https://ninja-build.org
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Менеджер сборки проектов для приложений, написанных на Си и C++. Основное преимуществ о котором заявляет данный менеджер: быстрая сборка проектов. Поддерживает кроссплатформенную разработку, поддерживает все популярные компиляторы.
|
||||
|
||||
|
||||
## Анализаторы кода
|
||||
|
||||
* **PVS Studio**
|
||||
|
||||
Сайт: https://pvs-studio.com
|
||||
|
||||
Стоимость: триал на 30 дней, далее платно
|
||||
|
||||
Кроссплатформенный (Windows, Linux, MacOS) статический анализатор кода от российской компании PVS-Studio. Основная задача анализатора - провести анализ исходников на предмет различных ошибок, которые не обнаруживаются компиляторами или на этапе ревью кода. Благодаря ему можно минимизировать ошибки, связанные с синтаксическими конструкциями языка и их подводными камнями.
|
||||
|
||||
|
||||
* **Cpp Check**
|
||||
|
||||
Сайт: https://cppcheck.sourceforge.io
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Бесплатный анализатор кода. Поможет отловить распространенные ошибки при помощи анализа исходного кода, которые могут быть упущены компилятором или в процессе ревью кода. Кроссплатформенный, поддерживает популярные дистрибутивы Linux, работает под Windows.
|
||||
|
||||
|
||||
* **Valgrind**
|
||||
|
||||
Сайт: https://www.valgrind.org
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Набор инструментов, который поможет исследовать разнообразные проблемы во время работы приложения: утечка памяти, профилирование тормозов и т.д. Заточен для работы с различными дистрибутивами Linux.
|
||||
|
||||
## Git клиенты
|
||||
|
||||
* **SmartGit**
|
||||
|
||||
Сайт: https://www.syntevo.com/smartgit/
|
||||
|
||||
Стоимость: бесплатная для личных или open source проектов, в ином случае - платная
|
||||
|
||||
Полноценный кроссплатформенный комбайн для работы с git репозиториями. Из коробки предоставляет следующие возможности: прием/отправка изменений в репозитории, просмотр истории изменений, текстовый редактор для разрешения конфликтов и т.д. Поддерживает интеграцию со всеми популярными репозиториями: GitHub, BitBucket, GitLab и т.д.
|
||||
|
||||
* **Atlassian SourceTree**
|
||||
|
||||
Сайт: https://www.sourcetreeapp.com/
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Отличная бесплатная альтернатива для работы с git через графический интерфейс. Не уступает по функционалу SmartGit за исключением отсутствия собственного редактора разрешения конфликтов. Но это легко исправляется интеграцией Visual Code или любого другого редактора, который умеет сравнивать файлы между собой. Во всем остальном полностью дублирует функциональность SmartGit: кроссплатформенный, поддерживает интеграцию с публичными репозиториями: GitHub, BitBucket, GitLab и т.д.
|
||||
|
||||
|
||||
* **Git Kraken**
|
||||
|
||||
Сайт: https://www.gitkraken.com/
|
||||
|
||||
Стоимость: бесплатная для личных или open source проектов, в ином случае - платная
|
||||
|
||||
Кроссплатформенный и высокоэффективный клиент для Windows, Linux, MacOS. Поддерживает интеграцию с GitHub, Bitbucket и Gitlab, а также весь необходимый функционал для повседневной работы: изучение истории изменений, прием/отправка изменений, переключение между ветками, встроенный редактор разрешения конфликтов и т.д.
|
||||
|
||||