Yksikkö 3 / 12

Koodaus ja pariohjelmointi tekoälyn kanssa

Voitot:

  • Kyky kirjoittaa toimintoja, luokkia ja moduuleja tekoälyyn selkeillä tulo-ulostulo- ja rajoitusmäärittelyillä
  • Mahdollisuus käyttää tekoälyä pariohjelmointikumppanina ja edetä askel askeleelta pienissä, todennettavissa osissa
  • Kyky havaita logiikka- ja reunatapausvirheet kääntämällä tekoälyn luoma koodi ja suorittamalla se pienillä esimerkeillä

Pariohjelmointi on, kun kaksi kehittäjää työskentelee saman ongelman parissa, toinen kirjoittaa ja toinen tarkistaa. Koodaus tekoälyllä on digitaalinen versio juuri tästä suhteesta: sinä asetat suunnan, rajoitukset ja hyväksymiskriteerit; AI tuottaa nopean vedon; Tarkistat jokaisen vaiheen kokoamalla ja testaamalla sitä. Suurin ansa tässä on kertoa tekoälylle "kirjoita minulle tämä sovellus alusta loppuun" ja hyväksyä sokeasti 200 rivin lohko. Hyvä pariohjelmointi etenee pienin askelin: jokaisen vaiheen tulee olla ymmärrettävä, testattava ja käännettävä.

Tässä osiossa opit tulostamaan toimintoja, luokkia ja moduuleja selkeällä syöttö-tulostussopimuksella; Kuinka ohjata tekoälyä askel askeleelta; ja katsotaan kuinka saada kiinni logiikka- ja reunatapausvirheet suorittamalla sen tuottama koodi pienillä esimerkeillä. Tavoitteena ei ole nopeus, vaan vahvistettu nopeus.

Käsitteet: Input-output sopimus: Selkeä määritelmä siitä, mitä syötettä funktio ottaa ja mitä lähtö- ja virhekäyttäytymistä se lupaa. Reunatapaus: Syöttö, joka ei ole tavallinen, mutta joka voi todella esiintyä (tyhjä, nolla, negatiivinen, erittäin suuri, nolla). Inkrementaalinen kehitys: Pienillä työstöpaloilla jatkaminen ja jokaisen vaiheen validointi.

Tulostuskoodi verkkosopimuksella

Laatukoodin perustana on määritellä tarkasti "mitä haluat" ennen työn aloittamista. Kun kirjoitat funktiota tekoälyyn, anna sille viisi asiaa: kieli ja versio, syöttötyypit ja merkitykset, lähtö, virheolosuhteet ja rajoitukset (suorituskyky, ulkoisen kirjaston esto, tyyli). Tämä estää tekoälyä arvaamasta.

  1. Kirjoita sopimus. Tulo, lähtö, virhe, rajoitus.
  2. Pyydä pieni yksikkö. Toiminto, jolla on yksi vastuu; Se ei ole valtava moduuli.
  3. Pyydä testilohkoa. Lisää muutama esimerkkiajo/testi koodin viereen.
  4. Kääntää ja ajaa. Kokeile reunakoteloilla, tarkista tulos silmällä.
  5. Siirry seuraavaan vaiheeseen. Kun pala on vahvistettu, rakenna sen päälle.

Sopimuksen mukainen funktiokehote: "Kirjoita funktio TypeScript 5:lle. Tarkoitus: laske ostoskorin tuotteiden kokonaismäärä. Syötä: { hinta: numero, määrä: numero }[] -taulukko. Tulostus: numero (yhteensä). Säännöt: heittää Virhe, jos määrä tai hinta on negatiivinen; palauttaa 0 tyhjälle taulukolle; pyöristää määrä 2 desimaaliin desimaalivirheille. Älä lisää negatiivista määrää, ulkoinen määrä, tyhjä kirjastovirhe. desimaalihinta, yksi tuote).

Tekoälyn ohjaaminen parina

Hyvä edistys pariohjelmoinnissa on pikemminkin dialogia kuin yksi iso pyyntö. Pyydä ensin luuranko ja suorita se; lisää sitten reunatila; korjaa sitten bugi. Tämä lähestymistapa pitää koodin ymmärrettävänä ja antaa sinulle hallinnan jokaisessa vaiheessa.

Edistymiskehote: "Kirjoitamme lukijan, joka lukee CSV-tiedoston ja muuntaa rivit objektiksi. Jatketaan VAIHE ASKELTA ja siirrytään seuraavaan vaiheeseen vahvistamatta jokaista vaihetta. Vaihe 1: kirjoita vain luuranko, joka jakaa tiedoston riveiksi ja erottaa otsikkorivin. Älä lisää tyyppimuunnoksia tai virheiden käsittelyä. Selitä vielä lyhyesti."

Selitä ja perustele koodikehote: "Selitä juuri kirjoittamasi funktio, ei rivi riviltä, ​​vaan päätös päätökseltä: minkä suunnittelupäätöksen teit ja miksi, mitä reunatapauksia käsittelit ja miten, mitkä tapaukset poistit tarkoituksella? Listaa koodiin 3 oletusta, joita minun ei pitäisi jättää huomiotta."

Vinkki: Älä hyväksy tekoälyn luomaa koodia ymmärtämättä sitä. "Selitä tämä minulle, mitä olettamuksia teit?" Kysymys paljastaa sekä piilotetut virheet että antaa sinun puolustaa tätä koodia, koska koodi on edelleen sinun vastuullasi. Koodin, jota et ymmärrä, laittaminen tuotantoon on kuin sopimuksen lähettäminen allekirjoittamatta sitä.

Heikko kehote / Vahva kehote

HEIKKO:"Kirjoita lajittelufunktio." (Tulos: mikä kieli, mitä lajitellaan, onko se vakaa, mikä on suorituskykyrajoitus, koodi, joka on epämääräinen ja ei todennäköisesti sovi vaatimuksiin.)STRONG:"Java 17:ssä, kirjoita menetelmä, joka lajittelee List<Työntekijä>-objektin ensin osaston mukaan (aakkosjärjestyksessä), sitten nolla. Anna palautetta uusi osastoluettelo, sitten palkkojen mukaan (laskeva lista). Selitä kommenttirivillä menetelmän monimutkaisuus, lisää päätestilohko, jossa on 4 näytettä.

Tehokas kehote; Sisältää lajittelukriteerin (kaksi tasoa), sivuvaikutussäännön (korvaa alkuperäisen), nollakäyttäytymisen ja testin odotuksen. Ilman näitä yksityiskohtia tekoäly tuottaa uskottavan mutta virheellisen ratkaisun; se voi esimerkiksi vioittaa alkuperäistä luetteloa ja tämä johtaa hiljaiseen virheeseen muualla.

Validointi reunakoteloilla ja pienillä näytteillä

Onnellisessa tilanteessa toimiva koodi ei ole oikea koodi. Pakota tietoisesti jokainen tuotettu toiminto:

Reunakotelon tyyppi

näytesyöttö

odotettua käyttäytymistä

tyhjä syöttö

Tyhjä matriisi/merkkijono

Ei virhe, looginen tyhjä tulos

Nolla/negatiivinen

0, -1

Määritelty ja oikea käytös

suuri arvo

Miljoonia levyjä

Ylivuoto/suorituskyvyn hallinta

tyhjä/määrittämätön

puuttuu tilaa

Hallittu virhe tai oletus

Kopio/epätavallinen

toistuva, käänteinen järjestys

oikea tulos

Mini Kotelot

Tapaus 1 — Äänetön pyöristysvirhe. AI kirjoittaa funktion, joka kerää rahaa desimaalityypeillä (float); 0,1 + 0,2 antaa 0,30000000000000004. Virhe ratkeaa, kun insinööri lisää säännön "Pyöristä 2 numeroon ja käytä kokonaisia ​​penniä". 3-rivinen sääntö estää tuhansien pennien vaihtelun kuukausittaisessa täsmäytyslaskussa.

Tapaus 2 – Sivuvaikutusloukku. Tekoäly kirjoittaa menetelmän, joka "lajitelee" luettelon, mutta muuttaa alkuperäistä luetteloa paikalleen. Odottamaton toiminta tapahtuu, koska toinen moduuli käyttää samaa luetteloa. Jos "muuta alkuperäistä" -rajoitus oli kehotteessa, virhettä ei koskaan tapahtuisi; jää kiinni koodin tarkistuksesta ja estää 2 tunnin virheenkorjauksen.

Tapaus 3 — Tulot askel askeleelta. Kehittäjä tulostaa 150 rivin tuontimoduulin kerralla; Kun hän löytää virheen, hän ei löydä, mistä se tuli. Toinen kehittäjä jakaa saman työn 5 pieneen vaiheeseen, testaa jokaisen vaiheen 2 minuutissa ja havaitsee virheen välittömästi kolmannessa vaiheessa.

Yleisiä virheitä

  • Suurten lohkojen tulostaminen yhdellä pyynnöstä. Syntyy riskialtista koodia, jota on vaikea ymmärtää ja korjata.
  • Koodin pyytäminen ilman sopimusta. Jos input-output-error on epäselvä, tekoäly arvaa ja on väärässä.
  • Testaillaan vain onnellista skenaariota. Jos tyhjää, tyhjää, negatiivista ja suurta syöttöä ei yritetä, virhe jätetään tuotantoon.
  • Hyväksyminen ilman ymmärrystä. Koodi, jota et paljasta, on velka, jota et voi puolustaa.
  • Jätä huomioimatta herkät tyypit, kuten sivuvaikutukset ja raha/päivämäärä. Float-raha ajattoman historian kanssa on klassinen virhelähde.

Yhteenvetona

Koodin kirjoittaminen tekoälyllä on kurinalaista pariohjelmointia: selkeä sopimus, pienet askeleet, rakentaminen ja testaus jokaisessa vaiheessa. Input-output-error-constraint -kvartetin antaminen alusta alkaen määrittää koodin laadun. Sen tuottaman koodin selittäminen ja pakottaminen reunatapauksilla tuo pintaan onnellisen skenaarion alle piilotetut virheet. Nopeuden lähde ei ole sokea hyväksyntä; on nopea luonnos ja nopea vahvistus.

Sovellustehtävä

Valitse pieni mutta todellinen funktio (esim. ostoskorin kokonaismäärä, päivämääräero, tekstin jäsentäminen). Tulosta käyttämällä sopimustoimintokehotetta; Lisää vähintään 5 testiskenaariota sen viereen. Suorita koodi ja kokeile 5 reunakoteloa tietoisesti käyttämällä taulukkoa oppaana. Etsi virhe ainakin yhdestä reunakotelosta (jos ei, suunnittele uusi tulo pakottaaksesi toiminnon), korjaa se tekoälyllä ja varmista testaamalla uudelleen, että korjaus toimi.

tarkistuslista

  • [ ] Kirjoitin sopimuksen, joka sisältää syötteen, tulosteen, virheet ja rajoitukset.
  • [ ] Tein koodin pienin askelin yhden suuren lohkon sijaan.
  • [ ] Lisäsin koodin viereen testi-/näyteajolohkon.
  • [ ] Olen tietoisesti testannut ainakin 5 reunatapausta.
  • [ ] Selitin koodin tekoälylle ja tarkistin sen oletukset.
  • [ ] Korjasin löydetyn virheen ja varmistin korjauksen uudelleentestauksella.