ШІ проти програмістів: кому загрожує звільнення, бо алгоритми вчаться кодувати
Розроблення програмного забезпечення — складний, довгий та дорогий процес. А оскільки автоматизація здешевлює виробництво, бізнес постійно шукає способи оптимізувати розроблення ПЗ. Зараз у тренді алгоритми штучного інтелекту, здатні самостійно писати код.
SPEKA з'ясовувала, чи зможуть нейромережі замінити розробників.
Платформи no-code- або low-code: немає коду — немає проблем?
Однією з перших спроб вилучити програмістів із процесу було розроблення так званих no-code- або low-code-платформ. Вони дозволяють створити застосунок або сервіс без кодування. Принцип дії таких програм полягає у використанні вже готових блоків та шаблонів.
З no-code-платформами вам не потрібно наймати розробника, щоб створити свій онлайн-магазин чи вебсайт. Ви можете зібрати його власноруч на платформах на кшталт Wix.com (в Україні більш відома російська Tilda). Безкодовими платформами (до яких належить, зокрема, Microsoft Excel) користуються мільярди людей.
Такі продукти в Україні розробляють чимало компаній. Наприклад, Sigma Software має три рішення у сфері платформ low-code/no-code: Corezoid Process Engine дозволяє будувати та керувати процесами організації у хмарі, є платформою для автоматичного розпізнавання даних у їхніх вихідних джерелах та інструментом для бізнес-аналітиків на основі машинного навчання.
Через популярність no-code-платформ у деяких галузях постає питання: чи не замінять вони розробників? Інженер програмного забезпечення та викладач Дейв Вухріс каже, що пам'ятає, як безкодові системи рекламували ще у 1970-х. Але вони досі не змогли стати повноцінною заміною програмістам.
Написання програм передбачає істотну складність. А вирази, змінні, функції, оператори та команди є основними будівельними блоками програмування. Без них не можна створювати по-справжньому корисні програми. Вухріс пояснює, чому no-code не панацея:
«Якщо ви надто спростите їх, вони стануть іграшкою, пластиковою моделлю транспортного засобу, яка не зможе перевозити реальні вантажі. Якщо ви збережете всі необхідні можливості програмування, але висловите їх без тексту, це буде жахливо складний, повільний, незручний спосіб застосувати ті самі принципи програмування.
Текст, вихідний код, — це найпростіший і найшвидший спосіб висловлення?та маніпулювання фундаментальними поняттями, з яких складається кожна програма. Уявіть, що мені довелося написати цей текст, використовуючи версію англійської мови з низьким вмістом тексту, малюючи діаграми або клацаючи пункти в меню.
Писати було б важко. Це було б повільно, незграбно, я, ймовірно, пропустив би щось, і, майже напевно, це було б важче читати. Те саме стосується розроблення коду та програмного забезпечення.
Основна проблема no-code-рішень полягає в тому, що це так зване узагальнене програмування. Ці платформи не оптимізовані під користувача, вони надто прості. Вони розуміють лише примітивні команди. Наприклад, юзер робить заявку боту в Telegram і хоче купити квитки на концерт. Бот зможе знайти квитки за іменем виконавця й запропонувати метод оплати, але навряд знайде оптимальні місця.
Ці рішення не дуже добре масштабуються, тобто, якщо у вас стає багато юзерів, no-code-платформи не спрацюють. На певному етапі це буде коштувати дуже дорого, і настане момент, коли простіше буде найняти фахівця, який зробить застосунок саме для вашої бізнес-логіки.
Copilot, або Віддай код на аутсорс
У певний момент технологічний та бізнесовий світи усвідомили, що відмова від коду неможлива. Але спробувати скоротити витрати на розробників продовжилися, адже можна навчити штучний інтелект писати код.
Тоді Microsoft у колаборації із GitHub створили Copilot. У ньому програмісти ставлять завдання звичайною мовою, а на виході отримують створений програмою готовий код. Це пришвидшує програмування на 50%, стверджують у компанії. У червні Amazon запустив власну версію інструменту під назвою CodeWhisperer.
А ще є Sketch2Code. Цей інструмент також від Microsoft перетворює будь-який мальований дизайн на HTML-код за допомогою ШІ. Тобто вам достатньо намалювати розмітку ручкою або на графічному планшеті, і ви отримаєте готову HTML-розмітку майбутньої вебсторінки.
Але знову ж таки не все так просто. Олександр Піндик, Senior Game AI Developer у компанії Wargaming, пояснює, що ця технологія недосконала:
Підписуйтеся на наші соцмережі
Рефакторинг та переписування старого коду
Згодом корпорації зосередилися на legacy — галузі, яка щороку коштує їм мільйонних витрат і не приносить прибутків. Це застарілий код із використанням давніх мов програмування та алгоритмів. А якщо команда розробників змінювалася, то часто нові працівники навіть не уявляють, як працює код, який залишила попередня команда. Що довше існує продукт, то більше у нього ймовірного legacy. Деякі корпорації мають код 20-30-річної давнини, а працювати та знаходити баги у ньому — джерело мук для більшості програмістів.
Доволі потужно з цим просунулась IBM, знову ж таки за допомогою штучного інтелекту. Їхня розробка під назвою Big Blue займається перекодуванням старих програм, щоб вони могли працювати на сучасних обчислювальних платформах. Останні ініціативи IBM отримали назву Mono2Micro та Application Modernization Accelerator (AMA). Нік Фуллер, директор відділу гібридних хмарних сервісів IBM Research, каже, що ці ініціативи наближають день, коли штучний інтелект зможе автоматично перекладати програму, написану на COBOL(застарілу зараз), на Java.
Натепер ШІ може лише розбивати застарілий машинний код немодульних монолітних програм на автономні мікросервіси. Потім інструмент рефакторує монолітні програми на основі Java у мікросервіси. Цей рефакторинг моноліту в автономні мікросервіси, кожен з яких відповідає за свою функцію, мінімізує зв'язки, які існували у програмному забезпеченні, коли воно було монолітною програмою. При цьому не впливає на роботу програми.
Перекладати з однієї мови програмування на іншу доволі складно. Мови програмування, як і людські мови, мають контекст. Значення конкретного висловлювання в рядку насправді пов'язане з попередніми рядками, і отримання цього контексту потребує багато зусиль, часу та ресурсів. Що більша програма, то важче її перекладати. При цьому якщо в людській мові контекст може бути обмежений абзацом або, можливо, одним документом, то у мовах програмування контекст насправді може стосуватися кількох бібліотек та інших служб, пов'язаних із цією конкретною програмою. Тому Нік Фуллер зазначає, що ми лише на початку цього шляху.
Ідея помічника, який працюватиме із застарілим кодом викликає ентузіазм і у бізнесу, і у розробників. Для компаній це можливість скоротити витрати на обслуговування системи. Для програмістів — звільнення від рутинної роботи. Олександр Піндик вважає цю ідею корисною:
«Я пишу на С++, і навіть я вважаю, що це не найкраща і не найсучасніша мова. Тому ідея переписування коду алгоритмом насправді непогана. Ці системи можуть також валідувати код, тобто перевіряти його на наявність проблем. На цей час професійна людина виконує таке завдання краще, ніж нейромережі. Перегонці професійно керують автомобілем, але згодом автопілот зможе кермувати краще, ніж більшість людей на планеті.
Для бізнесу це, звісно, круто. Бо програмістів однаково бракує, вони зможуть використовувати їх для розроблення нових рішень та систем, а підтримку легасі передати автоматизації«.
Чи справді AlphaCode програмує як розробник середнього рівня?
Але старим кодом, звісно, ці спроби не обмежуються. Deepmind розробила AlphaCode. Систему протестували на Codeforces — популярному змаганні з програмування серед людей. AlphaCode отримав середній рейтинг 54,3% з 10 спроб. Як заявляють розробники системи, це відповідає розробнику рівня middle.
Учасникам дають 5-10 описів завдань, і вони повинні надіслати якомога більше рішень протягом приблизно трьох годин. Змагальне програмування потребує дуже специфічного набору навичок. Тут AlphaCode зробив фундаментальний прорив.
AlphaCode навчений на наборі у 700 Гб відкритого коду із GitHub. Спочатку у нього була серйозна проблема: помилкові спрацьовування. AlphaCode міг створювати рішення, які позначені як правильні (оскільки вони вирішують видимі тестові випадки), але насправді є неправильними. Також були «повільні позитиви» — правильні, але алгоритмічно неефективні рішення. Правила конкурсу штрафують за помилкові рішення. Інші алгоритми подібного напряму мали частоту помилкових позитивних результатів 30-60%. Працівники DeepMind скоротили їх до 4%. AlphaCode зазвичай краще програмує на Python (синтаксис C++ складніший), і він генерує таку саму кількість мертвого коду (код, який написаний, але не надає рішення), як люди.
Вирішення цих завдань потребує знання синтаксису мови програмування. Але також потрібно розуміти логіку та навички алгоритмування. AlphaCode досяг нового рівня мистецтва у категорії ШІ. Це єдина система генератора коду, яка досягає конкурентоспроможного рівня у змаганнях з програмування, але твердження, яке зробив Deepmind, радше безпідставне.
Цифри — це ще не все
AlphaCode отримав орієнтовний середній рейтинг 54,3%, але найефективніші люди досягають 90%. Тому порівнювати його з професіоналами не потрібно.
Але рейтинг, який у різних спробах набирав AlphaCode, міг відрізнятися на 30% у різних сеансах. Наприклад, у конкурсі №1618 AlphaCode набрав 62,3%, 32,1% і 62,3%. Зміна оцінки на 30% показує, що AlphaCode може бути недостатньо надійним. Крім того, завдання сортують за складністю, і AlphaCode майже завжди розв'язував найлегші у кожному блоці.
Експерт Codeforces Дмитро Багданов називає обмеження часу ключовою складністю у цих змаганнях. У людей є три години для вирішення 5-8 завдань. AlphaCode може робити мільйони операцій за хвилину. Часовий тиск, який відчувають учасники, або проблеми, пов'язані з ненавмисними помилками, не існують для AlphaCode.
Він також зазначає, що конкурентне програмування часто не надто залежить від креативності. «З мого досвіду, це передбачає написання великої кількості шаблонного коду», — каже він. Хоча DeepMind дійшли висновку, що AlphaCode не копіює свої навчальні дані (принаймні не більше ніж люди).
Дмитро Богданов наголошує, що AlphaCode «це не AlphaGo з точки зору перемоги над людьми і не AlphaFold з точки зору революціонізації цілої галузі науки» (йдеться про перемогу штучного інтелекту людини у грі в го та найточніше прогнозування структури білка алгоритмом AlphaFold).
Вузький ШІ проти широких людей
Бен Діксон, автор технічного блогу TechTalks, проаналізував можливості AlphaCode у своїй статті «Чим є і чим не є AlphaCode DeepMind». Він наголошує на одному ключовому розумінні: ми можемо несвідомо прирівняти твердження «AlphaCode досяг конкурентоспроможного рівня продуктивності у змаганнях з програмування» з: «AlphaCode кодує не гірше за пересічну людину-програміста».
Адже AphaCode — це так званий вузький ШІ, тобто він працює лише з одним типом завдань. Натомість людина має й інші здібності, як-от «планування та визначення стратегії». Наприклад, AlphaZero — найкращий шахіст зі штучним інтелектом — вміє грати лише у шахи. Він ніколи не зможе екстраполювати ці навички на інші сценарії реального світу так, як це зробить людина.
А ще AlphaCode не має друзів. Якщо у людини-програміста виникла проблема, вона може звернутися по допомогу до товариша по команді. Це найкращий інструмент у наборі навичок людини, і AlphaCode не може з ним конкурувати.
Недоліки та переваги кодування з ШІ
Переваги кодування зі штучним інтелектом
Олександр Піндик розповідає, що такі системи можуть швидко створити стандартне рішення: написати API — обгортку, яка дає доступ до бази даних, створити фейсбук-граф чи сервіс надсилання імейлів.
«Вони правильно роблять стандартні речі. Якщо є правила, то вони дуже красиво це напишуть, а зазвичай це не найцікавіша частина роботи. Ти повинен майже копіювати код та адаптувати його під свої сервіси. У такому разі ці системи, звісно, допоможуть вам, вони зроблять за вас всю нудну роботу», — каже експерт.
Усі моделі вчаться на наявних даних, тому зараз вони добре вирішують завдання із пошуку рішень, коли є багато обставин.
Недоліки кодування зі штучним інтелектом
Але дуже часто те, що комп'ютер вважає найкращим, не є оптимальним рішенням для людини. Тому ШІ потребує зовнішнього спостерігача: потрібен той, хто має оцінити рішення алгоритму, адже він сам цього не вміє.
А ще штучний інтелект переважно завжди на крок позаду людства. Річ у тім, що йому потрібен час для навчання плюс база кодів, яка вже кимось написана, іншої нейронкою або людиною.
«Це питання того, як зараз працюють нейронки. Мені здається, що ми самі поки що не в змозі придумати, як зробити так, щоб алгоритм знаходив ефективний патерн та його оцінював. Треба багато додаткових інструментів, які будуть перевіряти рішення на продуктивність, на безпеку, на легкість масштабування. Щоб написати код, потрібно мислити, як архітектор. Цього він поки що не вміє. Алгоритм уміє розв'язувати завдання. Йому сказали написати вебсервер, він написав. Чому? Він знайшов схоже рішення у навчальних даних», — говорить ХТО?
Чи замінить ШІ програмістів?
Натепер в IT-ринку України 330 тис. спеціалістів. Станом на третій квартал кількість вакансій у галузі зросла на 15%. Чи загрожує їм втрата роботи через нові здібності ШІ?
На цьому етапі люди досі потрібні, щоб виявляти проблеми, перевіряти код та дбати про безпеку. Наприклад, якщо буде знайдена якась нова вразливість у системі, людина може швидко це виправити, а нейромережа не побачить проблему, бо у її навчальних даних такої ще не було.
Експерт додає, що такі системи є також і в Україні: «Люди вже намагаються застосовувати подібний підхід. Наприклад, одна нейронка малює графіку для гри, а інша робить базові системи для гри. Людина, як композитор, все це збирає в один продукт. Я вірю у такий напрям розвитку, коли люди будуть саме творцями у своїй роботі. Нейронці творчість не потрібна. Якщо ви її не попросите щось намалювати чи напрограмувати, сама вона це робити не буде. Вона не вміє хотіти, на відміну від людини. У майбутньому алгоритми робитимуть продукти та тестувати їх, а люди будуть їх налаштовувати та вести у потрібному напрямі».