GitHub Copilot. Я користувався півтора року й ось мої враження
Вітаю! Мене звати Артур і в цьому матеріалі я хочу розповісти про свій досвід користування GitHub Copilot.
Використовувати я його почав приблизно півтора року тому. Основними моїми задачами було написання тестів на всіх рівнях (unit, integration, e2e), а також час від часу написання невеличких сервісів. Переважно, відсотків 80% — мовою Python, а інші 20% — Java. Тож більшість слів буде сказана саме про ці мови. Щодо мого враження — одразу скажу: воно було подекуди позитивним, але інколи й сповненим розчарування.
Проте, в деяких задачах гітхабівський AI-інструмент проявляє себе дійсно добре, а для інших справ — доводиться його вимикати аби не заважав (так теж трапляється). І ще доволі цікаве спостереження — Copilot за рік став працювати, як на мене, краще. Найімовірніше, його автори розширили базу знань для інструменту, тож він зміг навчитися новим «трюкам» та краще орієнтуватися у контексті проєкту.
Нижче буде багато гіфок та картинок з прикладами його «роботи», а також мої коментарі та враження від використання таких фічей.
Для тих, хто не дуже полюбляє читати — можете подивитись ось це відео.
Тож, почнемо з початку: перед тим, як залучати цей AI-помічник, прочитайте правила щодо користування Copilot. Адже на деяких проєктах може бути сувора заборона відправляти частини коду у різні сторонні сервіси.
І навіть якщо ви оберете умовно безпечну підписку Copilot for Business, або вимкнете опцію Allow GitHub to use my code snippets for product improvements у налаштуваннях вашого акаунту — через якісь внутрішні причини клієнти чи product owners можуть так само не дозволити користуватись цим інструментом. Одним з найпростіших може бути, наприклад, рішення код-комплішену офлайн від JetBrains. Але це не єдиний варіант. Тому крок номер 0 — перевірити, чи підходять вам правила використання Copilot, та отримати дозвіл на його залучення до проєкту.
Переходимо до безпосереднього кодингу.
№ 1. Автокомпліт
Беззаперечна перевага Github Copilot — він дійсно найшвидший. Я порівнював з вбудованим AI-помічником у продуктах від JetBrains та AWS CodeWhisperer. «Амазонський шепотун» мені взагалі не був корисним, та і його головний акцент, здається, на сервіси від Amazon.
Як це працює — розробник починає набирати код, а в цей момент Copilot вже «думає» над підказками та намагається вгадати, що в коді буде далі. Наприклад, девелопер починає писати у класі User em
— а AI-помічник одразу передбачить поле email
з типом str
. Вже тільки це зекономило кілька секунд часу.
До речі, також можна перемикатись між тим, що він пропонує. Залежно від ОС, комбінації клавіш можуть відрізнятись. На MacOS це option+[ або option+]. Інколи продивитись інші варіанти є доволі зручною функцією перед тим, як писати код далі.
Також корисною комбінацією є прийняття підказки тільки поточного рядка або тільки одного слова, яке запропонував Copilot. Для цього натисніть command±> або option+command->:
Перейдемо до більш предметної кодогенерації. Наприклад, колись ви створили певний метод для сортування — Copilot вже знає це та запропонує вам одразу цей же метод, але уже для сортування в контексті вашого класу. Тут, наприклад, він мені пропонує метод для сортування масиву за іменем юзера:
В наступному прикладі відбувається саме те збільшення продуктивності. Ось Copilot допомагає мені за контекстом додати ще декілька методів сортуванням за іншими полями. Зручно! Щойно я зекономив ще секунд з 40 на кодингу, які можна використати більш продуктивно.
Оскільки модель тренувалась на коді, то вона знає все про патерни та неймінг патернів. І це також може нам допомогти. До прикладу, коли розробник буде згадувати фабрику за іменем цієї фабрики, Copilot може запропонувати підказки: наприклад, які методи ви, потенційно, ще хотіли б додати (юзер без імейлу, юзер з всіма полями, юзер тільки з комбінацією полів якихось тощо). Це також інколи економить час.
В контексті тестів ця штука гарно працює, коли ви задаєте, наприклад, контекст вашого responce і потім пишете на це тести.
Потім видаляєте responce з першого рядка, а отримуєте його з якогось API call. У такому випадку це дійсно може зекономити декілька хвилин, зокрема коли коду багато в responce і відповідно треба робити також багато assertions.
Основна порада для того, щоби Copilot справді допомагав — дотримуйтесь одного стилю коду: неймінг, структури тощо. Тоді інструмент доповнюватиме код з найбільшою ефективністю.
№ 2. Пояснення та спрощення коду
Припустимо, розробнику надсилають на ревʼю такий приклад коду:
Звісно з першого погляду це щось незрозуміле. Copilot і з цим може вам допомогти:
І ось незрозумілі рядки завдяки цьому інструменту отримують пояснення:
А потім можна ще й спростити код:
Також можна спростити код у чаті, через команду /simplify
:
Порівняйте ці «до» та «після»:
Красиво? Красиво! Допоможе при ревʼю? Може бути корисним.
№ 3. Додавання тестів
Для генерації легких тестів для простих методів Copilot, за моїм спостереженням, спрацював добре. Проте, якщо це щось складніше, то йому доволі часто важко «осягнути» весь контекст проєкту, і, відповідно, не завжди він підбирає саме те, що потрібно розробнику. Тож цю задачу доведеться виконати вручну.
Для створення тестів можна відкрити вікно чату та попросити Copilot згенерувати їх для конкретної функції. Далі за запитом add more tests
він вам буде пропонувати варіації тестів.
Чи корисно це? Інколи так, інколи ні. Треба дивитись, що саме він генерує. Адже доволі часто бувало, що Copilot доволі серйозно помилявся у тестових даних, і доводилось вносити багато правок. Тому тут ця фіча залежить від контексту та складності тестів.
До речі, контекст для Copilot можна вказувати, описуючи як саме ви хочете написати тест, які у вас є класи, залежності, фікстури, і він цю інформацію розпізнає та вже більш змістовно буде вам відповідати.
№ 4. Виправлення коду
Натисніть правою кнопкою на метод чи клас з потенційним багом і виберіть Fix This серед опцій меню. Або введіть команду /fix
у чаті. Copilot покаже пояснення та запропонує виправлення для вашої помилки. Виглядатиме це так:
Чи буває це корисним у проді? Знову ж таки, залежить від контексту. Очевидні друкарські помилки, неправильна типізація, пропущені параметри, Nullable полів і інші дрібні помилки Copilot відловлює добре. Коли у проєкті складні залежності — тут він з великою ймовірністю промахнеться.
№ 5. Написання нових функцій
Відкриваємо чат Copilot та пояснюємо, що ми хочемо. Практично так само, як ми спілкуємось з ChatGPT.
Чи корисно? Корисно дійсно. В цьому випадку інструмент доволі добре справлявся з задачами написання нових функцій та методів, і чим більше контексту у запиті йому надавали, тим гарніше він писав код.
№ 6. Чат
Є два варіанти спілкування з Copilot. Перший — через коментарі поставити питання, а він натомість коментарем дасть відповідь:
Також питання можна поставити в чаті. Чи корисно це робити в коді? Ні, але така можливість є :)
№ 7. Advanced search
Оце, до речі, видалось мені цікавим. Можна запитати у Copilot, де щось виконується чи використовується у проєкті. І він підкаже файли, де це знаходиться. Дуже корисно ще й під час онбордингу до проєкту:
Чи корисно? Може бути, адже деякі рішення бувають не зовсім очевидними.
Мої висновки
- Автокомпліт у більшості випадків показував себе добре.
- Пояснення і спрощення коду та додавання тестів працювали гірше. Тому я, мабуть, не радив би робити акцент на цьому.
- Виправлення коду — цікаво, але дуже часто розробник швидше цю помилку одразу сам побачить у логах або навіть простим переглядом. Тому тут 50/50.
- Написання нових функцій мені видалось корисним, і відповіді він давав навіть подекуди краще, ніж ChatGPT.
- Чат мені теж дуже сподобався. Не треба тримати ще одну вкладку з ChatGPT тепер :)
- Розширений пошук на практиці показав себе теж 50/50. Бо інколи пропонував зовсім не те, що мені було треба.
⚠️Будьте обережні — Copilot може занадто вас розслабити
Щойно ви почнете звикати до постійних підказок або починаєте зловживати написанням функцій — це тривожний дзвіночок. Особливо це стає помітним, якщо полюбляєте розв’язувати у вільний час задачки з LeetCode. Також, як на мене, часом людині треба зробити помилку, щоб зрости на декілька кроків вперед і вдосконалити навички дебагінгу та фіксу.
Тож якщо ви готуєтесь до співбесіди на live coding або любите для розігріву на початку дня вирішити
Висновки
Чи використовувати Copilot? Я виділив задачі, де він дійсно корисний — в цих випадках вмикаю шорткатом його за потреби, та в інший час він у мене вимкнений, щоб не заважав.
Скільки мені економить це часу? Колись я рахував — десь до 10 хвилин на день. 10 в день це 200 хвилин на робочий місяць або майже 3,5 години. Якщо взяти статистику DOU по зарплатні умовного мідла, то це буде $2500 або майже $15 на годину. Підписка на місяць коштує $10 (індивідуальна) чи $19 (бізнес-план). ROI уже непоганий.
І, як обіцяв, трошки гумору: Copilot теж живий і теж страждає — ви тільки подивіться на це:
А які у вас враження від користування GitHub Copilot?
P.S. Якщо сподобалось, підписуйтесь на мій Telegram-канал, де я пишу про менеджмент, розробку, та тестування, або YouTube.
40 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів