Привет! Меня зовут Михаил Ефремов, я разработчик в юните, который занимается созданием и сопровождением внутренних инструментов для других разработчиков Авито. Я с детства интересуюсь книгами. Этот интерес помогал мне в учёбе и помогает сейчас, в работе.
![](https://habrastorage.org/getpro/habr/upload_files/2f3/3a6/d16/2f33a6d169011b950bee831f8ab27453.jpg)
В институте мне постоянно нужны были книги. Электронные в те времена были не очень распространены, поэтому я искал бумажные в библиотеках. Соцсетей в современном понимании тогда тоже не было. Зато у моего потока был сайт, в котором был раздел с учебными материалами по изучаемым предметам. Я загружал туда собственноручно отсканированные книги и ссылки на полезные материалы. Параллельно я формировал собственную библиотеку, а после учёбы начал вести самописную базу данных: собирал ссылки на книги, искал их в интернете, систематизировал, проставлял теги и категории.
С тех пор прошло много лет, и я решил применить свой опыт на работе — собирать полезные материалы для коллег. В прошлом году я сделал список литературы для своего юнита. А потом предложил коллегам из других подразделений поделиться книгами, которые они считают полезными. Так в Авито появилась целая внутренняя библиотека с подборками книг по разным направлениям — от дизайна до менеджмента. В статье я поделюсь книгами, которые читал сам и точно знаю, какую пользу они принесут разработчику.
Алгоритмы
В сфере IT и программирования сложно переоценить знание основных алгоритмов. Литература по основам алгоритмизации может быть интересна и полезна не только разработчикам. Советский учёный Андрей Петрович Ершов ещё в двадцатом веке назвал программирование второй грамотностью, и в двадцать первом веке мы убеждаемся в этом ещё сильнее. Я с ним согласен и считаю, что в наше время даже тем, кто далёк от сферы IT, полезно хотя бы чуть-чуть мыслить алгоритмически. Тем более это умение должно быть у технических специалистов всех профилей. Эти книги как раз развивают и углубляют знания по этой теме:
![](https://habrastorage.org/getpro/habr/upload_files/ddb/9cd/dab/ddb9cddab0df2a42eaa52eda135b2501.png)
Программирование. Теоремы и задачи | Александр Шень
Александр Шень — известный математик. Он воспитал большое количество профессионалов, в том числе и в сфере информационных технологий. В 90-е годы преподавал в московской школе № 57, где учеников обучали информатике и математике по продвинутым программам, и ребята побеждали на различных олимпиадах. Тогда он написал книгу по алгоритмам для учеников этой школы и всех, кому глубоко интересна эта тема. Я считаю, что хороший программист должен обладать определенной математической эрудицией. Эта книга — ступенька от эрудиции к практике.
![](https://habrastorage.org/getpro/habr/upload_files/308/79f/a6f/30879fa6ff74f19ce1060b6b59421d7a.png)
Девять алгоритмов, которые изменили будущее | Джон Маккормик
Особая ценность этой книги — в ярком описании того, какие интересные алгоритмические находки были заложены в основу современных информационных технологий. На алгоритме PageRank строится работа поисковых движков Гугла и Яндекса. А на базе алгоритмов асимметричной криптографии строятся современные приложения информационной безопасности. В книге рассматриваются также другие интересные алгоритмы, применяющиеся в системах, которыми мы пользуемся каждый день.
UNIX/Linux
Операционные системы класса UNIX — это центр моих личных интересов в области информационных технологий и моя любовь. Всё, что я когда-либо делал в карьере, так или иначе связано с UNIX или Linux — его современной реинкарнацией. Эти системы лежат в основе облаков и распределённых систем, «живущих» во множестве дата-центров по всей планете. Вся IT-индустрия уже много лет движется в сторону распределённых архитектур. Они появились благодаря идеям, которые реализованы в UNIX-системах. А ещё системы класса UNIX работают в самых разных устройствах и составляют основу интернета вещей. Поэтому важно знать, как они устроены.
![](https://habrastorage.org/getpro/habr/upload_files/69d/a92/b0e/69da92b0edb6c71a357b5d9fc8b72aa2.png)
Операционная система UNIX | Андрей Робачевский, Сергей Немнюгин, Ольга Стесик
Эти авторы — профессионалы с большим стажем в области операционных систем и сетей. Они стояли у истоков использования UNIX-систем у нас в стране. Они сравнивают классический Unix, Solaris, Linux, системы класса BSD, приводят примеры исходного кода и понятно объясняют основные принципы. Информация подана очень системно.
![](https://habrastorage.org/getpro/habr/upload_files/269/fea/1fa/269fea1faa57e4aa4e59ccb942f3665d.png)
Unix. Программное окружение | Брайан Керниган, Роб Пайк
Эта книга когда-то перевернула мое представление об операционных системах. Когда в институте я изучал OS DOS и Windows, у нас был кружок людей, которые продвигали UNIX-подобные системы. От них я узнал, что есть такая книга, купил её в бумажном виде, прочитал и понял: это невероятная инженерная красота! Кому, как не создателям UNIX рассказать о ней? Ведь Керниган и Пайк — одни из «патриархов» UNIX.
Golang
Это важный язык и в Авито, и в индустрии вообще. Если сейчас посмотреть статистику по вакансиям мейнстримных направлений, то можно увидеть, что знание Golang — одно из весьма востребованных во многих компаниях по всему миру.
Golang — потомок языка C, который придумали те же «патриархи» UNIX. Можно сказать, что это новый язык системного программирования: на нём пишут низкоуровневые инструменты, окружения операционных систем, облачные приложения. Мой основной язык — Python, но я постепенно вникаю в Go, потому что он очень перспективный. А книга такая:
![](https://habrastorage.org/getpro/habr/upload_files/a58/e6a/5f8/a58e6a5f819fbb633ca7b0b6e7b52b35.png)
Облачный Go | Мэтью А. Титмус
На мой взгляд, она на самом современном уровне описывает одно из мейнстримных применений Go — написание распределённых систем. Это не сухой учебник синтаксиса с абстрактными задачками, а действительно применение Go в облачном продакшене.
Python
В Авито, как и в целом в индустрии, Python так же важен, как и Go. У него низкий порог входа и он широко распространён, например, в этих сферах:
разработка бэкенда для web;
математика и анализ данных;
задачи автоматизации, с которыми работают SRE-инженеры, DevOPS-инженеры и другие специалисты, занимающиеся эксплуатацией больших систем.
![](https://habrastorage.org/getpro/habr/upload_files/6b2/302/640/6b2302640e383fe1622961c2a1a9c253.png)
Автостопом по Python | Кеннет Рейтц, Таня Шлюссер
Я считаю, что по изложению материала — это лучшая книга из тех, что я читал по теме. Она не похожа на обычные книги по программированию, потому что больше описывает инструментарий и среду, чем сам язык. Это — книга настоящего практика. А многие книги по программированию излишне теоретические и не дают информации об инструментарии разработчика.
Кеннет Рейтц — известный программист. Он является создателем библиотеки Requests, также он был одним из ведущих разработчиков платформы Heroku. В книге он описывает Python, как инструмент. Объясняет, как может быть организована среда разработки, какие библиотеки и вспомогательные средства могут быть использованы для тех или иных задач, а также, что немаловажно — как читать код, а об этом ведь почти нет книг.
![](https://habrastorage.org/getpro/habr/upload_files/699/cbf/e23/699cbfe2326585a0398a8a4f8732aebf.jpg)
Изучаем Python. В 2 томах | Марк Лутц
В этой книге хорошо изложена теоретическая база. Автор описал внутреннее устройство языка и основные концепции, почему все устроено так, а не иначе.
С
С — это мой первый язык, я его выучил ещё до Python. В продакшене я на нём писал не очень много, а вот во время учёбы — много :) Это был третий из изучавшихся мною языков программирования и первый «не учебный». Интерес к нему у меня пересекается с интересом к операционным системам, особенно UNIX-подобным.
Язык С не ушёл с арены. На нём продолжают писать ядра операционных систем, драйверы и компиляторы.
![](https://habrastorage.org/getpro/habr/upload_files/f47/86e/b4a/f4786eb4a5945eb9a120394d159e07a9.png)
The C Programming Language | Brian Kernighan, Dennis Ritchie
Это классическая книга по С, которая похожа на спецификацию языка — в ней нет ничего лишнего. При этом она легко читается, в ней очень компактно излагаются изящные концепции С, которые будут понятны специалистам любого уровня. Всё сжато и системно. Но этого достаточно, чтобы понять, как устроен этот язык, который лежит в основе вообще всего.
Базы данных
А тут всё просто: чтобы работать с данными, их нужно где-то хранить. Основы баз данных нужно знать любому специалисту по информационным технологиям.
![](https://habrastorage.org/getpro/habr/upload_files/31c/a02/44f/31ca0244f2a188eae0db482a9e9ac774.png)
Системы баз данных. Полный курс | Джеффри Ульман, Гектор Гарсиа-Молина, Дженнифер Уидом
Эта книга об основных концепциях баз данных, прежде всего реляционных. Её прелесть в том, что она написана вроде бы формальным языком, но воспринимается легко. Гектор Гарсиа-Молина был научным руководителем Сергея Брина — одного из создателей Гугла. Выдающийся человек написал выдающуюся книгу (что в принципе справедливо для всех рассмотренных в этой статье авторов).
![](https://habrastorage.org/getpro/habr/upload_files/8dd/85f/d46/8dd85fd4674ac0060351decb2e804849.png)
Введение в системы баз данных | Крис Дейт
Это классическая книга, которая претерпела массу переизданий, постепенно увеличиваясь в размерах. Сейчас она просто огромная, но так же, как и в предыдущих изданиях, читатель найдёт в ней изложение основ реляционных БД. Молина делает больший упор на математические основы, а Дейт берёт во внимание всё, что связано с использованием баз данных на практике: проектирование больших баз, оптимизацию. И конечно, тоже касается основ.
![](https://habrastorage.org/getpro/habr/upload_files/cea/a52/1dc/ceaa521dc2b8e4c45c32dff58a16d635.png)
Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL | Уилсон Джим Р., Редмонд Эрик
Это важная книга по теме нереляционных баз данных. Она даёт хороший сравнительный анализ некоторых из них. В том числе и графовых баз данных: Neo4j, MongoDB, Redis и ряда других.
Архитектура
Архитектура обобщает многое из сказанного выше. Знание основ архитектуры информационных систем важно как для инженеров так и для менеджеров.
Стандартная секция на любом собеседовании — это архитектурная секция (она же — System Design). На мой взгляд, подготовиться к такому интервью помогают эти книги:
![](https://habrastorage.org/getpro/habr/upload_files/c72/3bd/144/c723bd144a96dae05a6e2123faa38448.webp)
Высоконагруженные приложения | Мартин Клеппман
Классическая книга с неформальным названием «кабанчик» — потому что… Да, на обложке изображён кабанчик! Признаюсь честно, до конца я её так и не дочитал. Те, кто прочитал Клеппмана от корки до корки, вы с нами в одной комнате? Пожалуйста, оставьте след в комментариях :)
Некоторые мои коллеги тоже читают эту книгу долго, буквально годами. Но она крайне интересная. На русский язык её название переведено как «высоконагруженные приложения». Но это не означает highload в плане большого количества запросов. В оригинале книга называется Data Intensive, и это книга об акценте на обработку высоко востребованных, больших по объёму данных. Реально — про архитектуру самых больших систем в мире, которые только можно себе представить.
System Design. Подготовка к сложному интервью | Алекс Сюй
Интервью по System Design — это вход во многие интересные должности, позиции, задачи. Эта книга не только про интервью ради интервью. В ней — масса интересных рецептов построения классических больших систем, таких как соцсеть, лента новостей, облачное хранилище, поисковый робот, видеостриминговый сервис и другие. Представлены их схемы, описания, узкие места, метрики и всё, что нужно знать при проектировании больших систем.
![](https://habrastorage.org/getpro/habr/upload_files/375/2c7/00b/3752c700b913a00de1addffc444255a7.png)
Site Reliability Engineering. How Google runs production systems | Jennifer Petoff, Niall Murphy, Betsy Beyer, Chris Jones
Эта книга тоже относится к архитектуре больших систем. В ней говорится о том, как с ними работать, поддерживать их, и о культуре SRE в принципе. Если предыдущие две книги — про то, как проектировать системы, то эта книга про то, как с такими системами жить: строить эксплуатацию, дежурство, оценку состояния, развития, как проводить траблшутинг — разбор проблемных случаев, и другие важные вещи. Есть издание на русском языке.
Если вы читали эти книги и вам есть за что их похвалить или поругать — давайте обсудим в комментариях. И обязательно делитесь своими книжными находками по темам. Пусть будет ещё больше пользы.
А ещё делюсь нашей библиотекой, которую упоминал в начале статьи. В ней есть книги по менеджменту, дизайну, управлению проектами и продуктами, выступлениям, презентациям и другим темам в IT и Digital. Выбирайте, читайте и прокачивайте свои скиллы.
Найти полезное для себя →
Предыдущая статья: Сравниваем скорость и оверхеды библиотек Deep Copy для Go