Nörttitytöt

Kuva: Ramotion Blog (http://www.flickr.com/photos/ramotion/)

Huolimatta siitä, että useampikin nörttitytoistämme on joko huvikseen tai ammatikseen ohjelmoija, ei tässä blogissa ole vielä aikaisemmin ollut juurikaan puhetta ohjelmoinnista. Näinpä ajattelin täyttää tämän aukon antamalla pikakurssin ohjelmointikielien ihmeelliseen maailmaan. Muutaman huomion jälkeen on jokaisesta ohjelmointikielestä malli ns Hello Worldistä. Se on (yleensä, ei nyt puhuta APL:stä) yksinkertaisin ohjelmaesimerkki; ohjelma, joka ajaessaan tulostaa ruudulle tekstin “Hello World”.

Assembly
Assembly on askel ylöspäin Matrixista tutuista ykkösistä ja nollista. Se näki päivänvalon 50-luvulla ja sitä käytetään pääasiassa esimerkiksi mikroprosessorien ohjelmointiin. Sen tarjoamat toiminnot ovat kohtuullisen yksinkertaisia ja näin ollen se on (ainakin teoreettisesti) helppo oppia. Assemblyllä on kuitenkin äärimmäisen helppoa tehdä suuria ohjelmointivirheitä, kuten loputtomia kiertoja ja monimutkaisemman ohjelman koodin lukeminen on vähintäänkin rasittavaa.

Hello World:

title   Hello World!                             (hello.asm)

dosseg
.model small
.stack 100h

.data
message db 'Hello, World!',0dh,0ah,'$'

.code
main  proc
      mov    ax,@data
      mov    ds,ax

      mov    ah,9
      mov    dx,offset message
      int    21h

      mov    ax,4C00h
      int    21h
main  endp
end   main

COBOL
COBOL on ohjelmointikielien torakka. Se näki alkunsa 1959 ja COBOL-sovellukset luultavasti jatkavat pyörimistään maailmanlopun jälkeenkin niin kauan kuin virtaa vain riittää. Ja kun koneet käynnistyvät uudelleen, ne aloittavat taas pyörimisen. COBOL on tuskallista ylläpitää ja kehittää, alkaen siitä, että kääntäjät ovat edelleen pääasiassa kaupallisia. Sen tekstinkäsittelykyky on surkea. Se on myös äärimmäisen tehokas ja kykeneväinen käsittelemään massiivisia määriä tapahtumia, joka tekee siitä edelleen suositun esimerkiksi pankkimaailmassa.

Hello World (RM/1 kääntäjälle):

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID.     HELLOWORLD.
000300
000400*
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400     DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500     DISPLAY "Hello world!" LINE 15 POSITION 10.
100600     STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800     EXIT.

C
C kehitettiin vuosien 1969 ja 1973 välillä. Se suurilta osin korvasi Assemblyn sulautettujen järjestelmien koodauskielenä. Sulautettuja järjestelmiä ovat monet, joita ei helposti tule ajatelleeksi hallinnoitavan ohjelmistolla; autojen mottorin hallinta, jarrut, luistonesto, televisiot ja koodasipa entinen opettajani C:llä joskus työkseen sprinklerijärjestelmiäkin. Oma kokemukseni C:stä on, että se on paljon helpompi oppia kuin Assembly huolimatta sen laajemmasta komentovalikoimasta, mutta se voi johtua siitäkin, että olen sillä tavalla vain vähän outo.

Hello World:

#include 
int main(void)
{
  printf("Hello world!");
  return 0;
}

C++
C++ saapui kuvioihin 1983, käytännössä C:n laajennetuna versiona. C++ tarjosi C-kieleen luokkamallin ja tyypitykset, joka helpotti esimerkiksi tekstin käsittelyä. Se on C:tä korkeamman tason kieli, niin sanottu keskitason kieli , koska se yhdistää sekä korkean tason, että alhaisen tason ominaisuuksia. Käytännössä esimerkiksi C++:lla on mahdollisuus tehdä fyysisen muistin varauksia, mutta se ei ole välttämätöntä. Monet pelit koodataan edelleen C++:llä, kuin myös tietokoneeseen liitettävien laitteiden ajurit ja muut vastaavat.

Hello World (huomattavaa on, että edellinen C:n esimerkki toimii myös C++:na, kunhan .c-tiedostomuodon vaihtaa .cpp-tiedostomuodoksi) :

#include 
int main(void)
{
  cout << "Hello world!" << endl;
  return 0;
}

Java

Kuva: Hillary Hartley (http://www.flickr.com/photos/hillaryandanna/)

Jos COBOL on ohjelmointikielien torakka, on Java ohjelmointikielien aasi. Sen tultua kuvioihin 1995 se on pitkälti vallannut maailman. Tähän on kaksi syytä; ensinnäkin Java on alusta lähtien ollut täysin ilmainen niin kirjastojen kuin kääntäjänkin suhteen ja toisekseen se toi mukanaan JVM:n eli Java Virtual Machinen. Kaikki Javalla tehdyt ohjelmat pyörivät JVM:n päällä, poistaen niiltä tarpeen keskustella alla olevan käyttöjärjestelmän kanssa. Tämä tarkoittaa, että Javalla kerran tehty ohjelma ainakin teoreettisesti (ja yleensä myös käytännössä) pyörii missä tahansa käyttöjärjestelmässä, joka oli tuolloin lähes ennen kuulumatonta. Vuosien varrella tämä aasi on kuitenkin lihonut ja hidastunut ja keksinyt omia erikoisia ja rasittavia oikkujaan. Se on silti erittäin laajasti erilaisissa liiketoimintaohjelmistoissa käytössä ja näin ollen kokeneella Java-ohjelmoijalla riittää työn puolesta kysyntää riesaksi asti.

Hello world:

 class Hello {
  public static void main(String[] args) {
    System.out.println("Hello world!");
  }
}

C#
Vuonna 2001 julkaistiin .Net alusta ja sen myötä C#-ohjelmointikieli. Sitä juhlittiin monissa piireissä Javan tappajana; kevyempänä, nopeampana, helpompana, puhtaampana olio-ohjelmointikielenä. Toisissa piireissä tätä Microsoftin kehittämää kieltä taas kutsuttiin kalpeaksi kopioksi Javasta. C#:lla graafisten käyttöliittymien tekeminen on suoraan sanottuna mukavaa, varsinkin verrattuna Javaan. Toisin kuin Java, C# mahdollistaa nykyään myös funktionaalisen ohjelmoinnin, joka on yksinkertaistettuna paluuta lähemmäs datan matemaattista käsittelytapaa. Ajan kuluessa myös C# on hidastunut, joskin se on myös kehittynyt Javaa nopeammin ja pidemmälle. Se on oppinut Javalta virtuaalikoneajattelua, joskin oman kokemukseni mukaan (josta on myönnettävästi jo jonkin verran aikaa) se ei suju aivan yhtä saumattomasti.

Hello world:

public class Hello1
{
   public static void Main()
   {
      System.Console.WriteLine("Hello, World!");
   }
}

Ruby
Ruby esiteltiin maailmalle 1995, mutta se pysyi pitkään pelkästään yliopistomaailmassa. Vasta Rails-kehikon saavuttua vuoden 2005 aikoihin räjähti Ruby todella laajan yleisön tietoisuuteen. Toisin kuin tässä aiemmin mainitut kielet, Ruby on dynaamisesti tyypitetty kieli, joka tarkoittaa, että kerran luotuun olioon voidaan laittaa millaista dataa tahansa ilman erillisiä toimenpiteitä. Tämä ei välttämättä kuulosta merkittävältä, mutta takaan, että jokainen Javan ClassCastExceptioneita päivitellyt sai tuikkeen silmiinsä kuultuaan tuon ensimmäisen kerran. Ruby on vahvimmillaan selainsovellusten kehityksessä. Esimerkiksi alkeellisen verkkokaupan pystyttäminen nollasta vie noin kymmenen minuuttia Ruby on Railsillä, kun taas esimerkiksi Javalla siihen saattaa mennä päiväkausia. Nopeasti nähtävien tulosten ja helpon ymmärrettävyyden takia Ruby on saavuttanut alaa ns Ensimmäisenä Ohjelmointikielenä ja esim Future Female on Suomessa järjestänyt kurssitusta kielen alkeisiin niin sanotusti pystymetsästä saapuville.


Hello world:

puts 'Hello world'

Scala
Scala, henkilökohtainen suosikkini (jota pääsen kuitenkin käyttämään työssäni aivan liian harvoin), saapui estradille 2003. Se on alusta alkaen suunniteltu hyödyntämään parhaita puolia sekä olio-ohjelmoinnista, että funktionaalisesta ohjelmoinnista. Sen pääasiallisena alustana toimii niin hyvässä kuin huonossakin JVM ja se toimiikin (lähes) saumattomasti aikaisempien Java-ohjelmien kanssa. Scalasta on tehty myös versio .Net alustalle ja se pyörii nätisti myös Android-puhelimissa. Kuten Ruby, myös Scala on laajasti ja jopa pääasiallisesti käytössä selainten hallitsemassa maailmassa. Monet suositut sivustot on toteutettu joko osittain tai kokonaan Scalalla, hyvinä esimerkkeinä vaikka Twitter, Foursquare ja Guardianin verkkosivusto. Scalalle saatavilla oleva Lift-kehikko tarjoaa samat nopeasti nähtävät tulokset, jotka Ruby saavuttaa, kun taas JVM tai (.Net, jos sattuu olemaan sinne päin kallellaan) tarjoaa jämäkkyyttä ja laajennettavuutta.

Hello world:

  object HelloWorld {
def main(args: Array[String]) {
      println("Hello, world!")
    }
  }

Useita katkeria taisteluita on väännetty netin keskustelupalstoilla, pubeissa ja kaikkialla missä useampi kuin yksi ohjemoija kerääntyy siitä, mikä ohjelmointikieli onkaan kaikkein paras. Ja jos totta puhutaan, ainakin tämä ohjelmoija on onnistunut väittelemään aiheesta myös ihan yksinäänkin. Tärkein asia, joka ohjelmointikielistä kannattaa kuitenkin muistaa on, että ne ovat loppujen lopuksi työkaluja. Vaikka se olisikin mahdollista, Rubylla ei välttämättä kannata lähteä tekemään pankkien taustajärjestelmiä, eikä Cobolilla verkkokauppaa. Ohjelmointikielien kirjo on laaja ja tuskin kukaan pystyy oppimaan käyttämään kaikkia. Tämä setti on vain esimerkki minulle tutuimmista ohjelmointikielistä ja siitä puuttuu monia tärkeitä ja laajasti käytettyjä ohjelmointikieliä (Lisp, Haskell, APL, Smalltalk, PHP, F# ja monia muita), joista joku muu varmasti mielellään jatkaa juttua.