GitHub Copilot, GitHub Copilot Х і ChatGPT. Досвід використання і поради для інженерів

Мене звати Олег Васильєв, я співпрацюю з EPAM у ролі ведучого інженера в B2Bits — центрі компетенції у сфері ринків капіталу. Зараз мій основний домен — FIX protocol (або протокол обміну фінансовою інформацією) і загалом FIX-base рішення. Тому я поділюсь власним досвідом використання AI-інструментів у своїй роботі.

Почну з GitHub Copilot, трохи торкнусь теми CopilotХ і наостанок зробимо висновки про ChatGPT. Матеріал буде практичним і, сподіваюсь, корисним для вас.

GitHub Copilot

Розпочну з того, що GitHub Copilot — це AI-інструмент, а не заміна джуніорів. Він досить цікавий з точки зору генерування та автодоповнення вашого коду. Я використовував його протягом тривалого часу і, щоб бути відвертим, він мене не вразив, оскільки його точність була досить низькою.

При роботі з відомими бібліотеками проблем не було так багато, але для написання власної логіки було важко знайти щось цікаве і корисне. Крім того, я вже користувався ReSharper, якого мені вистачало.

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

Найчастіше я використовував GitHub Copilot для генерації інфраструктури. Уявімо, що у вас є ідея і ви хочете її реалізувати на хакатоні або як власний pet-проєкт або PoC. У такому випадку GitHub Copilot вам дуже допоможе.

Як на мене, робити каркас — це нудно і займає певний час. Припустімо, у вас є багато об’єктів-ентіті і потрібні CRUD-и — GitHub Copilot допоможе з цим і збереже купу часу. Приклад:

Також на додачу до генерації коду інструмент стане в пригоді для автодоповнення.

Непогана фіча: написали букву або дві — і GitHub Copilot вам догенерував код на базі проєктного контексту, за значно менше часу. Приклад:

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

Ще один цікавий досвід використання GitHub Copilot — зменшення бар’єра входу в інші мови програмування. У мене на проєкті зараз є опенсорс продукт-бібліотека — fix-antenna-net-core. Вона має багато варіацій, бо ця бібліотека створена на .NET, Java та на С++.

Уявімо, що я зробив одну фічу, наприклад в Java, але тепер її потрібно інтегрувати в інші варіації. Це не так просто, адже існує така історична особливість, що продукт — один і той самий, а от реалізація по структурі — різна. Тому код-мігратори не працюють, потрібно інтегрувати руками.

Тут на допомогу приходить GitHub Copilot. У нього немає зав’язки на мову програмування і так він трохи знижує поріг входу та допомагає написати код іншою мовою, а саме нагадати мовну структуру, адже тримати в голові багато мов програмування без активної практики складно.

Треба розуміти, що думки Copilot не читає, тому не варто очікувати забагато від нього. Вся та магія з генерації готового до використання коду з нуля, яку ви могли бачити в LinkedIn або YouTube, здебільшого притягнута за вуха, адже всі ті ідеальні кейси зроблені суто для піару та клікбейтного контенту.

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

  • Автодоповнення та генерація коду. Не можу сказати, що інструмент добре з цим справляється, адже як я вже говорив — контекст важливий для коректної роботи GitHub Copilot. І ви не можете сліпо табати код, який він пропонує, вам потрібно мати повне розуміння речей. А розуміння контексту коду і того, що вам потрібно зробити — це майже 80% проробленої роботи. І тут запитання — для чого саме вам Copilot? Доробити 20%? Але нагадаю вам, що він думки не читає, і той код, який він буде вам пропонувати, не завжди коректний. І це основна причина, чому я його видалив — він відволікає. У кожен тайп вам потрібно дивитись, що він там пропонує і чи це те, що вам потрібно, чи ні. Краще вже самому написати (якщо ви не новачок). Але якщо говорити про генерування каркаса, то це те, що вам потрібно.
  • Навчання. З цим інструмент справляється на відмінно, тому що реально простіше вивчати нову мову програмування або згадувати щось, що робив років 5 тому. Наприклад, я не дуже полюбляю Frontend-активності, але часом потрібно щось зробити на стороні Angular/React рішенні, і тут Copilot дуже допомагає згадати.
  • Менше помилок. Як я показав в прикладах, Copilot нагадає про деталі, які можна було пропустити. Наприклад: зробити null check, але, як на мене, цього недостатньо, адже той самий ReSharper, про який я згадував раніше, теж це робить.
  • Покращення продуктивності. Може, десь на 5-10% стане краще, якщо ви майже весь робочий час кодите. Але зі свого досвіду скажу, що в сучасному світі кодинг не дуже об’ємний, він скоріше передбачає пошук контексту речей і чітке бачення того, що потрібно зробити. На жаль, Copilot з цим поки що не дуже допоможе.
  • Рефакторинг. Що можу сказати: автоматичне код рев’ю нам ще дуже довго не світить і я не рекомендую робити рефакторинг за допомогою Copilot-у з повною довірою. Якусь банальщину він зможе підказати, але працює це все одно посередньо. Тому що точність там не 100%. Бачив десь цифру в 60% для .NET-С# рішень.

Github Copilot X

Ось це цікавіший інструмент. Зокрема тому, що він має інтерфейс з чатом та підтримкою GPT 4. І як результат, вам стане набагато легше передати контекст та зробити корекції відносно помилок.

Нижче ви можете побачити приклад генерації unit-тестів.

Також він надає можливість автоматичної генерації pull реквестів. І все це — у вашій IDE. Гадаю, що такий інструмент я б використовував, але за умови що він буде точнішим та швидким. Буду чекати, реліз вже скоро.

Висновки

Що ж, підсумуємо. Чи потрібен інженеру GitHub Copilot? Для себе я давно відповів на це запитання і зараз не використовую GitHub Copilot та не готовий платити. Але якщо вийти за рамки суб’єктивної оцінки, то скажу, що все залежить від контексту.

Для новачків це дуже потужний інструмент, який здатний навіть частково покрити задачі ментора. А от для досвідчених розробників він не дуже корисний. Але у будь-якому разі я раджу вам спробувати, адже Github Copilot має 30 днів тестового періоду і ви самі зможете сформувати про нього думку.

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

ChatGPT

Я не буду говорити про те, що таке ChatGPT, бо не знаю людей, які б не чули про цей АІ-інструмент. Тож почну зі статистики.

Перш за все хочу підкреслити швидкість, з якою ChatGPT саме з UI-версією зібрав свій перший мільйон — на це знадобилось лише 5 днів.

Online Service

Launch Year

Time Taken to Reach 1 Million Users

ChatGPT

2022

5 days

Instagram

2010

2.5 months

Spotify

2008

5 months

Dropbox

2008

7 months

Facebook

2004

10 months

Foursquare

2009

13 months

Twitter

2006

2 years

Airbnb

2008

2.5 years

Kickstarter

2009

2.5 years

Netflix

1999

3.5 years

Це свідчить про те, що інструмент дуже сподобався аудиторії і поріг входу для користувача не високий.

Далі я запозичив деяку аналітику з Bloomberg. Цікаво, що найактивніші юзери ChatGPT — люди з маркетингу і технічні спеціалісти.

Про що це говорить? Про те, що саме ці фахівці так чи інакше змогли інтегрувати ChatGPT в поточні робочі активності. І якщо говорити саме про IT-сферу, то найбільше активних юзерів — саме з Software Engineering.

Ця статистика цікава тим, що демонструє, як кожен другий інженер (і навіть більше!) використовує ChatGPT в робочих цілях. На жаль, я не знайшов інформації про те, які саме задачі вирішують розробники з ChatGPT, але я можу поділитися власним досвідом.

Найчастіше ChatGPT я використовую для написання листів. На моєму проєкті Product Owner та й загалом стейкхолдери — дуже зайняті люди, тому майже вся комунікація проходить через листи.

І тут ChatGPT настільки допомагає мені, що не описати. Чесно кажучи, я настільки «підсів» на генерацію імейлів, що навіть лист для привітання я проганяю через ChatGPT. Хтось скаже, що це деградація, а я скажу — це оптимізація часу. Тому що раніше в день, я міг витратити і годину свого часу на офіційні повідомлення.

Наведу далі приклад того, наскільки вдало ChatGPT справляється с написанням листа. Але наголошу, що якісні промпти — запорука максимального результату.

В інтернеті вже є дуже багато різних промптів, тому знайти ті, які найкраще відповідатимуть вашим потребам не буде складно. Ось — один з прикладів:

As a campaign organizer, you need to generate personalized email greeting for a VIP customer that conveys a warm and sincere message. Those VIP customers are [customer details]. The greeting must [request details] .The goal of this greeting is [business objective].

JFYI : у мене є OneNote-файл, де я зберігаю всі промпти, розподілені за кейсами, які використовую в роботі. Ця практика може бути корисною і для вас.

Наведу ще декілька прикладів доречних задач для ChatGPT.

  • Документація. ChatGPT досить непогано справляється з нею. Але майте на увазі вимоги до безпеки: продакшн код не завжди можна публікувати в інтернеті. Мені особисто пощастило з цим, я частково працюю на open source проєкті, тому можу собі дозволити зробити референси на код та вказати, на що саме потрібна документація. І тут ChatGPT вам допоможе як з шаблоном, так і з наповненням прикладами та детальнішими кейсами.
    Я загалом приділяю досить багато часу на документацію. Останнє, що я робив за допомогою ChatGPT, — генерація прикладів використання для нашої бібліотеки. Їх спершу було не дуже багато і це було проблемою, адже запитань від клієнтів надходило достатньо (бо, як завжди, ніхто не хоче читати доки). Але декілька годин діалогу з ChatGPT вирішили цю проблему. Мій промпт: As an expert in using [product name], generate code samples related to [product name] configuration using [programming language].
  • Ідеї. Ось це мене вразило. ChatGPT може згенерувати чудові ідеї для покращення продукту, реалізації цікавих фіч тощо. Це дуже важлива якість для розробника — надавати зворотній зв’язок до продукту і загалом генерувати та «продавати» ідеї для клієнта. Така колаборація дозволяє в перспективі побудувати стосунки на довірі та перейти на привабливішу модель залучення замовника.
    Ось вам банальний промпт, який використовував я: As a [company name] company owner, generate ideas for [product name] improvements.
  • Навчання. Ось тут дуже багато способів використання ChatGPT. Він може як згенерувати вам код та приклади, щоб освоїти технологію, так і розповісти про неї. Але тут будьте дуже обачні, бо якість коду не завжди ідеальна. Повсякчас він взагалі не працює.
    До речі, ChatGPT може покрити специфічні запити також. Наприклад, пів року тому, коли я перейшов з освітнього домену у царину FIX-протоколів, мав дуже багато запитань. ChatGPT допоміг мені з вивченням багатьох матеріалів. Тому що води в інтернеті вистачає, а часу мало...
  • PDP (Personal development plan). Я не використовував ChatGPT в такому ключі, для власного розвитку, але через те, що маю в ЕРАМ додаткову роль менеджера з розвитку талантів, то питав поради для членів команди. Завдяки ChatGPT можна створювати плани розвитку і допомагати колегам розвиватись професійно і кар’єрно. Промпт:
    Based on the [feedback summary], generate detailed PDP plan
  • Інтерв’ю. З ChatGPT можна розподілити ролі таким чином, щоб інструмент вас інтерв’ював. З вашого боку знадобляться вимоги до потрібної посади чи ролі та максимально розгорнуті відповіді. Також попросіть ChatGPT надати інтерв’ю самарі на початку і згенерувати PDP-план на базі нього. Працює непогано. Ось приклад промпту для інтерв’ю:
    You are technical interviewer with expertize in: [skill].
    There must be not less than 20 questions.
    Rules to follow for you as an interviewer:
    — The questions must be technical and concrete. Avoid generic questions.
    — There must be no direct mention of the required level of skill in the asked question.
    — You will ask questions one at the time and wait for the user’s answer.
    — You will not answer on questions from user.
    — If answer of a user is not 80% clear, you will ask for the clarification.
    — Do not ask all the questions in one message. Wait for the answer and go next
  • QA та BA активності. Ця тема — досить сенситивна, я отримував певну критику від колег з цього приводу, але проігнорувати питання не хочу. Я вважаю, що завдяки AI-інструментам (і зокрема ChatGPT), інженер може покрити частину активностей з тестування та бізнес-аналізу, якщо є така необхідність. Це розмиває межі ролей і може призвести до того, що за декілька десятиліть оргструктура буде виглядати простіше і ролей в ній буде менше. Наведу приклад. Нещодавно я був капітаном на благодійному хакатоні і міг сформувати команду самостійно. На жаль, QA, дизайнерів, бізнес-аналітиків і низки інших фахівців було мало, тому я зібрав команду суто з активних і мотивованих розробників. Не буду розповідати про все детально, тільки зазначу, що ми розробили повний SDLC, ще й отримали дуже позитивну оцінку як від організаторів, так і від технічних експертів.
    Чому це стало можливо? Бо ми використали промпти, які ви можете побачити далі.
    QA prompt
    You are a Quality Assurance Engineer.
    You have been doing this job for 20 years.
    Your task is now to advise me on [task]
    BA prompt
    You are a Business Analyst in [domain name] domain.
    You have been doing this job for 20 years.
    Your task is now to advise me on [task]

    Потрібні тест-кейси або тестові дані? Використайте QA промпт.
    Потрібен аналіз, опис юзер-сторі, гайди, документація бізнес-рівня або покриття специфічних запитань відносно домену? Зверніться до BA промпта.

    Важливо! В жодному разі не хочу знецінювати ролі тестувальника і бізнес-аналітика. Але в нашому випадку мова йшла про досить простий проєкт з CRUD та валідацією. Звісно, якщо працювати над складнішим проєктом, на кшталт legacy-enterprise, то все буде інакше. Без чітко виділених ролей вам буде дуже важко. Але про те, що межі ролей потроху стираються, все ж таки варто пам’ятати.

  • Code GPT. Це доповнення до вашої IDE. Як і ChatGPT, цей інструмент може бути корисним. Він має впроваджені промпти. От що ви зможете зробити завдяки цьому доповненню.

Я його використовував певний час скоріше для фану. Але, як і у випадку з GitHub Copilot, мені не дуже зайшло. Час відгуку буває досить довгим, передача контексту складніша. Код, який він пише, часом навіть не працює.

Тому, якщо говорити про інтеграцію з IDE, то краще вже використовувати GitHub Copilot. Але гадаю, що комусь може сподобатись CodeGPT. У будь-якому разі спробувати варто. Тільки майте на увазі, що знадобиться свій Open AI токен.

Корисні посилання щодо промптів

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

github.com/...​f/awesome-chatgpt-prompts

github.com/...​pts/blob/main/prompts.csv

Отже, висновки

Чи потрібен ChatGPT для щоденної роботи інженера? Особисто мені — так. Він вміє набагато більше ніж GitHub Copilot і дуже добре справляється з робочою рутиною і не тільки.

Я б навіть сказав, що ChatGPT може дещо допомогти з вигоранням, адже в певному сенсі ви зможете делегувати йому рутину і те, що вас робило не дуже щасливим в роботі. Гадаю, що кожен зможе знайти, як використати ChatGPT у своїй роботі. Тому — рекомендую.

Policy

Це тема, яка вимагає глибоких знань, і хоч я не вважаю себе експертом, але хотів би попередити вас: будьте обережні, коли використовуєте інструменти штучного інтелекту і завжди дотримуйтесь умов нерозголошення (NDA).

Кожен проєкт є унікальним, тому якщо ви не маєте 100% впевненості чи меж того, що вам дозволено робити — НЕ передавайте проєктні дані до ChatGPT, GitHub Copilot та CodeGPT. Навіть якщо ці інструменти мають вражаючу функціональність, клієнт може не зрозуміти їхню природу, що загрожує проблемами.

Закон Мура

Завершити цей матеріал я хочу на позитивній ноті. Є такий закон Мура. Він говорить про те, що кожні 2 роки кількість транзисторів подвоюється. Але цей процес вочевидь не може бути нескінченним. Як мінімум Всесвіт має свої обмеження і цей фактор впливає як на розвиток обчислювальної потужності, так і на розвиток AI-технологій.

Базуючись на цій інформації, я вже можу спростувати гучні заголовки, що AI здатен замінити розробників найближчим часом. Гадаю, що, наприклад, ChatGPT, який ми бачимо зараз і який з’явиться років за 10-20, не матимуть вагомої різниці та натяків на повноцінну заміну нас. Це буде такий самий непоганий помічник у пошуці інформації, який збереже декілька хвилин чи годин часу інженера.

Тож на мою думку, AI-технології — це друзі, і вони для нас як калькулятор для математиків, не більше. Хіба що дещо вищим стане поріг входу у галузь для початківців, адже інформація стає все доступнішою і все структурованішою.

Сподобалась стаття? Підписуйтесь на автора, щоб отримувати сповіщення про нові публікації на пошту.

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

👍ПодобаєтьсяСподобалось15
До обраногоВ обраному4
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

я попробовал GitHub Copilot.
Код, который он предлагал (видимо, в силу специфики проекта) представлял из себя сплошные чудеса и знамения, но видно что «мальчик старался»
Каменты, которые он подсказывал, были значительно интереснее и уместнее, хотя иногда он ошибался с точностью до наоборот :)

Хіба що дещо вищим стане поріг входу у галузь для початківців

може все ж таки нижчим?

Розібратися стане простіше, якість джунів покращиться. Кількість їх збільшиться.

Не побачив жодного прикладу Copilot з підказками в коментарях, що писати.
Ось декілька днів тому статтю опублікували.
github.blog/...​ompts-for-github-copilot

його поки не можна включити, ще не було релізу

Можна користуватися бетою. У мене вжк 2 місяці встановлено. Із недоліків тіки те що треба використовувати бету VScode insiders. А вона оновлюється кожен день і треба перезапускати.

Долучитись до бети можна тут «join waitlist» github.com/...​eatures/preview/copilot-x . Видають не одразу. Думаю залежить від активності на гітхабі та використанні звичайного copilot.

Вже деякий час працює на стабільній версії VSCode

Привіт Сергій,

Релізу Copilot X ще немає.

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