Enota 3 / 12

Kodiranje in združevanje programiranja z AI

Dobički:

  • Sposobnost pisanja funkcij, razredov in modulov v AI z jasnimi vhodno-izhodnimi definicijami in omejitvami
  • Sposobnost uporabe umetne inteligence kot partnerja pri programiranju v paru in napredovanje korak za korakom, v majhnih, preverljivih kosih
  • Sposobnost lovljenja logičnih in robnih napak s prevajanjem kode, ki jo ustvari AI, in njenim izvajanjem z majhnimi primeri

Programiranje v paru je, ko dva razvijalca delata na istem problemu, pri čemer eden piše in drugi revidira. Kodiranje z umetno inteligenco je digitalna različica prav tega odnosa: nastavite smer, omejitve in merila sprejemljivosti; AI ustvari hiter osnutek; Vsak korak preverite tako, da ga sestavite in preizkusite. Največja past tukaj je reči AI ​​"napiši mi to aplikacijo od začetka do konca" in slepo sprejeti 200-vrstični blok. Dobro programiranje parov poteka v majhnih korakih: vsak korak mora biti razumljiv, preizkušen in reverzibilen.

V tej enoti se boste naučili tiskati funkcije, razrede in module z jasno vhodno-izhodno pogodbo; Kako voditi AI korak za korakom; in videli bomo, kako ujeti logične in robne napake z izvajanjem kode, ki jo ustvari z majhnimi primeri. Cilj ni hitrost, ampak preverjena hitrost.

Koncepti: Vhodno-izhodna pogodba: jasna definicija vnosa, ki ga funkcija sprejme, kakšen izhod in napake obljublja. Edge case: Vnos, ki ni običajen, vendar se lahko dejansko pojavi (prazen, nič, negativen, zelo velik, nič). Postopen razvoj: Nadaljevanje z majhnimi obdelovanci in preverjanje vsakega koraka.

Tiskanje kode z neto pogodbo

Osnova kodeksa kakovosti je, da pred začetkom dela natančno definirate, »kaj želite«. Ko pišete funkcijo za AI, ji dajte pet stvari: jezik in različico, vrste vnosa in pomene, izhod, pogoje napak in omejitve (zmogljivost, prepoved zunanje knjižnice, slog). To AI preprečuje ugibanje.

  1. Napišite pogodbo. Vhod, izhod, napaka, omejitev.
  2. Prosite za majhno enoto. Funkcija z eno samo odgovornostjo; To ni ogromen modul.
  3. Zahtevajte testni blok. Poleg kode dodajte nekaj vzorčnih izvedb/testov.
  4. Prevedi in zaženi. Poskusite z robnimi ohišji, preverite rezultat na oko.
  5. Pojdite na naslednji korak. Ko je kos potrjen, nadgradite na njem.

Poziv pogodbene funkcije: "Napišite funkcijo za TypeScript 5. Namen: izračunajte skupno količino elementov v nakupovalnem vozičku. Vnos: { cena: število, količina: število }[] polje. Izhod: število (skupaj). Pravila: vrzi napako, če je količina ali cena negativna; vrni 0 za prazno polje; zaokrožite znesek na 2 decimalni mesti za decimalno napako. Ne uporabljajte zunanje knjižnice. Dodajte 5 testnih primerov pod funkcijo (normalno, prazno, negativna količina, decimalna cena, posamezen artikel).«

Vodenje AI v paru

Dober napredek pri programiranju v paru je dialog in ne ena velika zahteva. Najprej zahtevajte okostje in ga zaženite; nato dodajte robno stanje; potem popravi napako. Ta pristop ohranja kodo razumljivo in vam daje nadzor nad vsakim korakom.

Inkrementalni poziv za napredek: "Napisali bomo bralnik, ki bere datoteko CSV in pretvori vrstice v objekt. Pojdimo KORAK ZA KORAKOM, pojdimo na naslednji korak, ne da bi jaz potrdil vsak korak. 1. korak: samo napišite okostje, ki datoteko razdeli na vrstice in loči vrstico glave. Ne dodajajte še pretvorbe vrste ali obravnavanja napak. Naj bo kratko, razložite."

Pojasnite in utemeljite kodni poziv: "Pojasnite funkcijo, ki ste jo pravkar napisali, ne vrstico za vrstico, ampak odločitev za odločitvijo: katero oblikovalsko odločitev ste sprejeli in zakaj, kateri robni primer ste obravnavali in kako, katere primere ste namerno izključili? Naštejte 3 predpostavke v kodi, ki jih ne smem spregledati."

Namig: ne sprejmite kode, ki jo ustvari umetna inteligenca, ne da bi jo razumeli. "Pojasnite mi to, kakšne predpostavke ste naredili?" Vprašanje razkriva skrite napake in vam omogoča obrambo te kode, saj koda ostaja vaša odgovornost. Dajanje kode, ki je ne razumete, v proizvodnjo je kot pošiljanje pogodbe, ne da bi jo podpisali.

Šibek poziv / močan poziv

WEAK:»Napišite funkcijo razvrščanja.«(Rezultat: kateri jezik, kaj se razvršča, ali je stabilen, kakšna je omejitev zmogljivosti, koda, ki je nejasna in verjetno ne ustreza zahtevi.)MOČNO:»Za Javo 17 napišite metodo, ki razvršča objekt List<Employee> najprej po oddelku (abecedno), nato po plači (padajoče). NE ZAMENJAJTE izvirnega seznama, vrnite nov seznam. Naj ničelni oddelek na koncu pojasnite kompleksnost metode v vrstici za komentarje dodajte glavni testni blok s 4 vzorci."

Močan poziv; Vključuje merilo razvrščanja (dvonivojsko), pravilo stranskih učinkov (zamenjava izvirnika), ničelno vedenje in testno pričakovanje. Brez teh podrobnosti AI ustvari verodostojno, a nepravilno rešitev; na primer lahko poškoduje prvotni seznam in to bo povzročilo tiho napako drugje.

Validacija z robnimi primeri in majhnimi vzorci

Koda, ki deluje v srečnem scenariju, ni pravilna koda. Zavestno prisilite vsako proizvedeno funkcijo:

Vrsta robnega ohišja

vnos vzorca

pričakovano vedenje

prazen vnos

Prazna matrika/niz

Ni napaka, logičen prazen rezultat

Nič/negativno

0, -1

Definirano in pravilno vedenje

velika vrednost

Milijoni zapisov

Prelivanje/kontrola delovanja

ničelno/nedefinirano

manjkajoči prostor

Nadzorovana napaka ali privzeto

Podvojeno/nenavadno

ponavljajoče se, obratni vrstni red

pravilen rezultat

Mini etuiji

Primer 1 – Tiha napaka pri zaokroževanju. AI napiše funkcijo, ki zbira denar z decimalnimi (float) tipi; 0,1 + 0,2 daje 0,3000000000000004. Napaka je odpravljena, ko inženir doda pravilo "Zaokroži na 2 števki in uporabi cele penije". Pravilo treh vrstic preprečuje na tisoče penijev variance v mesečni uskladitvi.

Primer 2 – past stranskih učinkov. Umetna inteligenca napiše metodo, ki »razvrsti« seznam, vendar na mestu spremeni prvotni seznam. Do nepričakovanega vedenja pride, ker drug modul uporablja isti seznam. Če bi bila v pozivu omejitev "sprememba izvirnika", se napaka ne bi nikoli pojavila; se ujame v pregled kode in prepreči 2 uri odpravljanja napak.

Primer 3 — Zaslužek korak za korakom. Razvijalec naenkrat natisne 150-vrstični uvozni modul; Ko najde napako, ne more ugotoviti, od kod prihaja. Drugi razvijalec isto delo razdeli na 5 majhnih korakov, vsak korak preizkusi v 2 minutah in takoj v 3. koraku odkrije napako.

Pogoste napake

  • Tiskanje velikih blokov v eni zahtevi. Rodi se tvegana koda, ki jo je težko razumeti in odpraviti napake.
  • Zahtevati kodo brez dajanja pogodbe. Če je vhodno-izhodna napaka dvoumna, bo AI uganil in se zmotil.
  • Samo preizkušam srečen scenarij. Če prazen, ničelni, negativni in veliki vnos ni preizkušen, je napaka prepuščena produkciji.
  • Sprejemanje brez razumevanja. Koda, ki je ne razkrijete, je dolg, ki ga ne morete braniti.
  • Ignoriranje občutljivih tipov, kot so stranski učinki in denar/zmenek. Lebdeči denar z brezčasno zgodovino je klasičen vir napak.

Če povzamem

Pisanje kode z umetno inteligenco je disciplinirano programiranje v paru: jasna pogodba, majhni koraki, gradnja in testiranje na vsakem koraku. Dajanje kvarteta vhod-izhod-napaka-omejitev od začetka določa kakovost kode. Razlaga kode, ki jo ustvari, in njeno vsiljevanje z robnimi primeri prinese na površje napake, skrite pod srečnim scenarijem. Vir hitrosti ni slepo sprejemanje; je hiter osnutek in hitro preverjanje.

Aplikacijska naloga

Izberite majhno, a resnično funkcijo (npr. skupno število košaric, datumska razlika, razčlenjevanje besedila). Natisnite s pozivom pogodbene funkcije; Zraven dodajte vsaj 5 testnih scenarijev. Zaženite kodo in zavestno preizkusite 5 robnih primerov, pri čemer uporabite tabelo kot vodilo. Poiščite napako v vsaj enem robnem primeru (če ne, oblikujte nov vnos za vsiljevanje funkcije), jo popravite z AI in preverite s ponovnim testiranjem, ali popravek deluje.

kontrolni seznam

  • [ ] Napisal sem pogodbo, ki vključuje vnos, izhod, napake in omejitve.
  • [ ] Kodo sem ustvaril v majhnih korakih namesto v enem velikem bloku.
  • [ ] Poleg kode sem dodal blok za preskus/vzorčenje.
  • [ ] Zavestno sem preizkusil vsaj 5 robnih primerov.
  • [ ] Umetni inteligenci sem razložil kodo in pregledal njene predpostavke.
  • [ ] Popravil sem najdeno napako in popravek potrdil s ponovnim testiranjem.