Vienība 3 / 12

Kodēšana un pāru programmēšana ar AI

Ieguvumi:

  • Spēja rakstīt funkcijas, klases un moduļus AI ar skaidrām ievades-izejas un ierobežojumu definīcijām
  • Spēja izmantot AI kā pāra programmēšanas partneri un soli pa solim progresēt mazos, pārbaudāmos gabalos
  • Iespēja uztvert loģikas un malu gadījuma kļūdas, apkopojot AI ģenerēto kodu un palaižot to ar maziem piemēriem

Pāra programmēšana ir tad, kad divi izstrādātāji strādā pie vienas un tās pašas problēmas, vienam rakstot, bet otram pārskatot. Kodēšana ar AI ir šo attiecību digitālā versija: jūs nosakāt virzienu, ierobežojumus un pieņemšanas kritērijus; AI rada ātru projektu; Jūs pārbaudāt katru darbību, to apkopojot un pārbaudot. Lielākais slazds šeit ir pateikt AI “uzrakstiet man šo pieteikumu no sākuma līdz beigām” un akli pieņemt 200 rindu bloku. Laba pāru programmēšana notiek mazos soļos: katram solim jābūt saprotamam, pārbaudāmam un atgriezeniskam.

Šajā nodaļā jūs uzzināsiet, kā drukāt funkcijas, klases un moduļus ar skaidru ievades-izvades līgumu; Kā soli pa solim vadīt AI; un mēs redzēsim, kā uztvert loģikas un malas reģistra kļūdas, palaižot kodu, ko tas rada ar maziem piemēriem. Mērķis nav ātrums, bet gan pārbaudīts ātrums.

Jēdzieni: Ievades-izejas līgums: skaidra definīcija tam, kādu ievadi funkcija izmanto un kādu izvadi un kļūdu darbību tā sola. Malas reģistrs: ievade, kas nav parasta, bet faktiski var notikt (tukšs, nulle, negatīvs, ļoti liels, nulle). Pakāpeniska attīstība: turpiniet ar mazām, darba daļām un apstipriniet katru soli.

Koda drukāšana ar tīkla līgumu

Kvalitātes koda pamatā ir pirms darba uzsākšanas precīzi definēt "ko vēlaties". Rakstot funkciju AI, piešķiriet tai piecas lietas: valoda un versija, ievades veidi un nozīmes, izvade, kļūdu apstākļi un ierobežojumi (veiktspēja, ārējās bibliotēkas aizliegums, stils). Tas neļauj AI uzminēt.

  1. Uzrakstiet līgumu. Ievade, izvade, kļūda, ierobežojums.
  2. Pieprasiet nelielu vienību. Funkcija ar vienu atbildību; Tas nav liels modulis.
  3. Pieprasiet testa bloku. Blakus kodam pievienojiet dažus palaišanas/testu paraugus.
  4. Apkopojiet un palaidiet. Izmēģiniet to ar malām, pārbaudiet rezultātu ar aci.
  5. Pārejiet uz nākamo darbību. Kad gabals ir apstiprināts, izveidojiet to.

Līguma funkcijas uzvedne: "Rakstīt funkciju TypeScript 5. Mērķis: aprēķināt kopējo preču daudzumu iepirkumu grozā. Ievade: { cena: skaits, daudzums: skaitlis }[] masīvs. Izvade: numurs (kopā). Noteikumi: mest Kļūda, ja daudzums vai cena ir negatīva; atgriež 0 tukšam masīvam; noapaļo summu līdz 2 zīmēm aiz komata, ja ir kļūda aiz komata. Pievienot negatīvu, 5, ārējās bibliotēkas kļūda decimālcena, viena vienība).

AI kā pāra vadīšana

Labs progress pāru programmēšanā ir dialogs, nevis viens liels pieprasījums. Vispirms pieprasiet skeletu un palaidiet to; pēc tam pievienojiet malas stāvokli; tad labojiet kļūdu. Šī pieeja nodrošina kodu saprotamu un ļauj jums kontrolēt katru soli.

Pakāpeniska progresa uzvedne: "Mēs uzrakstīsim lasītāju, kas nolasa CSV failu un pārvērš rindas par objektu. Dosimies SOLI PA SOLI, pārejot pie nākamās darbības, man neapstiprinot katru darbību. 1. darbība: vienkārši uzrakstiet skeletu, kas sadala failu rindās un atdala galvenes rindu. Nepievienojiet veida konvertēšanu vai kļūdu apstrādi. Pagaidām paskaidrojiet to īsi."

Izskaidrojiet un pamatojiet koda uzvedni: "Izskaidrojiet funkciju, kuru tikko uzrakstījāt, nevis rindiņu pa rindiņai, bet lēmumu pēc lēmuma: kādu dizaina lēmumu pieņēmāt un kāpēc, kuru malas gadījumu jūs apstrādājāt un kā, kurus gadījumus apzināti izslēdzāt? Uzskaitiet kodā 3 pieņēmumus, kurus man nevajadzētu palaist garām."

Padoms. Nepieņemiet AI ģenerēto kodu, to nesaprotot. "Paskaidrojiet man, kādus pieņēmumus jūs izdarījāt?" Jautājums gan atklāj slēptās kļūdas, gan ļauj aizsargāt šo kodu, jo kods joprojām ir jūsu atbildība. Nesaprotama koda ievietošana ražošanā ir kā līguma izsūtīšana, to neparakstot.

Vāja uzvedne / spēcīga uzvedne

VĀJS:"Uzrakstiet kārtošanas funkciju." (Rezultāts: kura valoda, kas tiek kārtots, vai tā ir stabila, kāds ir veiktspējas ierobežojums, kods, kas ir neskaidrs un, iespējams, neatbilst prasībām.)STRONG:"Java 17, uzrakstiet metodi, kas sakārto objektu Saraksts<Darbinieks> vispirms pēc nodaļas (alfabētiskā secībā), pēc tam Ļaujiet nullACE atgriezt sākotnējo sarakstu. Komentāru rindā paskaidrojiet metodes sarežģītību, pievienojiet galveno testa bloku ar 4 paraugiem.

Spēcīga uzvedne; Ietver šķirošanas kritēriju (divu līmeņu), blakusparādību kārtulu (aizstāj oriģinālu), nulles uzvedību un testa paredzamo. Bez šīm detaļām AI rada ticamu, bet nepareizu risinājumu; piemēram, tas var sabojāt sākotnējo sarakstu, un tas novedīs pie klusas kļūdas citur.

Validācija ar malu korpusiem un maziem paraugiem

Kods, kas darbojas laimīgā scenārijā, nav pareizais kods. Apzināti piespiediet katru izveidoto funkciju:

Malu korpusa tips

parauga ievade

sagaidāmā uzvedība

tukša ievade

Tukšs masīvs/virkne

Nav kļūda, loģiski tukšs rezultāts

Nulle/negatīvs

0, -1

Noteikta un pareiza uzvedība

liela vērtība

Miljoniem ierakstu

Pārplūdes/veiktspējas kontrole

null/nenodefinēts

trūkst vietas

Kontrolēta kļūda vai noklusējuma kļūda

Dublikāts/neparasts

atkārtojas, apgrieztā secībā

pareizs rezultāts

Mini futrāļi

1. gadījums — klusās noapaļošanas kļūda. AI raksta funkciju, kas iekasē naudu ar decimāldaļām (peldošajiem) veidiem; 0,1 + 0,2 dod 0,30000000000000004. Kļūda tiek novērsta, kad inženieris pievieno noteikumu "Noapaļo līdz 2 cipariem un izmantojiet veselus santīmus". 3 rindu noteikums novērš tūkstošiem santīmu dispersiju ikmēneša saskaņošanā.

2. gadījums — blakusparādību slazds. AI raksta metodi, kas “šķiro” sarakstu, bet maina sākotnējo sarakstu vietā. Notiek neparedzēta darbība, jo cits modulis izmanto to pašu sarakstu. Ja uzvednē bija ierobežojums "mainīt sākotnējo", kļūda nekad nenotiktu; tiek pieķerts koda pārskatīšanai un novērš 2 stundu atkļūdošanu.

3. gadījums — ieņēmumi soli pa solim. Izstrādātājs uzreiz izdrukā 150 rindu importēšanas moduli; Kad viņš atrod kļūdu, viņš nevar atrast, no kurienes tā nākusi. Cits izstrādātājs to pašu darbu sadala 5 mazos soļos, katru soli pārbauda 2 minūtēs un 3. solī uzreiz uztver kļūdu.

Biežas kļūdas

  • Lielu bloku drukāšana ar vienu pieprasījumu. Radās riskants kods, kuru ir grūti saprast un atkļūdot.
  • Prasa kodu, nedodot līgumu. Ja ievades-izvades kļūda ir neskaidra, AI uzminēs un kļūdīsies.
  • Vienkārši pārbaudu laimīgo scenāriju. Ja netiek izmēģināta tukša, nulles, negatīva un liela ievade, kļūda tiek atstāta ražošanas ziņā.
  • Pieņem bez saprašanas. Kods, kuru jūs neatklājat, ir parāds, kuru nevarat aizstāvēt.
  • Sensitīvu veidu ignorēšana, piemēram, blakusparādības un nauda/datums. Pārdota nauda ar mūžīgu vēsturi ir klasisks kļūdu avots.

Rezumējot

Koda rakstīšana ar AI ir disciplinēta pāru programmēšana: skaidrs līgums, mazi soļi, izveidojiet un pārbaudiet katrā solī. Ievades-izejas-kļūdu-ierobežojuma kvarteta piešķiršana jau no paša sākuma nosaka koda kvalitāti. Izskaidrojot tā radīto kodu un piespiežot to ar malas gadījumiem, tiek atklātas kļūdas, kas paslēptas zem laimīgā scenārija. Ātruma avots nav akla pieņemšana; ir ātrs melnraksts un ātra pārbaude.

Lietojumprogrammas uzdevums

Izvēlieties nelielu, bet reālu funkciju (piemēram, grozu kopsumma, datuma starpība, teksta parsēšana). Drukāt, izmantojot līguma funkciju uzvedni; Blakus tam pievienojiet vismaz 5 testa scenārijus. Palaidiet kodu un apzināti izmēģiniet 5 malas gadījumus, izmantojot tabulu kā ceļvedi. Atrodiet kļūdu vismaz vienā malas korpusā (ja tā nav, izveidojiet jaunu ievadi, lai piespiestu funkciju), izlabojiet to, izmantojot AI, un pārbaudiet, atkārtoti pārbaudot, vai labojums darbojās.

kontrolsaraksts

  • [ ] Es uzrakstīju līgumu, kas ietver ievadi, izvadi, kļūdas un ierobežojumus.
  • [ ] Es ģenerēju kodu ar maziem soļiem, nevis vienu lielu bloku.
  • [ ] Blakus kodam pievienoju testa/izlases palaišanas bloku.
  • [ ] Esmu apzināti pārbaudījis vismaz 5 malas gadījumus.
  • [ ] Es izskaidroju kodu AI un pārskatīju tā pieņēmumus.
  • [ ] Es izlaboju atrasto kļūdu un apstiprināju labojumu, veicot atkārtotu testēšanu.