Github Copilot. Мій досвід використання
Усі статті, обговорення, новини про AI — в одному місці. Підписуйтеся на DOU | AI!
Мене звати Олександр Панченко. Я TeamLead/Software Engineer у компанії SPD-Ukraine, маю
На початку цього року я спробував GitHub Copilot. Я отримав як позитивний, так і негативний досвід. Моє враження від цього інструменту з часом змінювалося від захоплення до розчарування, часом він мене сильно дратував та підводив, а часом — перевершував мої очікування. Я вимикав його на тривалий час, а потім повертався знову.
Я намагався розібратися, як GitHub Copilot працює під капотом, які дані збирає, куди і як їх надсилає, та що з ними відбувається надалі. Я перечитував більшість з того, що потрапляло в поле мого зору про GitHub Copilot та AI CodeGen рішення в цілому, мене цікавив рецепт ефективного використання AI в написанні коду.
Незалежно від того, чи є ви розробником backend або frontend, якщо ви проводите багато часу, пишучи шаблонний та повторюваний код, або просто цікавитеся, як ефективніше використовувати GitHub Copilot, ця стаття для вас.
Якщо у вас є досвід, яким Ви хочете поділитися — напишіть про ваш кейс в коментарі до статті.
Нещодавно GitHub опублікував статтю, де заявляє, що за рік, який минув від дати запуску GitHub Copilot, він став найпоширенішим у світі AI-інструментом для розробників. Його використовують понад мільйон девелоперів у понад 20 000 організаціях — від Coca-Cola до Airbnb, а також сам Microsoft та GitHub.
Дослідження, проведене GitHub в колаборації з Keystone.AI і Harvard Business School говорить про те, що вплив GitHub Copilot на продуктивність розробників суттєвий, і цей вплив посилюється з часом. GitHub стверджує, що 75% опитаних користувачів GitHub почувають себе комфортніше з ним та пишуть код на 55% швидше. GitHub CEO Thomas Dohmke стверджує, що «рано чи пізно 80% коду буде написано за допомогою GitHub Copilot».
Що ж, це звучить доволі вражаюче. Давайте розбиратися, наскільки це корисний інструмент, та чи може він зробити нас продуктивними.
Що ж таке GitHub Copilot
GitHub Copilot — це рішення для розробників, підсилене АI та покликане бути помічником у кодуванні через надання підказок, рекомендацій, виправлення помилок, написання коду на основі вказівок розробника та контексту. Дата релізу першої версії, що стала доступна для всіх охочих, — жовтень
GitHub позиціонує свій Copilot не просто як ще один «code completion tool», а саме як «AI pair programmer». Як на мене, це доволі вдалий хід, що звучить провокативно та підігріває до нього цікавість. Я намагався дивитися на це рішення саме як на свого асистента, партнера, який працює зі мною в парі та бере участь в процесі кодування.
Чи зможе GitHub Copilot справитися з даною роллю, та чи зможе наш «pair programmer» взагалі нас замінити — про це поговоримо в кінці статті, в розділі висновків.
Як це працює
Почати працювати з GitHub Copilot просто, всі необхідні інструкції є на офіційному сайті. GitHub Copilot безпосередньо інтегрується у редактор як плагін, можна обрати між Neovim, IDEs від JetBrains, Visual Studio та Visual Studio Code. Я ж працюю з GitHub Copilot в Visual Studio Code, IntelliJ IDEA та Intellij PyCharm.
Також я рекомендую встановити Visual Studio Code Insider, в якому, на відміну від IDEs від JetBrains, можна отримати доступ до експериментальних фіч GitHub Copilot, встановивши такі плагіни: GitHub Copilot Nightly, GitHub Copilot Chat, GitHub Copilot Labs. Особливо цікавим рішенням для мене було поєднання IDE з GitHub Copilot Chat.
Донедавна Copilot використовував OpenAI Codex LLM, ця AI-система була розроблена компанією OpenAI спільно з GitHub. Але буквально місяць тому, GitHub повідомив, що Copilot почав використовувати оновлену модель, яка на 13% має меншу latency та набір інших покращеннь, що також збільшують ефективність Copilot.
Для того, щоб краще зрозуміти, як GitHub Copilot працює під капотом, рекомендую почитати статтю на блозі Github.
Як правильно користуватися GitHub Copilot
Щоб LLM допомогла нам вирішити задачу, потрібно її про це правильно «попросити», надавши всю необхідну інформацію про поставлену задачу через prompt. Звучить дуже просто та очевидно, але це одна з найпопулярніших помилок новачків при роботі з Generative AI інструментами. Найпоширеніша помилка при використанні інструментів, підсилених AI (як і будь-якого іншого технологічно-складного рішення) — це отримати на перших кроках негативний досвід, потім перестати користуватися ним або ж продовжувати користуватися неефективно, втрачаючи переваги, які може надати цей інструмент.
Одна з ключових задач плагіну GitHub Copilot — автоматично зібрати дані, щоб зрозуміти контекст та побудувати ефективний prompt, який надасть LLM всі необхідні вхідні дані для генерації максимально влучного результату.
Якщо цікавитеся технічною стороною GitHub Copilot — рекомендую ознайомитися з цією статтею, де автор зробив «reverse engineering» GitHub Copilot плагіну та пояснив, яка логіка побудови prompt’у.
Звісно, не існує рішення, яке було б однаково ефективним абсолютно всім і кожному та для всіх можливих задач. У кожного інструменту є своя крива навчання, яку потрібно пройти, щоб впевнено ним володіти.
Нижче я наведу поради, які я збирав в процесі освоєння роботи з GitHub Copilot.
- Context — це ключ до успішної взаємодії з Copilot. Добре структурований та читабельний код, змістовні назви файлів, класів, методів, коментарі в коді — все це сприяє кращому результату. Капітан Очевидність ;) спішить на допомогу і каже, що дотримання best coding practice робить ваш код зрозумілішим не тільки для розробників, але і для Copilot’а.
- Чим більше ви використовуєте Copilot, тим краще він вас розуміє, і тим кращі пропозиції він може надати. Copilot навчається на основі ваших дій та вибору пропозицій, тому активне використання Copilot може поліпшити якість його пропозицій. Чим більше ви з ним працюєте, тим краще він адаптується до вашого стилю кодування.
- Якщо ви тільки починаєте писати логіку (в новому файлі чи навіть проєкті), і ще немає коду, з якого можна взяти контекст, то важливо на початку файлу в multi-line коментарі описати задачу або ж проблему, яку ви хочете вирішити. Далі варто написати, які очікуються вхідні дані, та що буде в результаті роботи вашого класу або ж методу. Коли почнете писати код, то Copilot використає коментар як вказівку та почне генерувати підказки поступово, крок за кроком. Якщо ж результат вас не задовольняє — поверніться до коментарів та додайте більше деталей, або ж замініть неточний опис чіткішими інструкціями.
- Copilot краще працює з маленькими, чітко описаними завданнями. Розбивайте великі задачі на дрібніші, описуйте їх — і Copilot буде надавати підказки для кожного степу.
- Дайте GitHub Copilot один або два приклади очікуваного результату. Це один з найефективніших способів, як пояснити LLM, що ми хочемо отримати. Наприклад, додавання прикладів вхідних та вихідних даних в коментарях допоможе Copilot краще зрозуміти, що повинна виконувати функція.
- LLM розуміє не тільки англійську, але часто рекомендують писати коментарі до коду, назви класів/ функції/ змінних саме англійською для отримання кращого результату. Використовуйте прості та зрозумілі формулювання, щоб Copilot міг краще розуміти ваші коментарі та наміри.
- Якщо Copilot пропонує не зовсім те, що ви очікуєте, і код далекий від реалізації поставленої задачі — спробуйте додати в контекст більше деталей: відкрийте у вкладках зв’язаний код з інших файлів. Copilot може збирати контекст з інших відкритих вкладок (до 20 останніх відкритих вкладок), що може поліпшити його пропозиції. Це особливо корисно, коли ви працюєте над проєктами з великою кількістю логічно зв’язаних між собою файлів або класів. Але відмічу, що інколи, відкривши додаткові вкладки, Copilot йшов зовсім в інший бік та погіршував результати, тому якщо ви зіткнулися зі схожою ситуацією — закрийте вкладки, які не стосуються вашої поточної задачі.
- Експериментуйте. Знайдіть модель взаємодії з Copilot, яка буде зручна саме вам. Спробуйте всі фічі, які пропонує GitHub через свої офіційні плагіни, — GitHub Copilot Nightly, GitHub Copilot Chat, GitHub Copilot Labs та інші.
- Вимкніть Copilot, коли ви не потребуєте підказок, або підказки починають вас дратувати та відволікати. Хоча Copilot може бути корисним, іноді він може переривати вашу думку або навіть конфузити, особливо, коли ви працюєте над складними проблемами, де Copilot не дуже добре допомагає. У таких ситуаціях краще тимчасово вимкнути Copilot.
Коли програміст знає, що потрібно розробити (або ж реалізувати чи запрограмувати), процес написання коду можна розглядати як (1) розбиття проблеми на простіші підзадачі та (2) відображення цих простих підзадач на існуючий код (бібліотеки, API або функції), що вже існують.
Остання діяльність, ймовірно, є найменш захоплюючою частиною програмування, і саме з цим AI може допомогти та взяти нудну роботу на себе.
Для яких задач найкраще підходить Copilot
Написання boilerplate коду.
Реалізація однотипних повторюваних задач. Один з найуспішніших кейсів використання GitHub Copilot у мене та в моєї команди був якраз при вирішенні повторюваних однотипних задач. Кілька місяців тому я аналізував дані з кількох систем з метою виявлення колізій, неконсистентних даних та побудови звітів для подальшого аналізу.
Для отримання даних та звітів я використовував SQL, самі запити були відносно прості, але потрібно було зробити доволі багато звітів та вибірок з баз, експериментувати із запитами та отриманими результатами. Часто я будував звіти прямо під час мітингу з командами, які надавали інсайти з приводу різних кейсів.
GitHub Copilot справлявся з написанням SQL-запитів дуже добре. Він розумів контекст, який брав з уже написаних SQL-запитів та доволі влучно надав рекомендації. Звісно, часом він робив помилки, але швидше було відредагувати надану рекомендацію, аніж писати з нуля скрипт на
Створення коментарів до вже написаного коду. Зручно, коли починаєш писати коментар між рядками коду, а GitHub Copilot підхоплює та додає решту, а потім пише ще і ще, головне — вчасно зупинитися :)
Пояснення наявного коду та написання тестів для нього. Ще один успішний кейс — це написання додаткових тест-кейсів до уже існуючого тесту. Я описував в коментарі кейс, який потрібно було покрити тестом, а GitHub Copilot генерував відповідний метод, враховуючи контекст та надані інструкції, що доволі зручно.
Коли ви пишете код малознайомою мовою програмування, Copilot може допомогти з особливостями синтаксису. Наприклад, я не експерт в bash, до цього писав прості скрипти, використовуючи документацію та поради з stackoverflow.
GitHub Copilot допоміг мені швидко написати скрипти для автоматизації рутинних задач — маніпуляції з файлами кількох проектів одночасно, додавання git тегів до списку проєктів з воркспейсу, трансформації файлів до бажаного формату і т.д. Якби я писав їх сам, без допомоги Copilot, то на реалізацію та допилювання пішло б значно більше часу.
У процесі навчання нової мови програмування Copilot може бути асистентом.
З якими задачами Copilot справиться гірше або ж не справиться зовсім
- З кодом, що написаний тією мовою програмування, що не дуже популярна в GitHub (див. тут). Оскільки модель навчалася здебільшого на паблік репозиторіях GitHub, то це логічно.
- Робота з найновішими фреймворками та бібліотеками, про які ще мало знає АІ-модель.
- Нетривіальними задачами зі складною логікою, де треба нестандартні рішення або ж певний креатив.
Що ми повинні усвідомити перед тим, як почати використовувати Copilot:
- Copilot не тестує код, який пропонує розробнику, не робить його sanity check — це повністю відповідальність розробника.
- Також в LLM можуть бути галюцинації, можуть пропонуватися неіснуючі функції, оператори.
- Copilot надсилає частини вашого коду на сервери GitHub, тому переконайтеся, що ви не порушуєте ваш NDA. Також якщо є заборона на використання Generative AI на вашому проєкті — краще дослухатися та не порушувати правила.
Чи може CodeGen AI негативно впливати на роботу програміста
Використання інструментів, що покликані покращити нашу продуктивність як розробника, також можуть негативно на нього впливати, як в моменті, так і в довготривалій перспективі.
Ось, наприклад, дослідження, яке проводили експерти з Computer Sciencе та AI в жовтні минулого року. Дуже рекомендую ознайомитися з цим матеріалом тим, хто цікавиться, як можна профілювати та досліджувати ефективність роботи програміста.
Тут я наведу лише кілька рядків з висновку дослідження, які описують одну з виявлених проблем:
«Our studies revealed that when solving a coding task with Copilot, programmers may spend a large fraction of total session time (34.3%) on just double-checking and editing suggestions, and spend more than hal of the task time on Copilot related activities, together indicating that introducing Copilot into an IDE can significantly change user behavior.»
В процесі роботи з GitHub Copilot та вивчення відгуків від користувачів CodeGen AІ-інструментів я прийшов до такого списку потенційних негативних впливів на роботу програміста, який використовує CodeGen AІ:
- Залежність від підказок, які надає AІ. Використання CodeGen AІ може призвести до залежності від автоматичного заповнення коду. Це може зробити розробника менш активним у процесі самостійного мислення та пошуку рішень. Він може позначити зменшення власної креативності та здатності до проблемного розв’язання.
- Використання неправильного або небезпечного згенерованого коду. LLM навчена на коді з публічних репозиторіїв GitHub, цей код може мати high-risk cybersecurity weaknesses. Згідно з одним з досліджень 40% запропонованого Copilot’ом коду мали high-risk cybersecurity weaknesses, неоптимальну реалізацію або взагалі бути неробочим.
- Обмеженість у використанні специфічних підходів. GitHub Copilot може пропонувати рішення, засновані на загальних шаблонах та патернах, але він може не завжди враховувати специфічні потреби або вимоги проєкту. Розробник повинен мати достатній рівень експертизи, щоб відфільтрувати та належним чином адаптувати запропонований код до конкретного контексту.
- Втрата навичок та вдосконалення. Використання автозаповнення коду може призвести до занепаду або забуття деяких технічних навичок розробника. Треба пам’ятати, що набуття та розвиток навичок у програмуванні є процесом, який потребує значних інвестицій часу, систематичної практики та активної участі у різних аспектах програмування.
Чи є альтернативи GitHub Copilot? Так, звісно, є альтернативи. Якщо дуже коротко, то ось хороша стаття на цю тему, яка порівнює найперспективніші альтернативи до GitHub Copilot та ChatGPT.
Чи потрібно Вам використовувати GitHub Copilot
Тут немає однозначної «Так/Ні» відповіді, все дуже залежить від рівня вашої експертизи, які задачі ви вирішуєте, якою мовою програмування пишете код, і чи подобається вам, коли в процесі роботи IDE робить підказки.
Якщо ви джуніор — я б не рекомендував би захоплюватися AI CodeGen інструментами та використовував би їх дуже зважено, без фанатизму, краще тренуйте власні скіли, аніж AI.
Якщо ви часто пишете бойлерплейт код популярною мовою програмування, код, який ви добре розумієте — тоді однозначно «Так», спробуйте GitHub Copilot та оцініть через місяць чи два, наскільки ви задоволені результатами його роботи, дайте йому час, щоб проявити себе.
Потрібно розуміти, що на цей момент всі — і розробники CodeGen АІ-рішень, і їх користувачі — знаходяться на фазі проб і помилок. Це технологія, яка ще не досягла повної зрілості, і вона продовжує еволюціонувати та вдосконалюватися. Згідно з дослідженням Gartner Generative AI перебуває на піку циклу хайпу, тому нас ще чекають розчарування на фоні завищених очікувань від Generative AI. Але я переконаний, що в найближчі роки вона відкриє широкі перспективи для індустрії та покращить спосіб, яким ми створюємо програмне забезпечення у майбутньому.
Висновки
GitHub Copilot — інструмент, який, на мою думку, має великий потенціал для збільшення продуктивності розробника. Найкраще він розкриває себе при написанні повторюваного та бойлерплейт коду. Також він може допомогти розібратися з існуючим кодом, додати в нього коментарі, написати тести.
Але, як і будь-який інструмент, його можна використовувати неправильно, неефективно, або ж покладатися на нього дуже сильно, і тоді отримані результати, скоріш за все, вас не задовольнять, або ж навіть розчарують. Я рекомендую тим розробникам, хто ще не пробував GitHub Copilot, обов’язково його спробувати, а тим, хто спробував та не отримав бажаного результату, використати поради з цієї статті та спробувати ще. Ігнорувати такі рішення як GitHub Copilot — це хибна стратегія. Як мінімум, ми повинні розуміти, на що вони здатні, а ще краще — вміти їх використовувати для вирішення своїх задач.
Чи став я продуктивнішим, використовуючи GitHub Copilot? Так, але тільки при вирішенні певного класу нескладних і повторюваних задач. Це цінно для мене, я маю більше часу для вирішення цікавіших та складніших задач.
Я очікую, що з релізом GitHub Copilot X я матиму у своєму арсеналі більше різноманітних інструментів для автоматизації рутинних та повторюваних задач.
А яким був ваш досвід використання GitHub Copilot?
33 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів