![](https://habrastorage.org/webt/zv/r0/jk/zvr0jkjx_rcc4tytdrfj8hjjats.jpeg)
Научно-техническая революция стимулирует спрос на вычисления. Последние полвека прогресс шёл в основном за счёт совершенствования железа. Но чипы приближаются к физическому пределу. Чтобы не снижать темпы развития, нужно улучшать программный код, повышая производительность вычислений. Требуют оптимизации в том числе базовые алгоритмы, такие как сортировка или хэширование, которые выполняются каждый день триллионы раз [1].
В то же время машинное обучение (нейросети) всё чаще используются для улучшения кода, созданного человека, а также для генерации собственного кода и для улучшения кода, сгенерированного им самим. Вот несколько примеров.
❯ Google AlphaDev ускорил сортировку
На Хабре упоминали эту новость. Если в двух словах, то в статье Nature, описывается — искусственный интеллект (ИИ) AlphaDev, разработанный инженерами Google Deepmind. Он использует обучение с подкреплением (reinforcement learning) для создания усовершенствованных алгоритмов. Руководит проектом Дэниел Манковиц (Daniel Mankowitz).
AlphaDev основан на AlphaZero, игровом ИИ, который побеждал чемпионов мира в го, шахматы и сёги.
Задачу поиска лучшего алгоритма сортировки коротких последовательностей чисел представили AlphaDev как игру одного игрока под названием AssemblyGame (игра в ассемблер).
Исследователи сосредоточились на улучшении алгоритмов сортировки коротких последовательностей из трёх-пяти элементов. Такие алгоритмы часто вызываются другими функциями сортировки. Результатом их улучшения будет ускорение сортировки уже любого количества элементов.
По итогу AlphaDev создал новые, небольшие алгоритмы сортировки на ассемблере, которые превзошли известные до сих пор и созданные человеком.
Чтобы сделать найденный алгоритм сортировки более удобным для людей, инженеры Google Deepmind провели его реверс-инжиниринг и перевели на один из самых популярных языков — C++. В стандартной библиотеке сортировки LLVM libc++ была сделана замена на алгоритм, созданный AlphaDev [2].
Сравнение кода программ на С++ и на ассемблере
a Пример на C++, который сортирует до двух элементов.
b Соответствующее представление кода на ассемблере.
То есть алгоритм сумел улучшить крошечную микропрограмму размером всего в дюжину инструкций. Такая казалось бы незначительная оптимизация в масштабе триллионов выполнений может привести к существенной экономии ресурсов.
Написание кода на ассемблере — это искусство сродни игре в шахматы или в го, работа без гарантированного результата. У реализации на ассемблере может быть как много вариантов, так и много возможностей всё испортить. Современные языки программирования, такие как C++ или Python, маскируют рутинную работу. В 1950-х годах, когда дебютировали языки «высокого уровня», стало бытовать мнение, что проблема с программированием в основном решена. До этого программирование было такой нудной рутиной на ассемблере, что один из первых языков высокого уровня Fortran после своего выхода подавался как «Fortran автоматическая система кодирования», потому что его операторы всегда транслировались в работающий ассемблерный код (Fortran — formula translator). Целью Фортрана было выдавать код лучше, чем смогли бы люди, и без ошибок. Сегодня это звучит смешно, но это было правдой.
Чаще всего улучшение таких языков, как C++ или Fortran, — это переделка на ассемблере, исключение лишних операций для оптимизации. В ассемблере отсутствуют формальные структуры и абстракции языков высокого уровня, и единственная ошибка может привести к нерабочему алгоритму. Игра в ассемблер для ИИ будет не на шутку, а всерьёз. Он будет терпеть неудачу снова, снова и снова, пока наконец не найдёт выигрышную стратегию.
На языках высокого уровня есть всего несколько алгоритмов для сортировки нескольких чисел в порядке возрастания. ИИ смог убрать в последовательности на ассемблере несколько инструкций, используя те инструкции — к которым, вероятно, и не подумал бы прибегнуть программист-человек.
Сети сортировки и алгоритмические усовершенствования, обнаруженные AlphaDev
![](https://habrastorage.org/webt/nk/df/ie/nkdfiez4thwsig9yor0hrbgrwti.png)
а Оптимальная классическая сортировочная сеть сортировки трёх значений. Компараторы, обведённые кружками, были улучшены AlphaDev.
b,c, Код ассемблера до применения операции своп-обмена AlphaDev и после применения операции своп-обмена AlphaDev, который привёл к удалению одной инструкции.
d Оптимальная классическая конфигурация компаратора сети сортировки, улучшенная AlphaDev.
e,f, Код ассемблера до применения копирования с перемещения AlphaDev и после применения копирования с перемещением AlphaDev, что привело к удалению одной инструкции.
От сортировки к хешированию в структурах данных
«Мы хотим оптимизировать весь вычислительный стек», — Дэниел Манковиц.
После быстрых алгоритмов сортировки исследователи Deepmind проверили, может ли AlphaDev обобщить и улучшить ещё один насущный алгоритм в информатике — хэширование.
Как результат, в этом году AlphaDev добавил новый алгоритм хеширования (9-16 байт) в библиотеку Abseil с открытым исходным кодом.
❯ ИИ (не) заменит программистов
ИТ-руководители в United Airlines, Johnson & Johnson, Visa, Cardinal Health, Goldman Sachs в восторге от потенциала генеративного ИИ для автоматизации процесса написания кода, ожидают значительное повышение производительности. Но выражают опасение, что использование ИИ приведёт к снижению входного барьера, к росту уровня сложности, технического долга и неразберихе, а им придётся разгребаться с управлением этим раздутым как шар ПО.
«Рост технического долга и мёртвого кода всегда будет проблемой» — говорит Трейси Дэниэлс (Tracy Daniels), директор по данным в финансовой компании Truist.
«Есть риск, что мы будем завалены большим количеством низкопробного кода, написанного машиной», — Армандо Солар-Лезама, профессор Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института.
![](https://habrastorage.org/webt/gw/1b/hh/gw1bhhl3pkcib_ty0s6vooiz78u.png)
«Это значительно усложняет задачу ИТ-директора, хотя и облегчает задачу программиста», — Вивек Джетли (Vivek Jetley), исполнительный вице-президент и руководитель отдела аналитики в EXL, компании, занимающейся анализом данных, цифровыми операциями и решениями.
Какие профессии могут исчезнуть
Адам Хьюз (Adam Hughes), разработчик программного обеспечения, доктор философии (PhD) с докторской степенью в области экспериментальной биофизики со специализацией в области нанотехнологий и разработки программного обеспечения, недавно выступил с несколькими статьями и с прогнозом, что ИИ возьмёт на себя 99% работы по программированию.
По его мнению, это произойдёт в течение десяти лет в несколько этапов:
- Прототипирование ИИ (I кв. 2023 г) — прогноз потери рабочих мест: 2%
Начавшиеся в Твиттере увольнения технических специалистов, скорее совпадение по времени.
- Масштабирование и проникновение в IDE (II-IV кв. 2023 г) — прогноз потери рабочих мест: 5%
ИИ может генерировать шаблонный код прямо из IDE, без копирования и вставки из чата.
- Расширенный инструментарий IDE и консолидация (один-два года) — прогноз потери рабочих мест: 25%
На этом этапе ИИ должен иметь возможность делать предложения по всему проекту.
Потеря работы коснётся малоэффективных или неспособных к работе с ИИ программистов.
Специалисты по виртуальной реальности или разработчики игр будут по-прежнему в безопасности.
- SaaS (Software as a service) и No-Code (2–5 лет) — прогноз потери работы: 75%
Отмирание кодирования в IDE.
Уйдут универсальные программисты полного цикла, рабочие группы (product team) и разработчики мобильных приложений.
Теперь будут под угрозой нишевые области: видеоигры и медицинское программное обеспечение.
- Превалирование нативного ИИ (5–10 лет) — прогноз потери работы: 95%
Нет необходимости оптимизировать код для человеческого понимания, поскольку поддержка кода людьми больше не осуществляется.
Отмирают модульные тесты, документация и шаблоны проектирования.
Для пользователей станет неинтересным какое работает ПО, как сейчас не задумываются какая прошивка у портативного калькулятора.
Новое оборудование и компиляторы будут предназначены для операторов ИИ.
- «Тепловая смерть» (10+ лет) — прогноз потери работы: 99%
Программное обеспечение становится неузнаваемым, бизнес-правила на базе ИИ поддерживаются малыми и средними предприятиями.
Код больше не находится в статических репозиториях — он эфемерен и динамичен.
Конечно, всё ещё останутся кодеры-любители, но их деятельность не будет иметь большого значения.
Правда, не все согласны с таким пессимистическим сценарием. По крайней мере, если смотреть на текущие возможности автоматической генерации кода в Copilot и ChatGPT, то в нём по-прежнему много ошибок и полностью доверять ему нельзя.
Например, по статистике Github, пользователи принимают около 30% кода, который предлагает Copilot. Интересно, что процент принятия растёт с увеличением времени использования этого инструмента.
![](https://habrastorage.org/webt/r2/rb/ss/r2rbsscwvesuv5vudosijawqm1q.png)
Однако исследование Стэнфордского университета показало, что у программистов, которые прибегают к помощи ИИ, количество ошибок в коде увеличивается. Так что всё не так однозначно, как говорится…
❯ Литература:
- Amazon. Amazon S3—two trillion objects, 1.1 million requests/second. AWS (2013).
- Gelmi, M. Introduce branchless sorting functions for sort3, sort4 and sort5. LLVM.org https://reviews.llvm.org/D118029 (2022).
- Deepmind’s AI Is Learning About the Art of Coding
- AlphaDev discovers faster sorting algorithms
- LLVM. LLVM users https://llvm.org/Users.html (LLVM, 2022).
- Richard Eisenberg. The Future of Programming
- Adam Hughes, ChatGPT Will Replace Programmers Within 10 Years
- Adam Hughes, Nervous ChatGPT Will Steal Your Programming Job?
- Andrej Karpathy. Software 2.0
- Ask HN: Those with success using GPT-4 for programming – what are you doing?
- The Future of Programming – Interview with Richard Eisenberg | Hacker News