programinės įrangos inžinerijaDI kodavimasinformatikamokymasis programuoti
Kodo generavimas ir kodo supratimas
Dirbtinio intelekto eroje atotrūkis tarp funkcionalaus scenarijaus sugeneravimo ir tikro jo logikos supratimo gerokai išaugo. Nors kodo generavimas suteikia greitą produktyvumą ir išsprendžia „tuščio puslapio“ problemą, kodo supratimas yra gyvybiškai svarbus kognityvinis įgūdis, reikalingas norint derinti, apsaugoti ir pritaikyti sudėtingas sistemas, kurias automatizuoti įrankiai gali neteisingai interpretuoti.
Akcentai
Kodo generavimas išsprendžia klausimą „kaip“ rašyti, o kodo supratimas – „kodėl“ jį reikėtų rašyti.
„Krovinių kulto programavimo“ reiškinys stiprėja, nes vis daugiau kūrėjų kopijuoja ir įklijuoja dirbtinio intelekto išvestis be patvirtinimo.
Supratimas leidžia optimizuoti „Big O“ sudėtingumą, ko dirbtinis intelektas dažnai nepastebi, pirmenybę teikdamas paprastam skaitomumui.
Generatyviniai įrankiai puikiai tinka sintaksės mokymuisi, tačiau iš tikrųjų gali trukdyti lavinti gilius problemų sprendimo įgūdžius.
Kas yra Kodo generavimas?
Vykdomojo šaltinio kodo kūrimo procesas naudojant automatinius įrankius, šablonus arba didelius kalbos modelius, pagrįstus aukšto lygio raginimais.
Pasikliauja šablonų atitikimu milijarduose esamų atvirojo kodo duomenų eilučių.
Gali sukurti standartinį kodą 10–50 kartų greičiau nei žmogus, spausdinantis kompiuteriu.
Dažnai pateikiamos „haliucinacijos“ arba nebenaudojama bibliotekos sintaksė, kuri atrodo įtikinama, bet neveikia.
Veikia neturėdamas įgimto konkrečios verslo logikos ar saugumo konteksto supratimo.
Veikia kaip galingas „pagalbinis pilotas“, mažinantis sintaksės įsiminimo kognityvinę naštą.
Kas yra Kodo supratimas?
Programuotojo kuriamas mentalinis modelis, skirtas loginiam srautui atsekti, būsenai valdyti ir numatyti, kaip skirtingi sistemos komponentai sąveikauja.
Apima „mentalinę simuliaciją“, kai kūrėjas vykdo kodą savo galvoje, kad rastų kraštutinius atvejus.
Leidžia identifikuoti architektūrinius trūkumus, kurie techniškai nėra „sintaksės klaidos“.
Būtinas refaktoringam kūrimui, nes negalima saugiai keisti to, ko nesuprantate.
Reikalingos duomenų struktūrų, atminties valdymo ir laiko sudėtingumo žinios ($O(n)$).
Sudaro techninio skolų valdymo ir ilgalaikio programinės įrangos priežiūros pagrindą.
Palyginimo lentelė
Funkcija
Kodo generavimas
Kodo supratimas
Pirminė išvestis
Tiesioginė darbinė sintaksė
Ilgalaikis sistemos patikimumas
Vykdymo greitis
Beveik akimirksniu
Lėtas ir apgalvotas
Derinimo galimybė
Žemas (bandymų ir klaidų)
Aukštas (pagrindinės priežasties analizė)
Saugumo rizika
Aukštas (paslėpti pažeidžiamumai)
Žemas (rankinis patvirtinimas)
Mokymosi kreivė
Seklus (greitas inžinerijos darbas)
„Steep“ (informatikos pagrindai)
Mastelio keitimas
Apsiribojama mažais fragmentais
Galimybė kurti ištisas architektūras
Išsamus palyginimas
Juodosios dėžės spąstai
Kodo generavimas dažnai sukuria „juodąją dėžę“, kai kūrėjas gauna veikiantį sprendimą, nežinodamas, kodėl jis veikia. Tai sukuria pavojingą priklausomybę; kai sugeneruotas kodas neišvengiamai sugenda, kūrėjui trūksta pagrindinių žinių, kaip jį ištaisyti. Pagrindinės logikos supratimas yra vienintelis būdas pereiti nuo „kodo vartotojo“ prie „programinės įrangos inžinieriaus“.
Sintaksė ir semantika
Generavimo įrankiai yra sintaksės meistrai – jie tiksliai žino, kur dedami kabliataškiai ir skliaustai. Tačiau jiems dažnai sunku su semantika, kuri yra tikroji kodo prasmė ir tikslas. Žmogus, turintis gilų supratimą, gali atpažinti, kada sugeneruotas ciklas yra neefektyvus arba kada kintamojo pavadinimas užgožia funkcijos paskirtį, užtikrindamas, kad kodas liktų skaitomas kitiems.
Priežiūros kaina
Sukurti sugeneruotą kodą lengva, bet jį prižiūrėti gali būti neįtikėtinai brangu, jei autorius jo nesupranta. Programinės įrangos kūrimas retai kada yra vienkartinio rašymo veikla; jis apima metų metus atnaujinimų ir integracijų. Neturint gilaus originalių sugeneruotų blokų supratimo, pridedant naujų funkcijų dažnai susidaro „kortų namelio“ efektas, kai vienas pakeitimas sugriauna visą sistemą.
Apsaugos ir kraštinių dėklų
Dirbtinio intelekto generatoriai dažnai nepastebi neaiškių saugumo spragų ar kraštutinių atvejų, kuriuos numatytų patyręs kūrėjas. Kodo supratimas leidžia pažvelgti į sugeneruotą kodo fragmentą ir paklausti: „Kas nutinka, jei įvestis yra nulinė?“ arba „Ar tai neapsaugo nuo SQL injekcijos?“. Kodo generavimas suteikia pagrindą, o supratimas – imuninę sistemą.
Privalumai ir trūkumai
Kodo generavimas
Privalumai
+Pašalina sintaksės klaidas
+Didelis laiko taupymas
+Puikiai tinka standartiniams standartams
+Sumažina patekimo barjerą
Pasirinkta
−Saugumo pažeidžiamumai
−Skatina tinginystę
−Sukuria palikimo skolą
−Sunku derinti
Kodo supratimas
Privalumai
+Lengvesnis derinimas
+Geresnė architektūra
+Saugus diegimas
+Karjeros ilgaamžiškumas
Pasirinkta
−Lėtai vystosi
−Didelis protinis krūvis
−Iš pradžių varginantis
−Laiko reikalaujantis
Dažni klaidingi įsitikinimai
Mitas
Dirbtinis intelektas išmoks programuoti ir taps nebeaktualus.
Realybė
Dirbtinis intelektas kodavimo *sintaksę* sumažina, tačiau *logiką* ir *architektūrą* (supratimą) daro svarbesnes nei bet kada anksčiau. Mes pereiname nuo „statytojų“ prie „architektų“, kurie turi patikrinti kiekvieną dirbtinio intelekto padėtų plytą.
Mitas
Jei kodas praeina testus, man jo suprasti nereikia.
Realybė
Testai apima tik tuos scenarijus, kuriuos numatėte įtraukti. Nesuprasdami, negalite numatyti „nežinomų nežinomųjų“, kurie sukels sistemos gedimus gamybinėje aplinkoje.
Mitas
Kodo generavimo įrankiai visada naudoja geriausią praktiką.
Realybė
Dirbtinio intelekto modeliai yra apmokyti su visu kodu, įskaitant blogą, pasenusį ir nesaugų kodą. Jie dažnai siūlo „įprasčiausią“ būdą ką nors atlikti, kuris dažnai nėra „geriausias“ ar moderniausias būdas.
Mitas
Suprasti reiškia įsiminti kiekvieną bibliotekos funkciją.
Realybė
Supratimas yra susijęs su sąvokomis – lygiagretumu, atmintimi, duomenų srautu ir būsenų valdymu. Visada galite ieškoti konkrečios sintaksės, bet negalite „ieškoti“ gebėjimo mąstyti logiškai.
Dažnai užduodami klausimai
Ar pradedantiesiems tinka naudoti „ChatGPT“ arba „GitHub Copilot“?
Tai dviašmenis kardas. Nors jis gali padėti įveikti erzinančias sintaksės klaidas, per ankstyvas jo naudojimas gali sutrukdyti išsiugdyti programavimui reikalingus „protinius raumenis“. Jei naudojate DI problemai spręsti, įsitikinkite, kad galite paaiškinti kiekvieną išvesties eilutę kam nors kitam. Ar kada nors bandėte „atkurti“ DI atsakymą, kad pamatytumėte, kaip jis veikia? Tai geriausias būdas naudoti šiuos įrankius mokymuisi.
Kaip pereiti nuo kodo generavimo prie jo supratimo?
Išbandykite „Be dirbtinio intelekto iššūkį“ mažiems projektams. Sukurkite ką nors nuo nulio, naudodami tik oficialią dokumentaciją. Tai privers jus įsigilinti į koncepcijas, o ne tik į rezultatus. Be to, praktikuokite skaityti kitų žmonių kodą „GitHub“; jei galite sekti sudėtingos saugyklos logiką jos nepaleisdami, jūsų supratimas pasiekė profesionalų lygį.
Ar kodo generavimas lemia daugiau klaidų?
Iš pradžių gali atrodyti, kad dėl to sumažėja klaidų skaičius, nes sintaksė yra tobula. Tačiau ilgainiui tai dažnai veda prie „loginių klaidų“ – programos mąstymo klaidų, kurias daug sunkiau rasti. Kadangi kūrėjas nerašė logikos, jis mažiau linkęs pastebėti subtilų sugeneruoto algoritmo trūkumą, kol nebūna per vėlu.
Ar galiu gauti darbą vien gerai mokėdamas rašyti kodo generatorius?
Tikėtina, kad neilgam. Įmonės samdo programuotojus problemoms spręsti, o ne tik teksto išvedimui. Techninių pokalbių metu iš jūsų bus tikimasi, kad paaiškinsite savo samprotavimus, optimizuosite kodą ir skubiai tvarkysite kraštutinius atvejus. „Greitas inžinierius“, kuris nesupranta kodo, yra kaip pilotas, kuris žino tik tai, kaip naudotis autopilotu; jiems viskas gerai, kol kas nors nepavyksta.
Koks yra geriausias būdas patikrinti sugeneruotą kodą?
Visada atlikite rankinę kodo peržiūrą. Žingsnis po žingsnio peržiūrėkite logiką ir paklauskite savęs: „Ar tai efektyviausias būdas?“, „Ar yra saugumo rizikų?“ ir „Ar tai atitinka mūsų projekto stilių?“. Taip pat turėtumėte rašyti vienetinius testus, specialiai sukurtus sugeneruoto kodo iššifravimui. Kraštinių atvejų, tokių kaip tuščios eilutės ar itin dideli skaičiai, testavimas yra puikus būdas patikrinti, ar dirbtinio intelekto logika veikia.
Ar laikui bėgant kodo supratimas taps mažiau vertingas?
Tiesą sakant, jis tampa *vis vertingesnis*. Dirbtiniam intelektui generuojant vis daugiau pasaulio kodo, didžiausia paklausa bus žmonėms, kurie gali audituoti, taisyti ir sujungti šias dalis. Įsivaizduokite tai kaip matematiką: turime skaičiuotuvus, bet mums vis tiek reikia matematikų, kad suprastų pagrindinius principus, kaip spręsti sudėtingas inžinerines problemas.
Kodėl sugeneruotas kodas kartais atrodo toks keistas arba pernelyg sudėtingas?
Dirbtinio intelekto modeliai dažnai pasirenka „statistiškai vidurkinį“ kelią, kuris gali apimti kelių skirtingų kodavimo stilių, kuriuos jie matė mokymo metu, derinimą. Dėl to gali susidaryti „Frankenšteino kodas“, kuris veikia, bet yra be reikalo sudėtingas arba naudoja nenuoseklias pavadinimų suteikimo konvencijas. Suprantantis kūrėjas gali sumažinti šį „riebalų“ kiekį ir padaryti kodą elegantiškesnį ir lengviau skaitomą.
Kaip „Rubber Duck Debugging“ susijęs su kodo supratimu?
„Guminės anties“ metodas yra klasikinė technika, kai savo kodą aiškinate eilutė po eilutės negyvam objektui (arba ančiai). Šis procesas yra didžiausias kodo supratimo išbandymas. Jei negalite paaiškinti, ką daro eilutė, vadinasi, jos nesuprantate. „Guminės anties“ sugeneruotą kodą daug sunkiau sukurti, nes ne jūs priėmėte pirminius loginius sprendimus.
Nuosprendis
Naudokite kodo generavimą, kad paspartintumėte savo darbo eigą ir susidorotumėte su pasikartojančiais šabloniniais uždaviniais, tačiau niekada nerašykite kodo, kurio nebūtumėte parašyti patys. Tikrasis meistriškumas slypi dirbtinio intelekto naudojime kaip įrankyje savo vizijai įgyvendinti, o ne leidžiame įrankiui diktuoti jūsų logiką.