"Да"
Компьютерное программирование в своей основе — это две вещи:
- Решение задач с помощью компьютеров
- Овладение искусством управления сложностью этих решений
Трудно представить будущее, в котором умение решать задачи с помощью компьютеров и контролировать сложность этих решений станет менее ценным, чем сейчас. Поэтому программирование останется жизнеспособной карьерой даже с появлением инструментов на основе AI.
"Нужно самостоятельно писать код"
Вместе с тем, AI представляет реальную опасность для junior-разработчиков. Он достаточно хорошо генерирует код для многих задач. Если молодой программист не научится писать код и просто генерирует его, он лишает себя возможности развить глубокое понимание кода, которое приходит от практической работы.
По этой причине преподаватель предупреждает студентов: "AI может сгенерировать код для этого задания. Не позволяйте себе этого. Вы должны писать код самостоятельно".
Объяснение простое: если не писать код самому, не получится его эффективно читать. Умение читать код будет ценным — возможно, даже более ценным — в будущем, основанном на AI-кодировании.
Без этого навыка разработчик падёт в ловушку подмастерья чародея, создавая системы, которые он не понимает и не может контролировать.
Переход от кодирования к промптингу — это то же, что переход от Assembly к высокоуровневым языкам?
Некоторые проводят аналогию между переходом на AI-генерируемый код и историческим переходом с Assembly на высокоуровневые языки программирования.
С этим утверждением согласиться сложно.
Компиляторы детерминированы в том смысле, в котором современные AI-инструменты — нет. Для высокоуровневой конструкции типа цикла или условного оператора можно с высокой точностью предсказать, как будет выглядеть генерируемый Assembly для заданной архитектуры (по крайней мере до оптимизации).
То же самое нельзя сказать о решении, сгенерированном языковой моделью по заданному промпту.
Высокоуровневые языки — очень эффективный способ создавать точно специфицированные решения задач с минимумом текста, чего Assembly не мог обеспечить. Они исключили много случайной сложности, оставляя (при условии хорошо написанного кода) в основном необходимую сложность.
AI-сгенерированный код, напротив, часто не устраняет, а то и усиливает случайную сложность — выбирает неподходящие подходы к задачам, срезает углы и прочее.
Если не читать код, как заметить проблему?
А чтобы читать код, нужно его писать.
AI — отличный помощник преподавателя
Есть ещё один аспект: при правильном использовании AI — это мощный инструмент для обучения. Не как генератор кода, а как партнёр для понимания концепций и техник. Такой подход даёт огромный толчок в интеллектуальном развитии.
Одна из самых сложных сторон обучения программированию — застревание на проблеме. Когда не видишь трюка и даже не знаешь, с чего начать.
Ещё хуже, когда застревание вызвано случайной сложностью: не знаешь, как работать с инструментарием или что это вообще такое.
Это не проблема с вами — это проблема окружения. Бесполезное застревание отнимает время на реальное обучение и часто отпугивает людей от компьютерной науки.
(Автор когда-то застрял, пытаясь самостоятельно изучать Unix в Berkeley, что стало одной из причин отчисления из программы информатики.)
AI может помочь преодолеть эти препятствия и быть отличным помощником при правильном использовании. На GitHub опубликован файл AGENTS.md, который предлагается студентам для настройки AI-агентов так, чтобы они вели себя как помощник преподавателя, а не как генератор кода.
AI не обязательно должен быть помехой для роста программиста, если его использовать правильно.
", и…"
Несомненно, AI изменит программирование. Не так драматично, как думают некоторые, но в фундаментальных аспектах.
Написание кода может стать менее важным
Возможно, сам акт кодирования потеряет относительную ценность.
Это жаль: обычно нравится процесс написания кода, есть в этом удовольствие что-то создавать буквально голыми руками (в переносном смысле). В коде есть искусство, есть удовлетворение от хорошо написанного решения, множество эстетических выборов.
Однако похоже, что сырое мастерство написания кода может стать менее важным в будущем.
Когда это станет относительно менее значимым, другие навыки будут цениться выше.
Коммуникативные навыки
Например, способность ясно писать, думать и общаться — как с языковыми моделями, так и с людьми — вероятно, будет намного важнее в будущем. Многие программисты от природы склонны к писательству, и этот навык со временем будет расти в цене.
Чтение книг и написание статей или блог-постов — отличные способы развить коммуникацию.
Понимание бизнеса
Ещё один способ развития — обратить часть умственной энергии на лучшее понимание бизнеса (или государственных структур и прочего).
Программирование — это решение задач с помощью компьютеров, а у компаний их много. И то, и другое.
Некоторые люди из бизнеса смотрят на AI и говорят "Отлично, программисты нам больше не нужны!", но кажется столь же правдоподобным, что программист скажет "Отлично, люди из бизнеса нам больше не нужны!"
Оба взгляда, на мой взгляд, недальновидны, но AI может дать программистам возможность продолжать фундаментально работать как программисты и одновременно инвестировать больше времени в понимание реальных задач (бизнеса или иных), которые они решают.
Это отлично дополняет развитие коммуникативных навыков.
"Проектирование" систем
Как и многие программисты, отношение к термину "архитектор ПО" неоднозначное. Видел, как архитекторы-мечтатели наносили огромный вред.
За неимением лучшего термина, архитектура ПО с течением времени становится всё более важным навыком: умение эффективно организовывать большие системы и, что критично, контролировать их сложность.
Сложность для junior-разработчиков в том, что традиционно умение проектировать более сложные системы приходит из опыта написания маленьких частей, сначала плохо, потом всё лучше.
Большинство плохих архитекторов, которых встречал, либо плохо кодили, либо у них вообще было мало опыта кодирования.
Если позволить AI быть генератором кода для "простых" задач, откуда возьмётся интуиция, необходимая для эффективной архитектуры?
Именно поэтому снова повторю: вы должны писать код.
Эффективное использование языковых моделей
Ещё один навык, который, очевидно, будет расти в цене — умение эффективно использовать LLM. Считаю, мы ещё находимся в процессе понимания, что это означает.
И значение этого варьируется в зависимости от опыта.
Senior-разработчики
Программисты с большим опытом из эпохи до AI в хорошей позиции для эффективного использования LLM: они знают, как выглядит "хороший" код, имеют опыт построения больших систем, понимают, что важно, а что нет. Опасность в том, что они полностью перестают программировать и начинают страдать от деградации мышления.
Особенно опасно выстреливать промпты и потом зависнуть в бесконечной ленте в ожидании ответа.
Можно спросить, откуда я знаю.
Обычно использование LLM выглядит так:
- Анализ существующего кода для лучшего понимания, поиск проблем и несоответствий
- Помощь в организации мыслей для больших проектов
- Генерация относительно маленьких кусков кода для систем в разработке
- Генерация кода, который не хочется писать самому (например, регулярные выражения и CSS)
- Генерация демо/исследовательского кода, который можно выбросить или не планируется поддерживать долго
- Предложения тестов для конкретной функции в разработке
Стараюсь не использовать LLM для генерации полных решений, которые потребуется поддерживать. Иногда LLM используется рядом с ручным кодированием при разработке решения — помогает понять API и имеющиеся варианты.
Никогда не позволю LLM проектировать API систем, которые разрабатываю.
Junior-разработчики
Junior в более сложной ситуации. Повторю снова: вы должны писать код.
Искушение "интуитивно" проходить через задачи — очень велико, но надо с ним бороться.
Коллеги будут проходить интуитивно, и это будет раздражать: придётся работать больше, чем они, и могут критиковать за медлительность. Динамика работы здесь важна: если компания приоритизирует скорость над пониманием (что сейчас часто), нужно это принять и не потерять работу.
Однако верю, это временная ситуация. Скоро компании поймут, что "интуитивное" кодирование в спешке страдает от хуже контролируемого взрыва сложности, чем хорошо продуманное, осознанное кодирование.
Тогда медленное, вдумчивое кодирование с помощью AI будет понято как лучший способ использовать эту технологию.
AI может помочь junior-разработчику ускорить путь к должности senior, исключая случайную сложность, которая часто их подводит. Как упоминалось, рассмотрение AI как полезного, хотя иногда чересчур активного помощника, а не слуги, может быть очень эффективным в понимании структуры кодовых баз, доступных API и техник для конкретной задачи, работы систем сборки или языков программирования.
Но вы должны писать код.
И компаниям: позволяйте junior писать по крайней мере часть кода.
Трудоустройство сегодня
Вопросы вокруг AI и программирования в основном сводятся к проблеме трудоустройства.
Рынок труда для программистов сейчас в плохом состоянии, и видно, как хорошие студенты факультета информатики испытывают сложности с поиском должностей.
Хотя хрустальный шар отсутствует, верится, что это временная, а не постоянная ситуация. Рынок труда программистов циклический — бумы и спады чередуются, и выход из текущего спада произойдёт когда-нибудь.
Для тех, кто ищет работу прямо сейчас, это холодный комфорт, поэтому хочу дать конкретный совет по поиску работы, который даю студентам.
Семья, друзья, друзья семьи
Онлайн-порталы с вакансиями кажутся в основном бесполезными, особенно для junior. Это лотерея, шансы найти хорошую работу через них низки. Поскольку это бесплатно, их стоит использовать, но не нужно вкладывать в них много времени.
Лучший подход — правило четырёх "Ф": Family, Friends, Folks of friends (семья, друзья, друзья семьи). Используйте личные связи для поиска работы в компаниях, где у вас есть преимущество личного знакомства. Семья — самый сильный вариант. Друзья часто тоже подходят. Друзья семьи слабее, но тоже стоит спросить. Если вы знаете кого-то в компании или отделены несколькими градусами общения, шансы получить работу в этой компании намного выше.
Важно подчеркнуть студентам: это не значит, что семья должна работать в Google или какой-то другой крупной tech-компании.
В компаниях любого значительного размера есть задачи, которые нужно решать с помощью компьютеров. Почти у каждой компании с 100+ сотрудниками есть какой-то вид команды разработки, даже если они её так не называют.
На примере: был студент, который долго искал работу. Спросили, чем занимаются родители — ответил, что один работает в корпоративном отделе Costco.
Сказали ему, что он невероятно везёт и это его билет в отличную компанию.
Возможно, там не начнут как "компьютерный программист", может быть, стартуют как аналитик или ещё что-то. Но умение программировать поверх этой роли будет очень ценным и, вероятно, откроет отличную карьеру.
Заключение
Поэтому карьеру в программировании считаю хорошей идеей и сейчас. Рынок труда плохой, без сомнений, но это временно.
То, как делается программирование, меняется, и программисты должны развивать навыки за пределами "чистого" написания кода. Это всегда была хорошая идея.
Программирование меняется не так драматично, как заявляют некоторые, и фундаменты — особенно написание хорошего кода и управление сложностью — будут ценными всегда.
Надеюсь, этот материал полезен для ответа на этот вопрос, особенно для junior-программистов, и помогает людям чувствовать себя увереннее, выбирая карьеру, которая оказалась очень благодарной и, ожидаю, останется надолго.
И компаниям: позволяйте junior писать по крайней мере часть кода. Это в вашу пользу.