Будучи филологом по образованию и разработчиком по профессии, я невольно задумываюсь: как так вышло, что ты сначала пишешь тексты, потом пишешь код, затем пишешь о коде и наконец - о людях, которые пишут тексты о коде? Где предел этой рекурсии, разворачивающейся в реальной жизни? Вместе с тем, книга, которая на днях попала ко мне в руки, не только о программировании. Это очень личный взгляд на самые разные аспекты разработки, целая коллекция полезнейших советов каждому, кто хоть как-то связан с этой индустрией. Книга не перегружает нас подробностями о коде и технологиях, это больше беседа очень опытного и через многое прошедшего специалиста, которому есть чем поделиться с читателем с единственной целью: помочь ему избежать тех ошибок, которые автор допустил сам. В этом смысле очень органично построена каждая глава: сам текст сопровождается очень удобной тезисной фиксацией ее основных идей, заданием для выполнения и "историей из жизни". Этот последний раздел, мне кажется, особенно важен. Он позволяет понять, почему автор книги выделяет ту или иную проблему в отдельную главу. Во многих из этих историй можно узнать себя, но гораздо чаще вы почувствуете белую зависть к человеку, накопившему такой невероятный багаж опыта. У каждого, кто откроет эту увлекательную книгу, будут свои хайлайты, свои любимые истории. Мне запомнились сильнее всего те, которые напомнили ситуации из собственного опыта: о бешеном энтузиазме к своему делу, о неумении залезть в шкуру пользователя, об идиоте-начальнике, о критиканстве, о трудности объективной оценки собственных знаний и профессионального опыта.  В книге совсем нет нагруженности техническими подробностями, она не столько про программирование, сколько о всем том, что с ним связано. Зачастую даже хочется видеть хоть немного больше кусочков кода, но если хорошо подумать - они на самом деле здесь излишни. Это книга не о конкретной технологии, языке разработки или сфере. Она действительно даёт понимание базовых принципов, которые применимы абсолютно на любом стэке и в любой IT-компании. Эти принципы могут касаться как самого кода — его стиля, гайдлайнов, нотаций, идиоматики, паттернов проектирования — так и общения, выстраивания отношений в команде и с руководством, заботы по отношению к себе, своему организму и ментальному состоянию.  При всей очевидности некоторых выводов в отдельных главах книги, я ловлю себя на мысли о том, что они не тривиальны, а просто-напросто созвучны тому, к чему приходишь сам с опытом. Помню, как, работая на своем первом месте работы, я доказывал другу-финансовому аналитику, что в IT не важен авторитет при принятии решений, ведь всегда есть единственно технически верная аргументация, data-driven подходы и A/B тесты. Со временем мне стало понятно, что взаимоотношения в любой команде, работающей над реальным проектом, никогда не бывают так просты, как в этой утопической (антиутопической?) выхолощенной модели, а данные играют хоть какую-то значимую роль, если 1) в компании есть культура доверия данным и 2) их достаточно, чтобы делать какие-то выводы. Ещё один отрывок, который запоминается и заставляет рефлексировать о нем снова и снова - глава об "идеальном коде". Я работаю в компании, занимающейся автоматизацией управления электросетью. И в один прекрасный день основное приложение, отвечающее за это самое управление, упало, потому что устройство, регистрирующее напряжение тока на одном из участков сети, вместо числа прислало null. Да, это уронило весь прод. Стоит ли говорить, что холивар между командой разработчиков скады и командой прошивки устройств в этой ситуации абсолютно бесполезны: пока идут выяснения, был ли неверным пакет, пришедший с устройства, или это приложение должно было иметь в нужном месте условный try… catch (выражаясь в идиоматике котлина), люди в домах сидят без света, а заказчик меняет красный цвет каления на белый по мере роста недоотпуска. Мой месседж в том, что идеальных систем не бывает, и сколько бы разработчики ни писали автотесты для всевозможных инпутов к системе, всегда есть шанс, что какой-то исход останется неучтенным. На мой взгляд, и здесь я не полемизирую, а скорее пытаюсь развить мысль автора книги, единственная сфера, где код никогда не падает по причине столкновения с хаосом реального мира - это область искусственного интеллекта. Нейросеть попросту не может взять и упасть из-за того, ЧТО вы ей написали. Она всегда выдаст хоть какой-то ответ на основе более или менее сложной пробабилистической модели. Значит ли это, что ChatGPT, Bard и им подобные - образцы идеального кода? Едва ли, потому что заложенная в них энтропия в принципе делает их непригодными на данном этапе для высокоточных систем. Продолжаем не бояться совершенства, потому что оно недостижимо. Одним словом, книгу "От джуна до сеньора: как стать востребованным разработчиком" очень рекомендую к прочтению. Новичку она разъяснит многое о том, как устроен мир разработки и поможет найти мотивацию и двигаться дальше в кризисной ситуации, а специалисту мидл- и сениор-уровня даст источник для полезной рефлексии о важнейших вопросах в этой увлекательной профессии.