Что читать Golang-разработчику. Семь главных книг: от Донована и Кернигана до МакДауэлл

Спрос на бэкенд-разработчиков — а Go неотделим от бэкенд-программирования — стабильно растет. У самого же Golang немало плюсов: простой, строгий, статически типизированный, он обладает развитой стандартной библиотекой и славится поддержкой параллельного и асинхронного программирования. При этом в Golang нет классов и нет поддержки наследования, что значительно повышает удобство поддержки кода. Благодаря этим и другим преимуществам Go в последние годы сохраняет статус популярного и перспективного языка.

В МойОфис мы широко используем Go в качестве основного языка для разработки корпоративной почты нового поколения Mailion. При этом разрабатываем на нём не только микросервисы, но и собственное хранилище с поддержкой дедупликации (про устройство Mailion читайте здесь). В связи с этим мы постоянно следим за книжными новинками и актуальными темами современной бэкенд-разработки. Специальной литературы по теме Golang существует немало, однако с помощью наших разработчиков мы выбрали самые важные, профессионально полезные и увлекательно написанные издания.

Делимся рекомендациями книг под катом!


Алан А. А. Донован, Брайан У. Керниган «Язык программирования Go»

Приобрести книгу.

Нестареющая классика от создателей языка Go. Книга подробно описывает предназначение и преимущества Golang, показывает, как писать понятные идиоматические программы и решать практические задачи, а также отвечает на вопросы, которые могут возникнуть при изучении Go. Более авторитетного издания по этой теме просто не существует. Руководство поэтапно переходит от общих вопросов и основных концепций к практическим инструкциям и низкоуровневым возможностям языка. Книга будет интересна и новичкам, и опытным разработчикам.

Достоинства:

  • даёт структурное понимания языка от А до Я;

  • легко читается.

Недостатки:

  • не подходит для новичков: требуются знания базовых концепций информатики и языков программирования;

  • нет информации о менеджере зависимостей, появившемся в более поздних версиях языка;

  • отсутствуют ответы на задания.

Adam Freeman 'Pro Go: The Complete Guide to Programming Reliable and Efficient Software Using Golang 1st ed. Edition'

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

Приобрести книгу.

Достоинства:

  • полноценный мануал по стандартной библиотеке языка Go, построенный на конкретных примерах;

  • подробное и детальное рассмотрение особенностей языка «от простого к сложному».

Недостатки:

  • книга не подходит продвинутым разработчикам Go.

К. Индрасири, Д. Курупу «gRPC. Запуск и эксплуатация облачных приложений. Go и Java для Docker и Kubernetes»

Приобрести книгу.

Микросервисные cloud-native архитектуры уверенно заняли своё место в ИТ. Развитие механизмов межсервисной коммуникации позволяет сервисам подключаться друг к другу по сети и обмениваться информацией. Одной из наиболее востребованных на сегодняшний день технологий для организации межсервисного взаимодействия является gRPC. Он предлагает удобные кросс-языковые абстракции для обмена данными по сети. Разработчики на языке Go, а это в основном разработчики бэкенда, часто применяют gRPC и сталкиваются с рядом сложностей, в которых не всегда легко разобраться. Развёрнутой информации о gRPC не очень много, из-за чего остаётся немало «белых пятен». Пробел был восполнен этой книгой. Авторы подробно описали «кухню» gRPC и ответили на самые «больные» вопросы разработчиков и архитекторов.

Достоинства:

  • написана простым языком;

  • поможет структурировать знания тем, кто владеет базовыми навыками;

  • много конкретных примеров.

Недостатки:

  • примеры кода актуальны для более старых версий библиотеки gRPC;

  • есть неточности в переводе терминологии;

  • недостаточно деталей о внутренней имплементации gRPC.

Gayle Laakmann McDowell 'Cracking the Coding Interview: 189 Programming Questions and Solutions 6th Edition'

Приобрести книгу.

Что делать, когда просят быстро разработать алгоритм, а затем так же быстро написать безупречный код на доске? Определённо стоит быть к этому готовым. Автор, неоднократно побывавшая в ролях интервьюера и кандидата, учит тому, что даст возможность проявить себя на собеседовании наилучшим образом. Для написания этой книги МакДауэлл взяла интервью у сотен инженеров-программистов. Есть информация, что именно по ней разработчики Google готовятся к апгрейдам. Из издания вы узнаете, как раскрыть подсказки и обнаружить скрытые детали, как разбить сложную проблему на более простые подзадачи, как продвинуться, если вы застряли, изучите (или освоите заново) основные концепции программирования и попрактикуетесь в решении 189 задач для интервью. Problem solving — навык, который необходимо постоянно тренировать, если вам важно построить нетривиальную карьеру в ИТ.

Достоинства:

  • 189 реальных задач из реальных интервью с вариантами их решения;

  • самая популярная в Силиконовой долине книга для прохождения технического собеседования.

Недостатки:

  • примеры в книге выполнены на языке Java (что, впрочем, вряд ли станет препятствием для Go-разработчика);

  • целые главы книги посвящены столь нелюбимым многими программистами задачам на сдвиг битов (bit shifting) и головоломкам (brain teasers);

  • мало задач высшего уровня сложности (за ними лучше идти на LeetCode).

Alex Xu 'System Design Interview – An insider's guide'

Приобрести книгу.

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

Достоинства:

  • качественная информация, которая позволяет сложить целостное представление о процессе построения архитектуры крупных веб-проектов;

  • есть вариант с переводом на русский язык.

Недостатки:

  • в некоторых примерах автор чрезмерно концентрируется на деталях конкретного алгоритма и забывает описать общую картину;

  • редко бывает в продаже.

М. Клеппман «Высоконагруженные приложения. Программирование, масштабирование, поддержка»

Приобрести книгу.

Материалы этой книги будут полезны всем бэкенд-разработчикам вне зависимости от применяемого языка программирования. Издание обязательно к прочтению всем, кто занимается разработкой и проектированием высоконагруженных и отказоустойчивых распределенных систем. В книге Клеппмана представлены основные принципы, алгоритмы и трейд-оффы, встречающиеся при разработке высоконагруженных приложений. В первой части книги на конкретных примерах известных фреймворков и программных пакетов рассматривается общая проблематика распределённых вычислений и баз данных. Однако наибольший интерес представляют вторая и третья части, в которых автор даёт введение в теорию распределённых систем, объясняет ключевые понятия распределённых транзакций и консенсуса, рассказывает о возможностях и ограничениях протоколов синхронизации реплик в распределённых СУБД. Все эти концепции рассматриваются в контексте темы построения высоконагруженных приложений. Для изучения материала потребуется разноплановая алгоритмическая подготовка и базовое понимание внутреннего устройства баз данных.

Достоинства:

  • рассмотрен широкий перечень вопросов, встающих перед разработчиком, занимающимся масштабированием веб-приложения;

  • исчерпывающий список литературы для дальнейшего изучения темы.

Недостатки:

  • «неровности» уровня книги: начало книги будет интересно только начинающим разработчикам, середина и конец — только продвинутым.

А. Петров «Распределенные данные. Алгоритмы работы современных систем хранения информации»

Приобрести книгу.

Данная книга — must-read для бэкендеров, желающих проникнуть в суть устройства баз данных. Построение баз данных является одной из самых захватывающих тем современной computer science. Реализация базы данных по сложности сравнима с написанием браузера или даже операционной системы. Огромные усилия надо приложить для реализации эффективного движка хранения данных, парсера и оптимизатора SQL-запросов, механизма concurrency control. Однако ещё больше проблем возникает при масштабировании СУБД. Дело в том, что любой высоконагруженный бэкенд всегда обладает распределённым состоянием, потому что данные никогда не умещаются на одну машину. Разработчикам приходится применять специализированные кластерные СУБД. В последние годы на рынок вышло множество систем подобного класса, однако многие проблемы, присущие таким системам, до сих пор ждут своего решения. Данное руководство помогает сориентироваться в многообразии баз данных, разобраться в их фундаментальных отличиях и оценить их потенциал. Автор, core-разработчик Cassandra с многолетним опытом работы, объясняет и систематизирует информацию по теме, доступную в Сети и других изданиях, а также делится собственным опытом.

Достоинства:

  • концентрированное изложение проблематики современных баз данных;

  • огромное количество систематизированного материала из других источников;

  • легко читается.

Недостатки:

  • в книге нет практических примеров;

  • некоторые темы изложены очень детально, некоторые — поверхностно;

  • возможно, цена, но книга того стоит.

***

Уверены, эти материалы помогут вам в более глубоком изучении Go. Непрерывное обучение — это хороший навык и качество, которое приносит множество преимуществ любому разработчику.

Мы обязательно продолжим делиться с Хабром рекомендациями книг и других полезных материалов для разработчиков, а также публиковать подробные статьи с экспертизой наших специалистов. Подписывайтесь на блог МойОфис и следите за нашими новостями!