Как и всем, работающим в ИТ, мне постоянно приходится изучать новые технологии и подстраиваться под изменившийся мир. Зачастую в процессе изучения нужно на чём-нибудь тренироваться: писать свои пет-проекты, записывать основные моменты, которые потом хотелось бы легко вспомнить в нужный момент. Для своих проектов у меня всегда был свой сайт. Сначала он был просто набором статических страниц, подготовленных в блокноте. Затем в какой-то момент я завёл полноценный блог на 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 были ещё небольшие правки, но в целом, было видно, что рукопись книги уже готова. Двадцатого мая рукопись моей первой книги наконец-то перешла на следующий этап — её приняли на редактуру. Не знаю, на сколько затянется этот этап, но по завершении постараюсь написать следующую статью, с описанием процесса.