Јединица 3 / 12

Кодирање и упаривање програмирања са АИ

Добици:

  • Способност писања функција, класа и модула у АИ са јасним улазно-излазним дефиницијама и ограничењима
  • Способност да се АИ користи као партнер за програмирање у пару и напредује корак по корак, у малим, проверљивим деловима
  • Способност хватања логичких и ивичних грешака тако што ћете компајлирати код који генерише АИ и покренути га са малим примерима

Програмирање у пару је када два програмера раде на истом проблему, при чему један пише, а други ревидира. Кодирање са АИ је дигитална верзија самог овог односа: ви постављате правац, ограничења и критеријуме прихватања; АИ производи брзи нацрт; Сваки корак верификујете тако што ћете га компајлирати и тестирати. Највећа замка овде је рећи АИ „напиши ми ову апликацију од почетка до краја“ и слепо прихватити блок од 200 редова. Добро програмирање парова се одвија у малим корацима: сваки корак треба да буде разумљив, пробљив и реверзибилан.

У овој јединици ћете научити како да штампате функције, класе и модуле са јасним инпут-оутпут уговором; Како водити АИ корак по корак; и видећемо како да ухватимо логичке и ивице грешке тако што ћемо покренути код који он производи са малим примерима. Циљ није брзина, већ проверена брзина.

Концепти: Улазно-излазни уговор: Јасна дефиниција онога што функција узима и какво понашање излаза и грешке обећава. Ивица великих и малих слова: Унос који није обичан, али се заиста може појавити (празан, нула, негативан, веома велики, нула). Инкрементални развој: Настављање са малим, радним комадима и потврђивање сваког корака.

Штампање кода са нето уговором

Основа кода квалитета је да пре почетка рада дефинишете тачно „шта желите“. Када пишете функцију у АИ, дајте јој пет ствари: језик и верзију, типове уноса и значења, излаз, услове грешке и ограничења (перформансе, забрана екстерне библиотеке, стил). Ово спречава АИ да погађа.

  1. Напишите уговор. Улаз, излаз, грешка, ограничење.
  2. Питајте за малу јединицу. Функција са једном одговорношћу; То није велики модул.
  3. Захтевајте тестни блок. Додајте неколико примера покретања/тестирања поред кода.
  4. Саставите и покрените. Пробајте са ивичним кућиштима, проверите излаз на око.
  5. Идите на следећи корак. Када се део потврди, надоградите га.

Промпт за уговорену функцију: „Напишите функцију за ТипеСцрипт 5. Сврха: израчунајте укупан број артикала у корпи за куповину. Унос: { цена: број, количина: број }[] низ. Излаз: број (укупно). Правила: избаци грешку ако је количина или цена негативна; врати 0 за празан низ; децимални износ за тестирање не користи екстерну библиотеку. 5 децималних места за тестирање. испод функције (нормално, празно, негативна количина, децимална цена, појединачна ставка).“

Вођење АИ као пара

Добар напредак у програмирању у пару је пре дијалог него један велики захтев. Прво, затражите скелет и покрените га; затим додајте ивично стање; затим поправите грешку. Овај приступ чини код разумљивим и даје вам контролу на сваком кораку.

Инкрементални промпт за напредак: „Написаћемо читач који чита ЦСВ датотеку и конвертује линије у објекат. Идемо КОРАК ПО КОРАК, прелазећи на следећи корак без мог потврђивања сваког корака. Корак 1: само напишите костур који дели датотеку на редове и одваја линију заглавља. Немојте додавати конверзију типа или руковање грешкама, и даље објашњавајте.“

Објасните и образложите промпт кода: „Објасните функцију коју сте управо написали, не ред по ред, већ одлуку по одлуку: коју сте одлуку о дизајну донели и зашто, којим случајем на ивици сте радили и како, које случајеве сте намерно искључили? Наведите 3 претпоставке у коду које не смем да пропустим.“

Савет: Не прихватајте код генерисан од вештачке интелигенције без разумевања. „Објасните ми ово, које сте претпоставке изнели?“ Питање истовремено открива скривене грешке и омогућава вам да браните тај код, пошто код остаје ваша одговорност. Стављање кода који не разумете у продукцију је као слање уговора без потписивања.

Слаба порука / јака промпт

СЛАБО:"Напишите функцију за сортирање."(Резултат: који језик, шта се сортира, да ли је стабилан, које је ограничење перформанси, код који је нејасан и вероватно не одговара захтеву.)ЈАКО:"За Јаву 17, напишите метод који сортира објекат Лист<Емплоиее> прво по одељењу (абецедно), а затим према плати). нулл одељење долази последње. Објасните сложеност методе у реду за коментаре, наведите главни тестни блок са 4 узорка.

Снажан промпт; Укључује критеријум сортирања (два нивоа), правило нежељених ефеката (замена оригинала), нулто понашање и очекивање теста. Без ових детаља, АИ производи уверљиво, али нетачно решење; на пример може оштетити оригиналну листу и то ће довести до тихе грешке на другом месту.

Валидација са ивичним случајевима и малим узорцима

Код који функционише у срећном сценарију није исправан код. Свесно форсирајте сваку произведену функцију:

Тип кућишта ивице

узорак уноса

очекивано понашање

празан унос

Празан низ/стринг

Није грешка, логичан празан резултат

Нула/негативна

0, -1

Дефинисано и исправно понашање

велика вредност

Милиони записа

Оверфлов/перформанце цонтрол

нулл/ундефинед

недостаје простор

Контролисана грешка или подразумевано

Дупликат/необичан

понављање, обрнути редослед

тачан резултат

Мини Цасес

Случај 1 — Грешка тихог заокруживања. АИ пише функцију која прикупља новац са децималним (флоат) типовима; 0,1 + 0,2 даје 0,30000000000000004. Грешка се решава када инжењер дода правило „Заокружи на 2 цифре и користи цео пени“. Правило од 3 реда спречава хиљаде пенија одступања у месечном помирењу.

Случај 2 — Замка нежељених ефеката. АИ пише методу која „сортира“ листу, али мења оригиналну листу на месту. Дошло је до неочекиваног понашања јер други модул користи исту листу. Ако је ограничење „промени оригинал“ било у промпту, грешка се никада не би појавила; бива ухваћен у прегледу кода и спречава 2 сата отклањања грешака.

Случај 3 — Зарада корак по корак. Програмер штампа модул за увоз од 150 редова одједном; Када пронађе грешку, не може да пронађе одакле је дошла. Други програмер дели исти посао на 5 малих корака, тестира сваки корак за 2 минута и одмах хвата грешку у 3. кораку.

Уобичајене грешке

  • Штампање великих блокова у једном захтеву. Рађа се ризичан код који је тешко разумети и отклонити грешке.
  • Тражити шифру без давања уговора. Ако је улазно-излазна грешка двосмислена, АИ ће погодити и погрешити.
  • Само тестирам срећни сценарио. Ако се не проба празан, нулл, негативан и велики унос, грешка се препушта производњи.
  • Прихватање без разумевања. Шифра коју не откривате је дуг који не можете да браните.
  • Игнорисање осетљивих типова као што су нежељени ефекти и новац/датум. Флоат новац са безвременском историјом је класичан извор грешке.

Укратко

Писање кода са АИ је дисциплиновано програмирање у пару: јасан уговор, мали кораци, израда и тестирање на сваком кораку. Давање квартета улазно-излазних грешака-ограничења од почетка одређује квалитет кода. Објашњавање кода који производи и форсирање га са рубним случајевима извлачи на површину грешке скривене у срећном сценарију. Извор брзине није слепо прихватање; је брзи нацрт плус брза верификација.

Задатак апликације

Изаберите малу, али стварну функцију (нпр. укупан износ корпе, разлика у датуму, рашчлањивање текста). Штампајте користећи промпту уговорене функције; Додајте најмање 5 тест сценарија поред њега. Покрените код и испробајте 5 рубних случајева свесно, користећи табелу као водич. Пронађите грешку у најмање једном рубном случају (ако није, дизајнирајте нови улаз да бисте форсирали функцију), поправите је помоћу АИ и проверите поновним тестирањем да је исправка функционисала.

контролна листа

  • [ ] Написао сам уговор који укључује улаз, излаз, грешке и ограничења.
  • [ ] Генерисао сам код у малим корацима уместо једног великог блока.
  • [ ] Додао сам блок за тестирање/узорак покретања поред кода.
  • [ ] Свесно сам тестирао најмање 5 рубних случајева.
  • [ ] Објаснио сам код АИ и прегледао његове претпоставке.
  • [ ] Исправио сам пронађену грешку и потврдио исправку поновним тестирањем.