Dvejetainis Babilonas (papildyta)  (29)

Pro­gra­ma­vi­mo kalbų gausybė lemia sunkiau su­se­kam­us prog­ra­mų rik­tus. Bet gal jau pa­si­rod­ė iš­eit­is­

Kompiuteriu naudojuosi jau kelis dešimtmečius. Tikriausiai laikas išmokti programuoti, bet pirma reikia rasti atsakymą į paprastą klausimą. Yra tūkstančiai programavimo kalbų – kurią turėčiau mokytis?

Laimei, internete pilna atsakymų: programavimo tinklaraščiuose ir forumuose pilna žmonių, ieškančių atsakymo į šį klausimą. Deja, atsakymai dažnai nepadeda. Java kalba „užknisa“ ir „visi Java programuotojai kvailiai“. C++ yra „barokiška ir bjauri“. Ruby kritikai mintis reiškia paprasčiau; jiems ši kalba tiesiog „šūdo gabalas“. Nepašvęstuosius ši liejama tulžis šiek tiek gąsdina.

„Tiesiog stulbina, kaip žmonės gentiškai prisiriša prie programavimo kalbų,“ stebisi Crista Lopes, Kalifornijos universiteto Irvine'e informatikos departamento profesorė. Bet po šiuo tulžingu gentiškumu tūno nepatogi tiesa: daugumos kalbų dizainas yra prastas, darantis programavimą neįtikėtinai abstrakčiu ir sudėtingu užsiėmimu. Ir joms dar reikia nuolatinio taisymo kaskart, pasirodžius naujai internetinei programai. Nors dabartinį pasaulį valdo kompiuterinis kodas, iš tiesų jis grynas jovalas.

Žinoma, galite sakyti, kad kol kompiuteryje veikia Angry Birds ir Facebook, neverta jaudintis dėl piktų programuotojų būrių. Tačiau tai būtų naivu. Skausminga betvarkė, koks kompiuterių programavimas ir yra XXI amžiuje, turėtų rūpėti visiems. Tai svarbiau, nei viso darbo praradimas, savo Windowsuose išvydus Mėlynąjį mirties ekraną. Pasauliui vis labiau skaitmenizuojantis, programinės įrangos klaidų pasekmės darosi vis rimtesnės, nuo labai nepatogių iki nepaneigiamai tragiškų. Dėl jų sodinami lėktuvai ir įvyksta finansiniai perkaitimai. Jos kartais netgi nužudo, kai pasireiškia sveikatos priežiūros įrangoje. Laimei, reikalai gali greitai pasitaisyti.

Šeši didžiausi programinės įrangos sutrikimai:Didžiausios programinės įrangos klaidų sukeltos nelaimės

Pradėkime nuo akivaizdaus klausimo: kodėl yra tiek daug kalbų? Užduokite šį klausimą internete ir pirmasis atsakymas bus tiek pat irzlus, kiek ir retoriškas: „Kodėl yra tiek daug dviračių rūšių? Kodėl yra tiek skirtingų veržliarakčių?“ Sužinosite, kad priežastis ta, kad skirtingos mašinos kalba skirtingomis kalbomis. Jūsų spausdintuvas ir F-22 naikintuvas neatsako į tokias pačias komandas tikriausiai dėl svarios priežasties.

Tačiau tikrovėje viskas daug sudėtingiau, net jei visos kalbos iš esmės atlieka tą patį: perkelia dvejetainių skaičių sekas – bitus – tarp mikroprocesoriaus grandinių. Iki XX a. šeštojo dešimtmečio programuotojai tai atlikdavo elektros kirtikliais ir jungikliais, kartais – perforuotomis kortelėmis. Tačiau prieš tai atlikdami, jie pirmiausiai turėjo kruopščiai išversti tai, ką norėjo, kad mašina padarytų – kitais žodžiais programą – į teisingą vienetukų ir nuliukų seką, kurią galėtų suprasti kompiuteris. Šis vadinamasis „mašininis kodas“ pasakydavo kompiuteriui, kaip teisingai atlikti loginius veiksmus savo viduriuose.

Tai skamba sudėtingai, abstrakčiai ir sunkiai, nes taip ir buvo. Skaičiavimas buvo daug laiko reikalaujantis ir brangus užsiėmimas, ir programos buvo neįmantrios. Nenuostabu, kad tik nedidelė žmonių saujelė išmanė, kaip kalbėti šiuo mašininiu kodu.

Tada pasirodė Fortran. Išrasta IBM Watsono laboratorijoje, ši „aukšto lygio“ kalba padarė programavimą intuityvesnį, padėdama daugiau žmonių programuoti ir tai atlikti, darant mažiau klaidų. Pasak pristatymo, Fortran turėjo „praktiškai eliminuoti kodavimą ir klaidų ieškojimą“, pakeisdama beprasmius 0 ir 1 paprastomis teksto komandomis „READ“, „WRITE“ ir „GO TO“. Kiekvienai mašinai specifinis kompiliatorius turėjo pasirūpinti vertimu, konvertuodamas programuotojo tekstą į kažką suprantamo kompiuteriams. Tai leido programuotojams mąstyti savo kalba, užuot pritaikius mintis mikrolustų rinkiniams.

Kalbų sprogimas

Beveik po 60-ies metų kalbose įvyko kažkas panašaus į, neturint geresnio palyginimo, kambro sprogimą. READ ir WRITE išsivystė į vis mažiau intuityvias ir neperregimas komandas, atspindinčias vis sudėtingesnę logiką. Perėjus nuo nuliukų ir vienetukų prie žodžių, žmonės greitai tapo nepatenkinti šių žodžių nustatomais apribojimais jų saviraiškai. Markas Pagelas, tyrinėjantis kalbų evoliuciją Readingo universitete JK, sako, kad žmonės – ir jų minčių vertimo į kompiuterio instrukcijas būdai yra tokie įvairūs, kad nė vienos kalbos nepakaks.

Todėl dabar egzistuoja tikriausiai 3000 ar 4000 aukšto lygio kalbų, sako Alexas Payne'as, buvęs Twitter inžinierius ir kasmetinės Atsirandančių kalbų konferencijos kuratorius, ir daugelis jų veikia tandemu. Vien Facebook, be visų kitų kalbų, naudoja C++, Java, PHP, Perl, Python ir Erlang.

Naujų kalbų radimasis nerodo lėtėjimo ženklų. Pavyzdžiui, prieš metus, Google išleido nuosavą Dart kalbą, kaip pamainą JavaScriptui. Pasak nutekinto 2010 metų Google elektroninio laiško, „Javascript turi fundamentalių trūkumų, kurių, vien vystant kalbą, pašalinti neįmanoma“.

Tačiau įvairovė yra klaidinanti. Nežiūrint lingvistinio pasiskirstymo, žiūrint iš funkcinio požiūrio taško, dauguma kalbų tebėra šiek tiek pridengtos Fortrano versijos. „Nėra didelio skirtumo nuo to, kaip buvo programuojama septintajame dešimtmetyje,“ sako Lopes. Bretas Victoras, anksčiau kūręs Apple vartotojo sąsajas ir dabar dirbantis laisvai samdomu darbuotoju, sutinka. „Python, Ruby, Javascript, Java, C++ – visi jie ta pati kalba,“ sako jis. „Jos yra fundamentaliai to paties kalbėjimo būdo skirtingi dialektai.“

Jonathanas Edwardsas iš MIT eina dar toliau. „Mes niekada nieko neišmetame, nenurėžiame iki žemės, paprasčiausiai ant viršaus pastatome naują aukštą,“ dėsto jis. „Turime milžiniško aukščio bokštus, pagrindu siekiančius seniausią technologiją.“

Užstrigimas su tiek daug ankstyvųjų programavimo kalbų pidžinų versijų yra didelis galvos skausmas.

Pirmoji problema ta, kad jas sunku rašyti – anot Edwardso, „nežmoniškai sunku“. Jos daugiausiai susideda iš pataisymų ir sluoksnių, suteikiančių pigias greitas trikčių pataisymus ar improvizuoto funkcionalumo galimybes. Kalboms sudėtingėjant, programos ilgėjo. Boeing 787 Dreamliner sistemoje yra maždaug 6,5 milijono kodo eilučių; 2010-ųjų laidos S klasės Mercedes šis skaičius pašoka iki 20 milijonų. Netgi tokiose santykinai paprastose programose, kaip Microsoft Word, veikia keletas milijonų eilučių.

Ir čia prasideda tikros bėdos. Daugumoje programų yra pilna mažų gramatinių klaidų – neatitrauktų linijų, atvirų skliaustelių, ne toje vietoje padėtų kablelių ir panašiai. Pagal plačiai cituojamą vertinimą, yra po 15 – 50 klaidų kiekviename tūkstantyje kodo eilučių. Šios smulkutės klaidos visą programą gali padaryti beverte.

Ar padarėte tokią klaidą? Nesužinosite, kol nepavesite kompiuteriui kompiliuoti ir vykdyti kodo. Bet kompiliatorius negali pasakyti ar kodas veikia, kol neparašėte visos programos.

Rankinis klaidų taisymas būtų tuščias vargas. Vien visų 20 milijonų kodo eilučių suskaičiavimas tame Mersedese truktų gerą dalį metų – ir tik jei pamiršite maistą, miegą ir pertraukas tualetui.

„Šis dalykas yra toks sudėtingas, kad nuolatos darome klaidas – dažnai katastrofiškas klaidas,“ sako Edwardsas. „Grįžtame atgal ir taisome jas, bet rezultatai dažnai būna labai nepatenkinami.“

Nepatenkinami – labai švelniai pasakyta. Pasekmės gali būti pražūtingos: 2010 metais The New York Times atlikti tyrimai atskleidė, kad programinė įranga ir programavimo klaidos sukėlė mirtis ir rimtus sužalojimus daugelyje radioterapijos programų.

Programavimo klaidos sužlugdė multimilijoninius tarptautinius projektus – atsimenate 1996-ųjų Europos kosmoso agentūros raketos Ariane 5 bandomąjį skrydį? Klaida kontrolės programinėje įrangoje, parašytoje Ada kalba, privertė raketą susinaikinti 37-tą sekundę nuo starto. 2010 metais, kompiuterio riktai investicijų firmai Knight Capital per pusvalandį atsiėjo pusę milijardo dolerių.

Laimei, dauguma mūsų tokių katastrofų nepatirs, bet paprasta tiesa tokia, kad gyvenimui vis labiau skaitmenizuojantis, programinės įrangos klaidos prasigrauš į visus mūsų gyvenimo kampelius. „Visos didžiosios pramonės šakos kaunasi su didžiuliais ir neišspręstais programinės įrangos priklausomybių, dizaino ir našumo iššūkiais,“ sako Kevinas Sullivanas iš Virdžinijos universiteto Charlottesville'yje.

Programinės įrangos krizė

Balandį, dėl programinės įrangos klaidos American Airlines turėjo nutupdyti visą savo orlaivius JAV. Bankinės programos jau apvylė nemažai žmonių Jungtinėje karalystėje, palikdamos juos be priėjimo prie savo pinigų ištisoms dienoms, sužlugdydamos būstų įsigijimą ir kitus svarbius gyvenimo įvykius. Rytojaus bepiločius automobilius vairuos irgi kodas, bet ar jie bus nors kiek atsparesni, nei automobiliai, kuriuos General Motors ir Toyota turėjo atšaukti dėl programinės įrangos klaidų?

„Tai kartais vadinama programinės įrangos krize,“ sako Edwardsas, „bet šis terminas buvo sugalvotas septintojo dešimtmečio pradžioje ir neaišku, ar nuo tada nors kiek pasistūmėjome.“

Bet ką galime padaryti? Vienas, atrodytų akivaizdus, sprendimas būtų sukurti vienintelę universalią pagrindinę kalbą nuo pat pradžios. Šeštame ir septintame dešimtmetyje vyko bendros pastangos atlikti būtent tai. Akademikai, pramonės ekspertai ir mokslininkai iš viso pasaulio susivienijo ir bandė sukurti geriausią programavimo standartizavimo būdą. „Tų susitikimų stenogramos stulbinančios – žmonės įsiveldavo į tikrai audringus ginčus,“ sako Payne'as. Jie taip nieko ir nepasiekė, ką ir liudija dabartinių kalbų paletė. Pagelas brėžia paraleles su esperantu, universalios žmonių kalbos prototipu. Priežastis, kodėl ji niekada taip ir nepaplito, nes paprasčiausiai jos nereikia, svarsto jis. Universalios programavimo kalbos ne tik nereikia, bet ji netgi gali būti kliūtis. „Man patinka daug kalbų,“ sako Lopes. „Sunku net pagalvoti, jei reikėtų užstrigti tik su viena.“

Ar universali programavimo kalba yra trokštamas ir ar išvis įgyvendinamas dalykas, tebelieka atviras klausimas. Kaip bebūtų, išsigelbėjimas gali būti jau netoliese, ateinantis su vykdomomis kompiuterių mokslo pastangomis: paprasto naudojimo kalba, permąstanti kompiliavimą.

Taip, tai yra dar daugiau kalbų, besistiebiančių virš 60-ies metų amžiaus Dvejetainio Babilono bokšto. Bet jos išskirtinės tuo, kad jų dizaineriai kuria jas taip, kad programuotojai, rašydami kodą, realiu laiku galėtų matyti, būtent ką jie kuria.

Keista, bet rezultatas gali pasirodyti pažįstamas. Edwardsas siekia atkurti kažką panašaus į Microsoft Excel. „Tai programavimo kalba,“ sako jis. Iš tiesų, pasak Payne'o, tai plačiausiai naudojama programavimo kalba iš visų. Įvedate skaičius ir liepiate kompiuteriui, ką su jais daryti, priklausomai nuo eilutės ir stulpelio, kuriame jie yra. „Galite atlikti sudėtingus skaičiavimus net nesuvokdami, kad įvedamos formulės yra programavimo forma,“ sako Timothy'is Lethbridge'as iš Ottowa'os universiteto.

Šis suvokimas iškėlė Edwardsui paprastą klausimą: kodėl internetinių programų kūrimas negalėtų būti toks pats paprastas, kaip naudojimasis skaičiuokle? Jis kuria naują kalbą Subtext, parašytą kopijuojant ir įdedant jau esamas standartines procedūras ir darydamas mažus pakeitimus, kurie keičia rezultatą. Skirtingos procedūros apjungtos taip, kad leistų matyti jų santykinę vietą programoje. To rezultatas – vaizdingas programos veikimo parodymas. Nors Subtext tebėra „mintinis kalbos dizaino eksperimentas“ ir „tik vinjetė to, kaip tokia programa turėtų atrodyti“, Edwardsas mano, kad tai geras pirmasis žingsnis.

Panašiai, kaip Edwardsas, Victoras irgi pramina naują „leidimo žmonėms matyti, ką jie daro“ kelią. Jo schemoje programuotojas gali regėti tarpinius programos žingsnius ir realiu laiku patikrinti, kas nutinka su rašomu kodu.

Šie bandymai įkvėpė programuotoją Chrisą Grangerį sukurti kitą inovaciją, Light Table. Ji leidžia koduotojui dirbti taip, lyg viskas, ko reikia, būtų prieš jį ant stalo, lengvai pasiekiama ir pajudinama. Programos elementų surinkimas iš karto sukuria rezultatą, ir bet kokie kodo pokyčiai – geri ar blogi – matosi iš karto.

Bet radikaliausias pasirinkimas būtų leisti programoms pačioms save rašyti, priklausomai nuo to, ką norite, kad jos darytų – visiškai išvengiant jūsų lingvistinių nuodėmėlių.

Tam tikra prasme, tai jau vyksta. Dabar kalbos pasirinkimą užduočiai lemia apsisprendimas, kokius jau sukurtus modulius ir bibliotekas galima parsisiųsti iš interneto. „Pirmas dalykas, ką daro žmonės, tai ieško internete ar kas nors tai jau yra padaręs anksčiau,“ sako Lopes. „Netgi ekspertai, kaip aš, tai daro: profesionalūs programinės įrangos kūrėjai Google naudoja liberaliai.“

Tada, kai užstringa, jie vėl kreipiasi į Google: per pastaruosius penkerius metus, internete išdygo plačios sukauptų žinių bazės. „Septintajame dešimtmetyje buvo iš tiesų sunku atstrigti,“ sako ji. „Reikėjo skaityti žinynus ar skambinti ekspertams. Kas tada truko savaitę, dabar užima dvi minutes.“

Tad, kodėl tuo nepasinaudojus ir nesukūrus kalbos vien iš klausimų? Tegul kompiuteriai vysto savo kalbas ir programas, atsižvelgdami jiems pateiktas užduotis. Lopes svajoja sukurti būtent tokią sistemą, kuri sukurtų programą iš interneto paieškos užklausų. „Tai svajonė, bet daug jos jau yra pasiekiama,“ sako ji.

Žinoma, vien geresnis kompiliatorius neužbaigs visų programinės įrangos kabliukų. Taip pat reikės išspręsti gamintojų nesibaigiančią kovą, stengiantis suvilioti naudotojus atnaujinti turimą įrangą, prikišant savo produktus nereikalingų papildomų savybių, ar gal sumažinant spaudimą paleisti produktus į rinką kokybės sąskaita.

Todėl nė vienas iš reformatorių nepuoselėja jokių iliuzijų, kad pramonė nustums į šoną C++ bei Java ir pereis prie kalbos, pagrįstos Exceliu ar Google paieškomis. „Tai, ką turime dabar, veikia – jei norite įdėti pastangų,“ sutinka Edwardsas. Bet tai nereiškia, kad šių naujų kalbų kūrimas yra beprasmis užsiėmimas. „Argi nebūtų puiku, jei galėtume atverti tai normaliems, paprastiems žmonėms, ne tik moksliukams.“

Bevertės programavimo kalbos

Kompiuterių programavimo kalbos patyrė savotišką kambro sprogimą (žr. pagrindinį straipsnį aukščiau). Vos iš keleto buvusių šeštajame dešimtmetyje, dabar turime 3000 – 4000 kodavimo kalbų, galinčių duoti instrukcijas kompiuteriams. Bet yra ir keletas tokių, kurios neturi praktinio panaudojimo.

Žinomos, kaip ezoterinės programavimo kalbos, arba ezokalbos (angl. esolangs), jos turėtų praplėsti kalbos ribas, eksperimentuodamos su naujomis paradigmomis, o kartais vien siekiant pajuokauti su egzistuojančiomis kalbomis.

Pirmoji ezokalba, INTERCAL, buvo sukurta 1972 m. kaip to laiko įvairių programavimo kalbų parodija. Kita ezokalba, FALSE, buvo sukurta specialiai koduotojų klaidinimui neperskaitoma sintakse – kaip ir rodo jos pavadinimas.

Viena iš geriausiai žinomų ezokalbų nedelikačiu pavadinimu brainfuck, naudojanti vos aštuonias komandas. Norint atlikti ką nors sudėtingesnio, nei paprastą užduotį, reikia rašyti ilgus komandų sakinius ir dėl to kalba yra labai nepraktiška ir sunkiai suvokiama.

Dar yra whitespace, demonstruojanti, kokios absurdiškos kalbos gali būti. Ji ignoruoja bet kokius ženklus, kurie nėra tarpai, tabuliacijos žymės ar naujos eilutės ženklai.

Daugelis ezoterines kalbas sukūrusių programuotojų apibūdina jas kaip meno kūrinius. Tarkime, Entropy, aktyviai trukdanti programuotojui rašyti teisingą kodą, pamažu paverčiantį jį nesąmone. Jos kūrėjas Danielis Temkinas, iš Queenso, Niujorke, sukūrė kalbą kaip „įtraukiantį meno kūrinį“.

„Ją geriausiai patiria iš namų dirbantys vieniši programuotojai,“ rašo jis savo interneto svetainėje. „Entropy yra apie programavimo kompulsyvumą, logikos nelankstumą, kaip turime daryti kompromisus su kompiuteriu, norėdami, kad jis mus suprastų.“

Tikriausiai tai daugeliui mūsų neįkandama meno forma. Bet tai nereiškia, jog tai nėra menas. Sally Adee


Michael Brooks
New Scientist, № 2920

Didžiausios programinės įrangos klaidų sukeltos nelaimės

Protinga programinė įranga gali palengvinti mūsų gyvenimus, bet jų sutrikimo pasekmės gali būti katastrofiškos. Per praėjusius dešimtmečius kompiuterių klaidų sukeltos katastrofos lėmė mirtis ir sutrikdytus gyvenimus daugybei žmonių. Sally Adee peržvelgia šešias didžiausias programinės įrangos klaidų sukeltas nelaimes.

Kosmosas: Ariane 5

1996 birželio 4-ą dieną Europos kosmoso agentūra atliko Ariane 5 raketos bandymą. Klaida kontroliuojančioje programinėje įrangoje, parašytoje Ada programavimo kalba, privertė raketą susinaikinti po 37 sekundžių nuo starto.

Pinigai: Knight Capital

Pernai kompiuterio klaida vos nesukėlė investavimo firmos Knight Capital bankroto. Firma per pusvalandį prarado pusę milijardo dolerių, kai programinės įrangos klaida leido kompiuteriams pirkti ir parduoti akcijas be žmogaus priežiūros. Kompanijos akcijų kaina per dvi dienas smuko maždaug 75 procentais.

Medicina: Radioterapija

Devintame dešimtmetyje penki pacientai mirė, gavę didžiules rentgeno spindulių dozes dėl radioterapijos aparato Therac-25 programinės klaidos. Manoma, nelaimė įvyko dėl rikto, privertusio atskiras kodo gijas atlikti tą pačią užduotį tuo pačiu metu.

Jūsų debesys: Amazon „nulūžimas“

Pernai vasarą įvykęs Amazon serverių išsijungimas daugelį žmonių atskyrė nuo jų debesų kompiuterijos saugyklų. Išsijungimą – jo pirminė priežastis buvo žaibo iškrova – pratęsė anksčiau nepastebėtos programavimo klaidos. Dėl tokių paslaugų tiekėjų veikimo mastelio, jie darosi pažeidžiami dėl gedimų kaskados. Beveik visi intereto naudotojai dabar vienu ar kitu būdu naudoja debesų kompiuteriją – savo elektroniniam paštui, nuotraukų saugojimui ar naudodamiesi socialiniais tinklais, – o tai kelia klausimą dėl skaitmeninės nuosavybės saugojimo saugumo.

Infrastruktūra: JAV šiaurės rytų elektros tinklo išsijungimas

2003 Šiaurės Amerikos aptemimas, tuo metu antras pagal plotą energijos tiekimo nutrūkimas, įvyko dėl vietinio energijos tiekimo nutrūkimo, kuris nepastebėtas sukėlė grandininę reakciją ir ištrūko iš kontrolės. General Electric energijos priežiūros programinę įrangą paveikė tokio pat tipo problema, kaip ir sukėlusi apšvitinimo rentgenu nelaimę devintajame dešimtmetyje.

Transportas: American Airlines

Anksčiau šiais metais, programinės įrangos klaida nutupdė visus American Airlines lėktuvus. Klaida kompanijos Sabre rezervavimo sistemoje atsirado, sujungus dvi egzistavusias sistemas į vieną po kelių avialinijų apjungimo. Problema tikriausiai iškilo, bandant sulieti skirtingomis programavimo kalbomis parašytas platformas.

Aut. teisės: www.technologijos.lt

(26)
(0)
(1)

Komentarai (29)