DeepMind представила нейросеть AlphaCode — она создаёт код на уровне «среднего программиста-человека»

В компании заявили, что протестировали её на конкурсах для программистов — алгоритм вошел в 54% лучших.

DeepMind представила нейросеть AlphaCode — она создаёт код на уровне «среднего программиста-человека»
22 показа
35K35K открытий
66 репостов

Попытаюсь объяснить ситуацию с нейронками, которые якобы "пишут код на уровне мидла".


Беспокоиться можно начинать только когда нейронка сможет собирать требования от разных людей, понимать контекст задачи ("А на чём пишем?", "Какой бюджет на сервера?", "Как масштабироваться будем?", "А как работает финансовая система покупки акций в США?", "А какой сервис использовать для обработки пластиковых карт?", "Что делать, если у нас появится фрод?"), и формализовать всё это в алгоритме, например:

— Есть продакт менеджер, который описывает, как должна работать система, на человеческом языке.
— Есть с десяток (а то сотня) разных сервисов, которые ведут отдельные команды, нужно понимать, куда собственно нужно коммитить код (продакту это не интересно), между сервисами всегда есть потоки данных и их тоже приходится декомпозировать и разбираться: "ага, вот это поле нам нужно убрать из ответа в API, но тогда ломается совместимость сервисов A, B, C. Придётся связываться с командой обсудить, как мигрировать данные/процессы, не запуская maintenance на несколько часов (речь идёт о highload проекте)"
— Есть куча других аспектов продукта, которые тоже нужно учитывать: маркетинг, техподдержка, безопасность, развёртывание, и т.д. По-научному это называется кросс-функциональность — прогер не только код пишет, но и должен разбираться в прилегающих к продукту областях: иметь какое-то представление о безопасности, способность добавить систему для поддержки клиентов и поддерживать её в рабочем состоянии, разбираться, почему отваливается репозиторий с ошибкой 403 и не даёт деплоить новую версию сервиса, и т.д.


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


Касательно этой нейронки: как я понимаю, она умеет решать только уже решённые задачи в каком-то узком контексте (олимпиадное прогание). Если же мы слегка изменим задачу, добавив больше требований, например: "не больше O(logN) на выполнение, не больше O(N) по памяти", то нейронка уже загнётся, потому что она не знакома с концептом "оптимизация приложений по времени выполнения и памяти", она не сможет "сообразить" пойти на википедию почитать реализацию алгоритма Дейкстры, потом "сообразить", что решаемая задача вполне укладывается в этот алгоритм, но придётся придумать небольшую эвристику.


Далее, само описание проблемы по-сути содержит в себе правила, которые легко декомпозировать в код. Т.е. это выглядит сейчас как псевдо-код, а в таком стиле вы не найдёте реальных задач. Вот пример описания задачи с Jira:


ECHH-1874: BE | Plastic Eligibility Error In prep for instant funding, determine the cause of this ongoing error: [slack thread link]


Тащемта всё — ни тебе контекста, ничего. Что такое Plastic? Что такое Eligibility? Instant funding? И так далее. Чтобы заменить полностью программистов, придётся решить намного более сложную задачу: "problem-solving skills". Нейронка должна сама находить информацию в документации или спрашивать детали у людей, понимать, в какой репозиторий с Back-End сервисом нужно смотреть.


Конечно, можно формализовать все эти требования и контекст в виде текста, но я не вижу, чем это будет отличаться от программирования. Если мы сможем описывать на человеческом языке список вещей, которые нейронка должна учесть, и получать готовый код, то это будет отличным бустом к производительности, потому что мне не придётся сидеть разбираться, как правильно написать код на Scala и куда его воткнуть (я знаком с Ruby/JS/PHP/TypeScript, а Scala вот сижу изучаю, т.к. куча внутренних сервисов на него переписали уже).

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

Ответить

Согласен, по сути дела изобретается "еще один язык программирования"

Ответить