Как всё начиналось
Как и всем, работающим в ИТ, мне постоянно приходится изучать новые технологии и подстраиваться под изменившийся мир. Зачастую в процессе изучения нужно на чём-нибудь тренироваться: писать свои пет-проекты, записывать основные моменты, которые потом хотелось бы легко вспомнить в нужный момент.
Для своих проектов у меня всегда был свой сайт. Сначала он был просто набором статических страниц, подготовленных в блокноте. Затем в какой-то момент я завёл полноценный блог на WordPress со своим доменом.
Наполнение блога росло. Я перенёс большую часть проектов со старых сайтов, продолжал писать статьи. В тот момент я переучивался на Java и Spring Framework. Мне казалось, что это будет более актуально, чем приложение на C#, в разработке которого я участвовал до этого в небольшой региональной фирме. Пока я учил Java, я читал кучу статей с различных источников интернете, в том числе даже из спецификации.
У меня плохая память. Мне приходится десятки раз перечитывать одно и то же, а затем снова возвращаться к тоже же самому спустя время. В какой-то момент я решил, что буду по крупицам собирать то, что считаю важным для себя, и компоновать у себя на блоге, чтобы в любой момент можно было вернуться, перечитать и вспомнить, а не искать по тысячам заброшенных страниц и сайтов, которые могут и вообще пропасть. Так был начат онлайн учебник по Java 8, который был полностью закончен в 2016 году.
Издательство
В августе прошлого года (2021) мне написали из издательства и предложили написать книгу о Java по мотивам статей с сайта. Сама идея мне сразу понравилась. Если честно, я ещё в детстве был тем ещё книжным червём. И, разумеется, много раз представлял себя на месте автора какой-нибудь книги. Однако я не имел вообще ни малейшего представления о том, какие этапы существуют в издании книги. И уж тем более не понимал, что придётся делать во всем этом процессе мне самому.
После разговора с сотрудником издательства и обсуждения всех условий и этапов мне выдали список требований к оформлению рукописи и шаблон от Microsoft Word с макросами и стилями, которых нужно придерживаться, и начался сам кропотливый процесс написания. Я не особо умею в переговоры, да и неясно, о чём вообще дополнительно договариваться, так как до этого книг не писал ни разу, поэтому я просто согласился на их условия.
По тому, что мне рассказали, будут примерно следующие этапы:
заключение договора со сроками и промежуточными этапами,
написание рукописи книги (разумеется, в электронном варианте),
редактура,
остальная предпечатная подготовка (обложка там и всё остальное),
печать,
продажа в магазинах.
Написание
Полноценная книга — это не статьи в блоге. Хотя большая часть контента как бы уже была готова, но она зачастую была не того формата и не в том стиле, в котором нужно. Многие темы приходилось переделывать под реалии книги, а также переписывать и дополнять, поскольку новые версии Java теперь выходят вообще раз в полгода, а значит, с момента восьмой версии произошло уже достаточно много серьезных изменений. Все эти записи, switch expressions, изменение формата хранения строк, изменение кодировки по умолчанию, текстовые блоки, сборщики мусора, удаление старых пакетов и добавление новых, модули — всё это нужно было аккуратно разнести по всей книге, поправив устаревшую информацию и добавив новую.
По нашей договорённости с издателем основной идеей книги было то, что я буду описывать Java с позиции изменения во времени: как было, и как стало. Поэтому все статьи пришлось несколько раз перечитывать и актуализировать, добавляя новые возможности, которых ещё не было на тот момент, когда я их писал.
В целом у меня получалось примерно каждый месяц отправлять новый вариант книги с дополнительными главами. Я осознанно так делал, особенно с самой первой главой. Очень не хотелось под конец книги узнать, что всё написано совсем не так, как ожидалось. И это было не зря, потому что после первой версии сразу же получил пару дельных замечаний, а именно:
нужно добавлять картинки;
желательно описывать работу в какой-нибудь IDЕ;
нужны компилируемые примеры, которые бы можно было скачать с сайта и запустить;
ещё пара замечаний по стилю текста.
Картинок, действительно, не было. Причем их не было совсем. Художник из меня не очень, рисовать толком не умею. В большинстве случаев, в конечный вариант книги вставлял снимки экрана с окнами IntelliJ IDEA, чтобы наглядно показать, куда кликать для достижения результата из главы. Для пары глав нарисовал очень красивые диаграммы классов с помощью ArgoUML.
Про IDE совет действительно полезный. Большая часть статей в моём блоге была абстрактна и не привязана ни к какой IDE. Только код и только результат. Для книги было бы полезно рассказать хотя бы кратко про работу в какой-нибудь IDE. Я решил в качестве основной IDE взять IntelliJ IDEA, как самую популярную на текущий момент. Заодно вскользь упомянул Eclipse и NetBeans, просто чтобы показать, что существуют и другие.
Примеров особых у меня не было. Это факт. Учебник из блога и набор остальных статей чаще всего был просто с каким-нибудь куском кода, который ни скачать, ни скомпилировать было нельзя, а уж тем более запустить. Пришлось примеры придумывать почти с нуля и собирать их в отдельный проект.
А тем временем, основная моя работа тоже никуда не делась, так что писать книгу я мог далеко не каждый день, и уж тем более не полный день. Очень большая часть была написана в выходные и праздничные дни. Я, в принципе, был к этому готов. Знал на что шёл. Да и статьи на блог я тоже писал примерно в таком формате.
Как я уже говорил, я примерно раз в месяц отсылал новый вариант книги с добавленными главами. В дальнейшем особо серьезных замечаний не было, в основном только какие-то мелкие.
Но перед самым финалом, когда всё было уже почти готово, сотрудник, с которым я контактировал, показал текущий вариант руководству. Возможно, он и предыдущие варианты им показывал, не знаю. Мне было сообщено, что в книгу нужно добавить задания, и сейчас она больше похожа на учебник, хорошо бы какой-нибудь проект провести через всю книгу.
Я, если честно, такого не ожидал. Если добавить задания в конце каждой главы ещё не так сложно, то придумать какой-нибудь проект, а потом провести чего через всю книгу... Это выглядит довольно ресурсоёмко. Я итак уже писал книгу больше полугода. Пока я её писал, успело выйти две новые версии Java. Если сейчас затеять глобальную переделку, но насколько затянется весь процесс? И сколько версий Java успеет выйти к тому момент? Успею ли я вообще её когда-нибудь дописать?
К счастью, после переговоров мы договорились просто о добавлении заданий к каждой главе и к одной отдельной главе в конце книги с небольшим проектом, использующим Spring Boot, Docker, Kubernetes и всё остальное.
А в самой книге уже в некоторых главах было некое подобие небольших, но вполне законченных проектов.
Например, глава про работу с файлами включала в себя небольшой двухпанельный файловый менеджер наподобие Far Manager. Он использовал практически все возможности работы с файлами: копирование, перемещение, простановку атрибутов для разных файловых систем, прослушивание изменений каталога и автоматическое обновление списка файлов и т. д.
Также глава про модули из Java 9 содержала пример калькулятора, который автоматически подгружал плагины через ServiceLoader.
После добавления раздела заданий к каждой главе и раздела с проектом на Spring Boot были ещё небольшие правки, но в целом, было видно, что рукопись книги уже готова.
Редактура
Двадцатого мая рукопись моей первой книги наконец-то перешла на следующий этап — её приняли на редактуру. Не знаю, на сколько затянется этот этап, но по завершении постараюсь написать следующую статью, с описанием процесса.