Kasu:
- Võimalus kirjutada tehisintellekti funktsioone, klasse ja mooduleid selgete sisend-väljundi ja piirangute määratlustega
- Võimalus kasutada AI-d paarisprogrammeerimispartnerina ja edeneda samm-sammult, väikeste, kontrollitavate tükkidena
- Võimalus tabada loogika- ja suurjuhtude vigu, kompileerides tehisintellekti loodud koodi ja käivitades selle väikeste näidetega
Paarisprogrammeerimine on see, kui kaks arendajat töötavad sama probleemi kallal, üks kirjutab ja teine muudab. AI-ga kodeerimine on just selle suhte digitaalne versioon: teie määrate suuna, piirangud ja aktsepteerimiskriteeriumid; AI toodab kiiret mustandit; Kontrollite iga sammu selle kompileerimise ja testimise teel. Suurim lõks siin on öelda AI-le "kirjutage mulle see rakendus algusest lõpuni" ja nõustuda pimesi 200-realise plokiga. Hea paarisprogrammeerimine toimub väikeste sammudena: iga samm peaks olema arusaadav, testitav ja pööratav.
Selles üksuses saate teada, kuidas printida funktsioone, klasse ja mooduleid selge sisend-väljundlepinguga; Kuidas AI samm-sammult juhendada; ja me näeme, kuidas tabada loogika- ja suurtähtede vigu, käivitades selle loodud koodi väikeste näidetega. Eesmärk pole kiirus, vaid kontrollitud kiirus.
Mõisted: Sisend-väljund leping: selge määratlus selle kohta, millise sisendi funktsioon võtab ning millist väljundit ja veakäitumist see lubab. Ääretäht: sisend, mis ei ole tavaline, kuid võib tegelikult esineda (tühi, null, negatiivne, väga suur, null). Järkjärguline arendamine: jätkake väikeste töötavate tükkidega ja kontrollige iga sammu.
Koodi printimine võrgulepinguga
Kvaliteedikoodi aluseks on enne tööle asumist täpselt määratleda "mida sa tahad". Funktsiooni kirjutamisel tehisintellektile andke sellele viis asja: keel ja versioon, sisendi tüübid ja tähendused, väljund, veatingimused ja piirangud (jõudlus, välise teegi keeld, stiil). See takistab tehisintellektil arvamast.
- Kirjutage leping. Sisend, väljund, viga, piirang.
- Küsi väikest üksust. Ühe vastutusega funktsioon; See ei ole suur moodul.
- Taotlege testplokki. Lisage koodi kõrvale mõned käitamise/testi näidised.
- Kompileerige ja käivitage. Proovige seda servakorpustega, kontrollige väljundit silma järgi.
- Minge järgmise sammu juurde. Kui tükk on kinnitatud, ehitage sellele edasi.
Lepingulise funktsiooni viip: "Kirjutage funktsioon TypeScript 5 jaoks. Eesmärk: arvutage ostukorvis olevate kaupade koguhulk. Sisend: { hind: arv, kogus: arv }[] massiiv. Väljund: arv (kokku). Reeglid: viska Viga, kui kogus või hind on negatiivne; tagasta 0 tühja massiivi korral; ümardage summa kahe kümnendkohani kümnendkoha vea korral. Lisage funktsioon (normaalne kogus, tühi teegi viga. Ärge kasutage kümnendkoha hind, üks toode).
AI juhendamine paarina
Hea edu paarisprogrammeerimisel on pigem dialoog kui üks suur taotlus. Esiteks taotlege skelett ja käivitage see; seejärel lisa serva olek; siis parandage viga. Selline lähenemine hoiab koodi arusaadavana ja annab teile kontrolli igal sammul.
Järkjärguline edenemise viip: "Kirjutame lugeja, mis loeb CSV-faili ja teisendab read objektiks. Jätkame SAMM-HAALT, liikudes järgmise sammu juurde, ilma et ma iga sammu kinnitaksin. 1. samm: lihtsalt kirjutage skelett, mis jagab faili ridadeks ja eraldab päiserea. Ärge lisage tüübiteisendust ega veakäsitlust veel. Hoidke see lühike, selgitage veel."
Selgitage ja põhjendage koodiviipa: "Selgitage äsja kirjutatud funktsiooni mitte rea haaval, vaid otsuste kaupa: millise kujundusotsuse tegite ja miks, millist servajuhtumit käsitlesite ja kuidas, milliseid juhtumeid teadlikult välistasite? Loetlege koodis 3 eeldust, millest ma ei tohiks mööda vaadata."
Näpunäide. Ärge nõustuge tehisintellekti loodud koodiga ilma sellest aru saamata. "Selgitage seda mulle, milliseid oletusi te tegite?" Küsimus paljastab nii peidetud vead kui ka võimaldab teil seda koodi kaitsta, kuna kood jääb teie vastutusele. Koodi, millest te aru ei saa, tootmisse panemine on nagu lepingu väljasaatmine ilma seda allkirjastamata.
Nõrk viip / Tugev viip
NÕRK:"Kirjutage sortimisfunktsioon." (Tulemus: milline keel, mida sorteeritakse, kas see on stabiilne, milline on jõudluspiirang, kood, mis on ebamäärane ja tõenäoliselt ei vasta nõuetele.)STRONG:"Java 17 puhul kirjutage meetod, mis sorteerib objekti Loend<Töötaja> esmalt osakonna järgi (tähestikuline), seejärel nullACE. Laske nullACE tagastada uus osakonna loend. Selgitage kommentaarireal meetodi keerukust, lisage 4 näidisega põhikatse.
Võimas viip; Sisaldab sortimiskriteeriumi (kahetasemeline), kõrvalmõju reeglit (asendab originaali), nullkäitumist ja testi ootust. Ilma nende detailideta loob tehisintellekt usutava, kuid vale lahenduse; näiteks võib see rikkuda algse loendi ja see põhjustab mujal vaikse vea.
Valideerimine Edge Case ja väikeste proovidega
Õnneliku stsenaariumi korral toimiv kood ei ole õige kood. Sundige teadlikult iga loodud funktsiooni:
Edge korpuse tüüp
näidissisend
eeldatav käitumine
tühi sisend
Tühi massiiv/string
Pole viga, loogiline tühi tulemus
Null/negatiivne
0, -1
Määratletud ja korrektne käitumine
suur väärtus
Miljonid rekordid
Ülevoolu/jõudluse juhtimine
null/määratlemata
ruumi puudu
Kontrollitud viga või vaikimisi
Duplikaat/ebatavaline
korduv, vastupidine järjekord
õige tulemus
Mini korpused
Juhtum 1 – vaikne ümardamise viga. AI kirjutab funktsiooni, mis kogub raha kümnendsüsteemi (ujuk) tüüpidega; 0,1 + 0,2 annab 0,30000000000000004. Viga laheneb, kui insener lisab reegli "Ümarda 2-kohaliseks ja kasuta terveid sente". 3-realine reegel hoiab ära tuhandete sentide dispersiooni igakuises leppimises.
Juhtum 2 – kõrvalmõjude lõks. AI kirjutab meetodi, mis "sorteerib" loendi, kuid muudab algset loendit paigas. Ootamatu käitumine ilmneb, kuna teine moodul kasutab sama loendit. Kui viipas oli piirang "muuda algset", ei esineks viga kunagi; satub koodi ülevaatusse ja hoiab ära 2-tunnise silumise.
Juhtum 3 – tulud samm-sammult. Arendaja prindib korraga 150-realise impordimooduli; Kui ta leiab vea, ei leia ta, kust see tuli. Teine arendaja jagab sama töö 5 väikeseks sammuks, testib iga sammu 2 minutiga ja tabab vea kohe 3. sammus.
Levinud vead
- Suurte plokkide printimine ühe tellimusega. Sünnib riskantne kood, mida on raske mõista ja siluda.
- Koodi küsimine ilma lepingut andmata. Kui sisend-väljund-viga on mitmetähenduslik, arvab AI ära ja eksib.
- Lihtsalt katsetame õnnelikku stsenaariumi. Kui tühja, null-, negatiivset ja suurt sisendit ei proovita, jäetakse viga tootmiseks.
- Mõistmata aktsepteerimine. Kood, mida te ei avalda, on võlg, mida te ei saa kaitsta.
- Ignoreerige tundlikke tüüpe, nagu kõrvaltoimed ja raha/kuupäev. Ajatu ajalooga ujuvraha on klassikaline veaallikas.
Kokkuvõttes
Koodi kirjutamine AI-ga on distsiplineeritud paarisprogrammeerimine: selge leping, väikesed sammud, ehitamine ja testimine igal sammul. Sisend-väljund-vea-piirangu kvarteti algusest peale andmine määrab koodi kvaliteedi. Selle toodetava koodi selgitamine ja servajuhtumitega pealesurumine toob pinnale õnneliku stsenaariumi all peidetud vead. Kiiruse allikas ei ole pime aktsepteerimine; on kiire mustand pluss kiire kinnitus.
Rakenduse ülesanne
Valige väike, kuid tõeline funktsioon (nt ostukorvi kogusumma, kuupäevade erinevus, teksti sõelumine). Printige lepingulise funktsiooni viipa abil; Lisage selle kõrvale vähemalt 5 teststsenaariumit. Käivitage kood ja proovige teadlikult 5 servajuhtumit, kasutades tabelit juhisena. Otsige üles viga vähemalt ühes servajuhtumis (kui mitte, kujundage funktsiooni sundimiseks uus sisend), parandage see AI-ga ja kontrollige uuesti, kas parandus töötas.
kontrollnimekiri
- [ ] Kirjutasin lepingu, mis sisaldab sisendit, väljundit, vigu ja piiranguid.
- [ ] Koodi genereerisin ühe suure ploki asemel väikeste sammudega.
- [ ] Lisasin koodi kõrvale test-/näidiskäivitusploki.
- [ ] Olen teadlikult testinud vähemalt 5 servajuhtumit.
- [ ] Selgitasin AI-le koodi ja vaatasin üle selle eeldused.
- [ ] Parandasin leitud vea ja kinnitasin paranduse uuesti testides.