Jedinica 3 / 12

Kodiranje i uparivanje programiranja s umjetnom inteligencijom

Dobici:

  • Sposobnost pisanja funkcija, klasa i modula u AI s jasnim ulazno-izlaznim definicijama i ograničenjima
  • Sposobnost korištenja umjetne inteligencije kao partnera za programiranje u paru i napredovanja korak po korak, u malim, provjerljivim dijelovima
  • Sposobnost hvatanja logičkih i rubnih pogrešaka kompajliranjem koda koji je generirao AI i njegovim pokretanjem s malim primjerima

Programiranje u paru je kada dva programera rade na istom problemu, pri čemu jedan piše, a drugi revidira. Kodiranje s umjetnom inteligencijom digitalna je verzija upravo ovog odnosa: vi postavljate smjer, ograničenja i kriterije prihvaćanja; AI proizvodi brzi nacrt; Svaki korak provjeravate sastavljanjem i testiranjem. Najveća zamka ovdje je reći AI-u "napiši mi ovu aplikaciju od početka do kraja" i slijepo prihvatiti blok od 200 redaka. Dobro programiranje parova odvija se u malim koracima: svaki korak treba biti razumljiv, testiran i reverzibilan.

U ovoj ćete jedinici naučiti kako ispisati funkcije, klase i module s jasnim ulazno-izlaznim ugovorom; Kako voditi AI korak po korak; i vidjet ćemo kako uhvatiti logičke i rubne pogreške pokretanjem koda koji proizvodi s malim primjerima. Nije cilj brzina, nego provjerena brzina.

Koncepti: Ulazno-izlazni ugovor: Jasna definicija onoga što input funkcija uzima i kakav izlaz i ponašanje pogreške obećava. Rubni slučaj: Unos koji nije običan, ali se zapravo može dogoditi (prazan, nula, negativan, vrlo velik, nula). Inkrementalni razvoj: Nastavak s malim radnim dijelovima i provjera svakog koraka.

Ispis koda s mrežnim ugovorom

Osnova kodeksa kvalitete je točno definirati "što želite" prije početka rada. Kada pišete funkciju za AI, dajte joj pet stvari: jezik i verziju, vrste unosa i značenja, izlaz, uvjete pogreške i ograničenja (izvedba, zabrana vanjske biblioteke, stil). Ovo sprječava AI da pogađa.

  1. Napišite ugovor. Ulaz, izlaz, greška, ograničenje.
  2. Zatražite malu jedinicu. Funkcija s jednom odgovornošću; To nije veliki modul.
  3. Zatražite testni blok. Dodajte nekoliko uzoraka pokretanja/testiranja pored koda.
  4. Prevedi i pokreni. Pokušajte s rubnim kućištima, provjerite izlaz očima.
  5. Idite na sljedeći korak. Nakon što je dio potvrđen, nadogradite ga.

Prompt ugovorene funkcije: "Napišite funkciju za TypeScript 5. Svrha: izračunajte ukupnu količinu artikala u košarici za kupnju. Unos: { cijena: broj, količina: broj }[] niz. Izlaz: broj (ukupno). Pravila: izbaci pogrešku ako su količina ili cijena negativni; vratite 0 za prazan niz; zaokružite iznos na 2 decimalna mjesta za decimalnu pogrešku. Ne koristite vanjsku biblioteku. Dodajte 5 testnih slučajeva ispod funkcije (normalno, prazno, negativna količina, decimalna cijena, pojedinačna stavka)."

Vođenje AI u paru

Dobar napredak u programiranju u paru više je dijalog nego jedan veliki zahtjev. Prvo zatražite kostur i pokrenite ga; zatim dodajte rubno stanje; onda ispravite grešku. Ovaj pristup čini kôd razumljivim i daje vam kontrolu nad svakim korakom.

Uputa za inkrementalni napredak: "Napisat ćemo čitač koji čita CSV datoteku i pretvara retke u objekt. Idemo KORAK PO KORAK, prelazeći na sljedeći korak bez moje potvrđivanja svakog koraka. Korak 1: samo napišite kostur koji dijeli datoteku na retke i odvaja redak zaglavlja. Nemojte još dodavati konverziju tipa ili rukovanje pogreškama. Neka bude kratko, objasnite."

Objasnite i opravdajte upit koda: "Objasnite funkciju koju ste upravo napisali, ne redak po redak, već odluku po odluku: koju ste odluku o dizajnu donijeli i zašto, kojim rubnim slučajem ste rukovali i kako, koje ste slučajeve namjerno isključili? Navedite 3 pretpostavke u kodu koje ne bih smio propustiti."

Savjet: Nemojte prihvatiti kod generiran umjetnom inteligencijom ako ga ne razumijete. “Objasnite mi ovo, kakve ste pretpostavke napravili?” Pitanje otkriva skrivene pogreške i omogućuje vam obranu tog koda, jer kod ostaje vaša odgovornost. Stavljanje koda koji ne razumijete u proizvodnju je kao slanje ugovora bez potpisivanja.

Slab upit / Jak upit

SLABO:"Napišite funkciju sortiranja."(Rezultat: koji jezik, što se sortira, je li stabilan, koje je ograničenje performansi, kod koji je nejasan i vjerojatno ne odgovara zahtjevima.)JAKO:"Za Javu 17, napišite metodu koja sortira objekt List<Employee> prvo po odjelu (abecedno), zatim po plaći (silazno). NEMOJTE ZAMIJENITI originalni popis, vratite novi popis. Neka nulti odjel dolazi zadnji. Objasnite složenost metode u retku za komentare, dodajte glavni testni blok s 4 uzorka."

Snažan brz; Uključuje kriterij sortiranja (dvije razine), pravilo nuspojava (zamjena originala), nulto ponašanje i test očekivanja. Bez ovih detalja, AI proizvodi prihvatljivo, ali netočno rješenje; na primjer, može oštetiti izvorni popis i to će dovesti do tihe pogreške na drugom mjestu.

Validacija s rubnim slučajevima i malim uzorcima

Kod koji radi u sretnom scenariju nije ispravan kod. Svjesno forsirati svaku proizvedenu funkciju:

Vrsta rubnog kućišta

unos uzorka

očekivano ponašanje

prazan unos

Prazan niz/niz

Nije pogreška, logičan prazan rezultat

Nula/negativno

0, -1

Definirano i ispravno ponašanje

velika vrijednost

Milijuni zapisa

Preljev/kontrola performansi

nula/nedefinirano

nedostajući prostor

Kontrolirana pogreška ili zadana vrijednost

Duplikat/neobično

ponavljanje, obrnutim redoslijedom

točan rezultat

Mini kućišta

Slučaj 1 — Tiha pogreška zaokruživanja. AI piše funkciju koja skuplja novac s decimalnim (float) tipovima; 0,1 + 0,2 daje 0,3000000000000004. Pogreška je riješena kada inženjer doda pravilo "Zaokruži na 2 znamenke i koristi cijele penije". Pravilo od 3 retka sprječava odstupanja od tisuća penija u mjesečnom usklađivanju.

Slučaj 2 — Zamka za nuspojave. AI ​​piše metodu koja "sortira" popis, ali mijenja izvorni popis na mjestu. Dolazi do neočekivanog ponašanja jer drugi modul koristi isti popis. Ako je ograničenje "promijeni izvornik" u upitu, pogreška se nikada ne bi pojavila; biva uhvaćen u pregledu koda i sprječava 2 sata otklanjanja pogrešaka.

Slučaj 3 — Zarada korak po korak. Programer ispisuje modul uvoza od 150 redaka odjednom; Kad nađe grešku, ne može pronaći odakle je došla. Drugi programer dijeli isti posao u 5 malih koraka, testira svaki korak u 2 minute i hvata pogrešku odmah u 3. koraku.

Uobičajene greške

  • Ispis velikih blokova u jednom zahtjevu. Rađa se rizičan kôd koji je teško razumjeti i otklanjati.
  • Traženje koda bez davanja ugovora. Ako je input-output-error dvosmislen, AI će pogoditi i pogriješiti.
  • Samo testiram sretan scenarij. Ako se ne isproba prazan, null, negativan i veliki unos, pogreška se prepušta proizvodnji.
  • Prihvaćanje bez razumijevanja. Šifra koju ne otkrivate je dug koji ne možete obraniti.
  • Ignoriranje osjetljivih vrsta kao što su nuspojave i novac/izlazak. Lebdeći novac s bezvremenom poviješću klasičan je izvor pogreške.

Ukratko

Pisanje koda s umjetnom inteligencijom je disciplinirano programiranje u paru: jasan ugovor, mali koraci, izgradnja i testiranje u svakom koraku. Davanje kvarteta input-output-error-constraint od početka određuje kvalitetu koda. Objašnjavanje koda koji proizvodi i forsiranje s rubnim slučajevima izvlači na površinu pogreške skrivene ispod sretnog scenarija. Izvor brzine nije slijepo prihvaćanje; je brzi nacrt plus brza provjera.

Zadatak aplikacije

Odaberite malu, ali stvarnu funkciju (npr. ukupan iznos košarice, datumska razlika, raščlanjivanje teksta). Ispis koristeći prompt ugovorene funkcije; Dodajte najmanje 5 testnih scenarija pokraj njega. Pokrenite kôd i svjesno isprobajte 5 rubnih slučajeva, koristeći tablicu kao vodič. Pronađite pogrešku u barem jednom rubnom slučaju (ako ne, dizajnirajte novi unos da biste nametnuli funkciju), popravite je pomoću umjetne inteligencije i potvrdite ponovnim testiranjem je li popravak uspio.

popis za provjeru

  • [ ] Napisao sam ugovor koji uključuje ulaz, izlaz, pogreške i ograničenja.
  • [ ] Generirao sam kod u malim koracima umjesto u jednom velikom bloku.
  • [ ] Dodao sam blok za testiranje/uzorak pored koda.
  • [ ] Svjesno sam testirao najmanje 5 rubnih slučajeva.
  • [ ] Objasnio sam kod AI-u i pregledao njegove pretpostavke.
  • [ ] Ispravio sam pronađenu pogrešku i potvrdio popravak ponovnim testiranjem.