Dobici:
- Sposobnost razlikovanja gdje AI pruža stvarnu brzinu u životnom ciklusu razvoja softvera i gdje odluka i odgovornost ostaju na inženjeru
- Sposobnost primjene troslojne inženjerske discipline koja provjerava svaki kod i dizajn proizveden kompilacijom, testiranjem i pregledom.
- Steknite naviku čišćenja konteksta kako biste iskoristili AI bez dijeljenja povjerljivog izvornog koda, vjerodajnica i podataka o korisnicima
Kada pogledate dan računarskog inženjera, slika je slična u većini timova: razumijevanje poslovnog zahtjeva, dizajniranje, pisanje koda, čitanje tuđeg koda, otklanjanje grešaka (proces otkrivanja zašto program radi pogrešno i popravljanje), pisanje testova, priprema dokumentacije, pregledavanje koda i prisustvovanje sastancima. Drugim riječima, vrijeme posvećeno stvarnom "inženjerskom prosuđivanju", odnosno da li je rješenje ispravno, bezbedno i održivo, skrše se pod ponavljajućim radom. Ovdje dolazi u obzir umjetna inteligencija (skraćeno AI; softver koji radi na tekstu i kodu s velikim jezičkim modelom). AI ne donosi odluku umjesto vas; On vas priprema za odluku, proizvodi kostur koda, sužava grešku i stavlja rađeni nacrt pred vas. Kroz ovaj modul pozicioniraćemo AI ne kao „automatskog programera“, već kao disciplinovanog partnera za programiranje u paru čiji se izlaz svaki put kompajlira, testira i pregleda.
U ovoj prvoj jedinici pojašnjavamo tri stvari: U kojim fazama životnog ciklusa razvoja softvera (faze kroz koje softver prolazi od ideje do proizvodnje: analiza, dizajn, kodiranje, testiranje, implementacija, održavanje) AI dodaje stvarnu vrijednost; koje odluke treba striktno ostati na inženjeru; i koja je disciplina verifikacije i povjerljivosti kojih se morate pridržavati kada to radite. Bez pravilnog postavljanja ovog krova, tehnike na narednim jedinicama mogu postati opasne; Jer greška u softveru istovremeno dopire do miliona korisnika i može se pretvoriti u sigurnosni propust.
Koncepti: Halucinacija: AI uvjerljiva izmišljotina metode, biblioteke, API-ja ili ponašanja koje zapravo ne postoji. Kontekst: Unos koji dajete AI (kod, poruka o grešci, zahtjev, ograničenja). Provjera: Provjera izlaza na nezavisan način (kompilacija, testiranje, dokumentacija). Ova tri koncepta su okosnica cijelog modula.
U kojim preduzećima je AI akcelerator, u kojim je rizičan?
Softverski poslovi spadaju u dvosmjerni spektar u smislu ishoda. Na jednom kraju su reverzibilni, niskorizični pripremni radovi; S druge strane, postoje zadaci koji se teško vraćaju koji ulaze u proizvodno okruženje i mogu uzrokovati gubitak podataka, sigurnosne propuste ili prekide. Vrijednost AI varira ovisno o tome gdje se nalazite u ovom spektru.
poslovni tip
AI doprinos
Inženjerska uloga
Šifra skelet / boilerplate
Brzo stvaranje repetitivnih struktura
Logika i kontrola statusa ruba
otklanjanje grešaka
Hipoteza i lista mogućih uzroka
Reprodukcija i potvrda korijenskog uzroka
pisanje testova
Test nacrt i kreiranje scenarija
Smislena tvrdnja i provjera opsega
refaktoring
Prijedlog refaktoriranja
Održavanje ponašanja kroz testiranje
Dokumentacija
Prvi nacrt i struktura
Provjera ispravnosti koda
Arhitektonska/sigurnosna odluka
Lista opcija i prednosti i mane
Konačna odluka i odgovornost
Pravilo je jednostavno: rizik od AI izlaza jednak je šteti koju će pretrpjeti ako taj izlaz napravi grešku. Pogrešno predlaganje imena varijable je bezopasno; Nepravilna autentifikacija (provjera da li je korisnik zaista onaj za koga se predstavlja) čini cijeli sistem ranjivim. Dakle, prvo pitanje koje treba postaviti prije korištenja izlaza je: "Šta se događa ako je ovo pogrešno i ko to primijeti i kada?"
Oprez: AI proizvodi tečan i siguran kod. Tečnost nije garancija tačnosti. Jezički model može vjerodostojno proizvesti ime funkcije koje zapravo ne postoji, netačan niz parametara ili čak nesigurni obrazac. U softveru to ne ostaje na papiru; On se kompajlira, pokreće i eksplodira u proizvodnji.
Odluke koje treba prepustiti inženjeru
Neke odluke nikada ne bi trebale biti potpuno automatizovane; nosi tehničke, pravne i etičke rizike:
- Odobrenje za proizvodnju: Puštanje koda u proizvodnju i odgovornost za to.
- Sigurnost i arhitektura: skupe odluke kao što su autentifikacija, autorizacija, šifriranje i model podataka.
- Licenca i autorska prava: Upotrebljivost proizvedenog koda u komercijalnom proizvodu i usklađenost licence.
- Rad s povjerljivim podacima: Transakcije s podacima o klijentima, tajnama izvornog koda i informacijama o identitetu.
Upozorenje: Čak i ako AI kaže "ovaj kod je siguran i spreman za proizvodnju", prihvaćanje ovoga bez sigurnosnog testiranja, pregleda koda i validacije pod stvarnim opterećenjem je neprihvatljivo. U radu koji je kritičan za sigurnost, AI izlaz nikada nije zamjena za odobrenje od nadležnog inženjera; Svaki izlaz koji vodi do odluke mora biti nezavisno verifikovan i odobren od strane ovlašćenog inženjera pre implementacije.
Disciplina verifikacije: Troslojna kontrola
Primijenite tri sloja kontrole da biste koristili AI izlaz kao stariji recenzent, a ne naslijepo. Ovo je osnovni refleks koji ćemo ponavljati kroz modul.
- Kompilacija i statička provjera: Da li kod zapravo kompajlira/pokreće? Postoje li greške u tipu, nekorištene varijable, nepostojeći API-ji? Šta kaže alat za statičku analizu (alatka koja ispituje kod bez pokretanja)?
- Nezavisna reprodukcija (testiranje): Pokrenite kod sa malim, poznatim ulazima i pogledajte da li ćete dobiti očekivani izlaz. Pokušajte s rubnim slučajevima (nula, nula, negativna, velika).
- Provjera izvora: Svaki API, verzija biblioteke i jezička funkcija koje AI koristi treba provjeriti iz službene dokumentacije.
Prompt za verifikaciju (olakšava provjeru izlaza): "Navedite SVE eksterne biblioteke, metode i jezičke karakteristike koje koristite u svom kodu. Za svaku od njih navedite u kojoj je verziji dostupna i označite je 'mora biti provjereno iz dokumentacije'. Nemojte izmišljati API-je za koje niste sigurni; ako niste sigurni, jasno napišite 'nisam siguran', jasno napišite 'nisam siguran' kao posebno navedite slučajeve adrese."
Kritizirajte svoj vlastiti kodni prompt: "Pogledajte kritički kod koji ste upravo napisali, poput starijeg inženjera koji vas je unajmio. Navedite konkretne stavke pod ova tri naslova: (1) logičke/granične greške, (2) sigurnosni rizici, (3) problemi s performansama ili čitljivošću. Za svaku stavku napišite 'zašto je problem' i 'predloženi problem ne mogu riješiti', recite da nema problema'; da ga ulepšam."
Slaba prompt / jaka prompt
SLABO:"Napišite mi funkciju provjere autentičnosti korisnika."(Rezultat: nejasno koji jezik, koje pravilo, koje ponašanje greške; generički kod, često nesiguran ili van konteksta.)STRONG:"Napišite funkciju za provjeru valjanosti e-pošte za Python 3.11. Ulaz: string. Izlaz: Tačno ako je važeće, False u suprotnom. Pravila: nema potrebe za osnovnim nizom NOT False je dovoljan. Biblioteka od 5 uzoraka ispod bloka dodavanja funkcije: valjano, prazno, bez '@', dvostruko '@', koji sadrži samo razmake."
Razlika je u kontekstu. Snažan prompt; Uključuje jezik, verziju, ulazno-izlazni ugovor, ograničenja i test očekivanja. Ova jedinstvena disciplina uvelike smanjuje rizik od halucinacija i nesigurnog koda.
Mini Cases
Slučaj 1 — Izmišljena metoda. Programer čuje od AI da postoji metoda koja se zove date.addBusinessDays(5) u biblioteci datuma i to je objašnjeno na pouzdan način. Gledajući dokumentaciju vidi da ne postoji takva metoda, ispravan način je ručna petlja. Halucinacija se snima prije nego što krene u proizvodnju s 10-minutnom provjerom.
Slučaj 2 — Gubitak rubnog stanja. AI proizvodi funkciju "izračunaj prosjek"; Radi kada se testira sa 1000 redova podataka. Međutim, kada je lista prazna, daje grešku dijeljenja nulom. Pošto je inženjer dodao prazan ulazni test, on vidi i ispravlja grešku prije nego što se objavi. Test stanja jedne ivice sprječava proizvodni alarm u 3 ujutro.
Slučaj 3 — Rizik privatnosti. Stručnjak će zalijepiti datoteku sa stvarnim nizom veze sa bazom podataka i API ključem u javni alat. Prisjeća se politike institucije; Tajne zamjenjuje sa <REDACTED>, svodi kod na reprezentativan primjer i traži ga. Tako dobija pomoć za 5 minuta, ali podaci o njegovom identitetu ne izlaze.
Princip rada sa tajnim kodom i informacijama o identitetu
Najosjetljiviji dio softvera; tajne izvornog koda, informacije o identitetu (API ključ, lozinka, token) i klijentski/lični podaci. Osnovni princip: očistite prije dijeljenja, pitajte samo suštinu problema s reprezentativnim primjerom ako je moguće.
Anonimizirani obrazac prompta: "Postoji greška u sljedećoj funkciji. Zamijenio sam stvarnu poslovnu logiku i skrivene konstante reprezentativnim vrijednostima (API ključ, nazivi tablica, imena polja generički). Problem: Dobijem grešku Y u unosu X. Samo pronađite logičku grešku u ovom reprezentativnom kodu i objasnite ispravljenu verziju. [reprezentativni kod]"
Savjet: Ako ste u nedoumici, uradite ovaj test: "Da li bi moja organizacija upala u nevolje ako bih ovo javno napisao na forumu?" Čak i ako je odgovor nejasan, prvo ga očistite. Resetiranje je uvijek jeftinije od kasnijeg traženja curenja.
Uobičajene greške
- Korištenje izlaza bez kompajliranja/testiranja. “AI je napisao” nije opravdanje; Svaki dio koda se provjerava njegovim pokretanjem.
- Iznošenje zahtjeva bez konteksta. Ako jezik, verzija, ulaz-izlaz i ograničenja nisu dati, kod postaje generički i često nesiguran.
- Dijeljenje povjerljivih informacija bez razmišljanja. API ključ, lozinka i podaci o klijentima ne bi trebali biti objavljeni bez brisanja.
- Brkanje preciznog jezika sa tačnošću. Što AI više samopouzdanja govori, to treba da budete oprezniji; Samouvjereni ton nije dokaz.
- Delegiranje odluke na AI. Odluka o stavljanju u proizvodnju, sigurnost i arhitekturu ostaje na inženjeru; AI proizvodi samo materijale.
Ukratko
AI ubrzava ponavljajuće i dugotrajne dijelove softverskog rada: skeletni kod, izradu testova, sužavanje grešaka, dokumentaciju. Međutim, odluka i odgovornost ostaju na inženjeru. Svaki izlaz mora proći tri sloja kontrole (prevođenje/statički, testiranje, izvor). Pisanje upita s kontekstom i brisanje skrivenih informacija dvije su ključne navike koje ćemo ponoviti u svakoj jedinici ovog modula. Kada koristite AI sa disciplinom, dobijate brzinu; kada ga koristite bez discipline, unosite greške i ranjivosti u proizvodnju.
Zadatak aplikacije
Odaberite mali zadatak kodiranja iz vlastitog rada ili iz zamišljenog projekta (npr. funkcija provjere valjanosti). Prvo napišite slab prompt i dobijte izlaz. Zatim primijenite moćni obrazac prompta iz ove jedinice: dodajte jezik/verziju, ulazno-izlazni ugovor, ograničenja i očekivanje testa. Stavite dva ispisa jedan pored drugog i napišite razliku. Zatim kompajlirajte robusni izlaz i testirajte ga s najmanje tri rubna slučaja (null, nula/negativan, neočekivani format) i zabilježite šta ćete pronaći u kom testu.
kontrolna lista
- [ ] Dodao sam jezik, verziju i input-output ugovor u prompt.
- [ ] Napisao sam "Ne izmišljaj, reci mi ako nisi siguran" i ograničenje opsega.
- [ ] Preveo sam/pokrenuo kod, provjerio ima li statičkih upozorenja.
- [ ] Testirao sam sa najmanje tri rubna kućišta.
- [ ] Provjerio sam korištene API-je iz službene dokumentacije.
- [ ] Obrisao sam svaki tajni kod/akreditive ili korišteni poslovni alat.
- [ ] Potvrdio sam da odluka o puštanju u proizvodnju i sigurnost ostaje na čovjeku.