GitHub Copilot. Я користувався півтора року й ось мої враження

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Вітаю! Мене звати Артур і в цьому матеріалі я хочу розповісти про свій досвід користування 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 або любите для розігріву на початку дня вирішити 1-2 задачки з LeetCode або CodeWars, як я, то Copilot тут краще вимикати, щоби тримати свої навички в тонусі.

Висновки

Чи використовувати Copilot? Я виділив задачі, де він дійсно корисний — в цих випадках вмикаю шорткатом його за потреби, та в інший час він у мене вимкнений, щоб не заважав.

Скільки мені економить це часу? Колись я рахував — десь до 10 хвилин на день. 10 в день це 200 хвилин на робочий місяць або майже 3,5 години. Якщо взяти статистику DOU по зарплатні умовного мідла, то це буде $2500 або майже $15 на годину. Підписка на місяць коштує $10 (індивідуальна) чи $19 (бізнес-план). ROI уже непоганий.

І, як обіцяв, трошки гумору: Copilot теж живий і теж страждає — ви тільки подивіться на це:

А які у вас враження від користування GitHub Copilot?

P.S. Якщо сподобалось, підписуйтесь на мій Telegram-канал, де я пишу про менеджмент, розробку, та тестування, або YouTube.

👍ПодобаєтьсяСподобалось18
До обраногоВ обраному5
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Когда Копилот будет видеть кодовую базу всего проекта? Эту фичу обещают в Энтерпрайз плане. Кто-то пробовал?
Когда эта фича заработает в реале, то это будет бомба.

Господи, стаття одна вода.
Це типу можна нагенерити купу тексту, запхнути в неї 5 гіфок і ще на те запілити 5 відосів.
tldr
автокомпліт — це добре але не завжди

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

Перепрошую за те що був різким. Маю очікування від статей зі схожими заголовками. І злюся, коли не отримую те, чого хотілося б :(

Спочатку 3 місяці trial періоду, може, ще місяці 3-4 платив за підписку, але врешті-решт повністю відмовився. Час, звісно, економить, але лише коли доводиться робити багато рутини.

Єдина реальна користь — це коли освоюєш нову мову програмування. В більшості випадків за рахунок контексту і правильного неймінгу copilot дуже допомагав.

Але потім зловив себе на думці, шо почав код писати так, шоб copilot дав правильну підказку, а це не дуже добре.

Одним словом, погрався і закинув — зекономлені $20 можна і більш ефективно використати.
А тут ще й JetBrains кілька днів тому зробили публічний реліз власного розумного автокомпліту. Пару днів погрався, то він покриває 90% того, що раніше робив copilot за $20 на місяць.

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

P.S. А ще помітив, шо copilot настільки толерантний, шо відмовлявся давати будь-які підказки для sensitive слів типу gender, passport, religion і т.д.

Угу. Згоден що для рутинних задач саме то) і теж дуже кайфую від офлайнового код комплішена з АІшкою від jetbrains. Копайлота можна навчити контексту і тоді він трошки краще починає робити задачі які йому ставиш але, так, це ще не інженер а просто хороший код комплішен:)

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

Скільки мені економить це часу? Колись я рахував — десь до 10 хвилин на день. 10 в день це 200 хвилин на робочий місяць або майже 3,5 години. Якщо взяти статистику DOU по зарплатні умовного мідла, то це буде $2500 або майже $15 на годину. Підписка на місяць коштує $10 (індивідуальна) чи $19 (бізнес-план). ROI уже непоганий.

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

Тут більше кайфуєш від того що не треба писати рутинний набор текста а за тебе його генерить тулза :) менше рутини — більше простору для творчості :)

Гадав тут буде щось типу з того «як я навчив чатгпт та копілот писати за мене код», чи хоча б «як копілот вносить зміни в усі тести одним кліком»
А по суті, чисто вода, щоб з цим ознайомитись досить 5 хвилин покодити
Де тут про тести щось, геть не зрозумів, тупо про автокомпліт

Так сілвербулету ніколи не буде в написанні коду для всіх випадків життя. Поки ми на такому етапі розвитку коли вам треба ще все ж таки думати що пишете у коді а не покладатись на ШІ на 99.9%. Ну і стаття називається «мої враження» а не «як навчитись писати тести».

работал с копайлотом в пет проджекте. толку было ноль, подсказки и комплит были туповатыми и только раздражали. но это специфика пет-проджекта скорее всего.

дивуюсь як можна було нагенерувати стільки тексту про копайлот лише для того, щоб ще раз нагадати всім про руснявий jetbrains — як на мене постав плагін у VC та й все на цьому.

не зрозумів два моменти — при чому тут копайлот до jetbrains?
друге — там jetbrains вроде закрили всі офіси по продажам blog.jetbrains.com/...​ins-statement-on-ukraine

аргументуйте та розширте, будь-ласка, свою відоповідь. бо зараз це виглядає як наклеп на jetbrains за який вас можна засудити :)

Друже, поясни у чому полягає наклеп? Про офіси я жодним словом не обмовився.

При чому тут джетбрейнс до копайлота?) ви таке написали у коментарі вашому

нагенерувати стільки тексту про копайлот лише для того, щоб ще раз нагадати всім про руснявий jetbrains

ну ти б перечитав спочатку те шо ти написав уважніше. якшо в силі — сам зрозумієш. якшо ні — то нема сенсу і пояснювати.

Поки юзаю як дуже розумний автокомпліт. Без контексту всього проекту вихлопу майже нема. З новими фічами працює поки теж не дуже (рекорди в джава). А так да, годину-дві в міс економить.

№ 7. Advanced search

мені виглядає швидше і легше зробити Command + Left
mouse click, щоб побачити самому, ніж довше оце все писати і питати і АІ

а в цілому так, цікава забавка)

Розкажіть хто знає як саме прикрутити Copilot до Jupyter Notebook (знайду — сам відповім на своє запитання).

Вітаю! Артуре, а можна написати до вас в особисті, щоб отримати ваш коментар для статті саме про подібні ШІ-інструменти у кодуванні? Якщо конкретно, стаття буде про потенційну небезпеку, яку вони несуть. Коментар для сайту ProIT. Буду дуже вам вдячна)

Когда пишешь что-то стандартное — все ок.
Когда пишешь что-то нестандартное — пипец раздражает подсказками как все сломать.
Упрощение — круто, когда код покрыт тестами.
Но блин, тесты то сейчас тоже автопилот пишет. Потому что будет через год — страшно подумать.

Як на мою думку — головне обмеження AI у проектах — це відсутність розуміння коду проєкту!
У кращому випадку AI бачить файли коду, які відкриті у IDE — і навіть тут вже виникає багато питань що до NDA. Якби AI міг вивчити увесь код проєкту — його корисність була б більшою у рази.
Пояснюю: звернутися до AI зараз, це як звернутися до досвідчено девелопера, але з іньшого проєкту. Він легко порадить як краще зробити типові речі. Але що використовується на проєкті — він не знає. А на будь-якому великому проєкті є зазвичай безліч кастомізованих рішень і для локалізації, і для конвертації, і для форматування і для логування і т.і. Тобто стандартні класи чи класи зі сторонніх модулів «загорнуті» у власну архітектуру і тому жоден AI не може порадити вам що треба використати.
З іншого боку AI, який навчений саме на цьому коді проєкту — він як девелопер, який вже працює не проєкті не один рік. І міг би бути не тільки чудовим радником для нових девелоперів, але і приймати участь у код ревью! Наприклад девелопер написав код — а AI йому каже: за нашою архітектурою не можна лізти до бази напряму — а треба використовувати ось такий API чи мікро-сервіс. Або напише: нащо ти додав свою калькуляцію бізнес днів — вона вже є у іншому модулі — підключи його. Тобто добре навчений AI зможе виявити закономірності як прийнято писати код саме на цьому проєкті.
Головна проблема цього підходу: окрім опенсорсу — ІТ компанії навряд-чи захочуть показувати код якомусь зовнішньому AI. Отже для великих проєктів AI має бути «приватним» — як мінімум на рівні компанії, а може і на рівні кожного окремого проекту.

Дуже в точку написав. Зробити тестове зможе допомогти, у реальних проектах максимум невеликі баги пофіксити.

Beaver Green, gpt-pilot не зовсім автокомпліт (а на декілька ступінів вище), але тримає в контексті весь код всього проекту (але вже зробили і скорочений буквально ось, щоб не забивати контекст тим що зараз не потрібно)

тримає в контексті весь код всього проекту

Звідки така інформація і як це виглядає на практиці?
Наприклад код ентерпрайз проекту це десятки репозиторіїв та сотні проектів. До того ж доступ може бути обмежений: наприклад команда аутсорсерів не має доступу до якихось важливих репозиторіїв з кодом захищеним патентами.
З того, що я чув усі AI зараз аналізують тільки відкритий код.

згоден але насправді ж копілот вже вміє знати твій контекст. у vscode наприклад вони додали команду @workspace для контексту проєкту а також ти можеш задавати контекст самостійно — наприклад вказуючи тіпа конкретний файл як контекст йому і далі щоб він враховуючи цей контекст робив тобі відповіді . референси тут github.blog/...​lot-november-30th-update

Саме тому зараз є побоювання що до використання копілоту на комерційних проєктах. Фактично аби він краще розумів — треба показати йому частину коду проекту (або він навіть сам буде його шукати!). А код у свою чергу — власність клієнта і захищений NDA.

так точно. особливо враховуючи шо це 3d party яке може все ж таки злити код))
як варіант альтернатива але не така крута це jetbrains full line cod ecompletion (вона повністью офлайнова та не відправляє даних, якшо вірити офіційній документації) — я тут про неї писав dou.ua/forums/topic/48243
другий варіант — це розгорнути приватну аішку уже :) але про це я окремо напишу статтю думаю скоро як це можна зробити

Тому клієнту виставлятиметься рахунок за «окремий інстанс АІ».
Який з коробки навчений на опенсорсі, а далі донавчений під проект.

https://medium.com/@sami.bister/using-ai-code-assistant-locally-with-visual-studio-code-84c86cc57fe9

з локальною оламою короче є певні проблеми)))) маленькі моделі всраті і скорше не принесуть буста і ефективності а великі жруть забагато ресурсів))) більш-менш хороші результати показала кодлама34 та зефір7б-бета але блін ресурсів компа жруть нереально ж

а примерно какие характеристики машины нужны?

з 24ГБ відеокарти та 16ГБ оперативної було прям хорошо. швидко працювало доволі

Підписатись на коментарі