📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Что я думаю про будущее разработки в эпоху ИИ

Лёша Корепанов14:10

Transcription

Я хочу поговорить о том, как изменится жизнь разработчиков из-за искусственного интеллекта в течение следующих 5-10 лет. Конечно, в наше время планировать на десятилетие вперёд — так себе идея, но у меня есть небольшое преимущество. Я работаю разработчиком уже 25 лет и все эти тренды последних десятилетий ощутил на собственной шкуре. Ну и поразмышляю о том, что делать нам, разработчикам, чтобы не отстать от жизни, продолжать заниматься тем, что нравится, и получать от этого деньги.

Первое изменение, которое я предвижу — это то, что библиотеки и фреймворки могут частично исчезнуть. Как мы сейчас учимся в разработке? Сначала изучаем язык. Если это веб, учим HTML и CSS, если энд, там базы данных. Но кроме этого, обязательная часть образования разработчика — это изучение библиотек, фреймворков, бойлерплейтов, скафолдингов, которые упрощают написание кода. Конечно, можно написать веб-сервер на Node.js с нуля, работая напрямую там с HTTP сокетами, но гораздо удобнее использовать Express, Next.js или Nest.js. Все эти фреймворки созданы для того, чтобы стандартные задачи решались проще с меньшим количеством строк кода, а значит, с меньшим количеством ошибок.

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

Я не думаю, что фреймворки исчезнут совсем. React наверняка останется. Но вот простой пример. Если попросить ChatGPT написать веб-страницу, какой фреймворк он использует для CSS? Никакой. Он напишет напрямую на CSS, игнорируя Tailwind, Material UI или Chakra UI. Вы можете явно попросить его использовать Tailwind, и он это сделает. Но по умолчанию — зачем усложнять? То же самое с каким-нибудь React. Если попросить создать тетрис, он напишет на чистом JavaScript. Можно попросить сделать React-приложение, и он его сделает, но по умолчанию он выберет более простой путь. И эта тенденция будет только усиливаться.

Как к этому готовиться? Фокусироваться не на фреймворках, а на архитектуре и паттернах проектирования. С одной стороны, нужно понимание низкоуровневых вещей, с другой — понимание архитектуры приложения в целом.

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

Из личного опыта: первые 4-5 лет моей карьеры я практически не видел чужого кода. Профессионально ревьюить я начал только в 2004 году, а до этого я работал в небольших компаниях, где каждый разработчик писал свой код, который уходил в продакшн без ревью. Тогда это хоть как-то работало. Сейчас, я думаю, это немыслимо, кроме как в каких-нибудь прототипах. Это я к чему? К тому, что тенденция смотреть на код друг друга появилась не сразу. То, что людям придётся больше смотреть на код, сгенерированный ИИ, вместо того, чтобы писать самим, кажется естественным продолжением этой тенденции.

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

Следующее изменение — то, что программирование превращается больше в описание желаемого результата, чем в написание инструкции для компьютера. Это похоже на появление декларативных подходов вроде React. React не говорит: "Возьми вот этот вот div-элемент и поменяй его содержимое". Он говорит: "Страница должна выглядеть так". А дальше сам заботится о том, чтобы привести DOM к нужному состоянию. Такой директивный подход будет становиться всё более популярным, мне кажется, во всей разработке. Например, вы говорите: "Эта страница должна показывать отсортированный список продуктов". Раньше разработчики явно вызывали функцию сортировки, передавали данные, получали результаты. Теперь не нужно говорить: "Вызови эту функцию". Вы просто говорите: "Я хочу отсортированный список". И ИИ сам решает, как он это будет реализовывать.

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

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

Есть ещё и другой аспект. Сейчас джуны не востребованы, потому что у них есть навыки написания кода, но нет навыков разработки архитектуры. Это, возможно, проблема текущего подхода к входу в профессию. Сейчас путь какой? Выучи язык программирования, стань разработчиком. Выучи Python — стань бэкендером. Выучи JavaScript — стань фронтендером. Возможно, это неправильно. Возможно, правильнее так: выучи архитектуру разработки фронтенд-приложений, стань фронтендером. Не обязательно знать, как работает JavaScript в деталях, не обязательно знать все HTML-теги. Человек может знать только основные принципы: код разбивается на модули, есть циклы, классы, условия. Не очень представляю, как писать код, собственно, руками, но он может управлять и говорить: "Напиши модуль. Вот эта страница должна делать то, это делать это". Или, допустим, он понимает, как аккуратно разложить всё по правильной архитектуре: load balancer, application-сервисы, база данных, Primary, Secondary реплики и так далее. Он может прекрасно понимать организацию архитектуры, но не знать ни одного языка программирования и тем не менее успешно справляться с разработкой. Это будет джун, который начал карьеру сразу с инструментов ИИ. Мне кажется, это возможно, и возможно кому-то придётся начинать карьеру именно так.

В качестве иллюстрации: я в новостях прочитал, что в Стэнфорде появился курс под названием "The Modern Software Developer". Там фокусируется на разработке с помощью ИИ, и можно успешно закончить курс, не написав ни строчки кода руками. В общем, образование тоже меняется и будет меняться ещё сильнее.

Даже синьорам придётся учиться более широким вещам: думать о продукте, знать UX, разбираться в инфраструктуре и бизнес-логике. Я не говорю, что узкие специалисты исчезнут. Они всегда были нужны. Скажем, эксперт по оптимизации производительности рендеринга через WebGL всегда будет востребован, но это не массовое явление. Такие специалисты нужны иногда в некоторых компаниях. Массово будут нужны более широкие разработчики с достаточно глубоким, но не узко специализированным пониманием.

Эта тенденция, в общем-то, соответствует тому, что я наблюдаю за последние 25 лет. Кирпичики, из которых мы строим программное обеспечение, становятся всё крупнее. Я учился в институте, изучал Паскаль, и у нас были небольшие модули вроде CRT для рисования на экране. Со временем эти кирпичики укрупнялись: появлялись библиотеки, затем фреймворки. И это уже не просто библиотеки. Фреймворк диктует, как строить архитектуру системы. Фреймворки начали появляться, ну, плюс-минус после 2005 года, а примерно в 2015 году стали популярны менеджер-сервисы вроде AWS. Это огромный набор кирпичиков на все случаи жизни: лямбды для бэкенда и S3 для ручной настройки, контейнеры, Kubernetes, managed базы данных — это кирпичики ещё более высокого уровня. Разработчикам приходилось оперировать абстракциями всё более высокого уровня. И просто следующий шаг — абстракция ещё более высокая, где вы говорите, что нужно сделать.

Ещё одна тенденция: ИИ генерирует код лучшего качества для более популярных языков. Для редкого экзотического языка он ошибается гораздо чаще, чем для TypeScript или Python. Отсюда следует, что менее популярные языки станут ещё менее популярными. А популярные — ещё более популярными. Смысл учить что-то, кроме Python, JavaScript, Rust, PHP, C++, C# — этого, скажем, десятка мейнстримовых языков — уже сейчас невелик, а в будущем он станет ещё меньше. И, возможно, 99% кода будет написано на Python, JavaScript, а остальные языки станут, ну, нишевыми. Возможно, это будет временная ситуация. В какой-то момент ИИ научится одинаково хорошо писать на любом языке, даже на том, который вы только что придумали, но в ближайшие годы, мне кажется, такой провал будет.

Есть мнение, что либо появится язык, предназначенный не для людей, а для языковых моделей, либо модели начнут писать настолько нечитаемый код, что он будет предназначен только для машин. Возможно, все хорошие практики о читаемости кода отомрут. Что придёт на замену? Логично было бы предположить, что исходным кодом станут промты, диалоги с ИИ, но это имеет мало смысла, потому что генерация по промту недетерминированная: 100 раз запустишь один и тот же промт и получишь 100 разных вариантов кода.

Моя идея в том, что языков программирования, возможно, вообще не останется, но, по крайней мере, они не будут использоваться большинством разработчиков. И будет генерироваться либо машинный код, либо псевдокод для виртуальных машин, там, Python.NET. Зачем генерировать код на Python, если можно сгенерировать ассемблер для виртуальной машины Python? У меня тут простая логика: если код никто не читает, зачем делать его понятным для людей? Уже сейчас кодинг создаёт такой спагетти-код, в котором разобраться очень сложно. Он явно не предназначен для чтения. Это, конечно, перспектива не ближайших 2 лет, но во многих случаях код будет писаться так, что люди на него вообще не будут смотреть.

Что с этим делать? Работать с кодом через агента, который объяснит, что там происходит, или через тесты смотреть на код как на чёрный ящик, используя тесты для понимания логики. Ещё есть такой момент: сейчас никто не понимает, как миллиарды параметров в языковых моделях взаимодействуют друг с другом. Есть специальные методики, которые пытаются понять, что делает конкретный нейрон. И в какой-то момент системы, сгенерированные ИИ, станут настолько сложными, там будет количество кода, которое человек не напишет там и за миллион лет, а ИИ сможет сгенерировать это быстро, и эти системы будут прекрасно работать, но необходимость разобраться в том, как они работают, останется. Возможно, появится какая-то специальная профессия для людей, которые копаются в таких системах и разбираются в них. Недаром уже сейчас есть такой прикол профилей на LinkedIn с должностью "вайп-кодинг специалист". Это человек, который исправляет то, что другие навайп-кодили. И шутки шутками, но это реальная потребность.

За последние пару недель я дважды слышал о таком спросе. Мой бывший коллега рассказал, что его наняли менеджером для создания продукта и набора команды. Пока он готовил документацию, пока ещё не приступая к найму, он тихонечко навайп-кодил весь продукт самостоятельно. У него полностью рабочий прототип, он доволен. Хотя в продакшн это, конечно, выпускать нельзя. Теперь ему нужны люди, которые либо всё это причешут до продакшн-качества, либо перепишут это всё с нуля. Второй случай. Мне написал человек, который не умеет программировать, но он навайпходил 90% своего продукта. Теперь он ищет способ или агента, который разгребёт всё это и доведёт до работающего продукта. Хотя, мне кажется, ему нужно нанять разработчика. Спрос на таких специалистов есть и будет расти в ближайшие годы, пока инструменты ИИ не станут достаточно мощными для создания продакшн-кода. И даже после этого в некоторых случаях будет требоваться клинап.

Хотел бы я заниматься такой работой, но почему бы и нет. Я люблю работать с кодом, даже если это запутанный код, который нужно разобрать, покрыть тестами, красиво переформатировать с правильной архитектурой. Это, в общем-то, тоже интересное занятие.

В районе года это 2010 была популярна шутка о клавиатуре программиста будущего с двумя кнопками: "чтобы работало" и "чтобы не глючило". Нажимаешь на первую — получаешь продукт, но с глюками. Нажимаешь на вторую — исправляются все баги. Удивительно, насколько это похоже на то, что происходит сейчас. В общем, я думаю, что и вторая кнопка появится. Она уже появилась. Это дебаггинг с помощью ИИ-агентов. Многие копируют ошибки и код в ChatGPT, спрашивают, что не так, и получают ответы. В будущем это станет ещё более интегрированным процессом.

Теперь давайте я пофилософствую об изменении мира в целом. Иногда встречаю страшные предсказания о тотальной безработице. Все программисты останутся без работы, потому что ИИ будет писать код, разработчики не нужны. Более того, никакие профессии не будут нужны, потому что роботы будут делать всё, а 99% людей не смогут вообще найти работу. Я в это не верю и надеюсь, что так не будет. И вот почему.

Проведём мысленный эксперимент. Представьте богача, владельца компании, который владеет мощным ИИ. У него миллиарды долларов, потому что многое в мире производит как раз этот ИИ. У него большой дорогой дом. Какую картину он повесит на стену? То, что сгенерировал какой-нибудь условный ChatGPT? Нет, он повесит работу старого мастера или современного художника, которому заплатят огромные деньги. Почему огромные деньги? Потому что вещь, которая стоит 3 копейки, даже если она выглядит лучше произведения из Лувра, но напечатана роботом, он её не повесит. И даже раму он найдёт ту, которую выстрогал человек руками. Потому что если рама даже сделана из золота, но её сделал робот — это не искусство. Будет огромный спрос на дорогое искусство от богатых людей, и большие деньги пойдут вот таким вот мастерам.

О'кей, у миллиардеров и у мастеров есть дети. Куда они отправят их учиться? Посадить за компьютер, чтобы их учил ChatGPT? Вряд ли. Они отправят детей в престижный университет или школу. Захотят ли они, чтобы детей изучали роботы, я сомневаюсь. Они захотят умных, мудрых профессоров. Конечно, эти профессора должны уметь пользоваться ИИ, но в школе обязательно должны быть живые учителя. И школа должна быть дорогой. В дешёвую богачи детей не отправят. Дорогая означает лучших учителей, а лучшим учителям нужно платить много, потому что на них большой спрос и их мало.

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

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

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