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


Спрос на бэкенд-разработчиков — а 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. Непрерывное обучение — это хороший навык и качество, которое приносит множество преимуществ любому разработчику.

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




Комментарии (7):

  1. krig
    /#24466178 / +5

    "The Boar Book", она же "Высоконагруженные приложения" великолепна - кмк лучшее что я прочитал за последние пять лет.

    "gRPC. Запуск и эксплуатация облачных приложений" самая бесполезная книга из того что я прочитал за последние 5 лет. В ней нет ничего, чего нельзя было бы нагуглить с более актуальными примерами и хорошим описанием. Пишу это как человек который сначала нагуглил, а потом уже купил эту книгу, благо куплена она была в счет L&D бюджета компании.

  2. olteffe
    /#24466590 / +8

    Опишу свое мнение от дилетанта. Сначала о представленном списке:

    1. Донован. Не читал, но видение создателей языка нужно глянуть(может потом как-нибудь). Единственное, что отпугивает-год выпуска - 2018. Все очень быстро меняется.

    2. Фримен. Не читал. Пролистал и сохранил себе, тк выглядит не плохо.

    3. Индрасири. Может треть прочитал и бросил: очень поверхностно все и не актуальная информация местами. Лучше уж доку читать или для поверхностного ознакомления.

    4. Макдауэл. Алгоритмы..алгоритмы никогда не меняются. Если только это не метод быстрой сортировки в go. Есть такое по алгоритмам на Go: https://github.com/TheAlgorithms/Go

    5. Сюй. Есть на русском от Питера. Годная книга, тк у любого начинающего есть пробелы с архитектурой приложений.

    6. Клеппман. Годная книга. Читать обязательно.

    7. Петров. Кинул в закладки.

    С каких бы я начал изучение(именно в таком порядке), если не брать во внимание банду четырех, дядю Боба и тд:

    1. Цукалос Михалис. «Golang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go». Как основа изучения Go – самодостаточная. В переводе 2-е издание. Есть третье в оригинале.

    2. https://github.com/quii/learn-go-with-tests Читать параллельно с 1. Следовать ТДД или нет-дело каждого, но без юнит-тестов никуда.

    3. Мэтью А. Титмус. «Облачный Go». Читаю сейчас. Больше про высокоуровневое. Если читаете что-то в переводе, то обязательно нужен оригинал в некоторых местах.

    • myoffice_ru
      /#24468404 / +1

      Спасибо за качественное дополнение!

  3. calculator212
    /#24468594 / +1

    Донован. Не читал, но видение создателей языка нужно глянуть(может потом как-нибудь). Единственное, что отпугивает-год выпуска - 2018. Все очень быстро меняется.

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

    Я бы не сказал, что сам го сильно изменился как язык за 4 года, даже интересно чем язык в 2022 так сильно отличается от своей версии 2018 года(кроме дженериков). Как по мне сам язык почти не изменился, поменялось только окружение в виде БД, фреймворков и т.д.

  4. aleks_raiden
    /#24469532 / +2

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

    • vitalyisaev2
      /#24469864

      У нас выбираеться хранилище для очень специфических условий

      Было бы интересно узнать подробности, если это не секрет )