mirror of
https://github.com/salmer/CppDeveloperRoadmap.git
synced 2025-12-16 20:17:07 +03:00
Fixed typos and refactoring for Russian
This commit is contained in:
@@ -4,21 +4,21 @@
|
||||
|
||||
- [Роберт Мартин - Идеальный программист](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++
|
||||
|
||||
@@ -32,21 +32,21 @@
|
||||
|
||||
- [Александреску Андрей, Саттер Герб - Стандарты программирования на С++](https://www.ozon.ru/product/standarty-programmirovaniya-na-s-2381848/?sh=SUs05K52)
|
||||
|
||||
Небольшая книга, которая описывает общепринятые практики и правила написания кода в коммерческих проектах. Данная книга - это агрегация правил из многих компаний. Данная работа стала прообразом сайта: [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). Тем не менее рекомендуем прочитать данную книгу, т.к. она довольно короткая и даст вам общее представление, какие правила написания кода распространены во многих проектах.
|
||||
Небольшая книга, которая описывает общепринятые практики и правила написания кода в коммерческих проектах. Данная книга - это агрегация правил из различных компаний. Данная работа стала прообразом сайта: [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), но в данной книге также имеется масса практических заданий, которые помогут вам лучше усвоить идеи паттернов и в каких случаях их применять.
|
||||
Отличная книга для начала изучения паттернов проектирования. В качестве неплохой альтернативы можем также предложить сайт [refactoring.guru](https://refactoring.guru/design-patterns), но в данной книге также имеется масса практических заданий, которые помогут вам лучше усвоить идеи паттернов, в каких случаях их применять.
|
||||
|
||||
- [Глейзер Джошуа, Мадхав Санджай - Многопользовательские игры. Разработка сетевых приложений](https://www.ozon.ru/product/mnogopolzovatelskie-igry-razrabotka-setevyh-prilozheniy-137764980/?sh=rocQznEP)
|
||||
|
||||
Данная книга станет отличным практическим пособием по работе с сетями на примере разработки многопользовательских игр. К концу книги вы получите достаточно сведений, чтобы написать собственное сетевое приложение. Помимо того, что вы освоите базовую теорию по компьютерным сетям, вы также овладеете навыками работы с ней на языке C++. Все примеры в книге написаны именно на нем, с использованием стандарта C++11/14.
|
||||
Данная книга станет практическим пособием по работе с сетями на примере разработки многопользовательских игр. К концу книги вы получите достаточно сведений, чтобы написать собственное сетевое приложение. Помимо того, что вы освоите базовую теорию по компьютерным сетям, вы также овладеете навыками работы с ней на языке C++. Все примеры в книге написаны именно на нем, с использованием стандарта C++11/14.
|
||||
|
||||
- [Андрей Созыкин - Компьютерные сети. Базовый курс](https://www.youtube.com/playlist?list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1)
|
||||
|
||||
Прекрасный курс видеолекций по компьютерным сетям. За основу взяты книги Таненбаума и других классиков по теме. В большинстве проектов этих знаний будет достаточно, чтобы не совершать очевидных ошибок при работе с сетями. Для более глубокого погружения в тему вы можете ознакомиться с книгами Таненбаума или других авторов, или же посмотреть другие курсы на канале Андрея.
|
||||
Прекрасный курс видеолекций по компьютерным сетям. За основу взяты книги Таненбаума и других классиков по теме. В большинстве проектов этих знаний будет достаточно, чтобы не совершать очевидных ошибок при работе с сетями.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -12,41 +12,41 @@
|
||||
|
||||
- [Герб Саттер - Решение сложных задач на С++](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/shablony-c-spravochnik-razrabotchika-145861864)
|
||||
|
||||
Наиболее свежая и актуальная работа по использованию шаблонов в C++. Это фундаментальная работа, которая описывает наиболее актуальные механизмы шаблонов, внедренные в новых стандартах, вплоть до C++17. Если вам необходимо писать параметризуемый код, то этот справочник станет мощной опорой в написании шаблонного кода. Вы познакомитесь, как с азами этого аспекта метапрограммирования, так различными нюансами того или иного приема.
|
||||
Наиболее свежая и актуальная работа по использованию шаблонов в C++. Это фундаментальная работа, которая описывает актуальные механизмы применения шаблонов, внедренные в новых стандартах, вплоть до C++17. Если вам необходимо писать параметризуемый код, то этот справочник станет мощной опорой. Вы познакомитесь, как с азами метапрограммирования, так и с различными нюансами того или иного приема.
|
||||
|
||||
|
||||
## Оптимизация приложений
|
||||
|
||||
- [Курт Гантерог - Оптимизация программ на C++](https://www.ozon.ru/product/optimizatsiya-programm-na-c-proverennye-metody-povysheniya-proizvoditelnosti-140145932/?sh=OlHzzZHG)
|
||||
|
||||
Хороший сборник советов и рекомендаций по улучшению производительности приложений на языке C++. Некоторые советы основаны на идиомах и конструкциях языка, описанных Гербом Саттером в предложенных книгах выше или Скоттом Майерсом. Потому рекомендуется её прочтение после знакомства с предыдущими книгами.
|
||||
Хороший сборник советов и рекомендаций по улучшению производительности приложений на языке C++. Некоторые советы основаны на идиомах и конструкциях языка, описанные Гербом Саттером или Скоттом Майерсом. Потому рекомендуется её прочтение после знакомства с предыдущими книгами.
|
||||
|
||||
- [Агнер Фог - Оптимизация С++ приложений](https://agner.org/optimize/optimizing_cpp.pdf) или [Набор руководств по оптимизации приложений](https://agner.org/optimize)
|
||||
|
||||
Практические руководства, которые дают исчерпывающую информацию о потенциальных возможностях оптимизации приложений, разработанных на языке C++, или связанные с взаимодействием с центральным процессором, памятью и т.д.
|
||||
Практические руководства, которые дают исчерпывающую информацию о потенциальных возможностях оптимизации приложений, разработанных на 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#, но это не должно вызвать сложностей при их чтении, т.к. используется минималистичный набор инструкций языка.
|
||||
Одна из достойнейших книг, которая доступно объясняет принципы SOLID. Примеры написаны на языке C#, но это не должно вызвать сложностей при их чтении, т.к. используется минималистичный набор инструкций языка.
|
||||
|
||||
- [Роберт Мартин - Чистая архитектура. Искусство разработки программного обеспечения](https://www.ozon.ru/product/chistaya-arhitektura-iskusstvo-razrabotki-programmnogo-obespecheniya-martin-robert-martin-robert-211433166)
|
||||
|
||||
Ещё одна работа дядюшки Боба. На этот раз о том, что прежде чем бросаться писать код, стоит подумать об архитектуре приложения/компонента, каким образом принимать те или иные архитектурные решения, на чем заострить свое внимание во время продумывания дизайна решения. Эта книга станет хорошим началом для тех, кто интересуется архитектурными задачами в разработке ПО, но не знает с чего начать. Знания из этой книги пригодятся подавляющему большинству инженеров, чтобы не допускать очевидные ошибки во время проектирования дизайна ПО к своим задачам.
|
||||
Ещё одна работа дядюшки Боба. На этот раз она рассказвает о том, каким образом подойти к разработки архитектуры приложения/компонента, каким образом принимать те или иные архитектурные решения, на чем заострить свое внимание. Книга станет хорошим началом для тех, кто интересуется архитектурными задачами в разработке ПО, но не знает с чего начать. Знания из этой книги пригодятся подавляющему большинству инженеров, чтобы не допускать очевидные ошибки во время проектирования дизайна ПО.
|
||||
|
||||
- [Надежда Поликарпова, Анатолий Шалыто - Автоматное программирование](https://www.ozon.ru/product/avtomatnoe-programmirovanie-28260411/?sh=KMISCILZ)
|
||||
|
||||
Краткое практическое пособие о том, как подходить к написанию программ посредством конечных автоматов. Наверно более простого и элегантного описания теории конечных автоматов и её практического применения сложно будет отыскать. Рекомендуем вам поизучать пару коммерческих работ, выполненных в описанной парадигме. Ссылки к исходному коду вы найдете в конце книги.
|
||||
Краткое практическое пособие о том, как подходить к написанию программ посредством конечных автоматов. Наверно более простого и элегантного описания теории конечных автоматов и её практического применения будет сложно отыскать. Рекомендуем оизучить пару коммерческих работ, выполненных в описанной парадигме. Ссылки к исходному коду вы найдете в конце книги.
|
||||
|
||||
|
||||
## Операционные системы
|
||||
@@ -57,14 +57,14 @@
|
||||
|
||||
- [Марк Руссинович - Внутреннее устройство Windows](https://www.ozon.ru/product/vnutrennee-ustroystvo-windows-russinovich-mark-solomon-devid-russinovich-mark-solomon-devid-211433055)
|
||||
|
||||
Данная книга обсуждает те же вопросы, что и предыдущая книга, но акцентируется исключительно на ОС Microsoft Windows. Она детально останавливается на каждом аспекте устройства ОС на с проекцией на Windows, а также рассказывает о различных нюансах и аспектах, которые могут быть официально не задекларированы разработчиками. Полезная книга для тех, кто ведет разработку низкоуровневых приложений, которым требуется интенсивное взаимодействие с системными библиотеками ОС.
|
||||
Данная книга обсуждает те же вопросы, что и предыдущая, но акцентируется исключительно на ОС Microsoft Windows. Она детально останавливается на каждом аспекте устройства ОС, но с проекцией на Windows, а также рассказывает о различных нюансах и аспектах, которые могут быть официально не задекларированы разработчиками. Полезная книга для тех, кто ведет разработку низкоуровневых приложений, которым требуется интенсивное взаимодействие с системными библиотеками ОС.
|
||||
|
||||
- [Кристофер Негус - Библия Linux](https://www.ozon.ru/product/bibliya-linux-10-e-izdanie-313214724)
|
||||
|
||||
Данная книга может стать закономерным продолжением после работы Таненбаума. Она детально останавливается на каждом аспекте OS Linux. Все примеры разобраны для популярных дистрибутивов: Red Hat, Ubuntu и Fedorа. Подойдет для разработчиков, которые используют данную ОС в повседневной деятельности.
|
||||
|
||||
- [Ulrich Drepper - What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)
|
||||
|
||||
|
||||
Хорошая обзорная статья, дающая представление о том, как устроена память компьютера и зачем она так устроена. Даёт как высокоуровневое представление, так и набрасывает низкоуровневых деталей, если есть желание в них углубляться.
|
||||
|
||||
|
||||
@@ -72,11 +72,11 @@
|
||||
|
||||
- [Эндрю Таненбаум - Компьютерные сети](https://www.ozon.ru/product/kompyuternye-seti-tanenbaum-endryu-uezeroll-devid-tanenbaum-endryu-uezeroll-devid-211432815)
|
||||
|
||||
Классическая книга по теоретическим основам компьютерных сетей. Содержит в себе подробное описание, начиная с физического уровня и заканчивая протоколами передачи данных. Будет крайне полезна для тех разработчиков, которые плотно занимаются проектами, взаимодействующие с сетями. В ином случае вам будет достаточно просмотреть видеокурс Андрея Созыкина, представленный в разделе [Junior](Junior.md). Его курс базируется на данной книге, но также содержит в себе массу дополнений.
|
||||
Классическая книга по теоретическим основам компьютерных сетей. Содержит в себе подробное описание, начиная с физического уровня и заканчивая протоколами передачи данных. Будет полезна для тех разработчиков, которые плотно занимаются проектами, взаимодействующие с сетями. В ином случае вам будет достаточно просмотреть видеокурс Андрея Созыкина, представленный в разделе [Junior](Junior.md). Его курс базируется на данной книге, но также содержит в себе массу дополнений.
|
||||
|
||||
- [Олифер Виктор - Компьютерные сети. Принципы, технологии, протоколы](https://www.ozon.ru/product/kompyuternye-seti-printsipy-tehnologii-protokoly-olifer-viktor-grigorevich-olifer-211432410)
|
||||
|
||||
Ещё одна замечательная книга по основам компьютерных сетей. В каких-то моментах подача информации может показаться чуть сложнее, по сравнению с работой Таненбаума. Потому рекомендуем выбрать ту книгу, повествование которой больше подходит именно для вас.
|
||||
Ещё одна замечательная книга по основам компьютерных сетей. В каких-то моментах подача информации может показаться сложнее, по сравнению с работой Таненбаума. Потому рекомендуем выбрать ту книгу, повествование которой больше подходит именно для вас.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# Книги и материалы
|
||||
|
||||
В данных статьях собраны книги, которые помогут вам сориентироваться, и задать свой вектор обучения. Все книги поделены на несколько разделов, которые касаются различных навыков. Рекомендуем вам обзорно посмотреть каждый раздел, согласно желаемому грейду, и подобрать набор литературы под свои нужды. В данных разделах собраны книги для получения общих знаний по C++, которые пригодятся в большинстве коммерческих проектов. Представленная библиотека не концентрируется на книгах, связанных с какой-либо предметной областью или узкоспециализированными направлениями. Идея этого проекта состоит в том, чтобы помочь людям получить общие знания о C++ и разработке программного обеспечения. Если вы ищете специализированные материалы, то рекомендуем обратиться к экспертам, интересующей вас области.
|
||||
В данных статьях собраны книги, которые помогут вам сориентироваться, и задать свой вектор обучения. Все книги поделены на несколько разделов, которые касаются различных навыков. Рекомендуем обзорно посмотреть каждый раздел, и подобрать набор литературы под свои нужды. В данных разделах собраны книги для получения общих знаний по C++, которые пригодятся в большинстве коммерческих проектов.
|
||||
|
||||
Представленная библиотека не концентрируется на книгах, не связанных с какой-либо предметной областью или узкоспециализированными направлениями. Идея этого проекта состоит в том, чтобы помочь людям получить общие знания о C++ и разработке программного обеспечения. Если вы ищете специализированные материалы, то рекомендуем обратиться к экспертам, в интересующей вас области.
|
||||
|
||||
- [PreJunior](PreJunior.md)
|
||||
- [Junior](Junior.md)
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
- [Фаулер Чед - Программист-фанатик](https://www.ozon.ru/product/programmist-fanatik-32218784)
|
||||
|
||||
Эту книгу можно считать признанной классикой в мире разработки, в которой Чед Фаулер пытается поделиться своим видением: как стать высококлассным, востребованным специалистом и оставаться на гребне волны.
|
||||
Эту книгу можно считать признанной классикой в мире разработки, в которой Чед Фаулер пытается поделиться своим видением: как стать высококлассным, востребованным специалистом, и оставаться на гребне волны.
|
||||
|
||||
## Computer Science
|
||||
|
||||
- [Фило Владстон Феррейра - Теоретический минимум по Computer Science](https://www.ozon.ru/product/teoreticheskiy-minimum-po-computer-science-vse-chto-nuzhno-programmistu-i-razrabotchiku-144946027)
|
||||
|
||||
Обзорная книга, которая рассказывает о различных направлениях Computer Science: математический аппарат, обзор алгоритмом, базы данных, устройство компьютера и т.д. Она может стать хорошей отправной точкой, чтобы подыскать интересующие направления и расставить приоритеты для себя.
|
||||
Обзорная книга, которая рассказывает о различных направлениях Computer Science: математический аппарат, обзор существующих алгоритмов, базы данных, устройство компьютера и т.д. Она может стать хорошей отправной точкой, чтобы подыскать интересующие направления и расставить для себя приоритеты.
|
||||
|
||||
- [Чарльз Петцольд - Код. Тайный язык информатики](https://www.ozon.ru/context/detail/id/125884)
|
||||
|
||||
@@ -22,19 +22,19 @@
|
||||
|
||||
## C++
|
||||
|
||||
- [Липпман Стенли - Язык программирования C++. Базовый курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-bazovyy-kurs-147417585)
|
||||
|
||||
Отличное дополнение к книге Стивена Праты. К ней хорошо обращаться параллельно с предыдущей. Рекомендуем вам сами найти баланс между двумя книгами, т.к. информация подается по-разному, и шанс понять ту или иную тему у вас повысится.
|
||||
|
||||
- [Стивен Прата - Язык программирования C++. Лекции и упражнения (шестое издание)](https://www.ozon.ru/product/yazyk-programmirovaniya-c-lektsii-i-uprazhneniya-147417584)
|
||||
|
||||
Наиболее актуальная для новичков, с которой стоит начать свой путь изучения C++. Не требует наличия каких-то специфичных знаний, а также имеет набор упражнений к каждой главе. Они помогут вам отработать и понять фундаментальные возможности языка.
|
||||
|
||||
- [Липпман Стенли - Язык программирования C++. Базовый курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-bazovyy-kurs-147417585)
|
||||
|
||||
Отличное дополнение к книге Стивена Праты. К ней хорошо обращаться параллельно с предыдущей. Рекомендуем найти баланс между двумя книгами, т.к. информация подается по-разному, и шанс понять ту или иную тему у вас повысится.
|
||||
|
||||
- [Эндрю Кёниг - Эффективное программирование на C++. Практическое программирование на примерах](https://www.ozon.ru/product/effektivnoe-programmirovanie-na-c-prakticheskoe-programmirovanie-na-primerah-1273565)
|
||||
|
||||
Отличный задачник для начинающих разработчиков. Каждый раздел книги подробно разбирает какой-либо фундаментальный аспект языка, а затем предлагает набор практических упражнений, чтобы закрепить навык использования. В книги раскрыты наиболее важные темы, которые пригодятся при изучении любых новых аспектов языка в будущем. Рекомендуем обращаться к это книги после прочтения книги Липпмана, Праты или параллельно.
|
||||
Отличный задачник для начинающих разработчиков. Каждый раздел книги подробно разбирает какой-либо фундаментальный аспект языка, а затем предлагает набор практических упражнений, чтобы закрепить знания. В книги раскрыты наиболее важные темы, которые пригодятся при изучении любых новых аспектов языка в будущем. Рекомендуем обращаться к этой книге после прочтения книги Липпмана или Праты или параллельно.
|
||||
|
||||
- В дополнение к учебнику можно порекомендовать следующие видео от лекторов МФТИ:
|
||||
- В дополнение к представленным учебникам, можно порекомендовать следующие видео от лекторов МФТИ:
|
||||
- Илья Мещерин: [Курс лекций по C++](https://www.youtube.com/playlist?list=PL4_hYwCyhAvY2dY_tnTv3-TJThzcloCvM)
|
||||
- Константин Владимиров: [Лекции по современному C++ и обобщённому программированию в магистратуре МФТИ](https://www.youtube.com/channel/UCvmBEbr9NZt7UEh9doI7n_A/featured)
|
||||
- Тимофей Хирьянов:
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
- [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, создать первый консольный проект и написать первое приложение.
|
||||
Если вы начинаете изучать язык самостоятельно, то рекомендуем вести разработку первых программ или выполнять упражнения в IDE Microsoft Visual Studio (Community Edition). На сегодняшний день, это маскимально дружелюбная IDE к новичкам, как в установке, так и в использовании (и при этом абсолютно бесплатно!). Это позволит максимально сконцентрироваться на изучении языка, а не на борьбе с рабочим окружением. На сайте вы найдете небольшой учебник, который расскажет как установить Visual Studio, создать первый консольный проект и написать первое приложение.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## C++
|
||||
|
||||
- Сложно что-либо посоветовать для разработчиков уровня Senior. Разработчики такого уровня уже должны уверенно владеть C++ и понимать его возможности/ограничения. Основная задача, которая стоит на этом уровне: мониторить появления новых стандартов и фич для языка, а также обновления библиотек/фреймворков.
|
||||
- Сложно посоветовать что-то конкретное для разработчиков уровня Senior. Разработчики такого уровня уже должны уверенно владеть C++ и понимать его возможности/ограничения. Основная задача, которая стоит на этом уровне: мониторить появления новых стандартов и фич для языка, а также обновления библиотек/фреймворков.
|
||||
|
||||
|
||||
## Управление командой
|
||||
@@ -21,22 +21,22 @@
|
||||
|
||||
- [Фредерик Брукс - Мифический человеко-месяц, или Как создаются программные системы](https://www.ozon.ru/product/mificheskiy-cheloveko-mesyats-ili-kak-sozdayutsya-programmnye-sistemy-bruks-frederik-bruks-frederik-211424648)
|
||||
|
||||
Книга также считается классикой в управлении проектами. Акцент этой книги сосредоточен на ошибках, которые допускаются на проектах, приводящие к их провалам. Сегодня эта работа тоже отчасти считается устаревшей, но для тех разработчиков, которые только начинают свой путь в качестве управленца, она будет отличным началом, чтобы уберечь себя от типовых ошибок.
|
||||
Книга считается классикой в управлении проектами. Акцент этой книги сосредоточен на ошибках, которые допускаются на проектах, приводящие к их провалам. Сегодня эта работа тоже отчасти считается устаревшей, но для тех разработчиков, которые только начинают свой путь в качестве управленца, она будет отличным началом, чтобы уберечь себя от типовых ошибок.
|
||||
|
||||
- [Том ДеМарко - Deadline. Роман об управлении проектами](https://www.ozon.ru/product/deadline-roman-ob-upravlenii-proektami-demarko-tom-405808639)
|
||||
|
||||
Книга-роман, повествующая о работе менеджера и о том, как происходит управление проектами. Крайне полезна тем, что в художественной манере передает колоссальный опыт управленческих будней менеджера. Крайне полезна тем, что наиболее полно раскрывает те вопросы, с которыми менеджер сталкивается ежедневно.
|
||||
Книга-роман, повествующая о работе менеджера и о том, как происходит управление проектами. Крайне полезна тем, что в художественной манере передает колоссальный опыт управленческих будней менеджера. Наиболее полно раскрывает те вопросы, с которыми менеджер сталкивается в повседневной работе.
|
||||
|
||||
- [Даниэль Канеман - Думай медленно... решай быстро](https://www.ozon.ru/product/dumay-medlenno-reshay-bystro-kaneman-daniel-240690039)
|
||||
|
||||
Классическая книга о логических ошибках мышления человека. Полезна тем, что это поможет более рационально подходить к принятию различных решений, беря в расчет когнитивные искажения в человеческом мышлении. Это крайне необходимый навык для специалистов, которые находятся в зоне принятия ключевых решений. Книга может показаться довольно занудной, в таком случае вы можете попробовать поискать альтернативные работы, которые повествуют об когнитивных искажениях.
|
||||
Классическая книга о логических ошибках мышления человека. Полезна тем, что это поможет более рационально подходить к принятию различных решений, беря в расчет когнитивные искажения в человеческом мышлении. Необходимый навык для специалистов, которые находятся в зоне принятия ключевых решений. Книга может показаться довольно занудной, в таком случае вы можете попробовать поискать альтернативные работы, которые повествуют о когнитивных искажениях.
|
||||
|
||||
|
||||
## Требования и архитектура ПО
|
||||
|
||||
- [Карл Вигерс - Разработка требований к программному обеспечению](https://www.ozon.ru/product/razrabotka-trebovaniy-k-programmnomu-obespecheniyu-vigers-karl-i-bitti-dzhoy-221778297)
|
||||
|
||||
Книга пригодится тем, кто занят сбором и проработкой требований к программному обеспечению. Она расскажет о том, каким образом взаимодействовать с менеджерами, заказчиками и разработчиками при сборе требований, и каким образом превратить словесные идеи в техническое решение с понятными требованиями и ограничениями.
|
||||
Книга пригодится тем, кто занят сбором и проработкой требований к программному обеспечению. Она расскажет о том, каким образом взаимодействовать с менеджерами, заказчиками и разработчиками при сборе требований, каким образом превратить словесные идеи в техническое решение с понятными требованиями и ограничениями.
|
||||
|
||||
- [Len Bass, Paul Clements, Rick Kazman - Software Architecture in Practice (ENG only)](https://www.livelib.ru/book/1002753583-software-architecture-in-practice-len-bass-paul-clements-rick-kazman)
|
||||
|
||||
@@ -44,15 +44,15 @@
|
||||
|
||||
- [Марк Ричардс, Нил Форд - Основы архитектуры программного обеспечения: инженерный подход (ENG only)](https://www.ozon.ru/product/osnovy-arhitektury-programmnogo-obespecheniya-inzhenernyy-podhod-339635830)
|
||||
|
||||
Книга по основам проектирования программного обеспечения. Эта книга, как и предыдущая также повествует об основах проектирования. Отличие от предыдущей книги в том, что данная книга предлагает рассмотреть подходы к проектированию ПО, с инженерной точки зрения: возможность добиться надежности, повторяемости компонентов системы, их предсказуемости и т.п.
|
||||
Книга по основам проектирования программного обеспечения. Как и предыдущая работа, повествует об основах проектирования. Отличие от предыдущей книги в том, что предлагается рассмотреть подходы к проектированию ПО, с инженерной точки зрения: возможность добиться надежности, повторяемости компонентов системы, их предсказуемости и т.п.
|
||||
|
||||
- [Мартин Фаулер - Шаблоны корпоративных приложений](https://www.ozon.ru/product/shablony-korporativnyh-prilozheniy-147417586)
|
||||
|
||||
Набор архитектурных подходов для построения различных корпоративных систем. Данная книга может быть полезна тем, кто строит большие корпоративные системы с разной степенью сложности и направленности: финансовые операции, документооборот и т.п.
|
||||
Набор архитектурных подходов для построения различных корпоративных систем. Данная книга может быть полезна тем, кто строит системы с разной степенью сложности и направленности: финансовые операции, документооборот и т.п.
|
||||
|
||||
- [Крис Ричардсон - Микросервисы. Паттерны разработки и рефакторинга](https://www.ozon.ru/product/mikroservisy-patterny-razrabotki-i-refaktoringa-211432697)
|
||||
|
||||
Книга концентрируется на современном архитектурном подходе проектирования систем - микросервисы. Это работа повествует о том, как произвести последовательную трансформацию приложения из "монолитного" состояния в набор микросервисов. Содержит в себе набор паттернов, а также советы по рефакторингу существующего кода, чтобы наиболее эффективно произвести данную процедуру.
|
||||
Книга концентрируется на современном архитектурном подходе проектирования систем - микросервисы. Это работа повествует о том, как произвести последовательную трансформацию приложения из "монолитного" состояния в набор микросервисов. Содержит набор паттернов, а также советы по рефакторингу существующего кода, чтобы наиболее эффективно произвести данную процедуру.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
# C++ — это просто!
|
||||
|
||||
Современный C++ гораздо проще, чем принято считать. За годы трансформаций язык успел сильно преобразиться и обрасти возможностями, которые позволяют писать безопасный и эффективный код. Если использовать примитивы из последних стандартов, то больше не нужно беспокоиться о возможных утечках памяти. Компилятор также стал гораздо умнее. Он способен выполнять огромное число оптимизаций для вашего кода, выдавая максимальную производительность. Но как и раньше, по-прежнему возможно оптимизировать код при помощи самостоятельных манипуляций и ухищрений.
|
||||
Современный C++ гораздо проще, чем принято считать. За годы трансформаций язык успел сильно преобразиться и обрасти возможностями, которые позволяют писать безопасный и эффективный код. Если использовать примитивы из последних стандартов, то больше не нужно беспокоиться о возможных утечках памяти.
|
||||
|
||||
У языка всё же есть и недостатки. Главным из них является отсутствие стандартного пакетного менеджера. Есть куча разных продуктов, которые пытаются занять эту нишу, но пока ни один из них так и не смог этого сделать.
|
||||
Компилятор также стал гораздо умнее. Он способен выполнять огромное число оптимизаций для вашего кода, выдавая максимальную производительность. При этом по-прежнему возможно оптимизировать код при помощи самостоятельных манипуляций и ухищрений.
|
||||
|
||||
С++ также стал жертвой собственной парадигмы: "разработчик не платит за то, что ему не требуется". Практика же показывает, что в коммерческих проектах разработчики не слишком аккуратно обходятся с зависимостями, потому породилась обратная ситуация: разработчик платит каждый раз, когда ему нужно подключить новую зависимость. Это провоцирует различные побочные эффекты во время сборки проекта. Но и этот вопрос постепенно решается.
|
||||
У языка всё же есть и недостатки. Главным из них - отсутствие стандартного пакетного менеджера. Есть сторонние разработчики с пакетными менеджерами, которые пытаются занять эту нишу, но пока ни один из них так и не смог стать лидером рынка. Наиболее популярные из них: [Conan](https://conan.io/), [vcpkg](https://vcpkg.io/en/index.html), [Nuget](https://devblogs.microsoft.com/cppblog/nuget-for-c/) и т.д.
|
||||
|
||||
С++ также стал жертвой собственной парадигмы: "разработчик не платит за то, что ему не требуется". Практика же показывает, что в коммерческих проектах разработчики не слишком аккуратно обходятся с зависимостями, потому породилась обратная ситуация: разработчик платит каждый раз, когда ему нужно подключить новую зависимость. Это провоцирует различные побочные эффекты во время сборки проекта: растет время сборки, возникновение циклических зависимостей и т.д. Но и этот вопрос постепенно решается от проекта к проекту.
|
||||
|
||||
Чтобы приступить к изучению языка потребуется набор базовых школьных знаний:
|
||||
- Арифметика;
|
||||
@@ -12,9 +14,9 @@
|
||||
- Составление блок-схем;
|
||||
- Представление чисел в различных системах счисления.
|
||||
|
||||
Несмотря на весь бэкграунд и информационный шлейф, который тянется за C++, мы считаем, что его современная версия стала в разы проще, чем это было в прошлом.
|
||||
Несмотря на весь бэкграунд и информационный шлейф, который тянется за C++, мы считаем, что его современная версия стала в разы проще, чем это было в прошлом.
|
||||
|
||||
Потому не бойтесь изучать его!
|
||||
Потому не бойтесь изучать его!ы
|
||||
|
||||
Удачи!
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Кто это?
|
||||
|
||||
Это разработчик, который имеет теоретические знания по разработке ПО, а также небольшой практический опыт в рамках личных/учебных проектов. Помимо этого может иметь теоретическое представление о том, как работает индустрия и рабочие процессы. Человек способен выполнять несложные задачи на реальном проекте под руководством опытных коллег, обычно миддлов или синьоров.
|
||||
Это разработчик, который имеет теоретические знания по разработке ПО, а также небольшой практический опыт в рамках личных/учебных проектов. Также может иметь теоретическое представление о том, как работает индустрия и рабочие процессы. Такой разработчик способен выполнять несложные задачи на реальном проекте под руководством опытных коллег, обычно миддлов или синьоров.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
- Постарайтесь найти парочку энтузиастов на проекте и присоединитесь к ним. Они могут стать вашим источником знаний и опыта.
|
||||
- Задавайте вопросы старшим коллегам. Нет глупых вопросов, есть глупые ответы.
|
||||
- Не закапывайтесь в задачу слишком долго. Если после нескольких вариантов нет сдвига, тут же обращайтесь к коллегам за помощью. Они рассчитывают, что задача будет вами решена в разумные сроки. Ваша основная цель - решать проблемы, а не создавать их для команды.
|
||||
- При возникновении сложностей старайтесь попробовать найти парочку возможных решений самостоятельно, а затем подходите к своему наставнику. Ваш наставник подкорректирует ваши варианты решения или дополнит их.
|
||||
- Многие джуны попадают в распространенную ловушку: чем больше строк кода написано, тем они круче как разработчики. Не попадайтесь в неё! Помните, что чем больше кода написано, тем выше вероятность ошибки. В идеале код должен быть написан так, чтобы при возвращении к нему через полгода, вы быстро могли вспомнить что он делает. Хороший разработчик не тот, кто пишет много кода. Хороший разработчик ведет себя как самурай: наносит один точный и смертельный удар, а не бессмысленно машет мечом, чтобы попасть по врагу.
|
||||
- При возникновении сложностей старайтесь попробовать найти парочку возможных решений самостоятельно, а затем подходите к своему наставнику. Ваш колега подкорректирует представленные варианты решения или дополнит их.
|
||||
- Многие джуны попадают в распространенную ловушку: чем больше строк кода написано, тем они круче как разработчики. Не попадитесь в неё! Помните, что чем больше кода написано, тем выше вероятность ошибки. В идеале код должен быть написан так, чтобы при возвращении к нему через полгода, вы быстро могли вспомнить что он делает. Хороший разработчик не тот, кто пишет много кода. Хороший разработчик ведет себя как самурай: наносит один точный и смертельный удар.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,24 +2,25 @@
|
||||
|
||||
## Кто это?
|
||||
|
||||
Это разработчик, который понимает технический контекст разработки и способен создать дизайн и решения для функционала внутри компонента/приложения даже в случае неполноты требований. Также имеет практический опыт работы на проектах и в рамках принятых бизнес-процессов.
|
||||
Это разработчик, который понимает технический контекст разработки и способен создать дизайн/решение для функционала в рамках компонента/приложения, даже в случае неполноты требований. Также имеет практический опыт работы на проектах, в рамках принятых бизнес-процессов.
|
||||
|
||||
В основном решает технические задачи, но, в отличие от джуна, способен делать это самостоятельно или под менторством синьора/тимлида.
|
||||
В основном решает технические задачи, но в отличие от джуниора, способен сделать это самостоятельно или под менторством синьора/тимлида.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
|
||||
- Компилятор и язык его больше не пугают и практически не приносят сюрпризов, а если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь
|
||||
- Ориентируется в базовых концепциях языка и понимает, какие ещё языки существуют и чем они отличаются
|
||||
- Компилятор и язык его больше не пугают и практически не приносят сюрпризов. А если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь
|
||||
- Ориентируется в базовых концепциях языка, а также понимает, какие ещё языки программирования существуют, и чем они отличаются
|
||||
- Пишет понятный и поддерживаемый код
|
||||
- Знает базовые принципы дизайна и на их основе способен принять техническое решение
|
||||
- Понимает не только язык программирования, но и его технический контекст, то есть понимает весь технический цикл, через который проходит код и ориентируется в инструментах, которые помогают этот цикл поддерживать:
|
||||
- Знает базовые принципы дизайна, на их основе способен принять техническое решение
|
||||
- Владеет языком программирования, а также контекстом его использования: весь технический цикл, через который проходит код
|
||||
- Также ориентируется в инструментах, которые помогают поддерживать цикл разработки кода в проекте:
|
||||
- Написание кода (IDE, текстовые редакторы, практики программирования, качество кода)
|
||||
- Хранение исходного кода и продуктов (системы контроля версий, пакетные менеджеры, серверы)
|
||||
- Компиляция (компиляторы, системы сборки, библиотеки)
|
||||
- Тестирование (фреймворки, стратегии тестирования)
|
||||
- Доставка
|
||||
- Выполнение на целевой системе
|
||||
- Глубже понимает и знает базовую информатику (структуры данных, конечные автоматы, алгоритмы)
|
||||
- Глубже знает и понимает базовую информатику (структуры данных, конечные автоматы, алгоритмы)
|
||||
|
||||
## Что ожидается по общим навыкам?
|
||||
|
||||
@@ -33,14 +34,14 @@
|
||||
## Рекомендации и советы
|
||||
|
||||
### Про обучение
|
||||
- Начинайте прокачивать софт-скиллы, если хотите вырасти в синьора. На синьорском уровне техническая экспертиза часто отходит на второй план, а на первый выходит умение вести диалог и договариваться. Хороший разработчик, не тот кто пишет много кода, а тот, кто понимает как решить проблему максимально просто и эффективно. В идеале - без написания нового кода, а ещё лучше - если ещё удалится пара десятков/сотен строк.
|
||||
- Стадия миддла самая энергозатратная с точки зрения обучения. От вас требуется не только прокачивать технические скиллы, но также навыки коммуникации и погружение в проблемы бизнеса. Это значит, что вам требуется одновременно развиваться в нескольких направлениях одновременно. Уделяйте внимание в равной степени как "хард", так и "софт" скиллам.
|
||||
- Должное внимание "софт" скиллам также повышает вероятность того, что вы быстрее станете востребованным профессионалом на рынке. Вы можете попытаться стать узконаправленным техническим специалистом и игнорировать коммуникативные навыки, но, во-первых, компаниям нечасто нужны подобные кадры в больших количествах, во-вторых, вам придется конкурировать с лучшими из лучших. Если вы действительно готовы состязаться с лучшими специалистами на рынке, то смело идите вперед, но все же рекомендуем подумать о диверсификации своих навыков.
|
||||
- Начинайте прокачивать софт-скиллы, если хотите вырасти до синьора. На синьорском уровне техническая экспертиза часто отходит на второй план, а на первый план выходит умение вести диалог и договариваться. Хороший разработчик, не тот кто пишет много кода, а тот кто понимает, как решить проблему максимально просто и эффективно. В идеале - без написания нового кода, а ещё лучше - если будут удалены пара десятков/сотен строк.
|
||||
- Стадия миддла самая энергозатратная с точки зрения обучения. От вас требуется не только прокачивать технические скиллы, но также навыки коммуникации и погружение в проблемы бизнеса. Это значит, что вам требуется одновременно развиваться в нескольких направлениях. Уделяйте внимание в равной степени как "хард", так и "софт" скиллам.
|
||||
- Должное внимание "софт" скиллам повышает вероятность того, что вы быстрее станете более востребованным профессионалом на рынке. Вы можете попытаться стать узконаправленным техническим специалистом и игнорировать коммуникативные навыки, но, во-первых, компаниям нечасто нужны узкопрофильные эксперты в больших количествах, а во-вторых, вам придется конкурировать с лучшими из лучших. Если вы действительно готовы состязаться с лучшими специалистами на рынке, то смело идите вперед, но все же рекомендуем подумать о диверсификации своих навыков.
|
||||
|
||||
|
||||
### Про опыт
|
||||
- Основная ловушка для многих мидлов: фанбойство по технологиям, фреймворкам, внедрением паттернов или подходам к разработке. Постарайтесь прагматично подходить к выполнению задач на проекте. Не нужно пытаться затянуть все последние новинки, только чтобы поиграться с ними или ради строчки в резюме. На этом этапе очень велик соблазн проявить свое мастерство через обилие технологий или оверинжиниринг.
|
||||
- Если вы действительно считаете, что проекту нужна новая библиотека или фреймворк - обсудите это с синьором/тимлидом. Предложите им попробовать создать прототип, где сможете проверить их в действии прежде чем втягивать в проект. Пожалуйста, никогда не втягивайте их в обход всей команды или втихаря! Для вас - это развлечение, но для проекта/тимлида это станет головной болью в будущем, т.к. это повысит стоимость поддержки проекта и принесёт неожиданные проблемы.
|
||||
- Основная ловушка многих мидлов: фанбойство по технологиям, фреймворкам, внедрением паттернов или подходам к разработке. Постарайтесь прагматично подходить к выполнению задач на проекте. Не нужно пытаться затянуть все последние новинки, только чтобы поиграться с ними или ради строчки в резюме. На этом этапе очень велик соблазн проявить свое мастерство через обилие используемых технологий или оверинжиниринг.
|
||||
- Если вы действительно считаете, что проекту нужна новая библиотека или фреймворк - обсудите это с синьором/тимлидом. Предложите им попробовать создать прототип, где сможете проверить их в действии прежде чем втягивать в проект. Пожалуйста, никогда не добавляйте их за спиной всей команды! Это станет головной болью в будущем, т.к. это повысит стоимость поддержки проекта, и принесёт неожиданные проблемы.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
> Уровень разработчика (eng.: *grade*) - это попытка классифицировать разработчиков по навыкам, компетенциям и практическому опыту. По нему возможно сопоставить потенциальную сложность задач с требуемым набором компетенций и навыков для их успешного решения.
|
||||
|
||||
В индустрии разработки существует более-менее устоявшаяся классификация разработчиков. Выделим эти уровни:
|
||||
В индустрии разработки существует более-менее устоявшаяся классификация разработчиков. Выделим основные уровни:
|
||||
- Junior;
|
||||
- Middle;
|
||||
- Senior.
|
||||
|
||||
Многие компании имеют персональное видение по набору обязанностей и компетенций, предъявлемые к разработчкам разного уровня. Легко встретить ситуацию: работая в одной компании, вы можете быть Senior разработчиком, а в другой - еле-еле дотягиваете до Middle. Тем не менее можно охарактеризовать общие ожидания для любого уровня во многих компаниях. В дальнейшем будет использоваться упрощенная классификация, описанная выше.
|
||||
Многие компании имеют персональное видение по набору обязанностей и компетенций, предъявляемые к разработчикам. Легко встретить ситуацию: работая в одной компании, вы можете быть Senior разработчиком, а в другой - еле-еле дотягиваете до Middle. Тем не менее можно охарактеризовать общие ожидания для любого уровня во многих компаниях. В дальнейшем будет использоваться упрощенная классификация, описанная выше.
|
||||
|
||||
**Пример:** Ознакомиться с принятыми классификациями в различных компаниях можно здесь: https://www.levels.fyi/
|
||||

|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д.
|
||||
- Умение пользоваться отладчиком при помощи IDE
|
||||
- Понимание процесса компиляции и сборки программы на C++
|
||||
- Способность написать приложение, содержащее арифметические или логические операции и алгоритмы, условия и циклы
|
||||
- Способность написать приложение, содержащее арифметические или логические операции/алгоритмы, условия и циклы
|
||||
- Умение написать приложение по работе со стандартным потоком ввода/вывода;
|
||||
- Умение работать с указателями и ссылками
|
||||
- Знание из какого вида памяти состоит приложение
|
||||
- Понимание отличия между видами памяти: стек и куча
|
||||
- Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция
|
||||
|
||||
|
||||
@@ -31,15 +31,15 @@
|
||||
## Рекомендации и советы
|
||||
|
||||
### Про обучение
|
||||
- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала из различных источников, прежде чем вы сможете пройти собеседование, и получить свой первый оффер.
|
||||
- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала, прежде чем сможете пройти собеседование, и получить свой первый оффер.
|
||||
- Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники.
|
||||
- Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется.
|
||||
- Не пытайтесь писать идеальный код. Ваша основная задача - написание много РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Это сродни изучению иностранных языков. Сначала вы говорите много и небрежно, но со временем ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д.
|
||||
- Не хватайтесь сразу за большую задачу, например: "написать свою игру". Скорее всего вам не хватит знаний и опыта на первых порах, чтобы осилить задачу в одиночку. Такого рода путь быстро демотивирует, что в итоге может привести к разочарованию в себе и своих способностях. В итоге вы забросите свое обучение. Идите по пути "от простого к сложному", постепенно придумывая себе все более сложные задачки.
|
||||
- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих порталов - отработать навыки применения классических алгоритмов и структур данных. Эти площадки спроектированы таким образом, чтобы максимально огородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях.
|
||||
- Не пытайтесь писать идеальный код. Ваша основная задача - написание РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Аналогично изучению иностранных языков: сначала вы говорите много и небрежно, но со временем ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д.
|
||||
- Не хватайтесь сразу за большую задачу, например: "написать свою игру". Скорее всего вам не хватит знаний и опыта на первых порах, чтобы осилить задачу в одиночку. Такого рода путь быстро демотивирует, что в итоге может привести к разочарованию, и вы забросите свое обучение. Идите по пути "от простого к сложному", постепенно придумывая себе все более сложные задачи.
|
||||
- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих площадок - отработать навыки применения классических алгоритмов и структур данных. Эти платформы спроектированы таким образом, чтобы максимально отгородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях.
|
||||
|
||||
### Про английский язык
|
||||
- Большинство проблем проще искать на английском языке, но если текущий уровень владения не очень высокий - не мучайте себя. Так вы можете быстро потерять мотивацию и разочароваться. Большая часть проблем в начале пути, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке.
|
||||
- Большинство проблем проще искать на английском языке, но если текущий уровень владения не очень высокий, то не мучайте себя. Так вы быстро потеряете мотивацию. Большая часть проблем в начале пути, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке.
|
||||
- Если чувствуете, что ваш английский слабоват, то лучше начните его изучение с более простых и приятных вещей: сериалы, видеоигры, художественные книги, новостные сайты или статьи на интересующие темы. За несколько месяцев можно значительно улучшить навыки восприятия информации на английском языке.
|
||||
|
||||
---
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
## Кто это?
|
||||
|
||||
Это разработчик, который понимает не только технический, но и бизнес контекст и способен создать дизайн и решение для компонента/приложения/системы с их учётом. Помимо этого, помогает другим членам команды развиваться и следит за техническими тенденциями мира разработки.
|
||||
Это разработчик, который понимает не только технический, но и бизнес контекст, а также способен создать дизайн и решение для компонента/приложения/системы с учётом неполноты требований и общей сложности. Помимо этого, помогает другим членам команды развиваться, следит за техническими тенденциями мира разработки.
|
||||
|
||||
## Что ожидается по умению написания кода?
|
||||
|
||||
- Способен переводить задачи с языка бизнеса на язык разработки и декомпозировать задачи
|
||||
- Способен вести диалог с бизнесом и объяснять технические детали и сложности людям вне команды
|
||||
- Способен переводить задачи с языка бизнеса на язык разработки, декомпозировать задачи
|
||||
- Способен вести диалог с бизнесом, объяснять технические детали и сложности людям вне команды
|
||||
- Способен не только принять решение о дизайне, но и создать архитектуру компонента/приложения
|
||||
- Понимание и использование архитектурных принципов
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
## Рекомендации и советы
|
||||
|
||||
В зависимости от специфики компании и от ваших желаний путь дальнейшего развития лежит либо в освоении новых технологий и технических навыков, требующихся в выбранной вами области знаний (например, специальные разделы математики, физика и т.д. - путь технического эксперта), либо в область управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely. 🙂
|
||||
В зависимости от специфики компании и ваших личных пожеланий, путь дальнейшего развития лежит, либо в освоении новых технологий и технических навыков, либо в области управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely. 🙂
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,37 +1,36 @@
|
||||
# Как учиться?
|
||||
|
||||
Главное, что можно посоветовать — это усвоить, что только вы отвечаете за своё развитие. Конечно вы найдете вокруг немало энтузиастов, которые с радостью помогут вам советом, но никто не придумает за вас конкретные задачи или программу обучения. Лучший друг в этом деле - вы, Google и учебники.
|
||||
Главное правило: только вы отвечаете за своё развитие. Безусловно, вы найдете вокруг немало энтузиастов, которые с радостью помогут вам советом, но никто не разработает за вас полноценную программу обучения. Лучший друг в этом деле - вы, учебники и поисковик.
|
||||
|
||||
## Как учить новые стандарты C++ 11/14/17/20?
|
||||
|
||||
Новичкам можно посоветовать сильно не акцентироваться на стандартах в начале своего пути. Берите книги из списка [для начинающих](Books/PreJunior.md) и изучайте фундаментальные основы. Современные книги для новичков содержат в себе немного информации о возможностях стандартов C++11 и новее. На первых порах не стоит акцентировать свое внимание на новых стандартах языка.
|
||||
Новичкам можно посоветовать сильно не акцентироваться на стандартах в начале своего обучения. Начните с книг из списка [для начинающих](Books/PreJunior.md), и начинайте изучать фундаментальные основы. Современные книги для новичков содержат в себе информацию о различных возможностях стандартов C++11 и новее.
|
||||
|
||||
Возникает закономерный вопрос: "Почему так?!" Дело в том, что современные стандарты сконцентрированы на трёх основных вещах:
|
||||
|
||||
- исправление проблем
|
||||
- синтаксический сахар
|
||||
- новый функционал
|
||||
|
||||
Если с исправлением проблем и с синтаксическим сахаром всё более-менее очевидно (в первом случае вводятся новые конструкции, которые исправляют проблемы старых стандартов, а во втором - появляются новые абстракции, упрощающие написание повторяющегося кода и т.д.), то с новым функционалом всё немного сложнее.
|
||||
Если с исправлением проблем и синтаксическим сахаром всё более-менее очевидно (вводятся новые конструкции, которые исправляют проблемы старых стандартов; появляются новые абстракции, упрощающие написание повторяющегося кода и т.д.), то с новым функционалом всё немного сложнее.
|
||||
|
||||
C++ развивается ровно так же, как и все остальные языки: берётся какая-то популярная идея из информатики (computer science) или удачная фича из других языков, и внедряется в язык. Изучать такие конструкции и использовать их при необходимости важно, но на первых парах необходимо изучить основы, которые были заложены более старыми стандартами (С++11/С++14). Они и описаны в большинстве современных книг для начинающих.
|
||||
C++ развивается похожим образом, как и другие языки: берётся какая-то популярная идея из информатики (computer science) или удачная фича из других языков, и внедряется в язык. Изучать такие конструкции и использовать их важно, но на первых парах стоит изучить основы, которые были заложены более старыми стандартами (С++11/С++14). Они и описаны в большинстве современных книг для начинающих.
|
||||
|
||||
## По каким источникам изучать новые возможности стандартов C++?
|
||||
|
||||
- Доклады на [конференция C++](CommunitySources.md)
|
||||
- На главное странице [CppReference](https://en.cppreference.com/w/cpp) вы найдете ссылки, ведущие на список возможностей, введенные в каждом стандарте С++
|
||||
- Познакомиться обзорно с новым функционалом стандартов также можно при помощи книг [Бьёрна Страуструпа - C++. Краткий курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-kratkiy-kurs-150586178). Это книга переиздается при выходе нового стандарта, потому рекомендуем следить за переизданиями этой книги
|
||||
- Доклады на [конференциях по C++](CommunitySources.md)
|
||||
- На главной странице [CppReference](https://en.cppreference.com/w/cpp) вы найдете ссылки, со списками возможностей, введенные в каждом стандарте С++
|
||||
- Познакомиться обзорно с новым функционалом стандартов можно при помощи книг [Бьёрна Страуструпа - C++. Краткий курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-kratkiy-kurs-150586178). Это книга переиздается при выходе новых стандартов, потому рекомендуем следить за переизданиями этой книги
|
||||
- Профильные форумы/чаты/обсуждения
|
||||
- Ролики с разбором новых возможностей стандартов на YouTube
|
||||
- [Краткий обзор библиотечных функций C++11 и выше (ENG)](https://github.com/AnthonyCalandra/modern-cpp-features)
|
||||
|
||||
## Рекомендации по обучению
|
||||
|
||||
- Учитесь в своем ритме, а также в любом возрасте! Не ведитесь на истории: "Я программирую с пеленок", "паяльником владею с яслей", "вывожу из запоя/снимаю порчу при помощи ассемблера". Большинство подобных историй — это [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего) или попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++!
|
||||
- Большинство проблем, с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте решить задачу более простым путем.
|
||||
- Помните, что вы должны изучать язык, а не бороться с рабочим окружением на первых порах. Борьба с окружением может вас привести к полному разочарованию и потере мотивации.
|
||||
- Учитесь в своем ритме, а также в любом возрасте! Не акцентрируйтесь на историях: "Я программирую с пеленок" и т.п.. Большинство подобных историй — [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего), или же попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++!
|
||||
- Большинство проблем с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте решить задачу более простым путем.
|
||||
- Помните, что вы должны изучать язык, а не бороться с рабочим окружением в начале обучения. Борьба с окружением может вас привести к полному разочарованию и потере мотивации.
|
||||
- Помните, что многие опытные разработчики тоже встречают проблемы и застревают в "очевидных" местах. Просто возьмите паузу, позанимайтесь чем-нибудь другим, а через какое-то время возвращайтесь к задаче.
|
||||
- Найдите единомышленников, которые тоже начинают свой путь обучения. Так вам будет интереснее погружаться в изучение языка вместе, а также делиться знаниями и опытом друг с другом. Это также поможет выработать навык командной работы. Времена "вольных художников" подошли к концу. Практически везде вам придется работать в команде.
|
||||
- Найдите единомышленников, которые тоже начинают учиться. Так вам будет интереснее погружаться в изучение языка вместе, а также делиться знаниями и опытом друг с другом. Дополнительно это поможет выработать навык командной работы. Времена "вольных художников" подошли к концу. Практически везде вам придется работать в команде.
|
||||
- Попробуйте найти себе опытного ментора. Под его руководством вы сможете избежать различные типовые ловушки и потерю времени на них.
|
||||
|
||||
---
|
||||
|
||||
@@ -2,54 +2,52 @@
|
||||
|
||||
## Язык C++ умер, на нем невозможно что-либо писать
|
||||
|
||||
Живее всех живых.
|
||||
Живее всех живых.
|
||||
|
||||
На сегодняшний день находится в топах различных рейтингов языков программирования и даже набирает очки популярности, например: индекс [Tiobe](https://www.tiobe.com/tiobe-index/). Дурную славу "мертвого языка" он сыскал в нулевые годы, когда язык временно впал в анабиоз, а комитет стандартизации растворился во тьме. Но начиная со стандарта C++11, язык пережил ренессанс. Сегодня он активно продолжает пополняться и обновляться новым функционалом каждые три года. Многие проблемы, о которых заявляют свидетели "мертвого" C++ уже решены, но в силу того, что такие специалисты перестали вести разработку на C++, либо по верхам изучили его в ВУЗе/на курсах (наслушались баек от свидетелей "смерти"), то они продолжают порождать и сеять различные "мифы и легенды" о том, насколько C++ ужасен и страшен.
|
||||
На сегодняшний день находится в топах различных рейтингов языков программирования и даже набирает очки популярности, например: индекс [Tiobe](https://www.tiobe.com/tiobe-index/). Дурную славу "мертвого языка" он сыскал в 2000-е годы, когда его развитие временно застыло, а комитет по стандартизации приостановил свою активность. Но начиная со стандарта C++11, язык пережил ренессанс. Сегодня он активно обновляется и пополняется новым функционалом, в среднем, каждые три года. Многие проблемы, о которых заявляют свидетели "мертвого" C++ уже решены. Но в силу того, что такие специалисты скорее всего перестали работать с C++, либо по верхам изучили в ВУЗе/на курсах, то и продолжают порождать и сеять различные мифы о том, насколько C++ ужасен.
|
||||
|
||||
|
||||
## "Настоящие программисты" начинают изучать C++ сразу под Linux/Vim/gcc
|
||||
## Настоящие программисты начинают изучать C++ сразу под Linux/Vim/gcc
|
||||
|
||||
Если вышеперечисленная связка инструментов выглядит для вас малознакомой, то на данной стадии рекомендуем вам сконцентрироваться только на изучении основ языка C++. Мы также рекомендуем начать писать свои первые приложения в Microsoft Visual Studio IDE (подробнее см. [PreJunior Books](Books/PreJunior.md)).
|
||||
Если вышеперечисленная связка инструментов выглядит для вас малознакомой, то на таком этапе обучения стоит сконцентрироваться только на изучении основ языка C++. Рекомендуем вам попробовать написать свои первые приложения в Microsoft Visual Studio IDE (подробнее см. [PreJunior Books](Books/PreJunior.md)).
|
||||
|
||||
Пойти по наиболее трудному пути выглядит пафосно, но есть высокая доля вероятности, что тот объем информации, который необходимо изучить для сборки "Hello World" в связке Linux + Vim + gcc , будет слишком большим. Это чревато быстрой демотивацией и разочарованием в программировании. Старайтесь идти по пути: от простого к сложному. В спортзале новички не пытаются поднять самую тяжелую штангу на первом занятии, т.к. знают, чем это может быть чревато. Это же правило работает и при обучении. Когда более-менее освоитесь с языком, то можете попробовать поиграться с написанием кода в любом дистрибутиве Linux. Но это уже совершенно другая история...
|
||||
Пойти по наиболее трудному пути выглядит благородно. Но есть высокая доля вероятности, что объем информации, который придется изучить для сборки "Hello World" в связке Linux + Vim + gcc будет чрезмерно большим. Это чревато быстрой демотивацией и разочарованием в программировании.
|
||||
|
||||
Старайтесь идти по пути: от простого к сложному. В спортзале новички не пытаются поднять самую тяжелую штангу на первой тренировке, т.к. понимают, чем это может быть чревато. Это же правило работает и при обучении. Когда более-менее освоитесь с языком, то можете попробовать поиграться с написанием кода в любом ином IDE, операционной системе и т.д.. Но это уже совершенно другая история...
|
||||
|
||||
|
||||
## Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc.
|
||||
|
||||
Нет, нет и ещё раз нет!
|
||||
Нет, нет и ещё раз нет!
|
||||
|
||||
Такое утверждение до сих пор живо из-за двух распространенных ситуаций: так учили в ВУЗе (Assembler -> C -> C++), либо от "старой гвардии" плюсовиков, т.к. они в своей практике проходили похожий путь. Современный C++ не требует подобного рода мучений. Этот язык автономен и может быть изучен без какого-либо бекграунда. Намного вероятнее, что при изучении в режиме "Си -> С++" у вас возникнет путаница в голове, а также устойчивое желание писать на C++ в стиле "Си с классами".
|
||||
Такое утверждение живо из-за двух распространенных ситуаций: так учили в ВУЗе (Assembler -> C -> C++), либо от "старой гвардии" разработчиков, т.к. многие из таких специалистов проходили подобный карьерный путь. Современный C++ не требует подобного подхода к изучению. Этот язык полностью автономен. Гораздо вероятнее, у вас возникнет путаница в голове, а также устойчивое желание писать на C++ в стиле "Си с классами". А ассемблер потребуется только в особых ситуациях.
|
||||
|
||||
|
||||
## Изучайте C++ по книге Страуструпа
|
||||
|
||||
Крайне вредный тезис, который пришел от "старогвардейцев", либо от тех, кто родился с клавиатурой в руках.
|
||||
|
||||
Скорее всего этот совет произносят те, кто уже имел большой опыт разработки на других языках (C, Fortran, Delphi, и т.д.) и переходил с них на C++. Книга Страуструпа написана больше как справочник ([Язык программирования C++](https://www.ozon.ru/product/yazyk-programmirovaniya-c-spetsialnoe-izdanie-straustrup-bern-straustrup-bern-210215691)), потому и работать с ней требуется соответсвенно, но для этого уже надо хоть немного разбираться в языке. Лучше загляните в раздел [Книги](Books.md), там вы найдете книги для любого уровня владения языком.
|
||||
Крайне спорный тезис. Вероятнее всего что этот совет предлагают те, кто уже имел большой опыт разработки на других языках (C, Fortran, Delphi, и т.д.) и переходил с них на C++. Книга Страуструпа написана больше как справочник: ([Язык программирования C++](https://www.ozon.ru/product/yazyk-programmirovaniya-c-spetsialnoe-izdanie-straustrup-bern-straustrup-bern-210215691)). Потому и работать с ней требуется соответственно, что уже требует наличие знаний о C++ и практики использования. Рекомендуем заглянуть в раздел [Книги](Books.md), где вы найдете материал для любого уровня владения языком программирования.
|
||||
|
||||
|
||||
## Изучайте C++ только по стандарту
|
||||
|
||||
Тоже крайне снобисткий тезис.
|
||||
|
||||
Во-первых, современный стандарт C++ уже превысил размер в 2000 страниц. Во-вторых, доступ к актуальной версии стандарта платный. И, в-третьих, стандарт написан не самым "дружелюбным" способом. Тем кто изучил язык по его стандарту можно пожать руку, но мы не рекомендуем так издеваться над собой. Опять же, лучше загляните в раздел [Книги](Books.md), там вы найдете книги для любого уровня владения языком.
|
||||
Тоже крайне опасный тезис. Во-первых, современный стандарт C++ уже превысил объем в 2000 страниц. Во-вторых, доступ к актуальной версии стандарта платный. В-третьих, стандарт написан не самым "дружелюбным" способом. Тем кто изучил язык по стандарту можно пожать руку, но мы не рекомендуем такой путь, ибо он долог и тернист. Лучше загляните в раздел [Книги](Books.md), там вы найдете материал для любого уровня владения языком.
|
||||
|
||||
|
||||
## Undefined Behavior преследует разработчика повсюду
|
||||
|
||||
Скорее нет, чем да.
|
||||
|
||||
Современный C++, а также инструментарий, возникший вокруг языка, позволяют избежать львиную долю проблем, связанных с неопределенным поведением. Здесь мы можем дать довольно простой совет: если сомневаетесь, что делает та или иная конструкция, то почитайте о ней на [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) или иных профильных порталах. Если после прочтения конструкция остается непонятной, то попробуйте переписать блок кода альтернативным и более простым способом, чтобы избежать неопредленного поведения. В простоте кроется великая сила!
|
||||
Современный C++, а также имеющийся инструментарий, позволяют избежать львиную долю проблем, связанных с неопределенным поведением. Здесь можно дать совет: если сомневаетесь, что делает та или иная конструкция, то попробуйте поискать информацию на [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) или иных профильных порталах. Если же после прочтения конструкция остается непонятной, то попробуйте переписать блок кода альтернативным и более простым способом, чтобы избежать неопредленного поведения. В простоте кроется великая сила!
|
||||
|
||||
|
||||
## Нужно вручную управлять памятью, в языке нет сборщика мусора
|
||||
|
||||
Это байка также идет от "старогвардейцев", которые перестали писать на языке до появления стандарта C++11, либо от тех, кто поверхностно его изучал в ВУЗе без погружения в последние стандарты. Современный C++ имеет в составе своей библиотеки набор примитивов, который отвечает за автоматическое выделение и освобождение памяти. Контроль за выделением памяти отошел на второй план. Во многих компаниях и командах вы также встретите правило: "не используйте сырых указателей". Опять же, не пренебрегайте современным инструментарием и санитайзерами. Они способны детектировать потенциальную утечку памяти ещё на этапе исходного кода.
|
||||
Это утверждение также идет от представителей "старой гвардии", которые перестали писать на языке до появления стандарта C++11, или же от тех, кто слабо знаком с последними стандартами языка. Современный C++ имеет в своей библиотеке набор примитивов, который отвечает за автоматическое выделение и освобождение памяти. Контроль за выделением памяти все больше и больше отходит на второй план. Во многих компаниях вы также встретите внутреннее правило: "не использовать сырых указателей". И напоследок, не пренебрегайте современным инструментарием и санитайзерами. Они способны отыскать потенциальную утечку памяти ещё на этапе анализа исходного кода.
|
||||
|
||||
|
||||
## C++ - это сплошной легаси-код
|
||||
|
||||
Отчасти правдивый миф, но стоит отметить, что это применимо и к другим языкам. На самом современном стеке может производиться жуткое "легаси" руками разработчиков. Качество кода зависит от технической культуры команды и её визионеров, т.к. в большей степени легаcи-код порождается человеческим фактором: уровень разработчика и компетенций, отношение к работе, горящие сроки и т.п. На текущий момент на C++ разработано огромное количество систем, которые не первый год работают в режиме 24/7. Такие системы могли быть написаны в прошлом без соблюдения всевозможных практик разработки. Они часто являются основой бизнеса, которые приносят значительную часть прибыли. Потому проводить в таких системах масштабные изменения довольно рискованно. Разработчики работают с таким кодом предельно осторожно. Но не стоит думать, что с этим ничего не сделать. Постепенно такие системы переписываются с использованием современных практик и технологий. Такого рода задачи могут стать для вас не менее интересным вызовом, т.к. предоставляют отличную возможность освоить широкий спектр компетенций: чтение кода, реверс-инженеринг, написание тестов, проектирование архитектуры ПО, автоматизация, сбор требований и т.д.
|
||||
Отчасти правдивый миф, но стоит отметить, что это применимо и к другим языкам. На самом современном стеке может производиться "легаси". Качество кода зависит от технической культуры внутри компании и команд разработки и их визионеров, т.к. легаcи-код порождается человеческим фактором: уровень разработчиков и компетенций, отношение к работе, горящие сроки, практики в команде и т.п. На C++ разработано огромное количество систем, которые не первый год работают в режиме 24/7. Такие системы могли быть написаны в прошлом без соблюдения всевозможных практик разработки. Они часто являются основой бизнеса, которые приносят значительную часть прибыли. Потому проводить в таких системах масштабные изменения очень рискованно. Разработчики работают с таким кодом предельно осторожно. Но не стоит думать, что с этим ничего невозможно поделать. Постепенно такие системы тоже переписываются с использованием современных практик и технологий. Такого рода задачи могут стать для вас не менее интересным вызовом, т.к. предоставляют отличную возможность освоить широкий спектр компетенций: чтение кода, реверс-инжениринг, написание тестов, проектирование архитектуры ПО, автоматизация, сбор требований и т.д.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Пет-проекты
|
||||
|
||||
Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, а также библиотек и/или фреймворков. Также пет-проекты могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру.
|
||||
Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, библиотек и фреймворков. Они могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру.
|
||||
|
||||
Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать началом для вашего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему, или же список вдохновит на какую-либо собственную идею!
|
||||
Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать хорошим началом для последующего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему.
|
||||
|
||||
## Сторонние ресурсы
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
### Игры
|
||||
|
||||
Ниже представлен список классических видеоигр, которые не содержат в себе сложного ИИ или динамическую генерацию мира. Вы можете реализовывать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [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/) и т.п. Не забывайте о правиле: "от простого, к сложному". Начинайте с простого, и постепенно повышайте сложность.
|
||||
Ниже представлен список классических видеоигр, которые не содержат в себе сложного искусственного интеллекта или динамическую генерацию мира. Вы можете попробовать реализовать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [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/) и т.п. Не забывайте о правиле: "от простого, к сложному". Начинайте с простого, и постепенно повышайте сложность.
|
||||
|
||||
* [Змейка](https://habr.com/ru/company/microsoftlumia/blog/136629/)
|
||||
* [Тетрис](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B8%D1%81)
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
### Приложения
|
||||
|
||||
При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Не забывайте о принципе: "от простого к сложному".
|
||||
При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Помните о принципе: "от простого к сложному".
|
||||
|
||||
* Сетевой чат (на чистых сокетах или при помощи [gRPC](https://grpc.io/docs/languages/cpp/quickstart/))
|
||||
* Калькулятор
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
### Студенческие приложения
|
||||
|
||||
Нижеперечисленные примеры больше подойдут для студентов, которые проходят или недавно проходили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. ещё свежи знания по академическим дисциплинам.
|
||||
Нижеперечисленные примеры больше подойдут для студентов, которые изучают или недавно изучили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. свежи знания по академическим дисциплинам.
|
||||
|
||||
* Библиотека линейной алгебры: матрицы, вектора, действия с ними
|
||||
* Моделирование различных процессов: физика, теоретическая механика и т.д.
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
## Additional languages: [English](../README.md)
|
||||
|
||||
С++ всё ещё является одним из самых популярных языков разработки: [2021](https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof), [2022](https://survey.stackoverflow.co/2022/#most-popular-technologies-language-prof). Есть немало желающих начать его изучать и стать C++ разработчиками. Перед такими людьми встают вопросы: "С чего мне начать? Что и в каком порядке мне изучать? Какие книги стоит почитать?"
|
||||
С++ является одним из самых популярных языков разработки: [2021](https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof), [2022](https://survey.stackoverflow.co/2022/#most-popular-technologies-language-prof). Есть немало желающих начать его изучать и стать C++ разработчиками. Перед такими людьми встают вопросы: "С чего мне начать? Что и в каком порядке мне изучать? Какие книги стоит почитать?"
|
||||
|
||||
Мы попытались ответить на эти вопросы в представленной дорожной карте. Карта акцентируется на общих компетенциях и навыках, которые встречаются в большинстве проектов. Она призвана помочь тем, кто только начинает свое обучение или имеет небольшой опыт. Изучив набор перечисленных материалов, вы сможете составить более продуктивный план обучения, не отвлекаясь на побочную информацию. Это поможет вам освоить C++ на том уровне, который встречается во многих коммерческих проектах.
|
||||
Мы попытались ответить на поставленные вопросы в дорожной карте. Карта акцентируется на общих компетенциях и навыках, которые встречаются в большинстве проектов. Она призвана помочь тем, кто только начинает свое обучение или имеет небольшой опыт. Изучив набор перечисленных материалов, вы сможете составить более продуктивный план обучения, не отвлекаясь на побочную информацию. Это поможет вам освоить C++ на достаточном уровне, который встречается в коммерческих проектах.
|
||||
|
||||
Прежде чем начать изучать карту рекомендуем прочитать статьи, перечисленные ниже.
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
# Лицензия
|
||||
Карта распространяется по лицензии **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). Если вкратце:
|
||||
|
||||
- Вы можете делиться, адаптировать и копировать весь представленный материал, но с указанием ссылки на оригинал
|
||||
- **НЕ** допускается использование любой части представленных материалов в коммерческих целях
|
||||
- Вы можете делиться, адаптировать и копировать весь представленный материал, но с указанием ссылки на оригинал
|
||||
- **НЕ** допускается использование любой части представленных материалов в коммерческих целях
|
||||
|
||||
|
||||
# Предложения и замечания
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
Для этого используйте следующие механизмы Github:
|
||||
- Предложения/правки **по репозиторию** - создавайте и присылайте новый PR в [Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls)
|
||||
- Предложения/правки **по дорожной карте в Miro** - создавайте и присылайте новый запрос в [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (в Miro нет возможности вести историю изменений, потому доступ к изменениям в карте ограничен. Все правки мы вносим сами после ознакомления с предложениями).
|
||||
- Предложения/правки **по дорожной карте в Miro** - создавайте и присылайте новый запрос в [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (в Miro нет возможности вести историю изменений, потому доступ к изменениям в карте ограничен. Все правки мы вносим сами после ознакомления с предложениями).
|
||||
|
||||
|
||||
# Контакты
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# Почему появилась дорожная карта
|
||||
|
||||
C++ активно используется во многих коммерческих проектах. Сегодня этот язык претерпел большие изменения. Это сделало C++ гораздо более удобным для повседневного использования. Но вокруг языка всё ещё витает много домыслов, мифов и страхов. Это отпугивает большое количество желающих. Наша цель - помочь новичкам развеять миф о сложности C++ и сориентироваться в его изучении.
|
||||
C++ активно используется во многих коммерческих проектах. Сегодня язык претерпел большие изменения. Это сделало C++ гораздо более удобным для повседневного использования. Но вокруг языка витает много домыслов, мифов и страхов. Это отпугивает большое количество желающих. Наша цель - помочь новичкам развеять миф о сложности C++ и сориентироваться в его изучении.
|
||||
|
||||
Рынок испытывает недостаток в специалистах, способных писать на C++. Исходя из нашего опыта, складывается впечатление, что многие практикующие разработчики выучили язык "вопреки": методом проб и ошибок, а также настойчивости. Нечасто встретишь человека, который освоил C++ исключительно по программам обучения. Большая доля учебных заведений или курсов не могут предложить качественный материал: либо предлагается информация по "верхам", либо курс отстает от актуального состояния на несколько лет. А этого недостаточно, чтобы начать успешно выполнять задачи в коммерческих проектах.
|
||||
Рынок испытывает недостаток в специалистах, способных писать на C++. Исходя из нашего опыта, складывается впечатление, что многие практикующие разработчики выучили язык "вопреки": методом проб и ошибок, а также собственной настойчивости. Нечасто встретишь человека, который освоил C++ исключительно по учебной программе. Большая доля учебных заведений или курсов не могут предложить всеобъемлющий материал: либо предлагается информация по "верхам", либо курс отстает от актуального состояния на несколько лет. А этого недостаточно, чтобы начать успешно выполнять задачи в коммерческих проектах.
|
||||
|
||||
По-прежнему порог входа в разработку на языке C++ выше по сравнению с другими языками. Большая часть имеющихся ресурсов заточена под практикующих разработчиков. Это и подогревает мифы об исключительной сложности языка. На деле же не хватает актуальных материалов для новичков.
|
||||
По-прежнему порог входа в разработку на языке C++ выше по сравнению с другими языками. Большая часть имеющихся ресурсов заточена под практикующих разработчиков. Это и подогревает мифы об исключительной сложности языка. На деле же, не хватает актуальных материалов для новичков.
|
||||
|
||||
Данная дорожная карта пытается заполнить образовавшуюся пустоту. Идея создания возникла после большого количества интервью с неопытными кандидатами, на позицию разработчика C++. Их объединяли общие черты: пробелы в базовых знаниях и непонимание каким образом изучать язык, откуда черпать знания.
|
||||
Данная дорожная карта пытается заполнить образовавшуюся пустоту. Идея создания возникла после большого количества интервью с неопытными кандидатами, претендующие на позицию разработчика C++. Их объединяли общие черты: пробелы в базовых знаниях, непонимание каким образом изучать язык, откуда черпать знания.
|
||||
|
||||
Также карта может пригодиться и тем, кто уже практикует какое-то время использование C++ в личных и рабочих проектах. Она может помочь вам понять каких знаний не хватает для того, чтобы углубить уровень владения языком, а также стать высококлассным специалистом.
|
||||
Также карта может пригодиться и тем, кто уже практикует какое-то время использование C++ в личных и рабочих проектах. Она может помочь вам понять каких знаний не хватает для того, чтобы повысить уровень владения языком, а также стать высококлассным специалистом.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
# А нужен ли вам C++?
|
||||
|
||||
Первое, о чем действительно стоит подумать: для чего требуется изучать C++?
|
||||
Первое, о чем действительно стоит подумать: для чего вам требуется изучение C++?
|
||||
|
||||
Язык имеет конкретные ниши применения. Прежде чем начать изучать язык, попробуйте поискать те сферы, которые заинтересуют имеено вас. Внимательно изучите их, если вы имеете только общее представление. Возможно ваши ожидания окажутся иными, по сравнению с реальным положением дел. Ниже перечислено несколько примеров, которые демонстрируют необходимость изучить вопрос "на берегу":
|
||||
Язык имеет конкретные ниши применения. Прежде чем начать изучать язык, попробуйте поискать сферы, которые заинтересуют именно вас. Внимательно изучите их, если имеете только общее представление. Возможно ваши ожидания окажутся иными, по сравнению с реальным положением дел. Ниже перечислено несколько примеров, которые демонстрируют необходимость изучить вопрос "на берегу":
|
||||
|
||||
- Некоторые сферы разработки выглядят иначе, в отличие от их романтизированного образа. В качестве примера возьмем разработку игр. Данное направление имеет много темных сторон: кранчи (переработки в режиме "живем в офисе следующие полгода"), отсутствие внятного менеджмента, работа в стол и т.д.
|
||||
- Некоторые сферы разработки выглядят иначе, в отличие от их романтизированного образа. В качестве примера возьмем разработку игр. Данное направление имеет много темных сторон: кранчи (переработки в режиме "живем в офисе следующие полгода"), отсутствие внятного менеджмента, работа в стол и т.д.
|
||||
|
||||
- В специфичных сферах может быть популярен иной инструментарий. К примеру, в машинном обучении наиболее распространен язык Python и специализированные библиотеки к нему.
|
||||
- В специфичных сферах может быть популярен иной инструментарий. К примеру: в машинном обучении наиболее распространен язык Python и специализированные библиотеки к нему.
|
||||
|
||||
|
||||
# Я уже знаю C/C#/Java/Python и т.д. Могу ли я сразу начать работать на C++?
|
||||
|
||||
И да, и нет. :)
|
||||
И да, и нет. :)
|
||||
|
||||
Вам помогут фундаментальные знания, такие как: понимание процедурной/ООП/иных парадигм или других знаний общего характера. Но полностью на них полагаться не стоит. Наиболее распространенный случай в котором часто оказываются новички: попытка писать на C++ в парадигмах другого языка. Пример подобной ловушки у разработчиков на Си: писать на C++ в процедурном стиле или "Си с классами".
|
||||
Вам помогут фундаментальные знания, такие как: понимание процедурной/ООП/иных парадигм или иные знания общего характера. Но полностью на них полагаться не стоит. Наиболее распространенный случай в котором часто оказываются новички: попытка писать на C++ в парадигмах другого языка. Пример подобной ловушки распространен среди разработчиков на языке Си: писать на C++ в процедурном стиле или "Си с классами".
|
||||
|
||||
C++ очень богат на идеи и подходы написания кода. Потому рекомендуется начать изучение языка с "чистой" головой. Подойдите к изучению языка основательно и разберитесь в его идеях. Это поможет вам эффективно использовать язык в рабочих задачах. Знание других языков поможет сравнивать их друг с другом и обнаруживать сильные/слабые стороны.
|
||||
C++ богат на идеи и подходы к написанию кода. Потому рекомендуется начать изучение языка с "чистой" головой. Подойдите к изучению языка основательно, разберитесь в его идеях. Это поможет вам эффективно использовать язык в рабочих задачах. Знание других языков поможет сравнивать их друг с другом и обнаруживать сильные/слабые стороны.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# Инструментарий для работы с языком
|
||||
|
||||
Начинающие разработчики имеют малый кругозор по доступному инструментарию, который облегчает работу с кодом, а также повышает эффективность и оберегает от многих ошибок. Все эти инструменты не серебряная пуля от многих бед языка, но они значительно сглаживают имеющиеся углы. Ниже представлен список распространенных и популярных инструментов, признанных разработчиками по всему миру. Данный список - лишь малая часть доступного инструментария. Со временем вы начнете лучше ориентироваться в них и найдете для себя что-то новое.
|
||||
Начинающие разработчики имеют малый кругозор по доступному инструментарию, который облегчает работу с кодом, повышает эффективность и оберегает от многих ошибок. Все представленные инструменты - не серебряная пуля от всех бед языка, но значительно сглаживают имеющиеся углы. Ниже представлен список распространенных и популярных инструментов, признанных разработчиками по всему миру. Данный список - лишь малая часть доступного инструментария. Со временем вы начнете лучше ориентироваться в них и найдете для себя что-то новое.
|
||||
|
||||
## Текстовые редакторы
|
||||
|
||||
* **Visual Studio Code**
|
||||
|
||||
Сайт: https://code.visualstudio.com/
|
||||
Сайт: [https://code.visualstudio.com/](https://code.visualstudio.com/)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
@@ -15,56 +15,56 @@
|
||||
|
||||
* **Notepad++**
|
||||
|
||||
Сайт: https://notepad-plus-plus.org/
|
||||
Сайт: [https://notepad-plus-plus.org/](https://notepad-plus-plus.org/)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Легковесный редактор текстовых файлов и исходного кода. Поддерживает синтаксис и подсветку распространенных языков программирования. По сравнению с Visual Studio Code его удобно использовать для быстрого открытия и просмотра файлов. За счет своей легковесности комфортно работать с большим количеством текстовых файлов.
|
||||
Легковесный редактор текстовых файлов и исходного кода. Поддерживает синтаксис и подсветку распространенных языков программирования. По сравнению с Visual Studio Code, его удобно использовать для быстрого открытия и просмотра файлов. За счет своей легковесности комфортно работать с большим количеством текстовых файлов.
|
||||
|
||||
|
||||
## IDE (Integrated Development Environment)
|
||||
|
||||
* **Microsoft Visual Studio IDE**
|
||||
|
||||
Сайт: https://visualstudio.microsoft.com
|
||||
Сайт: [https://visualstudio.microsoft.com](https://visualstudio.microsoft.com)
|
||||
|
||||
Стоимость: Community Edition - бесплатно
|
||||
|
||||
Интегрированная среда разработки от компании Microsoft. Предоставляет весь необходимый набор инструментов (редактор кода, компилятор, отладчик, профилировщик и т.д.) из коробки. Поддерживает разработку на различных языках программирования, а также кроссплатформенную разработку. Отличное начало для новичков, т.к. современный интерфейс студии максимально дружелюбен, и практически не требует какой-либо "доработки напильником" из коробки.
|
||||
Интегрированная среда разработки от компании Microsoft. Предоставляет весь необходимый набор инструментов (редактор кода, компилятор, отладчик, профилировщик и т.д.) из коробки. Поддерживает разработку на различных языках программирования, а также кроссплатформенную разработку. Отличное начало для новичков, т.к. современный интерфейс студии максимально дружелюбен, и практически не требует какой-либо доработки из коробки.
|
||||
|
||||
|
||||
* **Qt Creator IDE**
|
||||
|
||||
Сайт: https://www.qt.io/product/development-tools
|
||||
Сайт: [https://www.qt.io/product/development-tools](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.
|
||||
Изначально Qt Creator позиционировался как IDE для разработки графических интерфейсов приложений, разрабатываемых на языке C++. Со временем фреймворк оброс огромными возможностями. Все переросло в полноценную экосистему для разработки кроссплатформенных приложений. Фреймворк предоставляет большую библиотеку примитивов для различных потребностей: работа с сетью, графический интерфейс, работа с базами данных, работа с популярными форматами: изображения, текстовые файлы и т.д. Современный Qt Creator выступает в роли конкурента для Visual Studio, но в основном он снискал славу в среде разработчиков, которые разрабатывают приложения под различные дистрибутивы Linux.
|
||||
|
||||
|
||||
* **Eclipse IDE**
|
||||
|
||||
Сайт: https://www.eclipse.org/downloads/packages
|
||||
Сайт: [https://www.eclipse.org/downloads/packages](https://www.eclipse.org/downloads/packages)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Довольно мощная мультиплатформенная среда разработки, но при этом тяжеловесная. Ключевая особенность Eclipse - модульность. Философия Eclipse состоит в том, что любой разработчик может доработать среду разработки под себя посредством подключения дополнительных расширений. Взята за основу некоторыми разработчиками компиляторов под специализированные ОС или микроконтроллеры (например: ОС реального времени QNX).
|
||||
Довольно мощная мультиплатформенная среда разработки, но при этом тяжеловесная. Ключевая особенность Eclipse - модульность. Философия Eclipse состоит в том, что любой разработчик может доработать среду разработки под себя посредством подключения дополнительных расширений. Взята за основу некоторыми разработчиками компиляторов под специализированные ОС или микроконтроллеры (например: ОС реального времени - QNX).
|
||||
|
||||
|
||||
* **JetBrains Clion IDE**
|
||||
|
||||
Сайт: https://www.jetbrains.com/clion
|
||||
Сайт: [https://www.jetbrains.com/clion](https://www.jetbrains.com/clion)
|
||||
|
||||
Стоимость: бесплатная для учебных заведений, в ином случае - платная
|
||||
|
||||
Мощная мультиплатформенная IDE от российской компании JetBrains. Как и другие IDE, она содержит полный набор инструментов для комфортной разработки программного обеспечения. Удобен для кроссплатформенной разработки как на Cи, так и на C++.
|
||||
Мощная мультиплатформенная IDE от компании JetBrains. Как и другие IDE, она содержит полный набор инструментов для комфортной разработки программного обеспечения. Удобен для кроссплатформенной разработки как на Cи, так и на C++.
|
||||
|
||||
|
||||
## Расширения
|
||||
|
||||
* **JetBrains ReSharper C++**
|
||||
|
||||
Сайт: https://www.jetbrains.com/resharper-cpp
|
||||
Сайт: [https://www.jetbrains.com/resharper-cpp](https://www.jetbrains.com/resharper-cpp)
|
||||
|
||||
Стоимость: бесплатная для учебных заведений, в ином случае - платная
|
||||
|
||||
@@ -72,31 +72,31 @@
|
||||
|
||||
* **Visual Assist**
|
||||
|
||||
Сайт: https://www.wholetomato.com
|
||||
Сайт: [https://www.wholetomato.com](https://www.wholetomato.com)
|
||||
|
||||
Расширение для MS Visual Studio. Добавляет дополнительные возможности для работы с исходным кодом: расширенная подсветка кода и подсказки по нему, расширенная информация во время отладки или при написании кода, продвинутый поиск, навигация по проектам и т.д. Является конкурентом JetBrains ReSharper.
|
||||
Расширение для MS Visual Studio. Добавляет дополнительные возможности для работы с исходным кодом: расширенная подсветка кода и подсказки, подробная информация во время отладки или при написании кода, продвинутый поиск, навигация по проектам и т.д. Является конкурентом JetBrains ReSharper.
|
||||
|
||||
|
||||
* **Incredibuild**
|
||||
|
||||
Сайт: https://www.incredibuild.com
|
||||
Сайт: [https://www.incredibuild.com](https://www.incredibuild.com)
|
||||
|
||||
Стоимость: платно, актуальная цена указана на сайте
|
||||
|
||||
Приложение/расширение для распределенной сборки проектов. Объединяет все рабочие станции разработчиков в единую сеть, за счет чего сборка исходного кода может производиться одновременно на десятках машин. Это позволяет ускорить скорость сборки больших проектов в несколько раз.
|
||||
Приложение/расширение для распределенной сборки проектов. Объединяет рабочие станции разработчиков в единую сеть, за счет чего сборка исходного кода может производиться одновременно на десятках машин параллельно. Это позволяет ускорить скорость сборки больших проектов в несколько раз.
|
||||
|
||||
|
||||
## Пакетные менеджеры и системы сборки
|
||||
|
||||
* **Cmake**
|
||||
|
||||
Сайт: https://cmake.org
|
||||
Сайт: [https://cmake.org](https://cmake.org)
|
||||
|
||||
Кроссплатформенная система автоматизации сборки приложения из исходного кода. Генерирует необходимые артефакты для последующей сборки приложения на целевой платформе. На текущий момент считается "стандартным" инструментом для сборки различных библиотек, в случае поставки в качестве исходного кода.
|
||||
|
||||
* **Conan**
|
||||
|
||||
Сайт: https://conan.io
|
||||
Сайт: [https://conan.io](https://conan.io)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
@@ -105,36 +105,36 @@
|
||||
|
||||
* **Ninja**
|
||||
|
||||
Сайт: https://ninja-build.org
|
||||
Сайт: [https://ninja-build.org](https://ninja-build.org)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Менеджер сборки проектов для приложений, написанных на Си и C++. Основное преимуществ о котором заявляет данный менеджер: быстрая сборка проектов. Поддерживает кроссплатформенную разработку, поддерживает все популярные компиляторы.
|
||||
Менеджер сборки проектов для приложений, написанных на Си и C++. Основное преимуществ менеджера: быстрая сборка проектов. Поддерживает кроссплатформенную разработку, поддерживает все популярные компиляторы.
|
||||
|
||||
|
||||
## Анализаторы кода
|
||||
|
||||
* **PVS Studio**
|
||||
|
||||
Сайт: https://pvs-studio.com
|
||||
Сайт: [https://pvs-studio.com](https://pvs-studio.com)
|
||||
|
||||
Стоимость: триал на 30 дней, далее платно
|
||||
|
||||
Кроссплатформенный (Windows, Linux, MacOS) статический анализатор кода от российской компании PVS-Studio. Основная задача анализатора - провести анализ исходников на предмет различных ошибок, которые не обнаруживаются компиляторами или на этапе ревью кода. Благодаря ему можно минимизировать ошибки, связанные с синтаксическими конструкциями языка и их подводными камнями.
|
||||
Кроссплатформенный (Windows, Linux, MacOS) статический анализатор кода от российской компании PVS-Studio. Основная задача анализатора - провести анализ исходников на предмет различных ошибок, которые не обнаруживаются компиляторами или на этапе ревью кода. Благодаря ему можно минимизировать ошибки, связанные с синтаксическими конструкциями языка и их подводными камнями.
|
||||
|
||||
|
||||
* **Cpp Check**
|
||||
|
||||
Сайт: https://cppcheck.sourceforge.io
|
||||
Сайт: [https://cppcheck.sourceforge.io](https://cppcheck.sourceforge.io)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Бесплатный анализатор кода. Поможет отловить распространенные ошибки при помощи анализа исходного кода, которые могут быть упущены компилятором или в процессе ревью кода. Кроссплатформенный, поддерживает популярные дистрибутивы Linux, работает под Windows.
|
||||
Бесплатный анализатор кода. Поможет отыскать распространенные ошибки при помощи статического анализа исходного кода, которые могут быть упущены компилятором или разработчикам. Кроссплатформенный, поддерживает популярные дистрибутивы Linux, работает под Windows.
|
||||
|
||||
|
||||
* **Valgrind**
|
||||
|
||||
Сайт: https://www.valgrind.org
|
||||
Сайт: [https://www.valgrind.org](https://www.valgrind.org)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
|
||||
* **SmartGit**
|
||||
|
||||
Сайт: https://www.syntevo.com/smartgit/
|
||||
Сайт: [https://www.syntevo.com/smartgit/](https://www.syntevo.com/smartgit/)
|
||||
|
||||
Стоимость: бесплатная для личных или open source проектов, в ином случае - платная
|
||||
|
||||
@@ -152,18 +152,18 @@
|
||||
|
||||
* **Atlassian SourceTree**
|
||||
|
||||
Сайт: https://www.sourcetreeapp.com/
|
||||
Сайт: [https://www.sourcetreeapp.com/](https://www.sourcetreeapp.com/)
|
||||
|
||||
Стоимость: бесплатно
|
||||
|
||||
Отличная бесплатная альтернатива для работы с git через графический интерфейс. Не уступает по функционалу SmartGit за исключением отсутствия собственного редактора разрешения конфликтов. Но это легко исправляется интеграцией Visual Code или любого другого редактора, который умеет сравнивать файлы между собой. Во всем остальном полностью дублирует функциональность SmartGit: кроссплатформенный, поддерживает интеграцию с публичными репозиториями: GitHub, BitBucket, GitLab и т.д.
|
||||
Отличная бесплатная альтернатива для работы с git через графический интерфейс. Не уступает по функционалу SmartGit, за исключением отсутствия собственного редактора разрешения конфликтов. Это легко исправляется интеграцией с Visual Code или любого другого редактора, который умеет сравнивать файлы между собой. Во всем остальном дублирует функциональность SmartGit: кроссплатформенный, поддерживает интеграцию с публичными репозиториями: GitHub, BitBucket, GitLab и т.д.
|
||||
|
||||
|
||||
* **Git Kraken**
|
||||
|
||||
Сайт: https://www.gitkraken.com/
|
||||
Сайт: [https://www.gitkraken.com/](https://www.gitkraken.com/)
|
||||
|
||||
Стоимость: бесплатная для личных или open source проектов, в ином случае - платная
|
||||
Стоимость: бесплатная для личных или open-source проектов, в ином случае - платная
|
||||
|
||||
Кроссплатформенный и высокоэффективный клиент для Windows, Linux, MacOS. Поддерживает интеграцию с GitHub, Bitbucket и Gitlab, а также весь необходимый функционал для повседневной работы: изучение истории изменений, прием/отправка изменений, переключение между ветками, встроенный редактор разрешения конфликтов и т.д.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user