# 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/shablony-c-spravochnik-razrabotchika-145861864)

    Наиболее свежая и актуальная работа по использованию шаблонов в C++. Это фундаментальная работа, которая описывает наиболее актуальные механизмы шаблонов, внедренные в новых стандартах, вплоть до C++17. Если вам необходимо писать параметризуемый код, то этот справочник станет мощной опорой в написании шаблонного кода. Вы познакомитесь, как с азами этого аспекта метапрограммирования, так различными нюансами того или иного приема.

- [Курт Гантерог - Оптимизация программ на 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/chistaya-arhitektura-iskusstvo-razrabotki-programmnogo-obespecheniya-martin-robert-martin-robert-211433166)

    Ещё одна работа дядюшки Боба. На этот раз о том, что прежде чем бросаться писать код, стоит подумать об архитектуре приложения/компонента, каким образом принимать те или иные архитектурные решения, на чем заострить свое внимание во время продумывания дизайна решения. Эта книга станет хорошим началом для тех, кто интересуется архитектурными задачами в разработке ПО, но не знает с чего начать. Знания из этой книги пригодятся подавляющему большинству инженеров, чтобы не допускать очевидные ошибки во время проектирования дизайна ПО к своим задачам.

- [Надежда Поликарпова, Анатолий Шалыто  - Автоматное программирование](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)
    
    Хорошая обзорная статья, дающая представление о том, как устроена память компьютера и зачем она так устроена. Даёт как высокоуровневое представление, так и набрасывает низкоуровневых деталей, если есть желание в них углубляться.


## Операционные системы

- [Эндрю Таненбаум - Современные операционные системы](https://www.ozon.ru/product/sovremennye-operatsionnye-sistemy-tanenbaum-endryu-bos-herbert-211432884)

    Одна из лучших книг про операционные системы, которую можно встретить. Фундаментальная работа по их устройству: файловая система, сеть, менеджмент памяти, планировщик задач, многопоточноть и т.д. Каждый раздел книги очень подробно рассказывает про каждую часть устройства операционной системы, при этом все объясняется простым языком. Она старается рассказать про общее устройство ОС, сильно не погружаясь в детали того или иного дистрибутива.

- [Марк Руссинович - Внутреннее устройство Windows](https://www.ozon.ru/product/vnutrennee-ustroystvo-windows-russinovich-mark-solomon-devid-russinovich-mark-solomon-devid-211433055)

    Данная книга обсуждает те же вопросы, что и предыдущая книга, но акцентируется исключительно на ОС Microsoft Windows. Она детально останавливается на каждом аспекте устройства ОС на с проекцией на Windows, а также рассказывает о различных нюансах и аспектах, которые могут быть официально не задекларированы разработчиками. Полезная книга для тех, кто ведет разработку низкоуровневых приложений, которым требуется интенсивное взаимодействие с системными библиотеками ОС.


## Компьютерные сети

- [Эндрю Таненбаум - Компьютерные сети](https://www.ozon.ru/product/kompyuternye-seti-tanenbaum-endryu-uezeroll-devid-tanenbaum-endryu-uezeroll-devid-211432815)

    Классическая книга по теоретическим основам компьютерных сетей. Содержит в себе подробное описание, начиная с физического уровня и заканчивая протоколами передачи данных. Будет крайне полезна для тех разработчиков, которые плотно занимаются проектами, взаимодействующие с сетями. В ином случае вам будет достаточно просмотреть видеокурс Андрея Созыкина, представленный в разделе [Junior](Junior.md). Его курс базируется на данной книге, но также содержит в себе массу дополнений.

- [Олифер Виктор - Компьютерные сети. Принципы, технологии, протоколы](https://www.ozon.ru/product/kompyuternye-seti-printsipy-tehnologii-protokoly-olifer-viktor-grigorevich-olifer-211432410)

    Ещё одна замечательная книга по основам компьютерных сетей. В каких-то моментах подача информации может показаться чуть сложнее, по сравнению с работой Таненбаума. Потому рекомендуем выбрать ту книгу, повествование которой больше подходит именно для вас.