AI nedraud izstrādātājiem ne ar ko
Esmu pasācis iTerm2 vietā lietot Ghostty. Nekad nebūtu domājis, ka faktiskais termināļa emulatora ātrums tik ļoti ietekmē pieredzi. Bet nevienu citu kā tikai mani tas nesatrauc. Tāpēc uzrakstīšu par to, cik ļoti drīz mēs visi zaudēsim savu darbu, pateicoties "mākslīgajam Intelektam". Godīgi sakot, nedomāju, ka šis arī kādu satrauktu :D
Pagājušā gadsimta hipiju ziedu laikos - sešdesmitajos gados - plašu popularitāti ieguva COBOL. Jauna augsta līmeņa programmēšanas valoda. Tas notika laikā, kad visi rakstīja mašīnkodu un asamblerī.
Īstie" tā laika izstrādātāji sūkstījās, ka COBOL un līdzīgās valodas padarīs programmēšanu pārāk vienkāršu un padarīs "patiesos" programmētājus nevajadzīgus. Izaugs izstrādātāju paaudze, kura nezinās kā patiesībā datori strādā. Sāks rasties neefektīvs kods un tam būs nereāli sūdīga veiktspēja.
Izklausās dzirdēts? Ir pagājuši vairāki gadi, kopš dižie valodu modeļi sāka savu uzvaras gājienu. Un COBOL izstrādātāji aizvien nevar pensionēties, jo viņu prasmes ir aizvien pieprasītas. Turpināt pucēt un labot uz COBOL viļņa tapušās lietas. Ir pagājuši 60 gadi, ja kas.
Vesela kaudze profesiju ir pazudušas. Rakstnieki un žurnālisti izmisīgi mēģina atrast savu vietu jaunajā pasaulē. Klientu apkalpošanas sektora darbinieki sen jau kā vairs nav klientu apkalpošanas sektora darbinieki. Meklējiet viņus fiziska darba veicēju rindās. Datu apstrādes un analītikas jomā jūs arī vairs nesatiksiet nevienu pašu dzīvu cilvēku. Izstrādes asisstenti principā masveidā ir aizstājuši visus juniorus un tūlīt arī pienāks kārta midiem. :sarcasm_emoji:.
Es jums pastāstīšu par to kā ir patiesībā. Tpfu, pārteicos. Es izklāstīšu savas domas šajā sakarā. Varbūt metam mieru pārējām profesijām un parunājam par izstrādi.
Globāli uz visiem var attiecināt to, ka vairums jomu ir adoptējušas mašīnmācīšanās instrumentus un to turpinās darīt. Ne kā darbiniekus. Kā rīkus.
Visticamākais, ka pārskatāmā nākotnē nevienam nekas nedraud. Būs jaunas metodes, jauni palīgrīki. Mainīsies tas, kā lietas notiek. Bet cilvēki bez darba nepaliks, profesijas un spēju līmeņi būtiski necietīs. Kā jebkurā revolūcijā - iegūs tie, kas prot mazāk. Tas ir pie nosacījuma, ka no zinātnieku apcirkņiem neizlien kaut kas kardināli jauns, kas padara mūsu valodu modeļus par nevienam nevajadzīgiem mēsliem.
Paņemsim izstrādes piemērus - Cursor un tā konkurentu Windsurf.
Idejiski izstrādes process tur ir vienkāršs. Tu atver čatiņu un sāc viņam klārēt savas prasības. Zemāk neliels atstāsts par to, kā man gāja, gatavojot šo ierakstu. Izmantoju Cursor. Nekādus īpašus sagatavošanās darbus neveicu - .cursorrules
neizmantoju. Viss kā no mātes miesām nācis - instalācija, jauns projekts un aidā.
Tiem, kas nezin, Cursor un tam līdzīgie ļauj ar koda bāzi runāt. Palūgt kaut ko realizēt un tad jamais veido failus, labo esošos, dzēš nevajadzīgos (labi, to es nepiedzīvoju), raksta kodu, rāda diffu.

"Es rakstu iekš Go. Uztaisi man struktūru karšu aplikācijas backendam. Izmanto Go 1.23+ standarta bibliotēku visur, kur iespējams. Ieskaitot HTTP handleros."
Visu daiļi uzģenerē. Izskatās ticami. Papildus tam viņš uztaisīja četrus CRUD endpointus
marker
objektiem. Notestējot izskatās, ka viss strādā. Un pat CORS midlevāri ielika. Tas tā kā ir standarts, bet patīkami, ka neaizmirsa.Palūdzu ielikt aplikāciju aiz autorizācijas. MZGD kūkijā būs sesijas ID, jānočeko pret single sign-on REST API tā validitāte. (Kaut kur tāds ir redzēts, un pilnvērtīgu OAuth2/OIDC negribējās prasīt) Atbildē no API dabūsi arī lomu sarakstu, kuras lietotājam ir iešķiebtas. Roughly aprakstīju API speceni un aidā.
Šoreiz ir neliela kļūmīte. Pie kam - galīgi nesaistīta ar jaunieviesto kodu. Visi importi pareizi, bet kaut kā neiedomājās, ka
Marker
vietā vajagmodels.Marker
. Iemetu kompilatora kļūdas paizņojumu, tas aši attapās un salaboja.Nākamajā iterācijā palūdzu ieviest JWT, lai visu laiku neklauvē pie SSO API. Te nu viņam bik superjuniors ieslēdzās. Tas panēma iepriekš esošo autentifikācijas endpointu un kodu, un iemauca tur visu prasīto funkcionalitāti. Ja ir tokens, tad atgriežam JWT, ja nav, tad pārbaudam JWT.
Palūdzu tā nedarīt un uztaisīt atsevišķi visu funkcionalitāti, kas saistīta ar JWT. Un izdīcu divus endpointus - vienu JWT tokena izsniegšanai, otru tā pārbaudei. Pārbaude man pašam - lai varu notestēt vai viss ir čikipuki.
Skaistiņi. Te viņš diezgan naski sarakstīja to, ko man vajag. Pie reizes viņš nolēma, ka autentifikācijas midlevāre tagad gan jau nav nepieciešama un izņēma no visiem pieprasījumiem.
Uz manu aizrādījumu reaģēja zibenīgi ar atvfainošanos. Pielika atpakaļ noņemto visam, izņemot autentifikācijas enpointus.
Te, savukārt, sākās nopietnākas klupnītes. Tas nesajēdza darboties ar handleru grupām. Godīgi sakot, tas nav arī baigi vienkārši - kurā brīdī prefikss ir jānostripo, kurā tas paliek. Kā rezultātā
/api/markers
nekādi negribēja autorizēt pieprasījumus.Izrādījās, ka viņš atkal bija kaut ko nedaudz sajājis un auth funkcionalitātē bija atstājis sesijas identifikatora pārbaudi. Teicu, lai liekas mierā ar muļķībām un iztīra attiecīgo vietu. Paskatās uz savu kodu un pats izdomā - ko savārījis.
Sataisīja, pārbaudīju, strādā.
Palūdzu refaktoringu tagad. Bija diezgan daudz duplicēta koda autentifikācijas galā. Teicu, ka ar to jātiek galā. Tika.
Palūdzu uztaisīt komandu, nevis
main.go
rūtā. Bet aizvien nelietot nekādas bibliotēkas no ārpuses. To viņš izdarīja. Kā divus pirkstus.Paprasīju uztaisīt jaunu komandu, kura imitē iepriekš aprakstīto SSO API. Tas uzrakstīja. Piekakājot visu kodu. Pateicu, ka es eventuāli to dzēsīšu ārā un, lūdzu, to vienā
main.go
ielikt. Galu galā, man to vajag tikai tagad - rotaļām. Uztaisīja. Izpalīdzīgi un bez atsevišķas prasīšanas iedevacurl
komandas, ar kurām notestēt.Nu un tagad, kā jau mūsu TDD noliedzēju lokā pierasts, kad viss kods uzrakstīts, jāsataisa testi. "Generate tests for everything."
Autentifikācijai testus sataisīja uz goda. Izgriezās, pārbaudīju pašu kodu - izskatās ticami. Labs ir, tas gan nebija everything, bet ja jau, tad jau. Tagad, lūdzu, uzraksti testus marķieru metodēm.
Te nu viņš aizgāja mūžīgajā ciklā. Pieļāva pāris kļūdas, tās labojot pieļāva citas, kuras, savukārt, labojot, atkal pieļāva pirmās. Padzenāju kādas 5 reizes, sapratu, ka nebūs. Izdzēsu
markers_test.go
, pateicu to viņam, teicu - lai uzraksta pa jaunam. Protams, ka pielaida to pašu kļūdu.Kad viņš piedāvāja labojumu, es teicu, ka nebūs gan - salūzīs tālāk tas un tas. "Ahā!", - lielais valodas modelis pateica. Un salaboja. Piemirsa vienu niansi, bet kad uz to norādīju, arī tas bija kārtībā.
Un tad bija jau vēls un man vairs negribējās.
Viss tas prieks man izmaksāja 30 augstās raudzes pieprasījumus no 100 bezmaksas pieejamajiem.
Rezumējums? Iespaidīgi, ja zini ko sagaidīt. Visi vecie script kiddies tagad pārkvalificējas par llm kiddies. Uzmest koncepciju, nelielu proof of concept ar šo ir pagalam elementāri. Ja tev nerūp nekas no drošības, uzturamības, citām tipiskam izstrādātājam rūpošām leitām.
Izmantot ikdienā nedaudz mīzelīgi. Kaut kad noteikti tu būsi pārāk slinks, lai izlasītu visu to, ko tas brīnums ir saģenerējis. Palaidīsi garām autentifikācijas pazušanu un viss.
Salaušanu var ierobežot ar testiem. Tos lielie valodu modeļi un koda rakstīšana asistenti prot riktīgi labi rakstīt. Pēc tam tur sanāk kaut kas no burkāna principa. Pēc katrām koda izmaiņām pārlaižam testus. Ja kaut ko salauž, norādam un tas aši salabos.
Kā palīgs tas noteikti darbojas lieliski tad, ja skaidri zini ko vajag, tev nevajag neko sarežģītu, nav jādomā jaunas lietas. Scenārijos, kad tu raksti boilerplate. Kad prasītais vairāk vai mazāk ir tikai jāpārtulko kodā. Ha! Bet šo analoģiju var paprovēt attīstīt. Transformeri ir fantastiski tulkošanai. Jo vairāk parametru, jo augstāka to precizitāte, jo labāk. Jā, reasoning modeļi eksistē, bet pa lielam tie nav nekas tāds, kam es uzticētu savas bikses nepakāst.
Vēl noteikti ir vērts bieži resetot kontekstu. Turiet to mazu. Runā, ka zem 50k tokenu. Bagātīgi izmantot .cursorrules
. Repozitārijā glabāt arī piezīmes, izmantoto servisu un API dokumentāciju. Aicināt modeli tos lasīt, kad pieskarās kodam, kuram tas ir sarežģīti. Kaut kas līdzīgs readme.md
, kuru raksti nākotnes sev, lai pēc 10 gadiem, kad jāpieskarās savam kodam, ātri vari saprast "ko notiek".
Kaut kur lasīju, ka šiem asistentiem pietrūkst coachability. Pie sava juniora tu vari aiziet un pastāstīt kā dzīvot. Pie LLM tu neaiziesi.
Rezumējot, es vienkārši gribu teikt - nemīziet. Būs tie, kas šos rīkus lietos. Arī tu, visticamākais, agrāk vai vēlāk vienā vai citā formā tos lietosi. Un šie rīki saģenerēs tik daudz sūdīga koda, ka "patiesajiem izstrādātājiem" darba pietiks milzum ilgam laikam.
Viena lieta gan mainās. Juniors vairs nekad nebūs tas juniors, kas tagad. Mums noteikti mainīsies tā taciņa, kuru juniors iet, lai nonāktu pie midiem un tālāk. Gan jau vienkārši būs vairāk tādu, kas paliek tanī līmenī. Viņiem būs sava vieta, bet tās nebūs dikti daudz, ja nebūsi pārlieku uzņēmīgs.
Es šo publicēšu un gaidīšu. Diez, cik labi vai slikti šis novecos? Ja gribi padiskutēt, dari to te komentāros, pie ieraksta tviterī, pie ieraksta blūskajā, e-pastā, sūti faksus un vēstules.
29. janvārī, plkst. 19:46
Negribi fontus salabot lapā please? Sāp acis lasot izceltos ā ē ū š u.c
29. janvārī, plkst. 19:50
Pastāsti man par pārlūku un OS, kuru lieto. Jo es uz visām ierīcēm visu redzu pareizi.