Valodas, valodas, valodas…
Nākamajā reizē abi jaunie programmisti devās uz Skaitļošanas centru strādāt ar skaitļotāju, jo Maija bija paziņojusi, ka runāt pietiekot. Varot jau būt, ka sacerēt visvisādus algoritmus par nezināmo Pēcīti un dažādiem skolēniem ir diezgan amizanti, tomēr Beisikāns taču nesākšot noliegt, ka tādi algoritmi nevienam nav vajadzīgi un jau sen ir laiks uzsākt ko tādu, kas varētu būt noderīgs, kaut vai pavisam nedaudz.
Taču ceļā Pēcis vēl turpināja stāstīt par algoritmiem.
Pasaule sastāv no atomiem un algoritmiem
— Zini, Maija, pašus algoritmus tu, protams, vari aizmirst kaut vai šodien pat. Bet, lai strādātu ar ESM, manuprāt, vajag izjust algoritmizācijas garu. Saprast, ka mums visapkārt ir algoritmi, algoritmi un nekas cits kā tikai algoritmi. Sarežģīti un vienkārši, asprātīgi un dumji. Katru rītu, kā tikai pamosties, tu sāc izpildīt algoritmus — apģērbšanās algoritmu, gultas klāšanas algoritmu, mazgāšanās algoritmu, tējas vārīšanas algoritmu, iešanas algoritmu un tā tālāk, un tā joprojām. Vispār vienmēr, kad mēs kaut ko darām, mēs izpildām kaut kādu algoritmu.

— Ūja, vai nu gluži vienmēr? Varbūt esi dzirdējis par tādu dabas parādību kā mīlestība? Vai algoritmi tev ir arī gadījumam, ja nejauši būs jānodarbojas ar šādām problēmām?
— Nu, ar to «vienmēr» es drusciņ pārspīlēju. Tam vajadzēja būt skaidram. Bez tava piemēra varētu nosaukt vēl arī citus, kur algoritma nav. Teiksim, diezin vai varētu izgudrot domāšanas algoritmu.
— Bet runā taču par domājošajām mašīnām, par mākslīgo intelektu. Vai neesi lasījis?
— Ai, zini, man liekas, ka tā ir baigā čuguna liešana! Pārāk daudz par šiem jautājumiem es gan vēl nezinu, bet jau tagad man ir skaidrs: domāšanas nevienā mašīnā nav un intelekta arīdzan. Manuprāt, tie, kas runā par mākslīgo intelektu, šiem vārdiem piešķir citu jēgu nekā tu, un tad ar viņiem ir grūti saprasties. Kaut gan, iespējams, ir arī tādi, kas tamlīdzīgus vārdus izmanto vientiešu muļķošanai.
Brīdi padomājis, Pēcis turpināja:
— Ja ESM patiešām arī spēj darīt kaut ko saprātīgas būtnes cienīgu, tad tas ir nevis mākslīga, bet gan pavisam dabiska intelekta — programmista prāta — nopelns. Un vispirms tavam programmista intelektam ir jāparādās algoritma radīšanā. Vajag precīzi aprakstīt visu, kas jādara, — to es tev jau stāstīju.
— Diez kādas ticības tavam «dabiskajam programmista intelektam» man gan nav. Nu labi, pamocījies, pamocījies un radīji izcilo Pēcīša mājāsnākšanas algoritmu. Un kas par to? Kam šis algoritms ir vajadzīgs?

Vēl par algoritmiem
— Tiesa jau tiesa, jebkurš skolēns mājās nokļūs arī tad, ja precīzu algoritmu neviens viņam nebūs devis. Bet iedomājies: ja nu viņam vajag šķērsot ielu? Tad būs jāievēro pietiekami skaidri formulēts algoritms — satiksmes noteikumi. Tie gan nav nekādi sarežģītie. Sarkana gaisma — stāvi uz vietas! Zaļa — skrien, cik gribi! Bet neviens taču nepiedzimst, šo algoritmu jau zinādams. Tas ir jāapgūst, bet vieglāk ir apgūt to, kas ir skaidri un gaiši pateikts. Vai tad ne?
— Tas gan, bet nesaprotu, kādēļ tu te par visu to runā.
— Gribu pateikt, ka, pirmkārt, šo to skaidri un gaiši pateikt jeb algoritmizēt ir vērts pat tad, ja neviens šeit netaisās izmantot ESM. Otrkārt, pasaulē ir drausmīgi daudz līdzīgu algoritmu, un tikai tāpēc ESM vispār kaut kam der. Iedomājies, teiksim, algoritmu, pēc kura autovadītājs šķērso neregulējamu ielu krustojumu. Tuvojoties šim krustojumam, viņam jāpaskatās pa labi un pa kreisi, gluži kā Pēcītim, taču jāskatās nevis uz Briesmoni vai Bidzi Huligānu, bet gan uz mašīnām, kas piebrauc no kreisās un it sevišķi no labās puses, un jāuzzina šo mašīnu turpmākā rīcība — vai tās brauks pa labi, pa kreisi vai taisni.
— He hē! «Mašīnas brauc», «mašīnu turpmākā rīcība» — un to saka cilvēks, kurš pavisam nesen uzstājās ar lielu runu par to, ka mašīnas pašas neko nedara.
— Jā-ā-ā... Ko lai dara, esmu iekritis. Varu vienīgi 32 piebilst: ja mēs mēģinātu aprakstīt autovadītāja rīcības algoritmu, tad no šī viedokļa nepavisam nebūtu svarīgi, vai mašīnas pie krustojuma piebrauc pašas, vai arī tās vada cilvēki. Svarīgi būtu tas, ka kaut kas ar kaut kādu ātrumu pārvietojas krustojuma virzienā. Tas bija algoritms vadītājam. Ielu satiksmes automātiskās vadības sistēmai, protams, būtu cits algoritms: tai jāskaita, cik mašīnu stāv pie sarkanās gaismas, jāmēra, cik ilgi tās stāv, un atkarībā no šīs informācijas jāpārslēdz luksofora gaismas.
— Liekas pavisam vienkārši.
— Tur jau ir tā lieta, ka tikai liekas. Ja sāktu darīt, tad sarastos tik daudz vērā ņemamu sīkumu, ka uzreiz viss sajuktu. Kamēr neesi sācis darīt, vienmēr liekas, ka darbs būs viegls.
— Kā nu kuram. Man dažreiz grūtāk ir darbu iesākt, bet, kad sāku... Uzreiz viss kļūst viegli... Dīvaini gan sanāk: es visu mūžu esot izpildījusi daždažādus algoritmus. Man tas pat prātā nebija ienācis. Nemaz nevar noticēt. Tiesa, mazliet pārliecina tie piemēri ar skolnieces rīta algoritmiem, visādiem tējas vārīšanas un citiem... Bet tik un tā par pašu galveno tu vēl neko neesi teicis. Kā ESM strādā, kā tā saprot, ko vajag darīt?
— Nekā tā nesaprot! Es taču teicu, ka patiesībā tā nesaprot vairāk... kā televizors, kas rāda ļoti gudru raidījumu!
— Bet kā tomēr iespējams, ka izskatās, it kā mašīna saprastu?
— Ja runājam pavisam godīgi, jāatzīstas, ka līdz galam es to nezinu. Man to nemaz neskaidroja, teica, ka tad vajagot apgūt mašīnas komandas, bināro aritmētiku, matemātisko loģiku un vēl nezin ko. Apgūt to visu varot, tas gan esot diezgan sarežģīti, tomēr saprotami. Taču nemaz jau nav visā pilnībā jāzina, kā strādā motors, lai bez avārijām varētu braukt ar automobili. Tev varu izstāstīt tikai to, ko mums stāstīja Algoritms un ko es, šķiet, esmu sapratis. Algoritms apgalvoja, ka ar izstāstīto pietiekot, lai sastādītu tādas skaitļotāju programmas, kurām būtu jēga un no kurām būtu kaut kāds labums. Un izskatās, ka tiešām pietiek. Bet arī mani dažreiz nomoka ziņkārība: kas gan tur mašīnā iekšā notiek?
— Ko ar tevi lai dara, ja esi tāds neapmācīts. Un kas gan ir tas, ko tu tik lieliski esi apguvis?
Valodas, kurās programmisti runā ar skaitļotājiem
— Es runāju par algoritmiskajām jeb programmēšanas valodām. Jeb, precīzāk, par vienu no tām — par beisiku, kuru es zinu un kurā sastādu programmas, kaut arī ne pārāk lielas un svarīgas. Par šo valodu es tev drīz sākšu stāstīt.

— Skaidrs. Bet, lai viss izskatītos sistemātiski un zinātniski, pirms sāksi stāstīt par beisiku, kuru tu zini, vispirms parunāsi par valodām vispār — par afrikāņu un indiāņu valodām, par putnu, bišu, suņu un kaķu valodām, par puķu valodu jeb, īsi sakot, par visu to, ko tu galīgi nesajēdz.
— Tas nu gan ir nepelnīti. Ja kaut ko nezinu, es to godīgi arī pasaku. Vai tad tā nav?
— Neliela profilakse nekaitēs. Nav ko cemmēties, Beisikān.
— Bet par programmēšanas valodām vispār drusciņ vajadzētu parunāt. Citādi var gadīties, ka tu apgūsti beisiku un tev sāk likties, ka nu tu esi tik gudra, tik gudra kā pats... kā pats... skolas direktors.
— Labi, labi. Turpini vien tālāk.
— Patiesība ir tāda: ESM apstrādā informāciju — un tikai. Tas nozīmē, ka tajā tiek ievadīta un no tās arī izvadīta kaut kāda informācija. Citiem vārdiem sakot, mašīnā ievada kaut kādus simbolus, tas ir, ciparus vai burtus, un no tās arī saņem kaut kādus simbolus. Protams, ļoti vēlams, lai saņemtajiem simboliem būtu kāda jēga.
— Nezinu, kāpēc tevi visu laiku velk uz filozofiskām virsotnēm. Izskaidro dumiķītei vienkāršāk. Ar piemēriem, pavisam vienkāršiem piemēriem.
— Ar piemēriem? Zini ko, piemēru tev būs vesels maiss, kad mēs tiksim pie mašīnas. Bet pagaidām iztiec ar šādu piemēru. Vai vari iedomāties mašīnu, kura spēlē šahu?
— Varu.
Ievada un izvada informācija
IZVADINFORMĀCIJAIEVADINFORMĀCIJA— Nav pat svarīgi, šahu vai citu spēli. Vispirms mašīnā jāievada spēles sākumpozīcija. Mašīnai tā būs ievades informācija jeb ievaddati. Pēc tam, lai sanāktu spēle, mašīnā jāievada savs gājiens. Gājiens arī ir ievadinformācija. Līdzko mašīna ir saņēmusi pretspēlētāja gājienu, tai šī informācija jāapstrādā, protams, ņemot vērā spēles pašreizējo stāvokli. Šīs apstrādes rezultātā mašīna atrod savu gājienu, kas ir jāizvada, citādi pretspēlētājs to neuzzinās. Šis gājiens būs izvadinformācija jeb izvaddati. Par ievadāmo un izvadāmo informāciju tas nu būtu viss. Pats galvenais, kā tu pati saproti, notiek laikā starp ievadi un izvadi, kad saņemtā informācija tiek apstrādāta pēc attiecīgā algoritma. Patiesībā šis algoritms nosaka ne tikai to, kas ar mašīnā ievadīto informāciju notiks, bet arī to, kāda informācija vēl jāievada un kāda tiks izvadīta. Un visām šīm darbībām algoritmā jābūt precīzi aprakstītām. Pie tam tādā formā, kas ir piemērota darbam ar mašīnu. Un tā tad arī ir programma šai mašīnai.
— Beidzot esam tikuši līdz jēdzienam, kura dēļ viss sākās!
Programmistiem ir jāsastāda programmas
PROGRAMMĒŠANAS VALODASPROGRAMMA— Programma patiešām ir ļoti svarīga lieta. Bez tās elektroniskā skaitļošanas mašīna ir skapis ar degošām spuldzītēm. Daudzi pat uzskata, ka pareizi ir sacīt nevis «mašīna spēlē šahu» vai «mašīna apstrādā informāciju», bet gan «programma spēlē 35 šahu» vai «programma apstrādā informāciju». Viņiem varētu piekrist, jo patiešām programma ir tā, kas realizē šaha spēles algoritmu. Varētu piekrist, ja nezinātu, ka programma bez pašas mašīnas ir tikai nevajadzīgi ķeburi uz papīra. Tālāk, tev jāzina, ka programmas raksta programmēšanas valodās. Tā kā programma faktiski ir algoritma apraksts, tad šīs valodas vari saukt arī par algoritmiskajām valodām. Vēl var teikt, ka programma ir algoritms, kas uzrakstīts cilvēkam un mašīnai saprotamā formā.

— Haha! Re, ka atkal iekriti! Tu taču teici, ka mašīna nekā nesaprotot un tie, kas apgalvo, ka saprot, esot galīgi stulbeņi.
— Es, pieņemsim, teicu ne gluži tā, bet vispār teiktā jēgu tu esi sapratusi brīnišķīgi. Varbūt es pārteicos pedagoģiskos nolūkos, lai noskaidrotu, vai tu pamanīsi vai ne. Tagad pasaki šo teikumu pareizi.
— Programma ir algoritms, kas uzrakstīts formā, kura saprotama cilvēkam un... un...
— ...piemērota izpildei ar ESM. Tā varētu teikt. Bet tā nav definīcija, no galvas vari nemācīties, neviens tev to neatprasīs.
— Vai tiešām? Bet es jau biju sataisījusies iezubrīt visus tavus izteikumus.
— Tagad iznāk tā. Lai ar ESM risinātu kādu uzdevumu, vispirms mums jāizdomā algoritms. Pēc tam jāuzzīmē šī algoritma blokshēma, kā mēs to jau darījām, jāuzraksta programma un, visbeidzot, šī programma jāievada mašīnā. Ja gribi, tad uzskati, ka esmu izstāstījis superalgoritmu, tas ir, algoritmu, 36 pēc kura jārīkojas, uzdevumus risinot ar ESM. Šim algoritmam arī varētu uzzīmēt blokshēmu, kas, tiesa gan, būtu ļoti vienkārša. Vai skaidrs?


— Nu... Skaidrs.
Valodas kā sazināšanās līdzeklis
— Programmēšanas valodu ir ļoti daudz. Viena tipa uzdevumu risināšanai piemērotāka ir viena valoda, otra — cita. Tas ir gluži tāpat kā dzīvē. Mēs ar tevi tagad runājam vārdu valodā, bet mūziķi savā starpā sazinās nošu valodā, protams, ja runa ir par mūzikas gabalu atskaņošanu. Vari droši uzskatīt, ka komponists savu skaņdarbu izpildīšanas algoritmu raksta nošu zīmju valodā. Savukārt arī pati mūzika — es domāju nevis uzrakstīto, bet gan jau skanošo — ir valoda — skaņu valoda. Tiem, kuri to saprot, tā kaut ko taču izsaka.
— Tikai mūzika izsaka nevis ar vārdiem, bet gan ar «izteiksmes līdzekļiem».
— Jā, jā. Tagad iedomājies citu gadījumu. Autoinspekcija ceļa zīmju un luksofora signālu valodā programmē ielu satiksmi, jo gan ceļa zīmes, gan luksofora signāli nosaka autovadītāju darbības algoritmus konkrētajā situācijā. Bet vispār, ja mazliet padomā, kļūst skaidrs, ka gan komponists, gan autoinspekcija visu vajadzīgo principā varētu izteikt ar parastajiem latviešu valodas vārdiem. Notīm taču ir nosaukumi, un «ķieģeļa» vietā varētu pakārt uzrakstu «iebraukt aizliegts». Vai saproti, kādas grūtības tad rastos?

— Kas tur ko nesaprast! Sevišķi grūti būtu tiem, kas latviski nesaprot.
— Līdzīga situācija esot arī ar programmēšanas valodām. Katru no tām vai vismaz vairākumu var uzskatīt par universālām, un kaut kā noprogrammēt lielākās uzdevumu daļas izpildīšanu var katrā. Taču labi tas izdosies tikai ar kaut kādu uzdevumu klasi. Tā nu tas ir. Personiski es zinu tikai vienu programmēšanas valodu — beisiku. Šo valodu neuzskata par pašu labāko, varbūt tāpēc, ka tā ir vienkāršāka par citām. Neņemos spriest, vai tas ir liels trūkums, bet mans paziņa no fizmatiem Andris Fortranietis, kas programmē fortranā, uz manu noņemšanos raugās no augšas. Tiesa gan, par viņu pašu diezgan slikti atsaucas viņa lielīgais kursabiedrs Vilis Peello, kas strādā valodā PL-1. Varbūt tu arī ar šito publiku iepazīsties, viņi tepat pa centru klīst bieži.