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

Написать код легко. Если у вас в голове сложилось решение, и вы уверенно владеете синтаксисом вашего любимого языка программирования, то напишете код с лёгкостью. А может быть у вас есть LLM, которая напишет за вас целые функции? Тогда ещё проще. Но сложнее всего не писать код, а читать. Требуется время, чтобы загрузить себе в голову ментальную модель системы. Вот это по-настоящему трудозатратно.

Ментальная модель складывается у вас в голове, когда вы читаете код. Это ваша внутренняя «карта», по которой понятно, как работает система, где находятся самые хитрые её части, что от чего зависит. Не имея такой карты в голове, вы просто смотрите на текстовые строки.

Когда я выполнял работу по заказу, большинство из моих заданий начинались одинаково. Мне ставили задачу пофиксить баг или добавить новую фичу в приложении, которое я видел впервые. Сначала моя ментальная модель была как чистая доска. Чтобы приступить к её заполнению, я открывал домашнюю страницу и разбирался, на что она похожа. Я открывал исходный код страницы: это React? jQuery? Сторонний плагин? Я просматривал базу кода, чтобы выяснить, используется ли у них где-нибудь ещё такая карусель, которую они просят поставить на первой страницы. Знакомился с их сборочным процессом, конфигурацией для тестирования, с тем, каким инструментарием они пользуются. Каждая мелкая деталь, которую я обнаруживал, встраивалась в ту модель, которая складывалась у меня в голове.

Ощущение было такое, как будто я переехал в незнакомый город. Вы выходите за порог вашего номера, проходите пару улиц, обращаете внимание, где выезд на шоссе, где овощной магазин, постепенно начинаете ориентироваться на местности. Примерно так ощущается и чтение кода: вы постепенно выстраиваете в уме мысленную карту, поэтому не заблудитесь, в очередной раз свернув куда-то в программе.

Допустим, вам требуется понять простую функцию, такую как getUserPreferences(userId). Чтобы построить её ментальную модель, вам нужно проследить следующие вещи:

  • Где именно определена эта функция?

  • Что она возвращает? Это промис? Какова форма данных?

  • Как именно она обращается к базе данных — напрямую или через API?

  • Участвуют ли в работе какие-либо уровни кэширования?

  • Что произойдёт, если пользователя не существует?

  • Кто ещё вызывает эту функцию и в каких контекстах?

  • Есть ли у неё побочный эффект?

Чтобы понять смысл конкретной функции, вам, возможно, придётся переключаться между схемами баз данных, промежуточным ПО для обработки ошибок и множеством точек вызова.  Только выстроив такую сеть отношений, вы приобретёте достаточно подробный контекст, с опорой на который сможете спокойно что-то менять.

Это медленно. Поэтому читать код сложнее, чем писать. Гораздо сложнее. Когда вы пишете код, вы движетесь вперёд, укладываете свежий асфальт. Читая код вы, как правило, вынуждены ступать по чьим-то следам, а значит — переходить от файла к файлу, выслеживать вызовы функций, догадываться о побочных эффектах и расшифровывать намерения, которые автор кода только подразумевал. Чтобы понять функцию, зачастую требуется заглянуть в пять и более файлов. Только после этого у вас будет примерная карта, с которой можно хотя бы начать.

По той же причине отладка сложнее программирования. Один из самых распространённых комментариев на Stack Overflow, который можно встретить под плохо сформулированным вопросом — «Можете показать, что именно вы сделали»? Не проследив шаги, читатели треда не могут составить в голове картину того, что именно происходило. Опять же, именно поэтому то и дело всплывает проблема XY. Спрашивают о симптоме, не сообщая контекста, который помог бы отвечающему восстановить всю картину.

Меня до сих пор удивляет тот адвокат, который применил ChatGPT в суде. Он предоставил записку по делу, в котором процитировал шесть эпизодов, как оказалось — несуществующих. Все его спрашивали: почему вы не прочитали эти дела? Ответ тот же: чтобы выстроить модель, требуются силы и время. Ему следовало бы проследить каждое дело, прочитать его, а затем вставить в более широкий контекст юридического прецедента. Читать сложно. Генерировать легко.

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

Именно поэтому в LLM заключена такая сила, и одновременно они так опасны для программиста. Что бы ни генерировал ИИ — совершенный код или галлюцинации, вам всё равно придётся это прочитать. Проследить, как предположительно должен работать этот код, как он взаимодействует с оставшейся частью системы, каковы его побочные эффекты. Чем длиннее сгенерированный код, тем больше времени требуется, чтобы выстроить на его основе ментальную модель. Справившись с этой задачей, вы сможете увидеть в коде проблемы, места, где сгенерированный код неуместен, либо тихо ломает что-то ещё.

Притом, что LLM может в неограниченном количестве генерировать код или текст, всё время остаётся соблазн это не читать. Но без модели не обойтись. Вы не хотели бы загрузиться в чужую игру и оказаться посреди схватки с боссом. Именно такие ощущения вас ждут, если вы унаследуете или сгенерируете код, который не понимаете.

Так что вот самое главное узкое место в разработке ПО. Не писать, а понимать.


Пока у нас нет аналога LLM для понимания. Нет инструмента, который мог бы мгновенно переносить полную ментальную модель из системы прямо вам в голову. Пока он не появится, это узкое место никуда не денется. Мы решили проблему «медленной печати». Теперь мы можем сгенерировать больше кода, чем вообще в состоянии прочитать. Но пока мы не решим проблему с пониманием, стоимость разработки ПО не изменится: она стоит столько, сколько нужно времени человеку, чтобы осмыслить код.

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

Возможно, будущее программирования — не в ускорении генерации кода, а в ускорении его понимания. А эту проблему решить гораздо сложнее.


 

Хотим напомнить, что у нас стартовала осенняя распродажа 🍂

Условия акции:

16–28 сентября 2025 г.

Скидка 35% на все бумажные книги по купону — Бумажная
Скидка 50% на все электронные книги по купону — Электронная

Автор: ph_piter

Источник

Rambler's Top100