Guido van Rossumin kahden sentin virhe

Olin kirjoittaa C.A.R. Hoaren miljardin dollarin virheestä

I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement.

mutta tulin siihen tulokseen, että aiheesta on kirjoitettu jo ihan tarpeeksi. Sen sijaan haluan valittaa. Pythonissa

>>> False == 0
True

Joskus muinoin False Pythonissa oli ihan oikeasti sama kuin 0. Tästä on kuitenkin todella pitkä aika. Nykyään saakin erilaisen tuloksen, jos kirjoittaa

>>> False is 0
False

is antaa Pythonissa melko suoraviivaisen objektireferenssisemantiikan. Olen yrittänyt opetella käyttämään sitä asianmukaisissa tilanteissa. Pelkään vain, että saan aikaan enemmän haittaa kuin hyötyä, kun seuraava koodin muokkaaja tulee, eikä ymmärrä miksi tein noin. Parempi olisi, jos kieli itsessään olisi ehjä.

Javassakin kaikesta verböösiydestään ja muista pikkuongelmista huolimatta sentään sekä == että Object.equals() toimivat ennalta-arvattavalla tavalla. Tällaiset pienet jännitysmomentit ohjelmointikielissä voivat tuntua kielten kehittäjien mielestä mukavilta ja näppäriltä oikoteiltä. Usein kielen kehittäjä ei kuitenkaan pysty samaistumaan normaalin kielen käyttäjän asemaan lainkaan. Kehittäjä osaa kielensä etuperin ja takaperin. Käyttäjä nykymaailmassa saattaa käyttää työkseen viittä ohjelmointikieltä, ja toivoisi niiltä lähinnä konsistenssia, ei pelkästään itsensä kanssa, vaan myös ristiin niiden välillä.

Pythonin tilanne ei ole kauhean paha. PHP on yhtäsuuruuksien ja totuusarvokäsittelyjen kanssa ihan omaa luokkaansa. En lähde referoimaan, koska en PHP:ta osaa. En osaa PHP:ta, koska olen nähnyt asiasta joskus taulukon, ja se aiheutti niin voimakasta pahoinvointia, että päätin, etten vastaisuudessakaan opettele.

Tämän artikkelin on kirjoittanut Teemu Kalvas ja sitä ovat sittemmin muokanneet muut Codenton työntekijät.

Kahdenkertainen kirjanpito ajanseurannassa

Samoin kuin yritys hyötyy kirjanpidosta jos sillä on vähänkään rahaliikennettä, työntekijä hyötyy työajan kirjanpidosta jos on vähänkään vaihtelevia työtehtäviä. Ja varsinkin jos oma aika on tärkein kaupattava vara. Harva innostuu itse kirjaamisesta, mutta kun tieto lopuksi on tallessa ja koneellisesti käsiteltävissä kirjanpidosta saa näkyvyyttä omaan ajankäyttöön.

Pelkkä ajankäytön kirjaaminen ei kuitenkaan riitä. Jos tiedosta haluu tolkkua tarvitaan tietomalleja ja työkaluja: tapahtumien kirjaamiselle, erittelyille eri tilanteiden mukaan ja yleisille raporteille. Kysymyksiin joihin halutaan vastauksia ovat muun muassa:

  • Olenko tehnyt liian paljon/vähän töitä?
  • Kuinka paljon töitä olen tehnyt tietyssä projektissa tänä kuukautena?
  • Kuinka paljon lomapäivistäni olen käyttänyt/on jäljellä?
  • Olenko ilmoittanut ja saanut korvausta ylitöistäni?

Ajanseurantaa voi katsoa varojen seuraamisena, jossa varat lasketaan aikayksiköissä. Miksi käyttää jotain itse keksittyä mallia tälle, kun jo satoja vuosia ollaan tunnettu hyvä järjestelmä: kahdenkertainen kirjanpito. Kahdenkertaisessa kirjanpidossa seurataan varojen siirtymistä tililtä toiselle tilille. (Tavallisesti siis rahaa, mutta mikä muu yksikkö vain sopii myös). Ja kun sitä ollaan jo käytetty satoja vuosia, niin valmiita työkalujakin riittää.

Suurin haaste on ajanseurantaan soveltuvan tilikartan luominen, kun esimerkkejä puuttuu. Tässä on yksinkertainen aloitusehdotus:

Vastaavat        (työsuoritus: kaikki työtunnit yhteensä)
 Työsuoritus      (työtunnit yhteensä)
  Projekti A       (työtunnit projektissa A)
  Projekti B
  Projekti C
 Ylityösuoritus   (ylityönä suoritetut tunnit)
 Lomasuoritus     (pidetyt lomapäivät)

Vastattavat      (työsuhteesta syntyvät suoritettavat)
 Työvastattava    (suoritettavat työpäivät)
 Ylityövastattava (sovittu korvattava ylityö)
 Lomavastattava   (suoritettavat lomapäivät)

Tällaisen tilikartan avulla, ja varsinkin täyttämällä vastattavat-osaan odotetut tunnit eri tileille (normaalit työtunnit, ylityö, lomat jne.), saa kirjanpidosta näkyviin oman aikataseen, kaikille tileille. Ja niitähän on useampia kuin se perinteinen yksi ainoa tuntisaldo.

Jos komentorivityökalut ja tekstitiedostot lämmittää mieltäsi niin mikä kahdenkertaisen kirjanpidon työkalu sopisi paremmin ajanseurantaan kuin John Wiegleyn ledger, tai siitä Haskellissa johdettu hledger. Ja molemmat kaiken lisäksi lukevat suoraan Emacs timeclock.el:n merkintöjä.

Tämän artikkelin on kirjoittanut Markus Holmberg  ja sitä ovat sittemmin muokanneet muut Codenton työntekijät.