Kodo mirtis. Koks bus programavimas ateityje? (20)
Nors iki kvantinių kompiuterių ir jų keliamos grėsmės mūsų civilizacijai dar (tikėkimės) toloka, bet ir įprastų kompiuterių programos jau yra už žmogiškojo supratimo ribų. Tai labai pavojinga ir ne ateityje, o dabar.
Prisijunk prie technologijos.lt komandos!
Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.
Sudomino? Užpildyk šią anketą!
Vienoje „Kieto riešutėlio“ dalyje įvyksta skaitmeninė apokalipsė. Hakeriai užvaldo viską, ką vyriausybė valdo kompiuteriais, – šviesoforus, vaizdo stebėjimo, elektros tiekimo sistemas, socialinio draudimo sąskaitas ir taip toliau; kyla daug aukų pareikalaujantis chaosas. Šis scenarijus ne taip toli nuo tikrovės, kaip norėtųsi: rugsėjo 28 dieną „techninis sutrikimas“ sulaikė reisus vien metu visame pasaulyje – Australijoje, Japonijoje, Europoje, JAV. To priežastis – elektroninės sistemos, kuria naudojasi aviacijos kompanijos ir oro uostai keleivių ir bagažo registravimui, sutrikimas. Laimei, gedimas buvo greitai pašalintas, tačiau jo pasekmės galėjo būti tragiškos.
2014 metais, naktį iš birželio 10-os į 11-tą, visa JAV šiaurės vakaruose esanti Vašingtono valstija 6 valandoms liko be gelbėjimo tarnybos 911. Visi skambinusieji ragelyje girdėjo trumpus signalus. Viena moteris, norėjusi iškviesti policiją, nes į jos namus įsibrovė plėšikas, tarnybos telefono numerį rinko 37 kartus ir, nesulaukusi atsakymo, griebėsi peilio savigynai; plėšikas pabėgo. Kaip vėliau paaiškėjo, sutrikimas įvyko, nes vienas iš serverių, per kurį priimami skambučiai, buvo užprogramuotas taip, kad nepriimtų daugiau nei kelių milijonų skambučių. Kai ši riba buvo viršyta, skambučiai tiesiog buvo nebepriimami. Tik ryte programuotojai perprato problemą ir kad jos pašalinimui tereikėjo pakeisti vieną skaičių.
Dar neseniai kritiškai svarbios sistemos būdavo kontroliuojamos mechaniškai, arba dalyvaujant žmogui ir nuolat buvo tikrinamos, kad būtų išsiaiškinti nesklandumai. Dabar jos priklauso nuo kompiuterių, o šie – nuo konkretiems tikslams parašytos programos. Jei elektromechaninio įrenginio aprašymas užėmė kelis puslapius, tai su programomis taip paprastai išsisukti nepavyks: kodas gali užimti dešimtis ir šimtus milijonų eilučių. Pakeitimas programoje daryti nesudėtinga ir nebrangu, todėl jos nuolat keičiamos – pridedamos naujos eilutės, naujos funkcijos, naujos galimybės. Toks lankstumas ne tik palaima, bet ir prakeiksmas, rašo žurnalistas ir programuotojas Jamesas Somersas straipsnyje Atlantic. Kai kurių specialistų nuomone, mums būtina pakeisti programavimą – ir atlikti tai kuo greičiau, kol neištiko katastrofa.
Žmogaus sukurtų sistemų sudėtingumas viršijo jo valdymo galimybes ir nemaloniausia, kad programinė įranga nelūžta – ji veikia būtent taip, kaip jai nurodoma. Problemos kyla, kai įsakymas neteisingas. Kitaip tariant, programos klaidos yra žmogaus supratimo ar vaizduotės klaidos, tikina Somersas.
Programinis kodas pernelyg sudėtingas, kad jį būtų galima įsivaizduoti, pernelyg „svetimas“ žmogaus supratimui. Anksčiau galėjome matyti, kaip aplink mus keičiasi pasaulis, – kaip keliai pasidengia asfaltu, kaip stiebiasi daugiaaukščiai namai. Dabar, kai kas nors keičiasi, mes to nebepastebime, – pokyčiai randasi, į programinį kodą pridedant eilutes. Spaudžiame automobilio akceleratoriaus pedalą ir jis greitėja, tačiau tarp šių dviejų įvykių nėra tiesioginio mechaninio ryšio – viskas vyksta, tarpininkaujant kompiuteriui, kuris nusprendžia, kiek oro paduoti varikliui. Ir tai jau gali būti išties pavojinga.
2007 metų rugsėjį amerikietė Jean Bookout važiavo greitkeliu savo Toyota Camry, kai greičio ir stabdžių pedalai nustojo reaguoti į jos veiksmus. Automobiliui važiuojant 80 km/h greičiu, moteris pabandė įjungti rankinį stabdį, tačiau tai nepadėjo ir automobilis, palikęs kelių dešimtis metrų slydimo žymę, rėžėsi į šalikelėje supiltą sankasą. Keleivis žuvo, pati Bookout mėnesį pragulėjo ligoninėje be sąmonės. Dešimt mėnesių trukęs NASA IT specialistų tyrimas gedimo priežasčių neišaiškino, ir tik dar po pusantrų metų kita ekspertų komanda mašinos kompiuteryje atkapstė spageti kodą, kuris buvo toks supainiotas, kad dėl menkiausio atminties sutrikimo automobilis galėjo tapti nevaldomas. Praėjus šešiems metams po avarijos, „Toyota“ buvo pripažinta kalta, ir teismas įpareigojo korporaciją nukentėjusiai moteriai išmokėti $3 mln. Vėliau gamintojas turėjo atšaukti 9 mln automobilių.
Tai tik vienas iš sutrikimų pavyzdžių, o sudėtingėjant programoms, jų vis daugės, perspėja Somersas. Šiuolaikiniuose automobiliuose yra 100 mln kodo eilučių ir jeigu nesugalvosime, kaip tai supaprastinti, gero nelauk.
Programuotojo darbas nuo praėjusio amžiaus devintojo dešimtmečio menkai pasikeitė: norint kurti programą ar ją pakeisti, reikia rašyti tekstą. Dabar daugelis kalba, kad toks status quo nebeatitinka realijų. Kompiuterių galingumas štai ja 40 metų auga geometrine progresija. Kodėl programavimas turėtų likti toks pats?
Vienas iš bandančių sugalvoti, kaip „išgydyti“ programavimą, – IT tyrinėtojas Bret Victor. 2007–2011 metais jis buvo vartotojo sąsajos programuotojas Apple kompanijoje, o dabar vadovauja Human Advancement Research Community (HARC) organizacijos laboratorijai, tyrinėjаnčiai programavimo ateitį. Viktoras plačiai pagarsėjo siauruose sluoksniuose 2012 metais, po pranešimo studentams programuotojams viename Monrealio viešbutyje. Toje lekcijoje jis papasakojo apie savo suvoktą principą: „Ką nors kuriantis privalo būti tiesiogiai susijęs su tuo, ką jis kuria“. Programavimas akivaizdžiai šį principą pažeidžia, paskelbė Viktoras: programuotojas, įsipainiojęs į kodo eilutes, yra atplėštas nuo realaus savo darbo rezultato. Kuriantis, tarkime, skirtingus stilius teksto redaktoriui, neišvys, ką jis sukūrė, kol nepamatys spausdintuvu atspausdinto teksto. Negalėdamas numatyti, koks bus tekstas, programuotojui tenka įsivaizduoti, kaip jo kodą supras kompiuteris, tai yra, pačiam mintyse būti kompiuteriu.
Programų kūrimo būdas nebeatitinka realijų
Siekiant išspręsti šią problemą, buvo sukurtos WYSIWYG (angl. What You See Is What You Get – „Ką matai, tą ir gausi“) technologijos, kurios esamuoju laiku rodo programuotojui, kaip galiausiai atrodys jo pastangų vaisius. Taip galima buvo vos metus žvilgsnį, suprasti, ar kur nepadaryta klaida, – ir tai galėjo atlikti visi. Viktoro nuomone, panašiai turėtų veikti visas programavimas: automobilių autopilotus ar ligų diagnozavimo programas kuriantys žmonės neturėtų priešais save regėti vien begalinių teksto eilučių.