Files
CppDeveloperRoadmap/Books.md
2021-10-01 11:42:03 +03:00

135 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Книги и материалы
Здесь собраны книги, которые помогут вам сориентироваться, и задать свой вектор обучения. Все книги поделены на несколько разделов, которые касаются различных навыков. Рекомендуем вам обзорно посмотреть каждый раздел, согласно желаемому грейду, и подобрать набор литературы под себя.
## Pre-Junior
### Мотивация и опыт
- [Фаулер Чед - Программист-фанатик](https://www.ozon.ru/product/programmist-fanatik-32218784/?asb=ccybIdrVOtKbfO3XYxD6qZu%252BqA4iy4P%252BHkGUikETAiA%253D&asb2=cy4OBlq-08U5_VqkoPsv0ezJyaKuhUMmccxNvr2bH8A&keywords=%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82+%D1%84%D0%B0%D0%BD%D0%B0%D1%82%D0%B8%D0%BA&sh=etF_rKzq)
Эту книгу можно считать признанной классикой в мире разработки, в которой Чед Фаулер пытается поделиться своим видением: как стать высококлассным, востребованным специалистом и оставаться на гребне волны.
### Computer Science
- [Фило Владстон Феррейра - Теоретический минимум по Computer Science](https://www.ozon.ru/product/teoreticheskiy-minimum-po-computer-science-vse-chto-nuzhno-programmistu-i-razrabotchiku-144946027/?sh=1zjF0Mqn)
Обзорная книга, которая рассказывает о различных направлениях Computer Science: математический аппарат, обзор алгоритмом, базы данных, устройство компьютера и т.д. Она может стать хорошей отправной точкой, чтобы подыскать интересующие направления и расставить приоритеты для себя.
- [Чарльз Петцольд - Код. Тайный язык информатики](https://www.ozon.ru/context/detail/id/125884/)
Прежде чем начать изучение языка, рекомендуем почитать данную книгу. Она расскажет простым языком о том как устроен компьютер, как он работает на физическом уровне. Здесь отсутствуют какие-либо сложные технические или академические детали. Книга содержит в себе основы основ, которые вряд ли в скором времени потеряют свою актуальность. Это поможет вам лучше понять фундаментальные идеи языка C++ позднее. Является отличным дополнением к предыдущей книге, т.к. глубже раскрывает устройство компьютера.
- [Адитья Бхаргава - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих](https://www.ozon.ru/product/grokaem-algoritmy-illyustrirovannoe-posobie-dlya-programmistov-i-lyubopytstvuyushchih-139296295/?sh=MERnHW_O)
Отличное вводное пособие в мир алгоритмов. Написано легким языком, который поймет большинство новичков. Также есть немного практических задач, чтобы попробовать написать свои первые алгоритмы.
### C++
- [Липпман Стенли - Язык программирования C++. Базовый курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-bazovyy-kurs-147417585/?sh=QOX3qGug)
Отличное дополнение к книге Стивена Праты. К ней хорошо обращаться параллельно с предыдущей. Рекомендуем вам сами найти баланс между двумя книгами, т.к. информация подается по-разному, и шанс понять ту или иную тему у вас повысится.
- [Стивен Прата - Язык программирования C++. Лекции и упражнения (шестое издание)](https://www.ozon.ru/product/yazyk-programmirovaniya-c-lektsii-i-uprazhneniya-147417584/?utm_source=google&utm_medium=cpc&utm_campaign=RF_Product_Shopping_Books_super&gclid=CjwKCAjw7diEBhB-EiwAskVi11zEQ2QeqLjT8AEBCYC5IWzgpdgLIErY3c7eLfgnPSFic9M8Eh2pPRoCSHIQAvD_BwE)
Наиболее актуальная для новичков, с которой стоит начать свой путь изучения C++. Не требует наличия каких-то специфичных знаний, а также имеет набор упражнений к каждой главе. Они помогут вам отработать и понять фундаментальные возможности языка.
- В дополнение к учебнику можно порекомендовать следующие видео от лекторов МФТИ:
- Илья Мещерин: [Курс лекций по C++](https://www.youtube.com/playlist?list=PL4_hYwCyhAvY2dY_tnTv3-TJThzcloCvM)
- Тимофей Хирьянов:
- [Лекции C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fItmofHO4KuGjfGtbQtEj-x)
- [Алгоритмы и структуры данных на C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fL_5Xvnufpwj2uYZnZBBnsr)
### Технические навыки
- [MSDN](https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160)
Если вы начинаете изучать язык самостоятельно, то рекомендуем вести разработку первых программ или выполнять упражнения в IDE: Microsoft Visual Studio (Community Edition). На сегодняшний день, это маскимально дружелюбная IDE к новичкам, как в установке, так и в использовании (и при этом абсолютно бесплатно!). Это позволит максимально сконцентрироваться на изучении языка, а не на борьбе с рабочим окружением. На сайте вы найдете небольшой учебник, который расскажет: как установить Visual Studio, создать первый консольный проект и написать первое приложение:
## Junior
### Мотивация и опыт
- [Роберт Мартин - Идеальный программист](https://www.ozon.ru/product/idealnyy-programmist-kak-stat-professionalom-razrabotki-po-martin-robert-k-211433126/?asb=z4%252BBD7UDRGAKgK5PMnilay5QBkwvjGXgnMhfF1fAOWM%253D&asb2=Gvhxd5LT0NA_AobRO1muUz0icHnQ6j-JL2zxEOH1wzQ&keywords=%D0%B8%D0%B4%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82&sh=6BDpuJeM)
Дядюшка Боб вывел набор советов и рекомендаций, которые помогут вам выжить в индустрии. Эта книга не только про технические навыки, но и про психологические аспекты работы, и как справляться с ними.
- [Роберт Мартин - Чистый код. Создание, анализ и рефакторинг](https://www.ozon.ru/product/chistyy-kod-sozdanie-analiz-i-refaktoring-chistyy-kod-sozdanie-analiz-i-refaktoring-142429922/?sh=awbarJsR)
Сегодня вокруг этой книги витает все больше и больше критики. Тем не менее мы считаем, что она принесет новичкам больше пользы, нежели чем вреда, в краткосрочной перспективе. Эта книга даст набор рабочих рекомендаций, которые помогут писать более структурированный, читаемый и поддерживаемый код. Как и с любым другим знанием, его не нужно слепо превращать в карго-культ. Используйте знания с умом. Подберите для себя те техники и приемы из книги, которые считаете разумными.
- [Стив Макконнелл - Совершенный код. Мастер-класс](https://www.ozon.ru/product/sovershennyy-kod-master-klass-138437220/?sh=dxL38m9c)
Не смотря на почтенный возраст книги, её можно считать библией разработчика. Она системно описывает устройство индустрии, а также дает массу советов: каким образом расти и развиваться, чтобы стать эффективным специалистом.
### Computer Science
- [Томас Кормен - Алгоритмы. Вводный курс](https://www.ozon.ru/product/algoritmy-vvodnyy-kurs-24903185/?sh=oABFs2sD)
Хорошее продолжение после "Грокаем алгоритмы". Книга знакомит с базовыми распространенными алгоритмами сортировок, работы со списками и т.д., но на более глубоком уровне. Все ещё написана довольно простым языком, потому она может помочь подготовиться к глубокому погружению в алгоритмы.
### C++
- [Скотт Мейерс - Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ](https://www.ozon.ru/product/effektivnoe-ispolzovanie-c-55-vernyh-sovetov-uluchshit-strukturu-i-kod-vashih-programm-2610625/?sh=VdYASWTH)
Отличный сборник практических рекомендаций по использованию различных языковых средств C++. Данная книга написана во времена стандарта C++03, но ценность информации по-прежнему остается актуальной. Все рекомендации, техники и советы, описанные в книге, масштабируются и активно переиспользуются в новых стандартах языка.
- [Александреску Андрей, Саттер Герб - Стандарты программирования на С++](https://www.ozon.ru/product/standarty-programmirovaniya-na-s-2381848/?sh=SUs05K52)
Небольшая книга, которая описывает общепринятые практики и правила написания кода в коммерческих проектах. Данная книга - это агрегация правил из многих компаний. Данная работа стала прообразом сайта: [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). Тем не менее рекомендуем прочитать данную книгу, т.к. она довольно короткая и даст вам общее представление, какие правила написания кода распространены во многих проектах.
### Технические навыки
- [Фримен Эрик, Робсон Элизабет - Head First. Паттерны проектирования](https://www.ozon.ru/product/head-first-patterny-proektirovaniya-obnovlennoe-yubileynoe-izdanie-144233005/?sh=VWSHgt2E)
Отличная книга для начала изучения паттернов проектирования. В качестве неплохой альтернативы можем также предложить сайт [refactoring.guru](https://refactoring.guru/design-patterns), но в данной книге также имеется масса практических заданий, которые помогут вам лучше усвоить идеи паттернов и в каких случаях их применять.
- [Андрей Созыкин - Компьютерные сети. Базовый курс](https://www.youtube.com/playlist?list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1)
Прекрасный курс видеолекций по компьютерным сетям. За основу взяты книги Таненбаума и других классиков по теме. В большинстве проектов этих знаний будет достаточно, чтобы не совершать очевидных ошибок при работе с сетями. Для более глубокого погружения в тему вы можете ознакомиться с книгами Таненбаума или других авторов, или же посмотреть другие курсы на канале Андрея.
## Middle
### C++
- [Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14](https://www.ozon.ru/product/effektivnyy-i-sovremennyy-s-42-rekomendatsii-po-ispolzovaniyu-c11-i-c14-effektivnyy-i-sovremennyy-34747131/?sh=CHL5ECEP)
Продолжение предыдущей книги Скотта Мейерса. Сборник советов для работы с новыми стандартами C++11 и C++14.
- [Параллельное программирование на С++ в действии. Практика разработки многопоточных программ](https://www.ozon.ru/product/parallelnoe-programmirovanie-na-s-v-deystvii-praktika-razrabotki-mnogopotochnyh-programm-217051361/?asb=uff2kmWPtH7totJyGfGyYsPFkTR%252BIxeTdrNvGvZlqzc%253D&asb2=L78tfqOpsfrZsUEmgaZ9kZgbmpv4Jyn9UhBcKxIEO3Q&keywords=%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+C%2B%2B&sh=nq_ppy1R)
Отличное руководство по многопоточному программированию в составе стандартной библиотеки C++. Представлено подробное описание ко всем примитивам библиотеки. Также даются объяснения работы этих примитивов, скрытыми под абстракциями.
- [Герб Саттер - Решение сложных задач на С++](https://www.ozon.ru/product/reshenie-slozhnyh-zadach-na-s-1273200/?sh=gy2qlNpv) и [Герб Саттер - Новые сложные задачи на C++](https://www.ozon.ru/product/novye-slozhnye-zadachi-na-c-2342923/?sh=PpLM-a9C)
Сборники, которые описывают разнообразные задачи с точки зрения проектирования и написания кода. Предлагают коллекцию эффективных решений, многие из которых считаются уже классическими идиомами языка. Многие идиомы, представленные в книге, встречаются на проектах практически повсеместно.
- [Курт Гантерог - Оптимизация программ на C++](https://www.ozon.ru/product/optimizatsiya-programm-na-c-proverennye-metody-povysheniya-proizvoditelnosti-140145932/?sh=OlHzzZHG)
Хороший сборник советов и рекомендаций по улучшению производительности приложений на языке C++. Некоторые советы основаны на идиомах и конструкциях языка, описанных Гербом Саттером в предложенных книгах выше или Скоттом Майерсом. Потому рекомендуется её прочтение после знакомства с предыдущими книгами.
### Технические навыки
- [Джонсон Ральф, Хелм Ричард - Приемы объектно-ориентированного проектирования. Паттерны проектирования](https://www.ozon.ru/product/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-2457392/?sh=U_1tfTeu)
Классический справочник по паттернам проектирования. Каждый паттерн детально разбирается и предлагаются случаи, где они могут быть применены. Это книга будет отличным продолжением после "Паттернов проектирования" от Эрика Фримена. Будьте готовы, что читается она тяжелее, чем предыдущая.
- [Гэри Маклин Холл - Адаптивный код: гибкое кодирование с помощью паттернов проектирования и принципов SOLID](https://www.ozon.ru/product/adaptivnyy-kod-gibkoe-kodirovanie-s-pomoshchyu-patternov-proektirovaniya-i-printsipov-solid-142089791/?sh=yQeAC0en)
Одна из достойнейших книг, которая простым языком объясняет принципы SOLID. Примеры написаны на языке C#, но это не должно вызвать сложностей при их чтении, т.к. используется минималистичный набор инструкций языка.
- [Надежда Поликарпова, Анатолий Шалыто - Автоматное программирование](https://www.ozon.ru/product/avtomatnoe-programmirovanie-28260411/?sh=KMISCILZ)
Отличное описание того, как подходить к написанию программ посредством конечных автоматов. Наверно более простого и элегантного описания теории конечных автоматов и её практического применения сложно будет отыскать. Рекомендуем вам поизучать пару коммерческих работ, выполненных в описанной парадигме. Ссылки к исходному коду вы найдете в конце книги.
- [Ulrich Drepper - What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)
Хорошая обзорная статья, дающая представление о том, как устроена память компьютера и зачем она так устроена. Даёт как высокоуровневое представление, так и набрасывает низкоуровневых деталей, если есть желание в них углубляться.
## Senior
- Преисполняться в познании индустрии