Kas mane erzina programuojant su LLM'ais
Dalykai, kurie mane UŽKNISA, kaip žmonės naudoja LLM'us darbe.
Naujai prisijungę / jauni inžinieriai daug greičiau gali pradėti rašyti kodą. Iš pirmo žvilgsnio tai gal ir nėra blogai? Problema tame, kad dažnai šie žmonės dar neturi pakankamai supratimo apie sistemą. Pre-LLM eroje, žmogus būtų priverstas aiškintis kaip sistema veikia, nagrinėti ką daro kodas, klausinėti, atsargiai daryti pakeitimus ir bijoti. O dabar, tiesiog surašo žodžius į užklausą ir numeta peržiūrėti sudrėbtą pull request'ą. Kuris, dažniausiai, nebūna į temą.
Generuoti tekstą nieko nekainuoja. Dėl to nežmoniškai išaugo tekstinės informacijos kiekis. Rašymas nebereikalauja pastangų. Kodėl neprigeneravus 10 puslapių vietoj vieno ar dviejų? Kažkurią dieną gavau peržiūrėti 9 puslapių dokumentą. Dokumentas aprašė, kaip pridėti vieną ar kelis monitorius (kelios PromQL užklausos, gal kažkiek Terraform kodo). Turėjo rollout plan'ą, bei kitus skyrius. Mūsų laikais dokumentų tokiems pakeitimams net nerašydavom, nes jie nekuria jokios pridėtinės vertės, o yra tik triukšmas ir simuliacija, kad žmogus "daug dirbo".
Neprasmingi kodo pakeitimų aprašymai (Pull Request description). Nes generuoti tekstą nieko nekainuoja. Pakeitimo aprašymas turi būti prasmingas. Aš labiausiai vertinu aprašymus, kurie paaiškinima kodėl konkretus pakeitimas buvo padarytas. O dabar LLMas prigieneruoja kažkokių blėnių: kaip reikia testuoti, rollout planą, checkbox'ų prie tų test komandų ar planų... Visa tai nereikalinga ir nenaudinga.
Bereikalingi kodo pakeitimai. Kadangi pakeisti lengva, sukeisti du žodžius vietomis komentaruose irgi nieko nekainuoja. Lygiai taip pat, kaip ir visiškai pervadinti metodų pavadinimus visur kur reikia ir nereikia, kad būtų "tikslesni". Visi šie pakeitimai yra triukšmas PR'ą peržiūrinčiam žmogui.
Nereikalingi, pertekliniai kodo komentarai. Tiesiog, jų per daug, nereikalingi ir kartais atspindi ne apie ką yra kodas, o "pokalbio su LLM'u" kontekstą.
Į kodą ir komentarus pernešamas pokalbio su LLM'u kontekstas. Dažnai komentarai, metodų ir kintamųjų pavadinimai išduoda apie ką buvo kalbėta sesijos metu. Jei susirašinėjom apie GKE struktūras, tai pavadinimuose ir atsispindės "GKE". Nepaisant to, kad norėčiau jog kodas būtų agnostiškas, t.y. nepriklausytų ar čia koks "GKE" ar "EKS" ar kita technologija. Komentarai taip pat būtinai išduos apie ką buvo kalbėta. Maždaug "because we have decided to...".
Nereikalingi ir pertekliniai testai. Stengiamasi padengti visus įmanomus atvejus. Tai blaško. Dažnai, kodo autorius net netikrina ar sugeneruoti testai yra teisingi. Visad skeptiškai žiūrėdavau į testų generavimą iš kodo. Jei kodas blogas, tai ir testai bus blogi. Na va ir turim generatorius.
LLM'ų atsakymų naudojimas chat pokalbiuse. Jei naudojiesi AI, kad atsakyt į klausimą, tai pasistenk suprasti, pasitikrinti, susisteminti ir sutrumpinti informaciją. Tada pateik atsakymą vienu ar dviem sakiniais. Man nereikia nukopijuotos visos paklodės iš LLM. Lygiai taip pat, kaip aš nekopijuoju viso terminalo output'o, o tik iškerpu reikšmingas dalis.
Ką darom?
Šie dalykai mane erzina. Ir jie greitai niekur nedings, jei patys LLM'ai nepasikeis. Nedings, nes visada bus naujų žmonių, kurie ateis neįsisavinę gerųjų praktikų. Dabartinėje eroje kodo rašymo problemos nebėra. Apie tai rašo keli protingi žmonės:
Tokių tekstų yra ir daugiau. Programavimas nebėra kliūtis. Rašyti kodą nebėra sunku (nekalbu apie supratimą kas parašyta). Bet krūvis nuo kodo rašytojo persikelia ant kodo peržiūrėtojo pečių... Sutinku su tų tekstų autoriais, kad peržiūrinėti kodo pakeitimus bus vis mažiau ir mažiau verta...