Mitä ohjelmoijan tarvitsee osata töissä?

Haaveiletko ohjelmointityöstä? Mistä hyvä ohjelmoija on rakennettu? Tässä blogitekstissä käydään läpi 7 tärkeää ominaisuutta, joista on paljon hyötyä ohjelmointityössä.

Taustaa

Ominaisuudet on listattu henkilökohtaisen työkokemuksen perusteella, jota allekirjoittaneella on kertynyt eri ohjelmistotaloissa aina 90-luvulta saakka. Tässä artikkelissa ei kuitenkaan keskitytä tietyn tekniikan tai ohjelmointikielen osaamiseen vaan enemmänkin kiinnitetään huomiota henkilön fyysisiin, psyykkisiin ja henkisiin ominaisuuksiin.

Ensimmäiset ohjelmat, joista sain rahallista korvausta, eli palkkaa, tein 13-vuotiaana vuonna 1989. Tietokoneohjelmat koodattiin tehokkaalla C-kielellä, joka oli proseduraalista ohjelmointia parhaimmillaan. Opiskelin myös yläasteikäisenä Pascal-ohjelmointikieltä, jonka opiskelua varten taisin ostaa ensimmäisillä palkkarahoillani kirjankin. Pascal oli nimestään huolimatta mukava ohjelmointikieli, jota tykkäsin koodata. Sen sijaan Cusel-ohjelmointikieltä en ikinä opiskellut.

Käydään itse asiaan, eli ohjelmoijan tärkeimpiin ominaisuuksiin.

1. Hyvä englannin kielen taito

Tehdessäni ensimmäisiä ohjelmistoprojekteja Tiedolla, sain tehdä töitä suomalaisen asiakkaan kanssa. Englannin kielen käyttötarvetta ei ollut juurikaan asiakkaan puolelta. Sen sijaan lähes kaikki ohjelmointiin liittyvä materiaali oli jo silloin englanninkielistä, joten erilaisten oppaiden ja manuaalien ymmärtäminen vaati englannin kielen taitoa.

Myös ohjelmakoodi oli suotavaa kirjoittaa englanniksi, mikä vahvisti kirjallisen englannin kielen taidon kehittymistä.

Englannin kielen taito

2000-luvulla kaikki muuttui. Ohjelmistoprojektit muuttuivat kansainvälisemmiksi. Olin itsekin ensi kertaa mukana projektissa, joissa osapuolena oli ulkomaalaisia toimijoita. Englanninkieliset puhelinpalaverit alkoivat pikku hiljaa hivuttautua riviohjelmoijan toimintatapaan. Lukion englannin kielen taidolle ("me Tarzan, you Jane") alkoi yllättäen ilmaantua käyttötarvetta.

IT-toimintojen ulkoistaminen (outsourcing) ja etenkin ulkoistaminen mantereen taakse (offshoring) tekivät englanninkielisistä palavereista tavallisempia. Etenkin Intialaisten aluksi oudolta tuntuva aksentti tuli tahtomattaankin tutuksi.

Englannin kielen taidosta voi sanoa, että tämän päivän ohjelmointityössä se on välttämätön ominaisuus ja yksi tärkeimmistä ominaisuuksista, joita ohjelmoijan on hyvä hallita. Hyvä englannin kielen taito auttaa ohjelmoijaa jokapäiväisessä työssä, oli se sitten englanninkielisten sähköpostien kirjoitteluja, chättäilyä enkuksi, virhepoikkeuksen (Exception) tiimoilta tapahtuvaa ongelmanratkaisua tai englanninkieliseen tukipalveluun soittamista.

2. Ongelmanratkaisu­kyky

Ohjelmointityössä tulee päivittäin esille ongelmia, jotka joudutaan ratkaisemaan jollain tavalla. Useimmiten se voidaan tehdä käyttäen hyväksi tiedonhankintaa internetistä tai kääntymällä kokeneimpien kollegoiden puoleen.

Fronttipuolen ohjelmoinnissa ongelma voi olla esim. sellainen, että käyttöliittymä menee rikki tietyllä selaimella tai jossain yksittäisessä laitteessa. Esimerkiksi video voi jäädä avautumatta Applen vanhemmilla vehkeillä. Tai lomakkeen submit -nappia tuplaklikkaamalla päivittyy tiedot kahdesti taustajärjestelmään.

Ongelmanratkaisukyky

Backkipuolen ohjelmoinnissa voi tulla eteen ongelma esim. web servicen, tietokantatransaktioiden tai yhteensopimattomien ohjelmistokomponenttien tai -versioiden kanssa. Tai ohjelman suoritus voi kaatua tietyllä syötteellä. Voi olla myös, että palvelu ei kestä suuresta kävijämäärästä aiheutunutta kuormaa.

Palvelimella voi tulla eteen yllättäviä ongelmia, joiden ratkaisemiseen tarvitaan ongelmanratkaisukykyä. Joskus yllättävän tuotanto-ongelman ratkaiseminen täytyy tehdä pikaisesti, jolloin hyvästä ongelmanratkaisukyvystä on enemmän kuin hyötyä.

Ratkaistaaksesi ongelman, sinun ei tarvitse olla entisajan kuuluisa nero, jollaisena esim. antiikin Kreikan Sokrates tunnettiin. Tarkka älykkyystesti voi kuitenkin antaa viitteitä siitä, kuinka ratkaiset eteen tulevan ongelman. Jos omaat korkean älykkyyden, niin siitä ei siis ole haittaa ohjelmointityössä. Lukioaikainen matematiikanopettajani sanoi, että hänen mielestään ohjelmointityössä ei voi pärjätä, jos matemaattiset taidot (matemaattinen älykkyys) eivät ole hyvällä tasolla.

Älykkyys ja ongelmanratkaisukyky

Älykkyyden määritelmä on jakanut mielipiteitä psykologien keskuudessa, mutta yleensä se voidaan määritellä yleiseksi kognitiiviseksi ongelmanratkaisutaidoksi. Tähän kuuluu mm.:

  • Kyky ratkaista ongelmia
  • Ymmärtää monimutkaisia ideoita
  • Oppia uusia asioita
  • Oppia kokemuksesta

Olen kyllä nähnyt ihan hyvätasoisia ohjelmoijia, vaikka integroinnin tai derivoinnin kaavat eivät olisikaan enää tuoreessa muistissa. Eihän siitä toki haittaa ole ohjelmoijan työssä, mikäli kirjoittaa pitkästä matematiikasta Laudaturin. Mutta se ei ole välttämätöntä. Pääseehän Suomen valtion ylimmäksi rahakirstun vartijaksikin lukion lyhyen matematiikan arvosanalla 6. Siinä virassa riittää, että osaa tehdä päätöksiä virkamiesten tekemien laskelmien pohjalta.

Usein ongelmanratkaisuun riittää, että osaa hankkia tietoa luotettavasta lähteestä, esim. avoimista yhteisöistä, kuten StackOverflow.com tai ServerFault.com, tai Googlettelemalla ongelmaa sopivilla avainsanoilla.

Onneksi maailmassa on miljoonia ohjelmointityötä tekeviä ihmisiä, ja yleensä ongelman tullessa eteen, on hyvin todennäköistä, että joku toinen ohjelmoija on joutunut saman ongelman eteen.

Ongelmanratkaisukyky ja sen puute näkyy erittäin hyvin mm. projektin työmääräarvioiden paikkaansapitävyydessä. Koska hyvin todennäköistä on, että ongelmia tulee matkalla, niistä joko selviää nopeasti ja projektin työmääräarvio pitää paremmin tai niistä selviää hitaasti, jolloin projektin työmääräarvio paisuu pahimmassa tapauksessa moninkertaisesti.

Ole siis avoin, etsi tietoa kollegoilta ja internetistä. Älä jää ongelmien kanssa yksin.

3. Halu uuden oppimiselle

IT-ala on siinä mielessä kiehtova, mutta toisaalta rasittavakin ala, koska se kehittyy vauhdilla eteenpäin. Uuden oppiminen on tällä alalla välttämätöntä. Tällä alalla pärjää hyvin, jos on utelias luonne, omaa halun oppia uutta, eikä pelkää uusia asioita.

Uutta asiaa on kuitenkin valtavasti ja kaikkea suurta tietotulvaa ei millään pysty hallitsemaan, jolloin joutuukin keskittymään vain tiettyyn osa-alueeseen.

Työmuisti

Hyvä työmuisti on erinomaisen tärkeä asia ohjelmointityön suorittamisen kannalta. Kirjoittaaksesi hyvin ylläpidettävää ohjelmakoodia, tulee muuttujien nimet ja ohjelman kulku pysyä koko ajan kirkkaana työmuistissa. Työmuistin avulla pystyt hyödyntämään sunnittelumalleja oikeissa paikoissa.

Älykkyys ja hyvä työmuisti

Onneksi uusien tutkimusten mukaan työmuistin parantaminen onnistuu mm. sopivalla ravinnolla, riittävällä unella, liikunnalla, välttämällä stressiä, välttämällä alkoholin liikakäyttöä ja tupakointia.

Väsymys ja stressi

Väsymys ja stressi tekevät ohjelmointityön suorittamisesta hyvin raskasta. Tällöin ei myöskään riitä virtaa uuden oppimiseen.

Virheistä oppiminen

Kaikki tekevät virheitä ja virheistä oppiikin ehkä parhaiten. Muistan vielä kuin eilisen päivän 20 vuotta sitten tapahtuneen asian, kun unohdin asiakkaalle tekemästäni koodista lauseen, jolla vapautettiin aiemmin varatut tietokantaresurssit. Kun sovellus varasi resursseja, eikä niitä koskaan vapautettu käytön jälkeen, loppui Oracle-tietokannasta kursorit kesken, jolloin tietokantapalvelimelle ei päässyt enää kirjautumaan sisään. Onneksi asiakkaan palvelinsalia huoltanut kylmälaiteasentaja kompastui juuri tämän kyseisen tietokantapalvelimen virtajohtoon, jolloin töpseli irtosi seinästä ja virrat päälle laitettaessa palvelin käynnistyi uudestaan. Selvisin tilanteesta kuin koira veräjästä ja lisäsin vaivihkaa koodiin pStmt.close(); ja conn.close(); -lauseet try-catch -rakenteen finally -lohkoon. :)

4. Tiimityöskentely­taidot

Hyvät tiimityöskentelytaidot kuuluvat hyvän ohjelmoijan työkalupakkiin, tehtiinpä sovelluskehitystä Scrumilla tai muulla menetelmällä. Työskennellessä tiimissä ohjelmoijan on hyvä olla sopivasti sosiaalinen ja extrovertti. Vaikka olisi kuinka taitava ohjelmoija, se ei riitä hyvän lopputuloksen saamiseen, jos tiimityötaidot ovat puutteelliset. Taitava introvertti-koodaaja, joka tekee vieläpä etätyötä, ei välttämättä edistä tiimityöskentelyä toiminnallaan.

Tiimityöskentely­taidot, vuorikiipeily

Kun tiimissä on osaava ja muita ystävällisesti neuvova työntekijä, auttaa hän muita tiimiläisiä oppimaan jakamalla tietoa. Kokeneeseen tiimiin mukaan pääseminen on ohjelmointiuran aloittelevalle kullan arvoinen asia - kuin lottovoitto!

5. Paineensieto­kyky

Tiimissä työskentely on usein - ikävä kyllä - paineen alla työskentelemistä. Tiukat aikarajat, eteen tulevat ongelmat, epäyhteensopivat henkilökemiat, tai muut vastaavat seikat eivät mitenkään vähennä työssä eteen tulevaa painetta.

Jos paineensietokykykä ei ole, tai se on hetkelliesti heikentynyt, voi paine purkautua aggressiolla tai syyttelyllä toisia tiimin jäseniä kohtaan.

Agressiivinen autoilija, paineensietokyky

Ohjelmointityössä täytyy osata sietää painetta, jota tulee eri suunnilta. Asiakkaalla, esimiehellä, projektipäälliköllä tai palvelupäälliköllä voi kaikkilla olla omat odotuksensa, jotka voivat olla vieläpä ristiriidassa keskenään. Esimies haluaa laskuttaa mahdollisimman paljon asiakkaalta ja pitää asiakastyytyväisyyden silti korkeana. Asiakas taas haluaa kustannusten pysyä alhaisena ja toimitetun palvelun olevan laadukasta ja virheetöntä. Projekti- tai palvelupäällikkö haluaa pysyä kustannusarvioissa ja aikatauluissa, sekä myös toimittaa virheetöntä palvelua. Kaiken tämän keskellä ohjelmoijalta odotetaan paljon ja se vaatii ohjelmoijalta hyvää paineensietokykyä ja venymistä joka suuntaan.

6. Keskittymis­kyky

Ohjelmoijan on toisaalta hyvä olla sopivan introvertti keskittymällä (tai uppoutumalla) tekemäänsä ohjelmointityöhön niin, että tulosta syntyy. Monesti ohjelmat ovat niin monimutkaisia, että ohjelman logiikkaan sisälle pääsemiseen voi kulua useampi tunti, ennen kuin pääsee edes aloittamaan tekemään haluamaansa muutosta.

Keskittymiskyky, kuppi kahvia

Esimiehellä tai projekti-/palvelupäälliköllä on myös suuri merkitys ohjelmointityön onnistumiseen. Esimies voi edesauttaa ohjelmakoodin syntymistä antamalla ohjelmoijalle työrauhan. Pahin juttu, millä keskittymisen voi pilata, on varata pari kolme palaveria pitkin päivää, jolloin yhtenäisen ja rauhallisen ajan käyttö ohjelmointityössä on vaikeaa, ellei mahdotonta.

Kun keskeytyksiä tulee pitkin päivää, häiriintyy ohjelmointityö ja tulosta ei synny toivotulla tavalla.

Myös erilaiset häiriötekijät, kuten sähköpostin tai puhelimen piippaukset, sosiaalisen median riippuvuus, tai kollegan keskeytykset voivat vaikeuttaa ohjelmointityön etenemistä.

7. Oma-aloitteisuus

Kukapa haluaisi tiimiinsä kiviriippaa, joka tekee vain ja ainoastaan sen, mitä käsketään? Laiska ja epärehellinen luonne eivät kuulu hyvän ohjelmoijan ominaisuuksiin. Vähemmän ahkera työntekijä voi esittää kiireistä ja tärkeää, jolloin hänellä ei ole aikaa ottaa työn alle oma-aloitteisesti projektissa esiin tulleita ongelmakohtia.

Oma-aloitteinen työntekijä on työnantajalle kullan arvoinen. Oma-aloitteinen työntekijä ilmaisee mielipiteensä havaitessaan epäkohdan, sekä miettii sille sopivan korjausehdotuksen. Työnantajan olisikin hyvä palkita työntekijä oma-aloitteisuudesta, jolloin työntekijälle syntyy hyvä fiilis onnistumisesta ja kehitys ruokkii itse itseään.

Oma-aloitteisuus

Onnistuneen lopputuloksen vuoksi ohjelmoijan olisi erittäin tärkeä olla oma-aloitteinen, etsiä parannettavia kohtia ja esittää niitä ahkerasti. Oma-aloitteisuudella voi myös parantaa yrityksen kannattavuutta hankkimalla tiimille uusia töitä.

Yhteenveto

Tullaksesi hyväksi ohjelmoijaksi sinun ei tarvitse olla Leonoardo da Vincin tai Albert Einsteinin kaltainen nero. Opiskele hyvä englannin kielen taito, ole utelias, ratkaise ongelmia, ole sosiaalinen ja hyvä tiimityöntekijä, oma-aloitteinen ja opettele hyvä keskittymiskyky ja paineensietokyky.

Näillä avuilla sinusta on mahdollista tulla hyvä ohjelmoija!