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.
- Napišite ugovor. Ulaz, izlaz, greška, ograničenje.
- Zatražite malu jedinicu. Funkcija s jednom odgovornošću; To nije veliki modul.
- Zatražite testni blok. Dodajte nekoliko uzoraka pokretanja/testiranja pored koda.
- Prevedi i pokreni. Pokušajte s rubnim kućištima, provjerite izlaz očima.
- 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.