Влітку 2021 року Microsoft і GitHub представили нейронну мережу помічника програміста Copilot на основі технологій Open AI. Автори проекту навчили Copilot мудрості роботи з фреймворками і різними мовами програмування.  Після виходу системи було заявлено, що вона може найкраще працювати з такими мовами, як Python, JavaScript, TypeScript, Ruby і Go.

Copilot позиціонується як помічник програміста, який допомагає знайти альтернативні способи вирішення проблем розробки, поліпшити код і вивчити нові технології на льоту, не занурюючись в глибини пошукових систем. Але наскільки досконала ця система і чи станеться в якийсь момент, коли Copilot замінить більшість розробників?

Технології в основі Copilot

Розробники помічника розповіли, що він працює на базі OpenAI Codex, це нова система штучного інтелекту, яку створила OpenAI. Система була навчена наборам загальнодоступних даних зі репозиторіїв. Кілька терабайт прикладів коду були додані до навчальної бази даних. Після навчання асистент отримав «знання» про основні закономірності використання коду розробниками.

Copilot здатний генерувати код з простого текстового коментаря, що описує роботу функції, класу або сценарію, які програміст збирається написати. Іншими словами, розробник може написати замість коду щось на зразок «функції, яка приймає в якості аргументу для введення масиву несортованих чисел і повертає масив чисел, відсортованих за бульбашковим методом на виході». Ну, помічник перетворює все це в код.

Система аналізує код програміста, пропонуючи нові рядки або функції, з оцінкою семантичного контексту програмного забезпечення, що розробляється. При цьому помічник займається самонавчанням, він адаптується до стилю «свого» розробника і потім пропонує рішення, які відповідають рівню програміста.

Що стосується кодової бази, яку помічник використовує для своєї роботи, то позиція Microsoft з цього питання досить зрозуміла. Компанія заявила, що модель машинного навчання Copilot створює похідні роботи з раніше отриманих вхідних даних, які можна вважати похідним продуктом програмного забезпечення фактично за ліцензією Copyleft або AGPL. Що ж, GitHub стверджує, що Copilot зазвичай не відтворює точні фрагменти коду. Компанія наводить статистику, що, як це часто буває – в 0,1% випадків.

Які переваги для розробників?

На мій погляд, головна цінність Копілота полягає в тому, що він зможе підвищити ефективність і пізнавальні можливості самого програміста-людини. Так само, як один працівник екскаватора може виконувати роботу цілої команди копачів з лопатами, програміст за допомогою Copilot зможе виробляти і налагоджувати код в рази швидше. Наприклад, не так давно, вирішуючи ще одну проблему, потрібно було застосувати алгоритм бінарного пошуку. Випадок був досить рідкісним, тому я не пам’ятав напам’ять реалізацію цього алгоритму і відправився в Google в пошуках канонічного рішення. Загалом я витратив близько 20 хвилин на пошук та порівняння різних реалізацій, тоді приблизно стільки ж на написання, тестування та налагодження коду. З Copilot я міг би написати короткий коментар на кшталт «алгоритм бінарного пошуку» прямо в текстовому редакторі і відразу ж отримати готову реалізацію, яку доведеться тільки підлаштовувати під предметну область завдання.

Правда і фантазія на тему заміни людей роботами

Після виходу Copilot в мережі з’явилося багато хайпових статей на тему заміни розробників цифровими помічниками. Але всі ці міркування не мають доказової бази. Вони з’явилися завдяки тому, що Copilot начебто дозволяє розробнику перейти від імперативного програмування до декларативного програмування. Це означає, що потрібно лише дати опис проблеми, а комп’ютер сам розрахує своє рішення і в той же час найоптимальніше. Це призводить до нібито правдоподібного висновку: пройде ще кілька років і такі системи, як Copilot, витіснять живих людей з професії. Просто тому, що ШІ(Штучний інтелект) буде повністю розробляти, тестувати і розгортати додатки будь-якої складності.

Але ця думка неправильна. Справа в тому, що Copilot на даний момент не здатний генерувати нічого більш складного, ніж, в середньому, алгоритми сортування. Судячи з презентацій, система досить терпимо справляється з не дуже складними алгоритмічними випадками. Ймовірно, він вже може або зможе в найближчому майбутньому генерувати макет і деякі не дуже складні сутності.

Але можливості Копілота дуже обмежені. Наприклад, помічник від GitHub не зможе спроектувати для вас архітектуру високонавантаженого додатка, розробити високопродуктивну систему для алгоритмічної торгівлі ф’ючерсами на біржі або систему управління двигуном внутрішнього згоряння. Більш того, масове тестування Copilot розробниками показало, що якість коду помічника досить низька і іноді містить критичні помилки.

В цілому поява такого інструменту, як Copilot, цілком може стати інструментом для підвищення продуктивності розробників. Але це аж ніяк не повна заміна самих розробників штучним інтелектом. Більш того, в новітній історії IT можна зустріти безліч випадків, коли індустрії програмування передбачали «робототехніку». Приклад: Впровадження перших інтегрованих середовищ розробки (ВДЕ). Тоді “експерти” також заявили, що розробники незабаром залишаться без роботи, так як IDE найближчим часом почне писати весь код для розробників.

Потім стали з’являтися інші технології, наприклад, заповнення коду. А потім також ходили чутки, що зараз абсолютно впевнені, що забудовники залишаться без роботи. Просто тому, що завершення коду остаточно зведе нанівець їх цінність як фахівців.

Але це 2022 рік, і розробники все ще пишуть код своїми руками, і ще більш складні і складні, ніж 5, 10, 15 і так далі років тому. Правда, процес написання коду вимагає все більш складних інструментів. І просто помічник з Github – це такий інструмент. Копілот, швидше за все, не змінить роботу програмістів до невпізнання, принаймні в найближчі 5-10 років. Замість цього він стане ще одним інструментом в арсеналі розробника, який зробить процес розробки програмного забезпечення ще більш зручним, більш високого рівня і, на мій погляд, найголовнішим, швидшим. В цілому, час покаже.

Чи залишаться програмісти без роботи через машини?

Я так не думаю. Навіть якщо є ще один, ще більш ефективний інструмент, він все одно тільки зробить роботу програміста швидшою і кращою. Нейронні мережі допоможуть створити своєрідний творчий тандем «програмісти ШІ», але вони не здатні замінити людину.

Я можу дати вам ще одну аналогію. Так, в front-end розробці свого часу з’явилися перші макети дизайнерів, які вручну створювали код html-розмітки статичних сайтів. Потім з’явилися CSS, Javascript, jQuery, різні шаблонні движки, динамічні сайти – і роботи дизайнерів макетів стало менше. Потім з’явилися цілі js-front-end фреймворки, а робота дизайнерів макетів на той час була автоматизована такими інструментами, як Tilda або WordPress, Wix і так далі. Але професія нікуди не поділася – макетні дизайнери продовжують працювати, використовуючи ті та інші інструменти.

Програміст може втратити роботу тільки в одному випадку – якщо він не вчиться, доповнюючи свої знання і практичні навички. Але вже тоді такий розробник буде замінений зовсім не машиною – а іншою людиною, більш професійною, старанною і готовою постійно вчитися.