Как я за 3 месяца написал книгу о Terraform

Illustration of a historical male figure in a white coat, holding a book, with one finger on his lips in a gesture of silence, seated in an orange chair. Illustration of a historical male figure in a white coat, holding a book, with one finger on his lips in a gesture of silence, seated in an orange chair.

Первого февраля 2017 года была опубликована моя вторая книга: Getting Started With Terraform. Книга, которую я не планировал писать и которая самым ужасным образом повлияла на развитие проекта mkdev. Написать техническую книгу на 200+ страниц это вам, как сказал бы со-основатель mkdev Лёня Сущев, не баран чихнул. Поэтому рассказываю всё как есть. Зачем? А вдруг тебе интересно. А вдруг ты сам хочешь книгу написать. А вдруг я хочу таким хитрым образом заставить тебя купить эту книгу (нет).

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

Как получить контракт на написание книги

Не смотря на то, что я работаю с Terraform уже давно и много, у меня никогда не было в планах написать о нём целую книгу. В какой-то мере я являюсь активным контрибьютором этого проекта - на моём счету 9 принятых Pull Requests. Я также обожаю писать баг-репорты - на Terraform их у меня целых 11. Ещё написал простыню текста об инструментах подобных Terraform, где сравнение было не в пользу последнего (сравнение было в 2015 году, с тех пор Chef Provisioning умер).

Не исключаю, что все эти факторы (а так же упоминание Terraform в моём резюме) сыграли роль в том, что в августе 2016 года издательство Packt связалось со мной с предложением написать для них книгу об этом инструменте. Само собой, я отказался, как отказываюсь от большинства проектов и предложений, которые ко мне поступают.

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

Спустя ещё пару недель и пройдя через несколько формальностей я получил контракт на книгу и к середине сентября мог начать писать.

Как написать книгу за короткий срок и на английском языке

206 страниц за 114 дней - это не шутки. Это примерно 2 страницы текста на английском языке в день. Не буду врать, что я с первого дня начал ответственно писать каждый день свою норму. Первый месяц процесс написания скорее напоминал студенческие годы: несколько дней (или даже неделю) не делать ничего, а затем с горящей жопой залившись волшебным чаем выдавать с десяток и больше страниц подряд, пытаясь успеть к дедлайну.

Packt мастера своего дела и знают, как организовать процесс написания. Ещё до того, как была написана первая глава нужно было предоставить полное содержание книги. У каждой главы есть свой срок сдачи. Тем самым процесс разбит на удобные для восприятия отрезки по 2-3 недели, в конце каждого из которых нужно отправить своему редактору черновик новой главы. Затем главу проверяют, вносят правки и снова отправляют автору, чтобы тот утвердил все изменения, учёл предложения и пожелания редактора.

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

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

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

Интриги в процесс добавляли частые новые релизы Terraform. Начиналась книга с версии 0.6.17, а закончилась на 0.8.2, из-за чего половину декабря пришлось потратить на переписывание первых четырёх глав.

Больше всего я старался избежать пересказывания документации. Terraform — это тот инструмент, которым очень легко начать пользоваться, но очень не просто разобраться, как же им эффективно пользоваться в production окружении. Как организовывать код? Как связывать его с другими инструментами, типа Chef/Puppet/Ansible? Как выполнять обновления инфраструктуры? Как организовывать командную работу, тестирование, непрерывную интеграцию? Как правильно и масштабируемо передавать в Terraform данные для конфигурации? На все эти вопросы документация не даёт ответа. А моя книга даёт.

Стоило ли писать книгу на техническую тему?

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

Во-первых, ради самого опыта. Не смотря на то, что на работе мой основной (и единственный) язык это английский, а различной технической документации, которую я регулярно пишу, наберётся на отдельную книгу, авторство полноценной 200-страничной книги на неродном языке это отличное, сложное испытание.

Во-вторых, одной из моих задач на 2016 год было написать книжку про DevOps. К августу 2016 я её даже не начал, поэтому предложение от Packt выглядело почти как намёк от вселенной.

Это был весёлый, интересный и полезный опыт. Не знаю, когда я снова повторю его. Всё таки времени этот процесс отнимает много, из-за чего страдают другие проекты (например, mkdev). Но что-то подсказывает мне, что Getting Started with Terraform не последняя и даже не предпоследняя написанная мной книга.

Кирилл делится лайфхаком, как сделать рутинную работу программиста интереснее, и не прекращать развиваться Читать

Дополнительное чтение