Tässä Unixin opettamisessa lapsille on käytössäni yksi hyvin, hyvin tärkeä ominaisuus, jota ilman en suoraan sanoen pystyisi opettamaan ainakaan viisivuotiaalle mitään. Se on bashin (ja monen muunkin shellin) ominaisuus, että varhempia käskyjä pystyy hakemaan ylöspäinnuolella.
Ajattelin kertoa, miksi tämä ominaisuus on tärkeä. Ensinnäkin lapset tekevät valtavasti kirjoitusvirheitä, ja tyypillinen ongelma on, että lapsi painaa vahingossa enteriä, kun pitäisi painaa backspacea (merkkien korjaamiseksi). Käskyjen hakeminen historiasta aiheuttaa, että nämä ovat vain pikku mokia, joista on joskus hyvä oppiakin.
Toinen, tärkeämpi syy on, että kun putkien käyttöä opetetaan, on tärkeää näyttää jokainen välivaihe putkiprosessoinnista. Niinpä kaikki pitkät putket tehdään komponentti kerrallaan, ajetaan komento, lisätään taas uusi filtteri linjan perään, ajetaan, ja niin edelleen. Joskus putkeen pitää väliaikaisesti lisätä "|head", koska tulostetta olisi muuten liikaa. Sitten komento taas haetaan historiasta, head poistetaan, ja jatketaan putkea eteenpäin.
Kolmas syy on se, että historian olemassaolo helpottaa dramaattisesti shell-funktioiden kirjoittamista. Shell-funktiot ovat suhteellisen edistynyt ominaisuus, jota moni Unix-gurukaan ei käytä oikeastaan koskaan. Ne ovat kuitenkin aivan poikkeuksellisen helppoja tehdä ja ymmärtää, myös lapsille, joten suosittelen niiden opettamista lämpimästi. Perusidea on se, että ensin tehdään jokin monimutkainen komento, sitten haetaan se historiasta ja muutetaankin funktioksi. Esimerkiksi näin:
$ sox -n -p synth 1 sin C4 sin E4 sin G4 remix - | play -p $ sointu () { sox -n -p synth 1 sin C4 sin E4 sin G4 remix - | play -p ; } $ sointu () { sox -n -p synth 1 sin $1 sin $2 sin $3 remix - | play -p ; } $ sointu () { sox -n -p synth $4 sin $1 sin $2 sin $3 remix - | play -p ; }
Shellin omituinen syntaksi jopa helpottaa funktioiden vaiheittaista parametrisointia: formaaleja argumentteja ei tarvitse deklaroida, kun ne otetaan käyttöön. Tämä kätevyys on keskeinen syy, miksi en vaivautunut enää tekemään penskoille aliaksia kaikenmaailman sox-käskyille: totesin, että parempi, että itse päättävät, mille haluavat lyhenteen ja mille eivät.
Sitten on vielä yksi syy: saatuaan aikaan hauskan lopputuloksen lapsi usein haluaa toistaa komennon. Ja toistaa sen taas. Ja vielä kerran. Ja vielä kerran. Ja vielä kerran.
Vihreässä Langassa oli niin hyvä kolumni/pakina, että pitää mainostaa:
http://www.vihrealanka.fi/blogi/facebook-kaveri-raivostuttaa-mutta