Привет, Хабр!

С радостью и чувством выполненного долга издательство «БХВ» представляет вам одну из флагманских новинок наступившего года. Мы получили из типографии книгу «Game++. Устройство и оптимизация игрового движка».

Как известно, высококлассные AAA-игры — это та территория, на которой сходятся проверенные и экспериментальные алгоритмы, высокая производительность, графика на уровне произведений искусства и проектирование распределённых систем. Главный язык программирования для аса в разработке игр — это C++.

Поскольку сложно объять необъятное, да и участие в разработке The Sims и Age of Empires смотрелось бы в резюме как опыт участия в гонках «Формулы-1», автор, самоотверженно поработав, создал фундаментальную книгу о наилучших практиках высокопроизводительного программирования как в элитном продакшне, так и на очень ограниченных ресурсах. Для автора игры — это полигон, на котором он набрал свой уникальный профессиональный опыт, а C++ — это инструмент, при помощи которого решается любая задача. Отдельно отметим, что в книге уделено внимание не только различным структурам данных и их реализациям, но и стандартной библиотеке шаблонов (STL); этот материал серьёзно повысит профессиональный уровень любого C++-разработчика.  

Далее - от автора, Сергея Кушниренко @dalerank.

Писать код намного проще, чем писать книгу о том, как писать код

Иногда книга начинается с одной статьи, опубликованной в нужный момент и в нужном Хабре. В моём случае всё действительно началось с публикации "Game++. Dancing with allocators", которая несмотря на обилие технического материала, кода и схем набрала больше всего плюсо среди моих статей на околоплюсовую и игродев-разработку. А дальше и сам цикл Game++ постепенно вырос из отдельных технических размышлений о C++, архитектуре движков и производительности в связный нарратив.

За фасадом Game++ стоит еще больше узкотехнических статей во внутреннем блоге и вики моей компании и я бы рад ими поделиться, да и делюсь периодически, но сами понимаете выкладывать можно не всё и даже из тех статей, что выложена на Хабре, частенько что-то да вырезали, ибо NDA и секретные технологии-бла-бла-бла.

Статья про аллокаторы стала точкой, когда я увидел, что разрозненные тексты на самом деле образуют скелет будущей книги, нужно лишь перестать относиться к ним как к «постам» и начать воспринимать как главы. Идея написать книгу не пришла просто так, и несколько не связанных между собой людей и пара компаний написали в личку и предложили переписать статьи в виде книги.

Ещё в процессе написания статей я всё чаще стал замечать, что возвращаюсь к одним и тем же вопросам — что такое «хороший» C++ в движке, где проходит граница между философией и prom-кодом. В какой-то момент стало понятно, что формат статьи не всегда подходит и слишком много контекста остаётся за скобками, слишком часто приходится обрывать рассуждение, потому что текст уже и так получился «слишком длинным для Хабра», я смотрю на доскролы и вижу, что обычно статьи не читают дальше 15 минут. Книга стала способом расширить и объём, и примеры, и дать больше философии.

Для меня особенно важно, что это не книга «про игровой движок» в узком смысле, можете взять нетленку Грегори и там будет нужная и важная теория по разработке движка. Да, в ней много примеров из движковой разработки, из работы с памятью, и потоками, и аллокаторами, и строками, и практики оптимизации и архитектурных компромиссов. Но по сути, моя книга — о C++ как о языке инженерных решений и о том, как думать категориями данных, временем жизни, и поведением кода на реальном железе, а движок здесь — среда повышенной сложности, своего рода стресс-тест для языка, в которой хорошо видно, где концепции работают, а где буксуют.

Отдельной частью этой истории стали люди, которые тоже славно потрудились над этой книгой и поучаствовали в её подготовке. Это Анатолий Мамаев (@Serpentine) который подарил книге большую часть рисунков, Олег Сивченко (@OlegSivchenko) который курировал работу с издательством и Леонид Кочин, который мужественно редактировал чистовик и вникал в неукротимый рой плохо переводимых терминов. С Олегом общение постепенно вышло за рамки Хабра и структуры книги, в более общие вопросы инженерной культуры, качества технической литературы, надеюсь, я могу называть их своими друзьями, и наше общение не закончится с выходом книги.

Не менее ценным стало общение с Андреем Карповым (@Andrey2008) c его помощью и компании PVS получилось провести несколько вебинаров, которые оказались своеобразной проверкой на прочность, потому что объяснять свои идеи вслух, в живом формате, где аудитория задаёт вопросы и ловит тебя на неточностях, это нет текст с картинками. Многие фрагменты книги стали лучше именно потому, что до этого были проговорены на таких встречах. А еще они помогают с переводом книги на английский, за что им отдельная благодарность, надеюсь, всё сложится.

Ну и конечно, отдельное спасибо Хабру и читателям, без вас этого бы тоже не случилось. И лично @Boomburum за то, что свёл с нужными людьми.

Напутствие будущим авторам

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

Я вижу тут параллель с подходом, который позволил написать и издать книгу «Экскурс в неопределённое поведение C++» Дмитрию Свиридкину (@Nekrolm) — также в издательстве «БХВ». Книга Дмитрия — это всесторонний анализ случаев неопределённого поведения в C++.

Если вы годами пишете заметки, статьи, доклады, если у вас накапливается материал, который уже прошёл проверку читателями и обсуждениями, не относитесь к нему как к архиву. Возможно, это не черновики, а главы, просто пока не собранные вместе. Книга не обязательно начинается с чистого листа, иногда она начинается с обработки на уже проделанную работу и вопроса «что если это не просто так?» и, может быть, вы вдруг обнаружите, что у вас уже есть не просто тексты, а позиция, не просто статьи, а взгляд на профессию.