AI párové programování

Tutoriál zaměřený na AI-asistované a AI-párové programování nabízí úvod do práce s na nástroji jako Github Copilot, Amazon CodeWhisperer a ChatGPT. Součástí jsou praktické návody k instalaci, ilustrativní video ukázky a pravidelné aktualizace založené na zpětné vazbě účastníků, vhodné pro každého, kdo má zájem o rozvoj svých dovedností v oblasti AI programování.

Budeme rádi za každou zpětnou vazbu nebo dotaz. V obou případech nám můžete napsat na aireaktor@ujep.cz nebo do


Vážené kolegyně, vážení kolegové,

následující text je navržen jako úvod do světa AI-asistovaného popř. AI-párového programování. Tohoto průvodce budeme pravidelně aktualizovat a rozšiřovat o nové informace na základě našich zkušeností a zpětné vazby od vás (doporučujeme si odkaz uložit a pravidelně se k němu vracet podle potřeby). Průvodce je zaměřen na Github Copilot, Amazone CodeWhisperer a chatGPT. V průvodci najdete informace o těchto nástrojích, návod k instalaci a video ukázky.

Přejeme příjemnou zábavu!

Úvod

Programování s pomocí umělé inteligence

V průzkumu vlivu GitHub Copilot na produktivitu vývojářů 88% respondentů uvedlo, že jsou více produktivní, 96% uvedlo, že rychleji zvládají repetetivní úkoly, 59% uvedlo, že jsou méně frustrováni během programování, …

https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/#table-survey-responses-measuring-dimensions-of-developer-productivity-when-using-github-copilot

V experimentu, kde jedna skupina (45 účastníků) účastníků používala a druhá skupina (50 učástníků) nepoužívala GitHub Copilot při řešení stejného úkolu skupina používající asistenci AI byla v průměru o více než 50% rychlejší.

https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/#figure-summary-of-the-experiment-process-and-results

Nástroje pro programování s podporou umělé inteligence se objevily jako nástroj, který mění pravidla hry a pomáhá vývojářům psát kód rychleji, přesněji a kreativněji.

Co je programování s podporou umělé inteligence?

Programování s podporou umělé inteligence je využívání technologií umělé inteligence (AI), které pomáhají vývojářům při psaní, ladění a optimalizaci kódu. Tyto nástroje mohou analyzovat vzory v databázích kódů, nabízet relevantní návrhy a generovat úryvky kódu na základě kontextu.

Mezi hlavní výhody programování s podporou umělé inteligence patří:

  1. Vyšší produktivita: Nástroje s umělou inteligencí pomáhají vývojářům psát kód rychleji tím, že nabízejí relevantní návrhy a automatické dokončování, čímž zkracují čas strávený opakujícími se úkoly.
  2. Vyšší kvalita kódu: Nástroje pro programování s podporou AI mohou pomoci odhalit chyby a navrhnout optimalizace, což vede k robustnějšímu a efektivnějšímu kódu.
  3. Zvýšená kreativita: Díky automatizaci všedních úkolů se můžeme více soustředit na řešení problémů a kreativní aspekty kódování.

Přehled

Přehled současných AI asistentů pro programování

Mezi hlavní AI-asistenty v současné době (12.5.2023) patří GitHub Copilot a chatGPT.

Budu se tedy věnovat hlavně těmto nástrojům. Další nástroj, který zmíním je Amazone CodeWhisperer, který je novinkou na trhu, ale má jednu podstatnou výhodu, a to cenu, je zdarma. Nástroj, který v tomto textu není a měl by být zmíněn je Tabnine. Jde o placený nástroj se kterým nemám zkušenost.

Odkazy:

Github Copilot

(https://github.com/features/copilot)

Dokumentace: https://docs.github.com/en/copilot

Github Copilot je nástroj pro doplňování kódu pomocí umělé inteligence vyvinutý ve spolupráci společností OpenAI a GitHub. Jeho hlavní funkcí je poskytovat kontextově orientované návrhy kódu, které pomáhají vývojářům psát kód efektivněji. Github Copilot lze používat v různých programovacích jazycích a lze jej integrovat do běžných vývojových prostředí.

Github Copilot využívá jazykový model Codex společnosti OpenAI, který je součástí řady modelů GPT. Nástroj využívá rozsáhlou sadu dat veřejných repozitářů kódů a na základě kontextu vašeho kódu generuje relevantní a přesné návrhy kódu. Během psaní Github Copilot předpovídá, čeho se snažíte dosáhnout, a nabízí návrhy, které můžete přijmout nebo upravit.

Navrhovaný kód se může shodovat s již existujícím kódem což vás můžete dostat do sporu s licencí. V nastavení GitHub Copilot (https://github.com/settings/copilot) můžete nastavit zda chcete dostávat i takové návrhy. 

Klíčové vlastnosti:

Návrhy kódu s ohledem na kontext: Github Copilot rozumí kontextu vašeho kódu a poskytuje relevantní návrhy, které vám pomohou rychle a efektivně dokončit kód. 

Generování kódu: Github Copilot dokáže vygenerovat celé funkce nebo celé třídy, pokud mu poskytnete popis nebo signaturu funkce. 

Učení se z vašeho kódu: Github Copilot se může časem přizpůsobit vašemu stylu kódování a vašim preferencím a poskytovat vám personalizovanější návrhy.

Podporované jazyky: Python, JavaScript, TypeScript, Ruby, Go, C# and C++, a další

Podporované IDE: Visual Studio Code, Visual Studio, JetBrains IDEs, Neovim

Cena: zkušební období potom 10$/měsíčně nebo 100$/ročně

Amazon CodeWhisperer

(https://aws.amazon.com/codewhisperer/)

Amazon CodeWhisperer je obdobou nástroje GitHub Copilot. Jde o nástroj pro generování, analýzu a doporučování kódu založený na umělé inteligenci, který vyvinula společnost Amazon Web Services (AWS).

Klíčové rozdíly oproti GitHub Copilot:

Sledování referencí na open-source kódy: Pokud se navrhovaný kód shoduje s existujícím kódem, tak by Amazon CodeWhisperer měl poskytnout odkaz na zdroj kódu.

Security scans: Možnost proskenovat svůj kód za neobsahuje zranitelnosti a získat doporučení na opravu.

Optimalizováno pro uživatele služeb AWS: Amazon CodeWhisperer je optimalizován pro vývojáře používající služby AWS.

Podporované jazyky: Python, Java, JavaScript, TypeScript, C#, Go, Rust, PHP, Ruby, Kotlin, C, C++, Shell scripting, SQL, and Scala a další

Podporované IDE: JetBrains IDEs, Visual Studio Code, AWS Cloud9, AWS Lambda console, JupyterLab and Amazon SageMaker Studio.

Cena: zdarma

ChatGPT

(https://openai.com/blog/chatgpt)

Podrobně o chatGPT v samostatném dokumentu: Jak na chatGPT.

Příklady použítí ChatGPT v programování

  • Generování kódu: ChatGPT může vygenerovat kód podle zadání uživatele v mnoha programovacích jazycích.
  • Asistent pro kontrolu kódu: Může pomáhat odhalit jednoduché chyby a identifikovat místa, kde by kód mohl být efektivnější nebo lépe vyhovoval standardům.
  • Generátor dokumentace: ChatGPT lze použít k automatickému generování dokumentace.
  • Nástroj pro učení: Pro začínající programátory může být ChatGPT cenným nástrojem pro učení. Může poskytovat vysvětlení konceptů, vést uživatele při řešení úkolů a poskytovat okamžitou zpětnou vazbu.
  • Řešení problémů: ChatGPT může pomoci s interpretací chybových hlášení a vedením vývojáře k možným řešením.
  • Plánování: Vysvětlením požadovaných úkolů v přirozeném jazyce může ChatGPT pomoci při plánování.
  • Překladač: ChatGPT může sloužit k překladu kódu z jednoho programovacího jazyka do druhého.
  • Refaktorizace: Může navrhnout refaktorizaci, aby byl kód čitelnější, udržitelnější a efektivnější.
  • a další…

Omezení

Je důležité mít na paměti, že se jedná o nástroj, nikoli o náhradu znalosti programování. Zkušený programátor z nástroje vždy vytěží více než nezkušený. Vygenerovaný kód může obsahovat chyby, neefektivity nebo nemusí zcela odpovídat zadání. Navíc, stejně jako všechny modely umělé inteligence, je i ChatGPT omezen daty na kterých byl trénován, což znamená, že nemusí mít nejaktuálnější nebo mít specializované znalosti programování.

Vyhlídka do budoucna (dnes: 13.5.2023)

GitHub plánuje spuštění GitHub Copilot Chat. Chat bot by měl být integrovaný přímo v IDE a bude tedy možné chatovat přímo nad vaším kódem bez nutnosti přepínat mezi prohlížečem s chatGPT a vývojovým prostředím.

Zařazení v Software Development Life Cycle

Zde je přehled a návrhy, kde mohou výše zmíněné technologie najít uplatnění v rámci Software Development Life Cycle. Stále je na třeba mít na paměti omezení těchto modelů. Odborník dokáže s pomocí těchto nástrojů získat vždy více zejména proto, že dokáže lépe odhadnout relevanci získaných informací, klást lepší otázky a editovat výstup tak, aby splňoval vyšší kvality.

V rámci tohoto textu se budu v dalších částech zabývat pouze fází 4. “Vývoj”.

“Software Development Life Cycle (SDLC) je rámec, který definuje proces používaný při vytváření aplikací od jejího vzniku až po ukončení. Cílem SDLC je vytvořit kvalitní software, který splní nebo předčí očekávání zákazníka, dosáhne dokončení v rámci časových a nákladových odhadů a bude efektivně a účinně fungovat v současné i plánované infrastruktuře informačních technologií.” – GPT-4

SDLC se skládá ze sedmi hlavních fází:

1. Plánování: Zde zúčastněné strany společně určují potřebu nového programu nebo aktualizace softwaru. Tato fáze zahrnuje také přidělování zdrojů, plánování projektu a odhad nákladů.

  • ChatGPT může pomáhat při brainstormingu, generovat nápady a nabízet návrhy na základě svých tréninkových dat. Může pomoci objasnit pojmy, poskytnout příklady a pomoci s návrhem počátečních požadavků a dokumentace projektu. Může také poskytnout základní informace o technologiích, programovacích jazycích a frameworcích, které by mohly být v projektu použity.

2. Analýza požadavků: V tomto kroku jsou definovány specifikace softwaru, které pomáhají při návrhu produktu v další fázi.

  • ChatGPT může pomoci formulovat a dokumentovat požadavky na software. Může poskytnout vysvětlení a příklady různých typů softwarových požadavků a pomoci při přípravě specifikace softwarových požadavků (SRS).

3. Design: Navrhuje se architektura softwaru. Dokumenty o návrhu systému a softwaru slouží jako vstup pro další fázi modelu. Jsou zde nastíněny nezbytné požadavky na hardware a systém a pomáhají také při definování celkové architektury systému.

  • ChatGPT může poskytnout náhled na různé návrhové vzory a softwarové architektury v závislosti na povaze projektu.

4. Vývoj: Vlastní vývoj softwaru.

  • GitHub Copilot dokáže poskytovat návrhy kódu v různých jazycích a pro mnoho frameworků, čímž snižuje čas, který vývojáři stráví psaním šablonovitého kódu.
  • ChatGPT může pomocí při ladění kódu – řešení chyb, poradenství, apod.

5. TestováníProdukt je testován, aby se zajistilo, že funguje podle očekávání a jsou splněny stanovené požadavky.

  • GitHub Copilot může navrhnout testy na základě testované funkce.
  • ChatGPT může pomoci při pochopení různých metod a strategií testování a pomoci při vytváření testů.

6. Nasazení: Software je zpřístupněn uživatelům.

  • “ChatGPT vám může poskytnout poradenství ohledně osvědčených postupů pro nasazení softwaru, včetně strategií kontinuální integrace a kontinuálního nasazení (CI/CD), které jsou v moderním vývoji softwaru klíčové.” – GPT-4

7. Údržba

  • GitHub Copilot může poskytovat návrhy kódu pro implementaci nových funkcí nebo vylepšení těch stávajících.
  • ChatGPT může pomoci při řešení problémů s dokumentováním změn a aktualizací dokumentace.

V rámci tohoto textu se budu v dalších částech zabývat pouze fází 4. “Vývoj”.

Nastavení prostředí

V této části si ukážeme, jak nastavit prostředí ve Visual Studio Code (VSCode) a integrovat Github Copilot a Amazon CodeWhisperer.

Pro integraci do jiných prostředí by nemělo být těžké vyGooglit návod z dokumentaci.

Github Copilot

V oficiální dokumentaci naleznetepostup k instalaci do podporovaných IDE: https://docs.github.com/en/copilot/getting-started-with-github-copilot

Amazon CodeWhisperer

Na oficiálních stánkách naleznete video návod pro podporované IDE:  https://aws.amazon.com/codewhisperer/resources/

ChatGPT

Navštivte https://chat.openai.com. Registrujte / Přihlašte se

Ovládání

Github Copilot

Závislé na vývojovém prostředí a operačním systému. Naleznete zde: https://docs.github.com/en/copilot/getting-started-with-github-copilot

Amazon CodeWhisperer

Závislé na vývojovém prostředí a operačním systému. Naleznete zde:

https://docs.aws.amazon.com/codewhisperer/latest/userguide/actions-and-shortcuts.html

Ukázky

Použití nástrojů s podporou umělé inteligence při programování

https://youtu.be/gzKzd8tCVRo

Ve videu začínám s instalací do vývojového prostředí. Následuje řešení jedné úlohy pěti způsoby. První tři jsou tzv. “na čuníka”, kde simuluji proces, kdy programátor nechce mít s programováním moc práce. Upozorňuji na problémy s tím spojenými a vysvětluji jak s asistenty pracovat. V posledních dvou ukazuji, jak si myslím, že by se to mělo dělat v souladu s dobrou praxí.

Na čuníka:

  • 3:20 – GitHub Copilot
  • 21:31 – chatGPT
  • 24:33 – AWS CodeWhisperer
  • Good practice:
  • 28:23 – AWS CodeWhisperer + GitHub Copilot
  • 36:13 – GitHub Copilot

Příklad promptu pro chatGPT

Good practice prompt:

You are an expert Python programmer familiar with good practice rules (breaking up large functions or classes into smaller, more manageable pieces; single responsibility principle; using constants; encapsulations; avoiding global variables; using docstrings; readability; code modularity; using clear descriptive comments for each part of code), please ….

Good practice

  • Porozumění vygenerovanému kódu – Vygenerovaný kód může obsahovat chyby či neefektivní řešení. Slepá důvěra v kód generovaný umělou inteligencí může vést k neoptimálním nebo dokonce škodlivým výsledkům.
  • Ověřujte a ověřujte – Vždy zkontrolujte, ověřujte a testujte kód generovaný umělou inteligencí, abyste zajistili jeho správnost, efektivitu a udržovatelnost.
  • Vylepšování generovaného kódu – Kód generovaný umělou inteligencí je dobrým výchozím bodem, který se dá dále vylepšovat.
  • Jasná komunikace a dobře strukturovaný kód – Pište jasné a stručné komentáře, které popíší záměr vašeho kódu a usnadní nástrojům AI pochopit kontext a nabídnout relevantní návrhy. Dodržujte standardy a konvence kódování, což zlepší schopnost AI poskytovat smysluplné návrhy a lépe porozumět vašim záměrům.
  • Uveďte konkrétní příklady – Poskytněte konkrétní příklady nebo testovací případy, které umělé inteligenci pomohou vygenerovat relevantnější návrhy kódu nebo řešení vašeho problému. Poskytnutí očekávaných vstupů a výstupů umělé inteligenci může pomoci zúžit okruh možných řešení a zvýšit šanci na získání přesných a užitečných návrhů.
  • Iterativní zpětná vazba a zdokonalování kódu – Neočekávejte, že nástroje umělé inteligence poskytnou dokonalá řešení na první pokus. Místo toho použijte jejich návrhy jako výchozí bod a iterativně kód vylepšujte
  • Vyvážení automatizace a ručního programování – Nástroje pro programování s podporou umělé inteligence nabízejí mnoho výhod, ale je velmi důležité najít správnou rovnováhu mezi automatizací a ručním programováním.
  • Víte, kdy se na umělou inteligenci spolehnout – Kód generovaný umělou inteligencí používejte pro opakující se úlohy, šablonovitý kód nebo jako výchozí bod pro řešení složitých problémů.
  • Rozvíjejte své programátorské dovednosti – Pokračujte v posilování svých programátorských dovedností a odborných znalostí, protože nástroje AI nenahradí lidské porozumění, kreativitu a schopnost řešit problémy. (Alespoň prozatím…)
  • Kombinujte to nejlepší z obou světů – Využívejte nástroje pro programování s podporou umělé inteligence jako doplněk ke svým dovednostem a odborným znalostem, což vám umožní soustředit se na složitější a kreativnější aspekty vývoje softwaru.
  • Udržujte si přehled o nejnovějším vývoji – Programování s podporou AI je rychle se vyvíjející oblast a je vhodné být informován o nových nástrojích, funkcích a osvědčených postupech.