Kannattaa koodata kunnolla
Vanha uskomus sanoo, että ohjelmointikielellä ei ole väliä. Hyvä ohjelmoija ei opi syntaksia, vaan ohjelmoinnin idean. Uuden kielen oppii muutamassa päivässä, koska taustalla olevat ideat ovat aina samoja.
Tämä ei ole totta. Ohjelmointikielissä on suuria eroja, jotka vaikuttavat suoraan myös tuottavuuteen.
Vuosi 2009 toi funktionaalisten ohjelmointikielten uuden aallon. Yhä useampia korkean profiilin web-projekteja alettiin toteuttaa suhteellisen tuntemattomilla kielillä, kuten Erlangilla. Myös Java-maailman perustukset järkkyivät, kun sen johdannaiset Clojure ja Scala alkoivat näkyä yhä enemmän julkisuudessa.
Mitä oikein tapahtui? Eikö kaikkea voikaan enää toteuttaa sillä vanhalla tutulla Javalla, C#:lla tai php:llä?
Syitä funktionaalisten kielten suosioon on kaksi. Ensinnäkin kotimaisessa web-sovelluskehityksessä tavoitellaan nyt entistä enemmän tuottavuutta ja tehokkuutta. Tusinakoodaus, jossa tarkoitus on vain tuottaa mahdollisimman monta riviä koodia mahdollisimman halvalla, on ulkoistettu Kiinaan tai Intiaan.
Suomalaisten ohjelmoijien täytyy panostaa laatuun ja tuottavuuteen, jos haluavat kilpailla ulkomaisen halpatyövoiman kanssa. Ohjelmakoodin täytyy olla tehokasta ja bugitonta. Sen pitää syntyä nopeasti ja pienellä vaivalla. Näissä asioissa funktionaaliset ohjelmointikielet voivat auttaa. Ei ole enää samantekevää, minkä kielen projektin toteutukseen valitsee, jos tarvittavan työajan ja koodirivien määrän voi vähentää jopa kymmenesosaan.
Toinen iso tekijä funktionaalisten kielten suosiossa on kasvava skaalautuvuuden tarve. Jos haluaa kehittää uuden twitterin tai facebookin, sovelluksen täytyy toimia yhtä lailla tuhannella kuin miljoonallakin käyttäjällä. Skaalaaminen tehdään lisäämällä palvelimia, ja kustannusten kannalta on oleellista, tarvitaanko niitä kymmenen vai sata. Funktionaaliset ohjelmointiympäristöt pystyvät ottamaan raudasta irti ainakin 10–20-kertaisen tehon tyypilliseen php-sovellukseen nähden, joten säästöt alkavat nopeasti tuntua lompakossa.
Äskeinen väite on sen verran kova, että se kaipaa pientä perustelua. Esimerkiksi sopii Ericssonin kehittämä Erlang-ohjelmointiympäristö. Erlang on funktionaalinen ohjelmointikieli, joka on optimoitu moniytimisten prosessorien hyödyntämiseen. Oikein toteutettu Erlang-sovellus pyörii rinnakkaisesti prosessorin kaikissa ytimissä, ja se voi lukea ja kirjoittaa ram-muistia ilman minkäänlaisia lukituksia ja viiveitä. Perinteisissä ohjelmointikielissä merkittävä osa prosessoriajasta käytettäisiin lukkojen hallintaan ja niiden vapautumisen odotteluun. Erlangilla saa siis ihan oikeasti enemmän tehoa irti samasta raudasta, koska puhtaan funktionaalinen ohjelmointimalli mahdollistaa ylimääräisen ”karstan” jättämisen pois tehoja syömästä.
Miten funktionaalinen ohjelmointi voi parantaa itse ohjelmointityön tuottavuutta? Tärkein tekijä on bugien eli ohjelmointivirheiden väheneminen murto-osaan aiemmasta. Kun koodirivejä tarvitaan enää kymmenesosa, jää bugeillekin tartuntapintaa yhtä paljon vähemmän.
Clojure ja Scala ovat siitä mielenkiintoisia ohjelmointiympäristöjä, että ne ovat yhdistämässä funktionaalisen ohjelmoinnin Java-maailman laajaan kirjastovalikoimaan ja tehokkaaseen jvm-virtuaalikoneeseen. Nämä kielet ovat ohjelmointikielenä täysin erilaisia kuin Java, mutta niistä kuitenkin käännetään samanlaisia class- ja jar-tiedostoja kuin Javastakin. Toisin sanoen ohjelmoijat voivat kehittää sovelluksiaan tuottavammin ja bugittomammin kuin ennen, mutta silti ajaa niitä samassa ympäristössä perinteisten sovellusten rinnalla ja tehdä kutsuja mihin tahansa Java-kirjastoihin.
Suosittelen pelkkään olio-ohjelmointiin jumiutuneille kehittäjille tutustumista ainakin Scalaan sekä myös Pythoniin. Nämä kielet pyrkivät yhdistämään olio-ohjelmointiin funktionaalisia ominaisuuksia, joita voi ottaa hiljalleen käyttöön perinteisen ohjelmointitavan rinnalle. Muutaman ratkaisevan oivalluksen jälkeen saattaa jopa ihastua funktionaaliseen ajattelutapaan ja sen tuomiin etuihin niin, ettei enää halua luopua niistä.








