На письмо читателя

Mark Seemann получил письмо с множеством вопросов об обучении программированию в эпоху LLM. После переговоров с автором письма, он получил разрешение процитировать его обширно и публично ответить на вопросы.

Никакие из этих ответов Seemann не считает особенно строгими; ситуация настолько неопределённа, что он может ответить только из лучших побуждений, но не претендует на абсолютную истину.

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

Около года назад я заинтересовался программированием с помощью AI. Несмотря на отсутствие формального образования в информатике, с помощью LLM я построил довольно крупную систему на TypeScript/JavaScript с API, PostgreSQL, конвейерами LLM, автоматизацией исследований и мультимодельными рабочими процессами. Сначала это казалось почти магическим: AI, казалось, сокращал расстояние между идеей и её реализацией.

Но теперь я пытаюсь превратить эту систему в реальный продакшн, и я борюсь. Я исправляю одну ошибку с помощью AI, потом появляется другая, потом какая-то часть ведёт себя так, как я полностью не понимаю. После месяцев рефакторинга я пришёл к неудобному выводу: возможно, я построил систему, которая выше моего собственного уровня понимания. Когда всё работает, эта разница почти невидима. Когда это не работает, она становится очень реальной.

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

Я совсем не против AI. Я очарован этими системами и хочу с ними работать профессионально. Но я не уверен, каковы должны быть правильные отношения с ними.»

Действительно, Seemann тоже не уверен, но перед продолжением он считает необходимым раскрыть свою позицию. Он ещё не определился с AI, но склоняется к его неприятию, прекрасно сознавая, что это может быть неостановимо.

Он работает и экспериментирует с ним, и LLM часто его впечатляют. В других случаях это его раздражает. Обычно когда это впечатляет больше всего, его негодование максимально.

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

Его позиция по LLM основана только отчасти на его собственном социально-экономическом статусе. Он достаточно стар и добился достаточного успеха, чтобы, при прочих равных, пережить безработицу. Но он не уверен, может ли выжить любое основанное на знаниях общество.

Возможно, LLM отнимут рабочие места у программистов раньше, чем у других белых воротничков. В конце концов, программирование может быть областью, где проверку проще, чем, скажем, управление исками в страховке. Тем не менее, если мы достигнем точки массовой безработицы среди работников умственного труда, он не уверен, что общество в его нынешнем виде выживет.

Обычно он не много говорит о своём образовании экономиста, но в этом контексте считает это уместным упомянуть. Как экономист, он не может себе представить, что массовая безработица в 30–40% не повлияет значительно на экономику.

Он болезненно осознаёт аргументы, что это уже бывало: может быть потеря рабочих мест, но технологический прогресс приводит к новым рабочим местам, которые мы не можем себе представить сегодня. Это было при введении чулочной машины, паровой машины, двигателя внутреннего сгорания, компьютеров и т. д. Это только частично верно: да, новые рабочие места были созданы, но часто не для тех людей, которые потеряли свои. Шахтёры не просто за ночь становились программистами.

Похожий аргумент использовался, когда Китай был принят во Всемирную торговую организацию. И действительно, было создано много новых рабочих мест, просто не на Западе.

Исходя из личного и исторического опыта, он скептичен к аргументам о том, что всё будет хорошо.

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

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

Рад ли Seemann, что выучил программирование до LLM? Да, конечно. Эти навыки хорошо служили ему тридцать лет.

Если бы он начинал сегодня, он бы серьёзно рассмотрел изучение столярного дела, кузнечного дела, оружейного дела или чего-то ещё, что требует зрительно-моторной координации. Он знает, что прогресс делается и в робототехнике, но замена физического труда, кажется, ещё далеко впереди.

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

Думает ли он, что AI позволяет людям развиваться быстрее, чем они успевают? Это ещё предстоит увидеть. Разработчики программного обеспечения уже, в течение десятилетий, работают на основе абстракций, которые они не понимали. Если вы были веб-разработчиком, вы не много знали о компиляторном программировании. Если вы были компилятором программиста, вы не много знали об интегральном проектировании схем. И если ваша работа заключалась в инженерии интегральных схем, вы не много знали о уровнях абстракции выше вас.

Хорошее правило: понимать уровень абстракций непосредственно ниже того, в котором вы работаете, а также находящийся выше. Это позволит вам решить большинство проблем.

«И как вы с этим сами справляетесь? Когда AI может решить что-то сразу, как вы решаете, когда его использовать, а когда работать над проблемой самостоятельно? Если бы вы были на моём месте с существенным проектом, построенным AI, но слабыми основами снизу, вы бы отступили и систематически выучили эти основы, продолжали строить и учились по мере появления проблем, или комбинировали бы оба подхода?»

Это два радикально разных вопроса, потому что Seemann уже не имеет слабых основ в разработке программного обеспечения. Даже если бы он имел дело с чем-то далёким от того, что он обычно делает, он может нарастить компетенции, используя то, что он уже знает. Представьте себе, что кто-то поручил ему поддерживать приложение, написанное исключительно на коде RISC-V ассемблере. Это самая чужеродная среда разработки, которую он может себе представить. Адаптация к такой среде разработки была бы для него сложной, но всё же не такой сложной, как для новичка в программировании в целом. Верите или нет, он написал небольшие учебные программы на RISC-V, а также учебный компилятор, который компилировал в RISC-V.

Но что если у вас практически нет опыта в программном обеспечении?

Что ж, когда-то давно, он был в точности в такой ситуации. Когда он начинал карьеру, годами он ходил по лезвию ножа, выполняя работу и одновременно учась. Начиная с 1999 года, он писал COM компоненты на C++, не понимая большую часть того, что он делал. Каким-то образом, ему всё же удалось, что это работало, даже в степени, что ему удалось устранить любые явные утечки памяти.

Однако он никогда не был доволен просто что-то сколачивать без понимания того, как это работает. Поэтому он, как предлагается в вопросе, отступил и систематически выучил основы. Это хорошо сработало для карьеры, начавшейся в середине 1990-х годов. Будет ли это хорошо работать сегодня?

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

Правда, с LLM, можно учиться быстрее, потому что можно задавать более целенаправленные вопросы. Тридцать лет назад Seemann покупал книги в надежде, что они содержат какой-то полезный материал. Это всё ещё означало бы прохождение через большой объём учебного материала, не сразу релевантного для задачи.

Тем не менее, он сомневается, что можно значительно ускорить обучение человека. Узким местом является едва ли учителя или материалы, а то, как быстро человеческий мозг может усваивать новые знания.

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

Краткий ответ на первый вопрос: медленно, на основе большого количества проб и ошибок, иногда подкреплённых книгой.

Кроме очень раннего неудачного начала с COMAL 80, первый проект программирования Seemann заключался в (пере)вычислении диаграмм бифуркации и аттрактора Лоренца для своей магистерской диссертации по экономике. Вооружившись тем, что у него было, он написал их на QBasic, обучаясь на примерах, которые с ним поставлялись, а также иногда спрашивая друга.

Хотя опускает много деталей, в 1990-х и 2000-х годах он в основном учился из примеров и документации. Хотя он купил книгу про C++, он не думает, что когда-либо её закончил, и выучил различные диалекты Basic, а также C# исключительно из документации и примеров кода.

Однако, хотя он никогда не читал книгу для изучения C#, книги были инструментальны в обучении его как F#, так и Haskell. За эти годы он в значительной степени полагался на книги для самообразования, но как раскрывает его профиль Goodreads, он в целом любит книги.

Как он учит совершенно новый язык программирования сегодня? Опять же, его опыт бесполезен для того, кто новичок в программировании в 2026 году: он теперь видел столько языков программирования, что если он столкнётся с новым, он может обычно выучить его, изучая существующий код и уточняя несколько вещей, которые не сразу ясны.

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

Вы можете заметить, что Seemann не очень использует LLM для обучения. LLM не галлюцинируют; они несут чушь, и он глубоко не доверяет тому, что они ему говорят. Это не означает, что он не использует LLM, но он склонен задавать им вопросы, которые дают проверяемые ответы. Могу ли я сделать это выражение Haskell более кратким? Любой полезный ответ на такой вопрос — это предложение кода, которое либо работает, либо нет; либо короче, либо нет. Это легко проверить.

Что мне учить дальше? с другой стороны, не дает проверяемый ответ. Он склонен не задавать такие вопросы LLM.

В заключение, можно сказать, что он предпочитает задавать LLM фальсифицируемые вопросы.