Хочу обсудить с коллегами разработчиками один вопрос, чтобы понять — это лично моё восприятие ситуации или нет, и если да — нашёл ли кто-то для неё решение?
Чем занимается настоящий™ программист?
Если сильно упростить картину мира и не вдаваться в детали, любой программист какую-то часть времени обязательно делает две вещи:
-
Продумывает, как решить поставленную задачу с помощью написания кода, разделяя его на слои, сущности, системы, модули, классы, методы и т.п.
-
Пишет этот код
Только вот в реальности разделение на эти два этапа это очень эфемерное. Многие разработчики на первом этапе продумывают реализацию очень поверхностно, и большинство решений принимаются уже в процессе написания кода. Безусловно, баланс между размышлениями «до» и «во время» написания кода для разных проектов, людей и задач разный, но даже в самом идеально продуманном решении при написании кода продолжают приниматься десятки микро-решений, вплоть до банального «а как назвать переменную».
В общем, для многих людей во многих ситуациях программирование это не «сначала думаю, потом пишу», это «пишу и думаю одновременно». Можно долго ломать копья на тему того, насколько это правильно или неправильно, но в этом процессе очень легко словить то самое знаменитое «состояние потока». Именно этим, а также относительно коротким циклом обратной связи от своей работы (написал — собрал — протестировал — исправил) программирование и привлекало немало людей ещё в те времена, когда программирование ещё не стало мейнстримовой профессией, в которой есть какие-то деньги.
А потом пришёл «ИИ»
Если говорить об использовании «ИИшки» в виде эдакого чата-справочника, помогающего нащупать решение или там проанализировать крэшлог — ничего в описанной схеме не меняется, просто на этапе продумывания решения и анализа появился новый инструмент. Но стоит перейти к написанию с помощью LLM’ок больших кусков кода, целых модулей и систем… тут начинается совершенно иная картинка.
«ИИшка» требуется приложить гораздо больше усилий на первом этапе (продумывание решения), полностью забирает себе второй этап (написание кода и продумывание на ходу микрорешений), да ещё и добавляет третий этап, «ревью полученного кода». Нет, понятно, что отрефлексировать качество своей работы перед релизом или поревьюить чужой код — задача тоже типичная, но фокус работы в целом сильно меняется, «своего» кода у такого программиста больше нет. Свои у него спецификации, промты, контексты для LLM’мок и много что ещё, но не код.
И вы можете спросить, а в чём проблема то собственно? «Семь раз отмерь, один раз отрежь» же! Наконец то разработчики будут вынуждены детально продумывать решения до начала реализации, это же явно пойдёт на пользу финальному продукта, верно? Кроме того, всегда существовали программисты, для которых этап набора кода был пыткой, «я же всё уже продумал, осталась самая скучная часть — буковки печатать». И вот, ура, скучный этап отдан машине! Красота же, нет?
Ну… возможно. Но есть два нюанса.
Первый этап часто был именно что этапом «продумывания», на бумаге/файлик/схемке фиксировались только опорный пункты, большая часть идеи оставалась в голове. Но теперь «думанье» и «реализацию» делают разные сущности, нельзя прямо из головы передать LLM’ке свои мысли. А значит фиксировать план нужно на порядок тщательней и подробней. Раньше такая фиксация просто не требовалась, да и формат этой деятельности сильно изменился, и теперь это диалог на человеческом языке, больше похожий на менеджерскую постановку задачки.
Ну и во-вторых, в этом формате пропадает «потоковая» часть работы, теряется прелесть короткого цикла «сделал — проверил — исправил». После постановки задачки система уходит на раздумья и написание кода на минуты, а то и десятки минут. Местами возникает ощущение, что вернулся цикл отклика от ЭВМ до-PC-шного периода. И скорость отклика эта неконтролируемая, не всегда предсказуемая, и пока ты ждёшь — переключаешься на другую задачку, а вместе с ней меняешь и контекст в голове. Но когда бот вернётся за следующей порций задач или с вопросами — придётся переключать контекст опять, да ещё и вычитывать ту гору кода, что он написал. А постоянные переключения контекста это нифига не бесплатно…
Ну а как дела у вас?
Выше описана моя субъективная картину мира, но картина мира != реальности. Поэтому я хотел бы повторить вопрос из начала поста: ощущаете ли вы ту самую потерю потока при разработке с LLM’ками? И если да — нашли ли вы решение, как словить поток и ритм, используя «ИИ» как инструмент?
P.S.
КДПВ действительно моё. Я по-быстрому сфоткал руки на клавиатуре… и увидел на ней гору пыли, которую не замечал ранее. Протереть то я её протёр, но так лень было перефотографировать заново, фотоаппарат на подвес возвращать, в розетку его втыкать (он у меня через заглушку батареи работает), потом файлы по кабелю перекидывать… И решил я провести эксперимент – попросил GPT-шку убрать пыль с фото. И тот справился идеально. Даже слишком идеально, получилось рекламно-стерильно. Настолько, что в начале я решил оставить оригинальное фото)

Автор: Newbilius


