Hitaasti hyvä tulee tai ainakin parempi mieli

Tänään Helsingin Sanomissa kirjoitettiin ”Stahanovien maa” -otsikolla kovatempoisesta 2000-luvun Suomesta ja kuinka hitaus, yhteiskunnallisena selviytymisstrategiana, on nousussa. Slow movement, downshifting, tempo giusto eli elämän hidastaminen on kirjoituksen mukaan väsähtävän keskiluokan vastaliike kiihtyvälle tempolle. En ala kirjoitusta tähän referoimaan, mutta asiaa käsitellään aika hyvin ja niin sanotun hitausliikkeen perusideat tulevat selville. Kiire ja nopeuden ihannointi on levinnyt kaikkialle, eikä se ole ollenkaan positiivinen asia. Jopa klassista musiikkia soitetaan nopeammalla tahdilla kuin aikaisemmin.

Jutussa kirjoitetaan lisäksi hitausliikkeen esitaistelijasta, kanadalaisesta toimittajasta Carl Honorésta, joka painoi pausea ja kirjoitti ”Slow – Elä hitaammin”-kirjan. Kesällä ja alkusyksystä kyseistä kirjaa lukiessa alkoi kyllä ajattelemaan, että mihin tässä oikeasti on kiire ja eikö asioita voisi tehdä hieman hitaamminkin. Kannattaa vilkaista Honorén puhe hitaudesta ja kiireettömyydestä TED Talkista.

Etenkin töissä näkee, että usein puristetaan projekteja tiukoissa aikatauluissa ja ilmapiirikin on usein kovin kiireinen. Tekemällä asioita hieman hitaammin, olisi usein myös lopputulokset parempia ja harkitumpia. Lisäksi, jos vielä käytetyt systeemityömallit olisivat hieman ketterämpiä, saataisiin vähemmällä työllä enemmän aikaan. Olisi lisäksi hyödyllistä ottaa lyhyet päiväunet töiden lomassa ja kuten nokkaunimies Winston Churchill aikoinaan totesi: ”Älkää luulko, että tekisitte vähemmän töitä, jos nukkuisitte päivällä. Se on typerä luulo, jota pitävät yllä mielikuvituksettomat hölmöt. Saatte aikaan enemmän. Teette päivässä töitä kahden edessä… no puolentoista.”

Työelämän kiirettä on usein vaikea hiljentää sikariportaan vanhoillisten johtamistapojen vallitessa, mutta vapaa-aikaansa voi hidastaa. Ei hitaus itsessään ole varsinaisesti mikään itseisarvo ja tietyt asiat vaativat nopeutta, mutta nauttimalla asioista ja käyttämällä kiireettömästi aikaa johonkin, saa usein ainakin paremman ja rauhoittuneen mielen. Muutaman tunnin pyöräily metsän siimeksessä ja kirjojen lukeminen onkin jo tullut todettua käteväksi tavaksi irtautua reaalimaailmasta ja häivyttää arkiset kiireet. Etenkin raikkaan ulkoilman ja liikunnan jälkeen mielikin on jälkeenpäin parempi. Honorén kirjaa lukiessa lisäksi mietin, että voisi olla kiva kokeilla myös joogaa. Vielä kun tuon ajatuksen saisi viety toteutuksen asteelle.

Kirjoituksen otsikkoon viitaten, Aleksei Stahanov oli neuvostoliittolainen kaivosmies, jonka (kommunistipuolue) väitti vuonna 1935 sankarillisesti louhineen 102 tonnia hiiltä viidessä tunnissa ja neljässäkymmenessäviidessä minuutissa. Eli tehneen töitä niin perkeleesti.

Päivän linkit 20.12.2008

Ikean tee-se-itse Bestå TV-taso

Pääsin viimeinkin viime viikonloppuna käymään Ikeassa, sillä TV-tasostani oli tullut auttamatta liian pieni kaikille vempeleille. Löysinkin muutamia potentiaalisia vaihtoehtoja, mutta kaikissa oli jotain hyvää ja jotain huonoa. Näköjään myös huonekalujen valinta voi olla vaikeaa.

Löysin kuitenkin melkein kelvollisen TV-tason, vaikka en kyllä pystynyt ymmärtämään suunnittelijan ajatuksia. Mitä tekee TV-tasolla, jossa välitasojen takaosassa ei ole aukkoa johtojen läpivientiä varten: ei sitten yhtikäs mitään. No, ainahan reiät johdoille voi tehdä itsekin.

Bestå TV-tasoon syntyikin helposti johtojen läpiviennit luikauttamalla sahalla pienet puolipyöryläiset reiät takaseinän ohueen levyyn. Työkalupakistani ei kyllä löytynyt oikein kunnollisia työvälineitä, mutta kyllä se pieni rautasahakin ”puuhun” upposi kuin sulaan voihin. Helpointa olisi ollut hurauttaa reikäsahalla, mutta paikallinen Clas Ohlson oli ilmeisesti lopettanut käsiporien myymisen, enkä tätä varten halunnut sähköporaa hankkia. No, reiät tuli kuitenkin saatua aikaan ja melkeinpä vielä pyöreät.

Ikean Bestå -huonekalusarja on muuten aika näppärä, sillä sarja on käytännössä kuin aikuisten Lego-sarja, jossa erilaisista osista rakennetaan haluttu kokonaisuus, tai ainakin melkein. Tietenkin jos haluaa huonekalunsa puusta, eikä puristetusta pahvista, kannattanee suunnata jonnekin muualle kuin Ikeaan.

Bestå Bestå

Parranajo ja Gillette Fusion Power Stealth

Olen parran kasvun alkamisesta lähtien ajanut parran sähkökoneella ja partahöyliin saati perinteiseen veitsellä partakasvuston siistimiseen ei ole tullut juurikaan tutustuttua. Luotettava Braunin partakoneeni alkoi kuitenkin jo olemaan elinkaarensa päässä teränvaihdosta huolimatta, joten oli siis aika tutustua hieman tarkemmin mitä partahöylillä olisi tarjottavana.

Tekniikkaa rakastavana ihmisenä ostin kaupasta tietenkin Gilleten (flash) turuilla ja toreilla mainostettavan Fusion Power Stealth -partahöylän ja Fusion Hydra Gel -partageelin sisältävän paketin. Kyseisestä höylästä löytyy ”5 entistä lähemmäksi toisiaan sijoitettua Power Glide -terää. Tällöin yksittäiseen terään kohdistuu vähemmän painetta ja parranajo on ennenkokemattoman miellyttävää.” ”Joustavat Comfort Guard mikroliuskat (15 kpl) kohottavat partakarvat ihosta, jolloin parranajo on uskomattoman miellyttävää ja tarkkaa.” Lisäksi höylässä on E-vitamiinia, aloeta ja luonnonöljyjä sisältävä Indicator Lubrastrip voitelunauha. Kaiken lisäksi partahöylä on varustettu Power Handle -varrella, joka tuottaa hellävaraisia mikrosykähdyksiä. Vaihtoterän takaa löytyy parranrajausterä esimerkiksi pulisonkien ajoon ja parran muotoiluun.

Kaikkea ne mainosmiehet ja insinöörit keksivät, mutta korulauseista ja ominaisuuksista huolimatta, ei Gilleten partahöylien lippulaiva oikein nostattanut tunteita. Ainakaan positiivisia. Kenties en vain osaa ajaa partaa oikein partahöylällä, sillä tuntui että höylä enemmänkin repi karvoja naamasta kuin leikkasi niitä. Ainakin ajo oli takkuista. Luin kyllä partahöylällä ajon ohjeet, mutta ei se juurikaan auttanut. Kaiken kukkuraksi partahöylällä ja -geelillä lutraaminen on mielestäni aikaa vievää ja hankalaa.

Partahöylät ovat varmasti käteviä ja hyviä välineitä, mutta itselleni ne eivät oikein tunnu sopivan. Parempi siis vain pysyä partakoneiden parissa ja tilata uusi Braun lähimmästä verkkokaupasta. Partakoneita (Brauneja) kun on tarjolla liikkeissä rajoitetuin valikoimin ja ikävän ylihinnoiteltuina. Onneksi Koneboxissa sattuikin sopivasti olemaan tarjouksessa Braunin 9585 -partakone Clean & Renew -latausasemalla. Siinä vasta hieno laite onkin.

No, pitänee kuitenkin joskus viikonloppuisin ajaa välillä parta myös höylällä ja siten voi vaikka vertailla leikkausjälkeä.

Fusion Power

Versionhallinnan parhaat käytännöt koodaajalle

Versionhallinnasta ja siihen liittyvistä asioita on kirjoitettu paljon, mutta useissa kirjoituksissa on keskitytty lähinnä teknisiin asioihin ja eri versionhallintajärjestelmien mahdollistamiin asioihin. Harvat kirjoitukset keskittyvät käytännön asioihin ja niin sanottuihin parhaisiin käytäntöihin, joita soveltamalla versionhallinnan käytöstä saa paljon enemmän irti.

Muutamia käteväksi todettuja ja omasta mielestäni ”parhaita käytäntöjä” koodaajan näkökulmasta ovat muun muassa:

  1. Työn kulku
  2. Vie koodi versionhallintaan usein ja aikaisin
  3. Vie yhtenäisiä kokonaisuuksia
  4. Kirjoita järkeviä commit-viestejä
  5. Tee koodaustyylin muutokset erillään oikeista muutoksista
  6. Älä vie tiedostoja, jotka muuttuvat dynaamisesti
  7. Älä vie koodia, joka ei käänny


1. Työn kulku
”Version Control with Subversion” -kirja selvittää normaalin työn kulun, joka on hyvä omaksua versionhallintaa käytettäessä (hieman sovellettuna):

  1. Hae koodista tuorein versio versionhallinnasta
  2. Toteuta koodiin tehtävät muutokset
  3. Hae tuorein versio ennen koodin vientiä versionhallintaan
  4. Aja testit uudestaan ja varmista, että tekemäsi muutokset toimivat
  5. Vie koodi versionhallintaan yhtenä kokonaisuutena
  6. Selvitä konfliktit
  7. Tarkista, että versio kääntyy myös build-palvelimella
  8. Korjaa virheet tai palauta

2. Vie koodi versionhallintaan usein ja aikaisin
On suositeltavaa toteuttaa Check In Early, Check In Often -periaatetta. Tällöin muut näkevät mitä olet tekemässä ja koodi on muidenkin käytössä.

”If the code isn’t checked into source control,
it doesn’t exist.” – Coding Horror

Lisäksi jos piilottelet koodia omalla koneellasi, etkä synkronoi sitä versionhallintaan pitkään aikaan, voi muutosten yhdistämisestä tulla erittäin työlästä. Pieniä kokonaisuuksia on helpompi verrata ja saadaan aikaan vähemmän konflikteja.

Vaikka idean järkevyys ja käytännöllisyys on helppo ymmärtää, on käytännön toteutus usein jotain muuta. Itse olen ainakin huomannut, että omaa koodia tulee helposti pantattua levyn nurkalla, kunnes kyseinen ominaisuus on ”valmis” ja testattu.

”Hiding your code until it’s ”done” may feel safer, but it isn’t. Sharing your ongoing code with your coworkers is scary, much less the world — but it also results in feedback and communication that will improve your code and draw you closer to the project you’re working on.” – Coding Horror

3. Vie yhtenäisiä kokonaisuuksia
On suositeltavaa viedä versionhallintaan loogisesti yhtenäisiä kokonaisuuksia. Tämä tekee versiohistorian seuraamisesta huomattavasti hyödyllisempää, etenkin jos muutokset käsittelevät useita eri tiedostoja.

Eli, jos teet useita yhtäaikaisia muutoksia, jaa ne useampaan loogiseen kokonaisuuteen ja vie ne osissa. Näin yksittäisten muutosten historiaa on helpompi seurata ja nopeuttaa mahdollisten bugien metsästystä myöhemmin. Jos siis teet ominaisuutta A, B ja C sekä korjaat bugeja 1, 2 ja 3, pitäisi niistä muodostua vähintään kuusi committia. Vastaavasti, jos teet suuria muutoksia tai toteutat itsenäisiä muutoksia useisiin loogisiin moduleihin, vie muutokset erikseen, vaikka ne olisivatkin osa isompaa kokonaisuutta.

Käytännössä sitä kuitenkin usein huomaa koodaavansa hieman sieltä sun täältä sitä ja tätä, ja lopulta järkevän yhtenäisen kokonaisuuden vieminen versionhallintaan on käytännössä mahdotonta.

Tietenkin tätä periaatetta on helpompi noudattaa sovelluksen ylläpidossa kuin sovelluksen kehittämisessä, jossa puutteellisia ja koodausta kaipaavia asioita on paljon. Teoriassa järkevä ”commit”-tapa on helppo omaksua, mutta käytännössä yhtenäisen kokonaisuuden siirtäminen versiohallintaan vaatii itsekuria ja koodauksen suunnittelua.

4. Kirjoita järkeviä commit-viestejä
Kirjoita aina jokin kommentti viedessäsi koodia versionhallintaan. Kommentin tulisi olla lyhyt ja ytimekäs, ja kertoa mitä muutettiin ja miksi. Jos teit useita muutoksia, kirjoita ne omille riveilleen.

On myös kätevää lisätä kommentin eteen jokin tunniste kuten Fix tai Add, viitaten minkä tyyppisiä muutoksia teit. Tämä myös helpottaa sisällön filtteröintiä myöhemmin.

Korjatessa jotain tiettyä bugia tai pyydettyä ominaisuutta, on suositeltavaa lisätä bugin tai issuen numero commit-viestiin.

”If the changes you made are not important enough to comment on, they probably are not worth committing either.” – loop label

5. Tee koodaustyylin muutokset erillään oikeista muutoksista
Koodaustyyli voi kokea muutoksia ja kehitysvälineessä voidaan esimerkiksi ottaa käyttöön automaattiset koodimuotoilut. On erittäin suositeltavaa, että koodin muotoiluun vaikuttavat muutokset tehtäisiin erillään oikeista muutoksista.

Jos koodimuotoilut ja muutokset sekoitetaan keskenään, on muutosten jäljittäminen ja kohdistaminen käytännössä mahdotonta.

6. Älä vie tiedostoja, jotka muuttuvat dynaamisesti
Versionhallinnassa olevien tiedostojen olisi hyvä olla sellaisia, joiden sisällöstä valta on käyttäjillä eikä esimerkiksi kehitysympäristöllä. Esimerkiksi ei kannata viedä Eclipsen asetuksia tai projekti-tiedostoa, jotka muuttuvat riippuen kehittäjän haluamista asetuksista. Kyseiset tiedostot eivät varsinaisesti liity projektin koodiin ja aiheuttavat vaan turhaa synkkaamista. Myös projektin binäärit ja Javadocit voidaan mieltää turhiksi versionhallinnan näkökulmasta.

(via Perforce)

7. Älä vie koodia, joka ei käänny
Ei ole suositeltavaa viedä versionhallintaan koodia, joka ei käänny ja hajottaa projektin myös muille kehittäjille. Toisaalta, ideaalissa tilanteessa, ei pitäisi koskaan lähteä toimistolta viemättä koodia versionhallintaan.

Jos teet muutoksia, jotka vaikuttavat muihin, harkitse koodin branchaamista muutoksen toteuttamiseksi ja yhdistä koodi, kun olet valmis. Toisaalta, toimimaton koodi ei ole syy olla viemättä sitä versionhallintaan.

”It’s better to have a broken build in your working repository than a working build on your broken hard drive.” – loop label

Yhteenveto
Versionhallinnan käyttö on omaksuttu osaksi sovelluskehitystä ja toivottavasti edes osa yllä olevista periaatteista on jo useimpien kehittäjien käytössä. Ellei käytössä olevia työvälineitä hyödynnetä kunnolla, jää paljon etuja saavuttamatta. Edes muutaman yllä olevan käytännön omaksuminen kuten ”loogiset kokonaisuudet” ja ”commit-viestit”, helpottaa jo kummasti.

Versionhallinta on käsitteenä laaja ja sen käyttöön liittyy paljon muitakin asioita, joista voidaan määritellä niin sanotut parhaat käytännöt. Tälläisiä ovat muun muassa koodin hallintaan liittyvät asiat, versionhallinnan soveltaminen ja toimintojen laajentaminen, mutta ei niistä sen enempää.

Valinnan vapaus ei ole vapautta valita

Useat etenkin viihde-elektroniikka- ja tietoteknisten tuotteiden valmistajat tuntuvat olevan sitä mieltä, että enemmän on paremmin. Samaan tuotekategoriaan laitetaan tarjolle useita hieman erilaisia, mutta ominaisuuksiltaan melkein samanlaisia tuotteita, jotta ostajilla olisi varaa mistä valita. Tätä ilmeisesti kutsutaan valinnan vapaudeksi, mutta tosiasiassa se ei ole vapautta valita.

Barry Schwartz kertoo TEDin ”The paradox of choice” -videossa valinnan monimutkaisuudesta. Psykologi Schwartz käsittelee läntisen yhteiskunnan perimmäistä uskomusta, valinnan vapautta. Schwartin arvion mukaan valinta ei tee meitä vapaammaksi vaan lamauttaa, eikä onnellisemmaksi vaan tyytymättömämmäksi. Jokainen, joka joskus on ostanut jotain hieman enemmän teknistä asiaa, voi varmasti yhtyä Schwartzin arvioon. Miten hankalaa onkaan valita se ”hyvä” tuote kymmenien samankaltaisten tuotteiden joukosta.

Esimerkiksi:

Taulutelevision ostaminen
Harkitsin viime talvena taulutelevision ostamista ja vertailin tietenkin eri vaihtoehtoja. Laskeskelin, että samalla valmistajalla oli samassa kokoluokassa jopa parikymmentä eri mallia, joista useiden mallien ominaisuudet olivat liki toisiaan ja hankalasti vertailtavissa. Kun tuohon vielä lisätään eri valmistajien tuotteet samassa tuoteryhmässä, oli valinnan vapautta enemmän kuin tarpeeksi. Onneksi pystyin rajoittamaan valmistajien listaa DVB-C -vaatimuksen avulla, jolloin päästiin jo paljon mielekkäämpään lähtöasetelmaan.

Muutamia testejä ja ahkeraa Internet-selailua myöhemmin, päädyin lopulta Sonyn 40″ w3000 -malliin, joka oli sekä hinnaltaan, ominaisuuksiltaan että testimenestykseltään oiva valinta. Miettiessäni sopivaa tuotetta, oli Sonyn tuotemallisto kuitenkin ehtinyt jo ”vanhentua”, ja koska uusia malleja oli tulossa parin kuukauden sisällä, ei haluamaani mallia enää saanut mistään. Kaiken lisäksi uusi vastaava malli, on muotoilultaan jotain kauheaa. En täten ole vieläkään päässyt itseni kanssa oikein yhteisymmärrykseen, mikä olisi hyvä taulutv.

Applen tuotelinjat
Apple herättää monissa vahvoja tunteita sekä hyvässä että pahassa. Vaikka en ole aivan yhtä mieltä Applen vetämästä linjauksesta, on Applen tuotemallisto selkeydessään erittäin onnistunut: valittavana on muutamia selkeästi erilaisia vaihtoehtoja muutamassa hintaluokassa erilaisiin käyttötarpeisiin kohdistettuna. Tämä toistuu Applen kaikissa tuoteryhmissä tietokoneista musiikkisoittimiin ja käyttöjärjestelmään, ja ostajan on suhteellisen helppo tehdä valintansa. Applen tuotteet ovat jopa niin yksinkertaistettuja, että kaikkia ostajia tuotteet eivät tyydytä.

Vastaavasti PC-maailmassa valinta on vapaata ja erilaisia, mutta melkein samanlaisia PC-koneita löytyy vaikka miten paljon. Koneet on varustettu kaikilla mahdollisilla hilavitkuttimilla ja kustomointimahdollisuudet ovat lähes rajattomat. Yritä siinä sitten valita juuri se oikea ja ”paras” laite.

Myös käyttöjärjestelmien osalta Apple kulkee omia linjojaan, kun taas Microsoft ja Linux panostavat valintaan. Esimerkiksi OS X:n Leopardia on tarjolla kaksi versiota, yksi perusversio (plus 5 kpl:een perhepaketti) ja yksi palvelinversio, kun vastaavasti Vistaa on saatavana kolme perusversiota, kaksi yritysversiota ja yhdeksän palvelinversiota (Windows Server 2008). Lisäksi Windowsista on vielä eri versiot 32-bittisille ja 64-bittisille prosessoreille. Vastaavasti Linuxin eri distribuutioiden osalta voidaan puhua sadoista ellei jopa tuhansista eri vaihtoehdoista.

Ratkaisu
Onneksi valinnan vaikeuteen on helppo ja yksinkertainen ratkaisu: älä mieti liikaa, tai välitä vaikka tuote ei olisikaan se ”paras”. Etenkään jälkeenpäin ei kannata pohtia, että tuliko nyt varmasti ostettua hyvä tuote parhaimmalla mahdollisella hinnalla. Tästä ei seuraa kuin pahaa mieltä.

Tietenkään asia ei ole aivan noin yksinkertaista. Etenkin insinööreillä voi olla hankaluuksia kieltää tosiasioita ja olla vertailematta eri tuotteita maailman tappiin asti.

Onneksi kaikkien asioiden ostaminen ei ole hankalaa ja usein valintaa helpottaa niin sanottu merkkiuskollisuus, kuten keväällä hankkiessani uutta polkupyörää. Valintaa ei juurikaan tarvinnut tehdä muulla kuin lompakon paksuuden perusteella ja lopulta silläkään ei ollut merkitystä. Tietenkin merkkiuskollisuutta oli helppo perustella kyseisen merkin takajousitukseen liittyvällä keksinnöllä, jota ei muilta merkeiltä löytynyt.

Välillä valintaa helpottaa myös sisäinen insinööri, joka haluaa mahdollisuuden leikkiä tuotteilla. Kesällä ostin uuden digitaalikameran, jonka ostamista mietin ja tutkin muutaman päivän. Loppupeleissä valinta oli suhteellisen helppoa, sillä Canonin vain tiettyihin kameroihin saatava CHDK-ohjelmisto ratkaisi asian. Kyseinen malli ei ollut ”paras” tai edullisin, mutta täytti perusvaatimukset ja tarjosi lisäksi mahdollisuuden laajentaa kameran toimintaa ominaisuuksilla, joita ei vastaavan hintaluokan malleista löytynyt.

Odotankin aina yhtä innokkaasti uusien enemmän tai vähemmän teknisten vempeleiden ostamista. Valinnan vapauteen saa helposti kulumaan useammankin viikon, ellei ostoksella ole kiire, jolloin pitää vain toivoa osuvansa ”oikeaan” ja jälkeenpäin olla lukematta testejä ja arvosteluita.

Päivän linkit 21.11.2008