Käytännönesimerkki ohjelmoinnillisen ajattelun tärkeydestä

Käytännönesimerkki ohjelmoinnillisen ajattelun tärkeydestä

Moni on kysynyt, että miksi ihmeessä ohjelmointia pitää opettaa kaikille. Varsinaista koodaustaitoa tärkeämpi onkin ns. ohjelmoinnillinen ajattelu ja sen oppiminen. Hyvä käytännönesimerkki ohjelmoinnillisen ajattelun osaamisen tärkeydestä on ranskalaisen lehtimiehen ja kirjailijan Jean-Dominique Baubyn tarina.

Bauby toimi tunnetun naistenlehden päätoimittajana, kun hän eräänä päivänä odottamatta tunsi pahoinvointia ja vaipui koomaan. Koomasta herättyään hänellä todettiin locked-in-syndrooma: tila, jossa hän on täysin halvaantunut lukuun ottamatta toista silmäluomeaan, jota hänen onnistuu liikuttaa. Näin ollen kommunikointi sairaalahenkilökunnan, omaisten ja ystävien kanssa oli haasteellista. Baubyn puheterapeutti keksii kuitenkin toimivan kommunikointitavan: hän kirjoitti tukevalle paperille ranskan kielen aakkoset, joiden avulla hän luetteli aakkosia, kunnes oikean kirjaimen kohdalla Bauby liikutti silmäluomeaan. Näin jatkettiin, kunnes Bauby oli saanut sanottavansa loppun.

Menetelmä on kuitenkin todella hidas: kokeile vaikka. Pyydä kaveriasi selvittämään vaikkapa äitisi etunimi siten, että hän luettelee aakkosia ja sinä räpäytät silmiä oikean kirjaimen kohdalla. Jos vaikka äitisi etunimi on Salli, niin räpäytät ensimmäisellä kerralla S-kirjaimen kohdalla, kun kaveri on luetellut 19 kirjainta. Seuraavaksi räpäytät A-kirjaimen kohdalla (1), L-kirjaimen kohdalla (12), jälleen L-kirjaimen kohdalla (12) ja vielä I-kirjaimen kohdalla (9), kunnes etunimi on selvillä. Kaveri luetteli siis yhteensä 53 kirjainta pelkän nimen selville saamiseksi. Kokeilepa seuraavaksi vastata samalla tavoin kysymykseen: millaisia kesälomasuunnitelmia sinulla on?

Tällainen menetelmä on hidas ja virhealtis; räpäytitkö välillä silmiä luonnostaan tai tulkitsiko kaveri räpäytyksesi väärän kirjaimen kohdalla? Kyseessä on yksinkertainen valinta-algoritmi, jollainen toimisi myös tietokoneella. Algoritmia voidaan kehittää ja nopeuttaa eri tavoin, kuten Baubyn puheterapeuttikin teki. Hän muunsi algoritmin ensin muotoon, jossa aakkosten sijaan kirjaimet lueteltiinkin niiden yleisyyden perusteella. Suomenkielen seitsemän yleisintä kirjainta olisivat a, i, t, n, e, s, ja l. Tämä algoritmi on jo nopeampi kuin kirjainten luetteleminen aakkosjärjestyksessä. Salli-nimen selville saaminen vaatisi suomenkielessä 6 + 1 + 7 + 7 + 2 = 23 kirjainta. Tämä algoritmi on puolet nopeampi kuin edellenien, mutta edelleen melko hidas.

Ohjelmoinnillisen ajattelun tunteminen antaa tässä tapauksessa hyvät eväät algoritmin kehittämiselle. Eräs tehokkaimmista algoritmeista on ns. puolitusalgoritmi, jossa karsitaan jäljelle jäävää joukkoa aina puoleen. Tässä aakkosten tapauksessa voitaisiin aloittaa sillä, että onko kyseessä aakkosten alkuosassa (A-N) vai loppuosassa (O-Ö) oleva kirjain. Salli-esimerkin tapauksessa puolitusalgoritmi toimisi seuraavasti:

  1. S-kirjain on aakkosten loppuosassa (O-Ö)
  2. S-kirjain on edellen loppuosan (O-Ö) alkupuoliskossa (O-V)
  3. S-kirjain on edelleen välin (O-V) loppuosassa (S-V).
  4. S-kirjain on välin (S-V) alkuosassa (S,T)
  5. S-kirjain on kirjaimista S ja T ensimmäinen.
Näin ollen S-kirjain saatiin selville viidellä kysymyksellä. Puolitusalgoritmilla oikea kirjain löytyy aina maksimissaan kuudella kysymyksellä. Näin ollen Salli-nimen selvittämiseen tarvittaisiin maksimissan 30 kysymystä.

Jos Baubyn lääkärit ja hoitajat olisivat osanneet ohjelmoinnillista ajattelua ja kyenneet kehittämään helpompia algoritmeja kommunikointiin, olisi Baubyn hoitaminen varmasti ollut heti alusta alkaen helpompaa. Nopeamman kommunikointialgoritmin löydyttyä Bauby kirjoitti avustajan kanssa vuonna 1997 omaelämäkerran Perhonen lasikuvussa pelkästään silmiään räpäyttämällä. Vuonna 2007 kirjasta julkaistiin samanniminen elokuva.