Koodari ja samurai-koodi – kohti koodia parantavaa koodarikoodia

Maailmaa Suomesta käsin tarkastelevan nykykoodarin vinkkelistä satojen vuosien takainen Japani ja sen silloiset soturiyläluokan edustajat saattavat äkkiseltään tuntua kaukaisilta. Tämä on aivan luonnollista, ja aluksi tässä kirjoituksessakin mainitaan joitakin eroja samuraiden ja nykyohjelmistoihmisten välillä.

Tämän jälkeen kuitenkin päästään ehkä siihen mielenkiintoisempaan osuuteen – yhtäläisyyksiin. Niitä löytyy melko runsaasti, ja ne luovat pohjaa pohdinnalle siitä, voisiko (länsimainenkin) ohjelmistoteollisuus hyötyä esimerkiksi bushidōn keskeisten ihanteiden soveltamisesta.

Samurai vs. koodiapina: ilmeisiä eroja

Faktana voitaneen pitää, että entisaikojen samuraiden toimintaympäristö ja elämäntapa eittämättä erosivat melkoisesti nykykoodarin oloista. Tässä joitakin esimerkkejä:

  • Ohjelmistoliiketoiminnassa – niin kuin liiketoiminnassa yleisemminkin – raha on melko keskeinen vaikutin, ja samurait tunnetusti halveksivat rahaa eivätkä käsitelleet sitä mielellään. Nykyään ohjelmistotyötä pidetään yleisesti melko hyvin palkattuna, ja osalle koodareista tämä voi toimia motivaattorina hakeutua alalle.
  • Samuraiden elämään epäilemättä kuului stressi siinä kuin koodiorjankin elämään, mutta se syntyi suurelta osin varsin erilaisten vaikuttimien johdosta.
  • Yleensä samurailuokka – kasteista selvästi arvostetuin – mielletään säädyksi, johon ei hevin astuttu ilman asianmukaista syntymäoikeutta (vaikka kaikkina aikoina tämä ei tiukasti pätenytkään). Jonkinlaiseksi koodariksi taas voi nykyään ryhtyä liki kuka tahansa suhteellisen pieninkin ponnistuksin. Osittain tämä saattaa vaikuttaa alentavasti myös ohjelmistoammattilaisten arvostukseen muun yhteiskunnan silmissä, vaikka maailmaa hallitsevia ohjelmistoyrityksiä katsotaankin toisinaan ihaillen.

Niin haluttaessa toimenkuvien yksityiskohtia voisi tietysti kaivella ja tonkia eroavaisuuksien metsästämiseksi melko raa’asti, ja  luonnollisesti jo ajan kulumisesta sekä (etenkin länsimaista koodaria japanilaiseen bushiin vertailtaessa) kulttuurillisista eroista johtuen kaikenlaisia eroja voisi osoitella lisää varsin helposti. Jätettäköön tämä kuitenkin kotitehtäväksi asiasta kiinnostuneille ja pyyhällettäköön eteenpäin.

Yhtäläisyyksiä

Erojen lisäksi tosiaan yhteisiäkin piirteitä löytyy varsin runsaasti. Joitakin tällaisia – ensimmäiseksi mieleen juolahtaneita – avataan lyhyesti seuraavissa kappaleissa, jotka eivät millään muotoa muodosta aiheesta mitenkään kattavaa esitystä, mutta luovat silti pohjaa jatkotarkastelulle.

(Tekstin luonteesta johtuen asioita yleistetään ja oiotaan jossain määrin sekä käytetään sanoja melko vapaasti. Blogikirjoituksen tarkoitus tässä tapauksessa on ennemminkin välittää ajatuksia tiettyyn viitekehykseen sitoen kuin kirjoittaa täsmällisesti ja hyvin määritellyillä termeillä tai toimia historiallisena kuvauksena.)

Ammatillinen monipuolisuus

Eri aikakausina samurai-säädyn edustajilta edellytettiin jossain määrin erilaisia asioita, mutta hallittavien taitojen kirjo oli joka tapauksessa suuri. Jo pelkästään toimenkuvan taistelullinen aspekti edellytti jonkinasteista monipuolisuutta. Hallittava asevalikoima oli laaja, ja sōgō bujutsu -koulukunnat (monet varhaiset ryūhat olivat tällaisia) opettivat kamppailua ”kokonaisvaltaisesti”. Taistelutaitojen lisäksi herrasmiessotureilta luonnollisesti edellytettiin esimerkiksi etiketin tuntemista ja taiteiden harrastamista. Edo-kaudella erilaiset byrokraattiset velvollisuudet luonnollisesti toivat omat lisämausteensa vaadittuun osaamiseen.

Tyypilliselle liikeyritykselle on tärkeää pitää toiminnan kustannukset siedettävinä, mutta saada silti toimitettua asiakkaille riittävän laadukkaita tuotteita järkevässä aikataulussa pysyen. Lisäksi nykyään softatalolta kuin softatalolta odotetaan varsin laaja-alaista osaamista. Ohjelmistoammattilaisiltakin siis edellytetään monipuolisia taitoja. Matemaattisen logiikan tai yksittäisten ohjelmointikielten tai työkalujen hallinta ei tavanomaisissa olosuhteissa vielä riitä kovinkaan pitkälle, vaan menestyksekkäässä toiminnassa tarvitaan melkoisen ohjelmistotyökaluarsenaalin hallinnan lisäksi myös sosiaalisia taitoja, markkinointikykyä, lakiteknistä osaamista, ympäristön ja trendien seurantaa sekä jatkuvaa mukautumis- ja muuntautumiskykyä.

Harjoitus tekee mestarin?

Kyetäkseen täyttämään velvollisuutensa samurait harjoittelivat ankarasti lapsesta asti asemansa edellyttämiä taitoja. Sen lisäksi, että mestarillisia taitoja arvostettiin, säännöllinen harjoittelu ja taitojen jatkuva hiominen saattoivat myös selkeästi ja konkreettisesti pidentää elinikää.

Koodarin on luonnollisesti opeteltava tietyt perustaidot alalle päästäkseen, mutta se ei yleensä riitä, vaan hänenkin on ohjelmistoalan muuttuessa ja kehittyessä huimaa vauhtia jatkuvasti kehitettävä itseään ja opeteltava uusia taitoja pysyäkseen menossa mukana. Toisaalta myös mestarit, jotka ovat hioneet taitonsa yksittäisen aseen – vaikkapa tietyn (enemmän tai vähemmän antiikkisen) ohjelmointikielen – osalta ”täydellisiksi”, saattavat olosuhteiden salliessa löytää paikkansa ja saavuttaa arvostetun aseman.

Vastuu omista ja muiden teoista keskeistä

Samurai vastasi toimistaan feodaaliherralleen ja klaanilleen. Vastuun kantaminen konkretisoitui siten, että virheillä saattoi olla hyvinkin dramaattisia seurauksia niin yksilölle itselleen kuin esimerkiksi sukulaisillekin. Sen lisäksi, että itse pyrki toimimaan asianmukaisesti, oli tärkeää, että myös kaikki, joiden käytöksestä oli vastuussa, tekivät niin.

Nykyään ohjelmistotyössä seppukut eivät ole tavanomaisia, mutta kasvojen perinpohjaiseen menettämiseen on kuitenkin hyvät mahdollisuudet, jos tekee työnsä huonosti. Ohjelmistoja rakennetaan monenlaisiin tarpeisiin, ja poikkeamat virheettömästä, spesifikaation mukaisesta toiminnasta saattavat toisinaan olla vaikutuksiltaan hyvinkin kriittisiä. Vaikka koodia ei tuotettaisikaan järjestelmiin, joilla voi laukoa ydinohjuksia, on koodin korkea laatu aina valttikortti.

Tuotantoprosessissa ei siis ole suotavaa oikoa, ja jokaisen kontribuoijan tulee asennoitua tuotokseensa asiaankuuluvalla vakavuudella ja olla valmis kantamaan toteutuksestaan implikoituva henkilökohtainen vastuunsa. Kliseisesti tässäkin tapauksessa ketju (järjestelmä) on yhtä vahva kuin sen heikoin lenkki, ja yksittäisten koodarien vastuuntuntoisen suhtautumisen lisäksi laadunvarmistukseen esimerkiksi katselmoinnillisilla menetelmillä, testauksella sekä tarvittaessa ohjelmien oikeiksi todistamisen keinoin tulisi panostaa riittävästi, jotta vastuun kantamisesta yhtiötasolla ei tulisi ongelmaa ja jotta asiakkaille ei aiheutuisi turhaa harmia.

Konventioiden tunteminen tärkeää

Bushien elämässä etiketin ja konventionaalisten toimintatapojen tuntemus oli varsin keskeistä. Hyvät tavat helpottivat elämää, ja etikettivirheet saattoivat hierarkkisessa feodaaliyhteiskunnassa osoittautua toisinaan kohtalokkaiksikin. Taistelukentilläkin totunnaisten menettelytapojen hallitseminen (ja toisinaan kyky poiketa niistä) antoi etua.

Esimerkiksi protokollien standardoinnilla pyritään saavuttamaan mm. yhteensopivuusetuja, ja itse ohjelmistotyöhön liittyy runsaasti implisiittisiä oletuksia toimintatavoista, menetelmistä ja työkaluista. Ollakseen vakuuttava ja kyetäkseen toimimaan työssään kitkatta ohjelmistoammattilaisen tuleekin tuntea relevantit standardit, pystyä tarvittaessa noudattamaan niitä ja ”tietää, kuinka asiat tehdään” – tai vähintään kyetä ottamaan tarvittaessa selvää. Hyvät tavat helpottavat toimintaa niin työyhteisössä kuin asiakasrajapinnassakin.

Strategiset ja taktiset taidot

Usein liike-elämässä (softafirmoissakin) johtajistolla on tapana hakea oppia esimerkiksi Sunzin (Sun Tzu) kaltaisilta strategeilta, kuten joukkoja komentaneilla itämaisilla sotalordeillakin aikoinaan. Musashinkin näkemykset sisältynevät monien johtajien vakiolukemistoihin. Vaikka tavanomaisella riviohjelmistokehittäjällä ei usein olekaan valtaisia joukkoja komennettavina, hänkin toki voi hyötyä työssään strategisesta ja taktisesta pelisilmästä sompaillessaan projektinhallinnallisten haasteiden ja asiakassuhteiden hoitamisen parissa – luonnollisesti ottaen etiketin ja moraaliset näkökohdat huomioon.

Koodarin tie

Samuraiden elämää ohjaili (enemmän tai vähemmän ja luonnollisesti aikakauden mukaan eläen) bushidō, mutta aloin miettiä, löytyisikö vastaavaa kunniakoodia ja ohjenuoraa koodareille. Tunnetusti samuraikoodi tiivistyi kasaan perushyveitä, joita on usein pyritty soveltamaan mm. liikkeenjohtoon. Päätin yrittää sovittaa näitä (vapaina käännöksinä ja merkityksiä varsin liberaalisti venyttäen) yhtäältä vielä spesifisemmin ohjelmistoyrityskontekstiin ja toisaalta laajentaa tarkastelua johdosta myös organisaation ruohonjuuritasolle.

Julkisuuskuvastaan ja asiakkaidensa hyvinvoinnista kiinnostunut ohjelmistotalo tahtoo varmasti käyttäytyä sidosryhmiään (etenkin asiakkaitaan ja työntekijöitään) kohtaan oikeudenmukaisesti, ja tässä auttaa velvollisuudentunto. Toisinaan – jos ei nyt suoranaisesti kuolemaa uhmaava, niin ainakin lyhyen tähtäimen voitot vaarantava – rohkeus lähteä uusille urille ja tehdä asiat epäkonventionaalisesti saattaa olla ratkaiseva tekijä menestykseen pyrittäessä. Toisaalta myös itsekuria tarvitaan, jottei sorruta järjettömiin ylilyönteihin. Niin liikesuhteiden kukoistuksen kuin henkilöstön hyvinvoinnin kannalta kunnioitus, kohteliaisuus ja tarvittaessa myös myötätunto ja armeliaisuus ovat asiallisen toimijan ominaisuuksia, joiden kautta rakennetaan pohjaa lojaalisuudelle ja ruokitaan sitä. Edelleen rehellisyys ja kunniallisuus auttavat rakentamaan firmalle hyvää imagoa, mutta mikä vielä tärkeämpää, parantavat myös työntekijöiden oloja.

Sen lisäksi, että tällaisia avainsanoja kirjataan yhtiön arvodokumentaatioon ja että yhtiötä pyritään johtamaan siten, että se näyttäisi ulkoisesti hyvältä, kaikessa käytännön toiminnassa organisaation kaikilla tasoilla tulisi toteuttaa sanojen henkeä. Yksittäinen koodarikin voi puntaroida toimintaansa melko hyvin mainittujen ominaisuuksien kautta ja näin osaltaan edistää yhtiön kulttuurin (ja lopulta myös ulkoisen imagon) muotoutumista mielekkääseen suuntaan. Osittain tulkinta voi erota yhtiön tasolla tapahtuvasta tulkinnasta – esimerkiksi rohkeutta yksittäinen työntekijä saattaa tarvita kyseenalaistaakseen firmansa huonoja tai kunniattomia käytäntöjä; ellei kissoja saada nostettua pöydille, lojaalisuus työnantajaa tai kanssatyöntekijöitä kohtaan saattaa kärsiä.

Mainittuihin  bushidō-arvoihin voisi nykykoodareille – ja toki myös muille ohjelmistoyhtiön työntekijöille ml. johtoportaat – ehkäpä lisätä vielä ainakin informaation jakamisen ja läpinäkyvyyden, koska toimivan kommunikaation roolia ohjelmistotyössä on vaikea ylikorostaa. Lisäksi perinteisestä bushin mielenmaisemasta ja asennoitumisesta voisi koodarin tiehen vielä lainata ainakin tiettyä zenimäistä meditatiivista tyyneyttä ja yleisesti rauhallista tapaa suhtautua asioihin, vaikka yllätyksiä ilmeneekin koko ajan, deadlinet paukkuvat ja deploymentteja pitää suoltaa jatkuvasti. Tämä lienisi mielenterveydellisesti viisasta, vähentäisi huonojen paniikkiratkaisujen määrää  ja auttaisi koodaria panostamaan hyveisiin.

Esimerkiksi Yamamoto Tsunetomon Hagakuressaan rummuttamaa näkemystä bushidōn olemuksesta kuoleman ehdottomana valitsemisena voidaan tulkita monella tavalla (ja siitä voidaan olla montaa mieltä). Tähän tarkasteluun saattaa sopia paremmin (musashimaisempi) painotus, jossa oleellista on hyväksyä kuoleman mahdollisuus päättäväisesti. Yritystasolla rohkeutta toimia voi edistää, jos yritys ”elää kuin kuollut”, mutta asia ei ole ihan yksioikoinen, ja yrityksen tulisi muistaa pysyä lojaalina esimerkiksi henkilöstölleen. Yksittäisen työntekijän osalta tilanne on ehkä selkeämpi – ainakin triviaalisti tulkiten; jos koodataan se aktiivisesti mielessä, että jokainen hetki voi olla viimeinen, saattaa huonoja väliaikaisvirityksiä tulla tehtyä vähemmän, dokumentoitua paremmin jne.

Monilla reaalimaailman yhtiöillä saattaa olla perimmiltään hyvät tarkoitukset ja jalot päämäärät, mutta eräs jo mainittu seikka häiritsee usein keskeisten (enemmän tai vähemmän teoreettisiksi jäävien) arvojen heijastumista käytäntöön. Tämä seikka on suhtautuminen rahaan. Osittain johtuen toimintaympäristöstä ja yhteiskunnallisista rakenteista rahalla on ihan ymmärrettävästi ohjelmistoliiketoiminnassakin varsin keskeinen rooli. Voittoa ei kuitenkaan tulisi tahkota hinnalla millä hyvänsä, vaan tässäkin pitäisi muistaa itsekuri ja lojaalisuus kaikkia relevantteja sidosryhmiä kohtaan, jotta kunniallisuudesta ja oikeudenmukaisuudesta ei tarvitsisi luopua eikä lipsua.

Yhteenvetona vielä todettakoon, että ainakin vapaasti tulkiten monet bushidōn keskeiset hyveet soveltuvat mainiosti ohjailemaan koodarinkin elämää. Toisinaan tällaisia ohjenuoria soisi käytettävän enemmän, koska ihmisten ja organisaatioiden toiminta ei aina ole parhaimmillaan luonnontilaisena.