28 hónappal később
Újabb kalandok az AI-támogatott kódolás területén
Az eredeti kép ChatGPT-vel felfrissített változata
Valójában 36 hónappal később, de nem tudtam kihagyni a gyenge filmes utalást. Szóval három évvel ezelőtt megpróbáltam egy hobbi projekt ötletet kigeneráltatni AI segítségével. A kísérlet nagyjából sikerrel zárult, végül mégsem született olyan kód, amit szívesen futtatnék élesben. Innen nézve a dolgot úgy tűnik mégsem lett kész ezt a projekt. Három év pedig hosszú idő, biztos sokat fejlődött ez idő alatt a technológia, lehet érdemes újra megpróbálni.
A projektről röviden annyit érdemes tudni, hogy RSS feed-eket olvas periodikusan és az ott talált feed elemekből email-eket generál, amiket IMAP-on keresztül tölt fel egy email fiókba.
Első nekifutás
Bár manapság már egyre kevésbé népszerű ez a hozzáállás, de én még szeretem érteni a "saját" kódomat, ami készül. Ennek tükrében úgy indítottam a projektet, hogy én írom a kódot, az AI pedig megtanít engem, hogy hogyan kell Go-ban fejleszteni.
Lehetőség szerint minél kevesebb külső függőséget szerettem volna használni, hogy elsősorban a nyelvvel és a hozzá járó standard könyvtárral ismerkedjek meg. Nyilván egy SQLite könyvtárat nem fogok újra leimplementálni, de például a megálmodott pipeline-jellegű architektúrához használhattam volna kész megoldásokat, de inkább megpróbáltam a Go channel-ek, context-ek és a párhuzamos futtatás világában jobban elmélyülni.
Ez egy olyan terep, ahol a hozzá nem értő ember (én) könnyen lábon tudja lőni magát és az AI (a maga lelkesedésével) ebben még segítségünkre is siet. Ha egyedül is jól bele tudsz zavarodni dolgokba, akkor AI segítségével kétszer annyira összezavarjátok majd egymást. Az AI elbizonytalanít téged, te minden egyes rezdüléseddel befolyásolod az AI-t és a végén inkább keresel valami segédanyagot, amit az AI-boom előtt még egy ember írt.
Ahogy az lenni szokott egy idő után beleuntam az oktatós projektbe és parkolópályára került az egész. Nagyjából addig sikerült eljutni, hogy volt egy működő prototípus és kb. a pipeline fele létezett már "production ready" állapotban.
Második nekifutás
Később, mikor újra felvettem a fonalat, kicsit máshogy álltam a dologhoz. Már nem akartam tanulni, csak be akartam fejezni a projektet. Nem azért, mert szükségem volt a működő programra, inkább csak úgy éreztem, hogy úgy kaphatok egy jobb képet az eszközökről, ha végigvittem vele egy projektet.
Az eszköztárat ehhez igazítva Claude Code-dal mentem tovább, de nem a manapság divatos "eresszünk rá 30 agent-et a problémára és majd meglátjuk mire jutnak" hozzáállással. Az első körös nekifutás egy elég jó alapot adott ahhoz, hogy kis lépésekben tudjunk haladni. Minden lépést felügyeltem és szükség esetén korrigáltam, de kézzel nem végeztem lényegi módosításokat a projekten. Egészen a legvégéig meg sem próbáltam lefuttatni.
Nagyjából fél nap és 35 dollár elégetése után lett egy késznek mondható szoftverem. Mivel nem vagyok Go fejlesztő, így sajnos azt nem tudom hitelesen megítélni, hogy mennyire elegáns vagy épp mennyire felel meg a nyelv adottságainak az elkészült mű. Talán ez már nem is annyira lényeges, lehet, hogy az embereknek abba kell hagyni a kód olvasgatását.
Az end-to-end tesztek még kihoztak pár potenciális problémát (főleg a párhuzamosság környékén), a próbafuttatás valódi feed adatokkal pedig aztán még néhányat (túl megengedő reguláris kifejezések, nem megfelelő enkódolások), de semmi eget rengető.
A végén még kézzel megírtam a .gitlab-ci.yml-t a GitLab CI-hez és a Dockerfile-t az élesben futtatáshoz, mert úgy éreztem az gyorsabb lesz, mint szócsatázni az AI-jal.
Tapasztalatok
A kimenet
Hajlamos vagyok úgy gondolni, hogy minél bonyolultabb a téma, annál kevésbé lehet a kimenetben (akár szöveges, akár kód) megbízni. Főleg akkor, ha kevéssé jártas az ember az adott témában. Alapvetően egy jó, személyre szabott tanulási (vagy kód elmagyarázási) eszköznek tartom, de vannak fenntartásaim a kimenettel kapcsolatban.
A másik aspektusa ennek az, hogy mennyire befolyásolható. Ha bedobok egy ötletet, akkor hajlamos azzal menni, de én attól még nem lehetek biztos abban, hogy tényleg az én alternatívám volt a jobb ötlet, vagy csak a megfelelési kényszer miatt választja a megoldásomat.
Van úgy, hogy kérdésként bedobok egy ötletet, hogy "vajon működne-e ez így vagy úgy". Az AI persze rámondja, hogy "remek meglátás, rögtön neki is állok megvalósítani". Aztán 10-20 perceket vitatkozik saját magával, elkezdi feltúrni az egész projektet, látszik, hogy nem jut egyről a kettőre, de nem fog magától leállni. Végül inkább leállítom és nyomok egy git restore-t.
Munkavégzés
Ez szorosan összefügg a kimenet minőségével. Én azt a következtetést vontam le, hogy nem szívesen hagynám szabadon garázdálkodni, hogy azt csináljon, amit akar. Minél hamarabb el kell csípni, ha rossz irányba indul el, meg kell kérdőjelezni az ötleteit, alternatívákat kell felhozni (vagy néha csak megfelelő kulcsszavakat). Ez viszont csak úgy tud működni, ha megvan a hozzáértés valamilyen szinten, hogy meg tudja mondani az ember, ha rossz irányba tartanak a dolgok.
Aztán ott van még az a furcsaság, hogy a végén a .gitlab-ci.yml és Dockerfile fájlokat kézzel írtam meg. Nem hiszem, hogy szimplán csak azért történt, mert a nap végén már elegem volt a csevegésből és csinálni akartam valamit. Inkább valami olyasmi lehetett, hogy ha valamihez eléggé értek és úgy gondolom, hogy nem sok idő megcsinálni, akkor inkább megcsinálom, mint hogy ugyanannyi vagy több idő alatt megmondjam másnak, hogy hogyan csinálja meg. Főleg ha annak a másik félnek semmilyen előnye nem származik abból, hogy ő csinálja (mert például nem képes tanulni belőle).
Sebesség
Jelen esetben hobbi projekthez használtam, úgyhogy nem sietek sehova, nem azzal van baj, hogy lassú lenne, csak az interakció mintája valahogy kényelmetlen. Ahhoz egy kicsit lassú, hogy ne unatkozzon közben az ember, de ahhoz túl gyors, hogy érdemben lehessen a gondolkodási szünetekben valami mással foglalkozni.
Lehetne ugyan több szálon folytatni beszélgetéseket (nem próbáltam), de szerintem sem én, sem az AI nem elég jó ehhez a multitasking területén.
Ár-érték arány
Aztán ott van még az ár kérdése. Mint azt már említettem, csak a második körben 35 dollárt locsoltam el erre a projektre. Az első kört nem tudom pontosan, mert egy havi előfizetés részeként volt megvalósítva, de tippre egy 10-20 dollár az is lehetett.
Hogy ez soknak vagy kevésnek számít, azt nem tudnám megmondani, de amikor a végén kijött ez az összeg, akkor arra gondoltam, hogy ha valaki ezt a kész szoftvert 35 dollárért próbálná nekem eladni, akkor bizony nem venném meg.
A szép új világ, második felvonás
Itt vagyunk hát, három évvel később. Az újdonság varázsa már egy kicsit megkopott és előtűnnek a lepattogzó festék alól a hibák. A szellem ugyan kiszabadult a palackból, de egy mindenható varázslény helyett egy hiperaktív junior fejlesztőt kaptunk. Mindenkire rábízom, hogy ezek alapján levonja saját helyzetéhez mérten a következtetéseket. Én a magam részéről még továbbra sem látom kristálytisztán, hogy hogyan fog működni a közös életünk.