
Я отношусь к тому постепенно вымирающему поколению разработчиков, которым выпала странная привилегия писать программный код в его самой чистой, первозданной форме, создавать каждую строчку вручную, собственными руками и головой, без всяких умных копайлотов-помощников, без промптов, без автодополнения, которое якобы знает что ты хочешь написать лучше тебя самого. Голая логика алгоритмов, литры выпитого кофе и мигающий курсор в пустом файле открытой IDE, когда пытается удержать в своей “оперативной” памяти всю архитектуру системы целиком.
И я искренне рад, что прошёл через этот опыт в своё время, что успел застать ту эпоху, когда программирование ещё было настоящим ремеслом, а не управлением автоматическими генераторами кода. В те совсем недавние времена, которые теперь уже кажутся какой-то историей мамонтов, я писал код постоянно: в офисе, дома, когда был под стрессом от мажора, когда был счастлив от решения сложной задачи, иногда во снах продолжал что-то отлаживать и искать баги.
Я делал это не потому что меня кто-то заставлял или потому что так требовало начальство, а просто потому что сам процесс создания работающей системы из ничего, исправление хитрых багов, построение сложных систем из простых компонентов – всё это было по-настоящему весело, приносило какое-то детское удовольствие от созидания. Когда наконец откидываешься в кресле от монитора после многих часов работы, смотришь на то что построил своими руками, и видишь что всё работает как задумано, и думаешь: "Да, я, блин, чертов гений, это всё сделал только я, и никто мне не помогал". Ну разве что SO и немного гуглежки.
Даже пять лет назад не получалось просто механически собирать готовые программные компоненты из библиотек в единую систему, всегда приходилось держать ментальную модель и архитектуру в своей голове, и держать в памяти все взаимосвязи между модулями и прорабатывать граничные кейсы ещё до того, как они возникали бы на практике, симулировать различные варианты отказов ещё до того, как продакшн успеет тебя неприятно удивить в три часа ночи.
И каждый исправленный сложный баг делал меня чуть опытнее, чуть умнее, чуть лучше понимающим как всё работает внутри, получается что я не просто писал очередной код по заданию, а выковывал его в кузнице моего разума, вкладывая в каждый удар молота частичку себя.
Я хорошо помню как встроил в один из наших проектов ecma-песочницу для хот-релоад конфигов, потому что возможностей плюсов не хватало, пришлось переписать как проект, так и саму песочницу – и это было сложно, я по-настоящему гордился этим как произведением инженерного искусства. И этой системой пользуются до сих пор спустя десять лет, и мне есть чем гордиться, просто потому что я построил что-то действительно трудное и элегантное одновременно, и есть такое искреннее творческое удовлетворение от результатов собственного труда, которое очень сложно подделать или симулировать специально.
А теперь давайте перемотаем время на сегодняшний день, в нашу эпоху повсеместного внедрения иишки куда можно и куда нельзя. За последние несколько месяцев активной работы с ИИ-помощниками я произвёл (не написал), сгенерировал больше программного кода, чем раньше писал вручную за целый год работы или даже больше. Формально метрики моих комитов показывают большой рост, и мое руководство лет десять назад, просто бы носило на руках за такие цифры, но внутри я вижу – что что-то идёт не так, потерялось что-то важное в этом процессе, как я пишу код. Странное ощущение, что весь этот код построил не я лично своими руками и головой, а какой-то абстрактный программист, которого наняли на аутстаф. Да, я формально всё это ревьюваю построчно, внимательно читаю, дорабатываю детали, исправляю неточности.
Да, я в целом понимаю что там происходит в алгоритмах, потому что сижу на этом проекте не один год, но весь этот код не рождался из того глубокого когнитивного труда и внутренней борьбы с задачей, которая делала процесс программирования таким творческим. Это теперь похоже на просмотр игр на ютубе, когда кто-то другой проходит за тебя всю сложную часть, побеждает финального босса после десятка попыток и спасает принцессу из заточения, а ты просто сидишь рядом и смотришь в монитор.
Можно даже получить титры с благодарностями в конце и запись о победе в профиле, и даже твоё имя запишет в таблицу рекордов... но ты сам не играл, не чувствовал азарт, не переживал поражения и не радовался победе. И в этом заключается главный парадокс: когда процесс создания чего-то становится слишком лёгким и быстрым благодаря автоматизации, само достижение конечного результата начинает казаться невесомым, ненастоящим, не имеющим той ценности, которую имело раньше.
Есть ещё один важный побочный эффект от массового использования иишки в кодинге, о котором никто не говорит на конференциях и в статьях. То самое знаменитое состояние потока, глубокой концентрации, о котором написаны десятки книг по психологии творчества, и раньше оно приходило само собой в процессе написания сложных программных систем. Можно было пропасть, провалиться на много часов подряд в этот поток, полностью погрузиться в выстраивание логики, в дебаг граничных случаев, в шлифовку мелочей и время переставало существовать, я часто забывал поесть и вторая чашка кофе остывала рядом с невыпитой первой, а за окном уже стемнело.
А теперь достаточно коротко описать иишке в тексте, что именно хочешь получить на выходе и ждать пока модель генерирует ответ, неизбежно отвлекаясь на что-то постороннее, потому что
И вот что стало для меня самого настоящей неожиданностью, чего я совершенно не ожидал обнаружить, сам процесс набирания кода на клавиатуре раньше был по-своему приятен, доставлял какое-то тактильное удовольствие. Разные клавиатуры с разным ходом клавиш или щелчком, по разному влияли на процесс построения игровой логики в программе, просто физический ритм самого процесса
А еще несколько недель назад, что-то опять поломалось в нашем проде из-за последних изменений, которые вносили с помощью иишки. Старый я, который писал всё сам, знал бы интуитивно и точно куда именно смотреть в коде при таком типе ошибки, и как быстро починить проблему минимальными изменениями. Но этот код писал не я, и его писал даже не программист, и пришлось буквально перечитывать построчно с нуля всю программную систему, и это был совершенно чужой код, не в нашем кодстайле, без нашего ревью (это отдельный вопрос как код пролез через ревью), написанный незнакомым "человеком" на другом конце света. И осознание того факта ударило меня гораздо сильнее психологически, чем сам технический баг и его последствия для игроков.
Когда код, написанный лично твоими руками после долгих размышлений, внезапно падает с ошибкой в проде под нагрузкой, то в твоём
Существует принципиальная когнитивная разница, огромная пропасть между тремя разными вещами: самому написать код с нуля, затратив на это умственные усилия; внимательно проревьювать уже готовый чужой код на предмет ошибок; и просто понять в общих чертах что делает код при беглом чтении. И мы сейчас сдвигаемся от первого варианта к третьему варианту в этом спектре, и этот фундаментальный сдвиг в способе работы радикально меняет ту глубину, с которой профессиональное знание становится частью тебя самого.
Я сейчас не жалуюсь на судьбу и не ругаю прогресс, а просто наблюдаю со стороны и фиксирую происходящие изменения, пытаюсь их осмыслить. Я вовсе не против самого существования и использования иишки в работе, это было бы глупо и бессмысленно. Я был свидетелем расцвета классического программирования, может и не золотого века кода 90-х, но мне тоже выпала историческая привилегия писать программы вручную в самой чистой форме этого ремесла, без всяких помощников и костылей, и я искренне рад что успел пройти через этот опыт, что он у меня есть в багаже. Теперь я одновременно вижу и понимаю куда всё это движется дальше.
ИИ-помощники в программировании никуда не денутся и не исчезнут, как бы кто-то ни сопротивлялся. Они будут становиться только лучше с каждым месяцем, быстрее генерировать код, будут более автономными в решении задач, будут требовать всё меньше и меньше участия человека в процессе. Но при этом сами правила игры в профессии программиста фундаментально изменились буквально за пару лет, и может быть, наша новая роль в этом изменившемся мире больше не заключается в том чтобы печатать код быстрее конкурентов и коллег, быть самым производительным по количеству строк в день.
Может быть, истинное мастерство программиста теперь в другом – в способности лучше других проектировать архитектуру сложных систем на высоком уровне абстракции, задавать точные вопросы о требованиях, проектировать более глубокие и продуманные системы учитывающие будущее масштабирование, яснее понимать неизбежные компромиссы между разными качествами системы, по-настоящему владеть принимаемыми архитектурными решениями на уровне глубокого понимания а не просто владеть конкретными строками кода которые можно в любой момент переписать.
Профессиональное мастерство программиста эволюционирует вместе с инструментами, и это нормальный процесс, но надо подходить к этой эволюции осознанно, понимая что мы теряем и что приобретаем в процессе, потому что если мы полностью и безоговорочно откажемся от ручного строительства систем, делегируем всё кому-то другому, мы вполне можем случайно и незаметно отказаться заодно и от той самой радости строительства, от того удовольствия от созидания которое и делало профессию привлекательной для творческих людей, а не просто способом зарабатывать деньги.
Мне этот переходный момент в программировании ощущается некомфортно и тревожно именно потому, что я нахожусь в самой середине переходной эпохи между двумя парадигмами работы. Те разработчики моего поколения, которые писали абсолютно всё вручную много лет подряд, тоже видят этот сдвиг в профессии острее и болезненнее всех остальных. Иногда я ловлю себя на странной мысли что я уже звучу как старый дед-ворчун, который рассказывает молодёжи занудные истории о "добрых старых временах" программирования, когда мы п��сали код до двух часов ночи просто ради удовольствия от процесса. Новое поколение, которое вырастает уже с ИИ-помощниками, возможно никогда в жизни не испытает того же самого чувства удовлетворения от ручного создания системы, но они вполне вероятно испытают какое-то другое, своё удовлетворение от работы на более высоком уровне абстракции.
Пытаюсь разобраться в себе как использовать эти новые инструменты эффективно, при этом не потеряв себя как специалиста и в процессе трансформации, превратившись в простого оператора чужих систем. Я все еще пишу большую часть кода руками, не только потому что мой контракт явно запрещает мне использовать ИИ для кодинга, но потому что мне нравится писать код руками и своей головой. Но в компании уже открыли доступ иишке для анализа багов и ревью входящих комитов.
tg/boosty
Канал в телеге для Game++
На Boosty выкладываю завершенные части "Нескучного программирования"
Автор: dalerank
