Привет! Меня зовут Михаил Ефремов, я разработчик в юните, который занимается созданием и сопровождением внутренних инструментов для других разработчиков Авито. Я с детства интересуюсь книгами. Этот интерес помогал мне в учёбе и помогает сейчас, в работе. 

В институте мне постоянно нужны были книги. Электронные в те времена были не очень распространены, поэтому я искал бумажные в библиотеках. Соцсетей в современном понимании тогда тоже не было. Зато у моего потока был сайт, в котором был раздел с учебными материалами по изучаемым предметам. Я загружал туда собственноручно отсканированные книги и ссылки на полезные материалы. Параллельно я формировал собственную библиотеку, а после учёбы начал вести самописную базу данных: собирал ссылки на книги, искал их в интернете, систематизировал, проставлял теги и категории. 

С тех пор прошло много лет, и я решил применить свой опыт на работе — собирать полезные материалы для коллег. В прошлом году я сделал список литературы для своего юнита. А потом предложил коллегам из других подразделений поделиться книгами, которые они считают полезными. Так в Авито появилась целая внутренняя библиотека с подборками книг по разным направлениям — от дизайна до менеджмента. В статье я поделюсь книгами, которые читал сам и точно знаю, какую пользу они принесут разработчику.

Алгоритмы

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

Программирование. Теоремы и задачи | Александр Шень

Александр Шень — известный математик. Он воспитал большое количество профессионалов, в том числе и в сфере информационных технологий. В 90-е годы преподавал в московской школе № 57, где учеников обучали информатике и математике по продвинутым программам, и ребята побеждали на различных олимпиадах. Тогда он написал книгу по алгоритмам для учеников этой школы и всех, кому глубоко интересна эта тема. Я считаю, что хороший программист должен обладать определенной математической эрудицией. Эта книга — ступенька от эрудиции к практике.

Девять алгоритмов, которые изменили будущее | Джон Маккормик
Особая ценность этой книги — в ярком описании того, какие интересные алгоритмические находки были заложены в основу современных информационных технологий. На алгоритме PageRank строится работа поисковых движков Гугла и Яндекса. А на базе алгоритмов асимметричной криптографии строятся современные приложения информационной безопасности. В книге рассматриваются также другие интересные алгоритмы, применяющиеся в системах, которыми мы пользуемся каждый день.

UNIX/Linux

Операционные системы класса UNIX — это центр моих личных интересов в области информационных технологий и моя любовь. Всё, что я когда-либо делал в карьере, так или иначе связано с UNIX или Linux — его современной реинкарнацией. Эти системы лежат в основе облаков и распределённых систем, «живущих» во множестве дата-центров по всей планете. Вся IT-индустрия уже много лет движется в сторону распределённых архитектур. Они появились благодаря идеям, которые реализованы в UNIX-системах. А ещё системы класса UNIX работают в самых разных устройствах и составляют основу интернета вещей. Поэтому важно знать, как они устроены.

Операционная система UNIX | Андрей Робачевский, Сергей Немнюгин, Ольга Стесик

Эти авторы — профессионалы с большим стажем в области операционных систем и сетей. Они стояли у истоков использования UNIX-систем у нас в стране. Они сравнивают классический Unix, Solaris, Linux, системы класса BSD, приводят примеры исходного кода и понятно объясняют основные принципы. Информация подана очень системно.

Unix. Программное окружение | Брайан Керниган, Роб Пайк

Эта книга когда-то перевернула мое представление об операционных системах. Когда в институте я изучал OS DOS и Windows, у нас был кружок людей, которые продвигали UNIX-подобные системы. От них я узнал, что есть такая книга, купил её в бумажном виде, прочитал и понял: это невероятная инженерная красота! Кому, как не создателям UNIX рассказать о ней? Ведь Керниган и Пайк — одни из «патриархов» UNIX.

Golang

Это важный язык и в Авито, и в индустрии вообще. Если сейчас посмотреть статистику по вакансиям мейнстримных направлений, то можно увидеть, что знание Golang — одно из весьма востребованных во многих компаниях по всему миру.

Golang — потомок языка C, который придумали те же «патриархи» UNIX. Можно сказать, что это новый язык системного программирования: на нём пишут низкоуровневые инструменты, окружения операционных систем, облачные приложения. Мой основной язык — Python, но я постепенно вникаю в Go, потому что он очень перспективный. А книга такая:

Облачный Go | Мэтью А. Титмус

На мой взгляд, она на самом современном уровне описывает одно из мейнстримных применений Go — написание распределённых систем. Это не сухой учебник синтаксиса с абстрактными задачками, а действительно применение Go в облачном продакшене.

Python

В Авито, как и в целом в индустрии, Python так же важен, как и Go. У него низкий порог входа и он широко распространён, например, в этих сферах: 

  • разработка бэкенда для web; 

  • математика и анализ данных; 

  • задачи автоматизации, с которыми работают SRE-инженеры, DevOPS-инженеры и другие специалисты, занимающиеся эксплуатацией больших систем.

Автостопом по Python | Кеннет Рейтц, Таня Шлюссер

Я считаю, что по изложению материала — это лучшая книга из тех, что я читал по теме. Она не похожа на обычные книги по программированию, потому что больше описывает инструментарий и среду, чем сам язык. Это — книга настоящего практика. А многие книги по программированию излишне теоретические и не дают информации об инструментарии разработчика. 

Кеннет Рейтц — известный программист. Он является создателем библиотеки Requests, также он был одним из ведущих разработчиков платформы Heroku. В книге он описывает Python, как инструмент. Объясняет, как может быть организована среда разработки, какие библиотеки и вспомогательные средства могут быть использованы для тех или иных задач, а также, что немаловажно — как читать код, а об этом ведь почти нет книг. 

Изучаем Python. В 2 томах | Марк Лутц

В этой книге хорошо изложена теоретическая база. Автор описал внутреннее устройство языка и основные концепции, почему все устроено так, а не иначе.

С

С — это мой первый язык, я его выучил ещё до Python. В продакшене я на нём писал не очень много, а вот во время учёбы — много :)  Это был третий из изучавшихся мною языков программирования и первый «не учебный». Интерес к нему у меня пересекается с интересом к операционным системам, особенно UNIX-подобным.

Язык С не ушёл с арены. На нём продолжают писать ядра операционных систем, драйверы и компиляторы.  

The C Programming Language | Brian Kernighan, Dennis Ritchie

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

Базы данных

А тут всё просто: чтобы работать с данными, их нужно где-то хранить. Основы баз данных нужно знать любому специалисту по информационным технологиям.

Системы баз данных. Полный курс | Джеффри Ульман, Гектор Гарсиа-Молина, Дженнифер Уидом

Эта книга об основных концепциях баз данных, прежде всего реляционных. Её прелесть в том, что она написана вроде бы формальным языком, но воспринимается легко. Гектор Гарсиа-Молина был научным руководителем Сергея Брина — одного из создателей Гугла. Выдающийся человек написал выдающуюся книгу (что в принципе справедливо для всех рассмотренных в этой статье авторов).

Введение в системы баз данных | Крис Дейт

Это классическая книга, которая претерпела массу переизданий, постепенно увеличиваясь в размерах. Сейчас она просто огромная, но так же, как и в предыдущих изданиях, читатель найдёт в ней изложение основ реляционных БД. Молина делает больший упор на математические основы, а Дейт берёт во внимание всё, что связано с использованием баз данных на практике: проектирование больших баз, оптимизацию. И конечно, тоже касается основ.

Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL | Уилсон Джим Р., Редмонд Эрик

Это важная книга по теме нереляционных баз данных. Она даёт хороший сравнительный анализ некоторых из них. В том числе и графовых баз данных: Neo4j, MongoDB, Redis и ряда других.

Архитектура

Архитектура обобщает многое из сказанного выше. Знание основ архитектуры информационных систем важно как для инженеров так и для менеджеров. 

Стандартная секция на любом собеседовании — это архитектурная секция (она же — System Design). На мой взгляд, подготовиться к такому интервью помогают эти книги:

Высоконагруженные приложения | Мартин Клеппман

Классическая книга с неформальным названием «кабанчик» — потому что… Да, на обложке изображён кабанчик! Признаюсь честно, до конца я её так и не дочитал. Те, кто прочитал Клеппмана от корки до корки, вы с нами в одной комнате? Пожалуйста, оставьте след в комментариях :)

Некоторые мои коллеги тоже читают эту книгу долго, буквально годами. Но она крайне интересная. На русский язык её название переведено как «высоконагруженные приложения». Но это не означает highload в плане большого количества запросов. В оригинале книга называется Data Intensive, и это книга об акценте на обработку высоко востребованных, больших по объёму данных. Реально — про архитектуру самых больших систем в мире, которые только можно себе представить. 

System Design. Подготовка к сложному интервью | Алекс Сюй
Интервью по System Design — это вход во многие интересные должности, позиции, задачи. Эта книга не только про интервью ради интервью. В ней — масса интересных рецептов построения классических больших систем, таких как соцсеть, лента новостей, облачное хранилище, поисковый робот, видеостриминговый сервис и другие. Представлены их схемы, описания, узкие места, метрики и всё, что нужно знать при проектировании больших систем.

Site Reliability Engineering. How Google runs production systems | Jennifer Petoff, Niall Murphy, Betsy Beyer, Chris Jones

Эта книга тоже относится к архитектуре больших систем. В ней говорится о том, как с ними работать, поддерживать их, и о культуре SRE в принципе. Если предыдущие две книги — про то, как проектировать системы, то эта книга про то, как с такими системами жить: строить эксплуатацию, дежурство, оценку состояния, развития, как проводить траблшутинг — разбор проблемных случаев, и другие важные вещи. Есть издание на русском языке.

Если вы читали эти книги и вам есть за что их похвалить или поругать — давайте обсудим в комментариях. И обязательно делитесь своими книжными находками по темам. Пусть будет ещё больше пользы.

А ещё делюсь нашей библиотекой, которую упоминал в начале статьи. В ней есть книги по менеджменту, дизайну, управлению проектами и продуктами, выступлениям, презентациям и другим темам в IT и Digital. Выбирайте, читайте и прокачивайте свои скиллы.
Найти полезное для себя →

Предыдущая статья: Сравниваем скорость и оверхеды библиотек Deep Copy для Go

Комментарии (0)