Pasi Kovanen

Pasi Kovanen

Software with Passion.

Tässä kirjoituksessa käsitellään yleisimpiä ohjelmointikieliä erityisesti ohjelmistokehityksen ostajan näkökulmasta. Runsaat kolme vuotta sitten kirjoitin aiheesta yleisemmällä tasolla.

On tärkeää, että kaikki ohjelmistoprojektin osapuolet tuntevat toteutusteknologiaksi valitun kielen mahdollisuudet ja rajoitteet. Väärän kielen valinta voi tulla palvelun elinkaaren aikana kalliiksi ja vaikuttaa merkittävästi projektin lopputulokseen esimerkiksi huonon suorituskyvyn muodossa. Lisäksi harvinaisen ohjelmointikielen tapauksessa toimittajan vaihto tai uusien kehittäjien löytäminen voi olla hankalaa.

Asiakas- ja palvelinpää vai sovellus?

Ennen kielten käsittelyä on paikallaan esitellä lyhyesti termit asiakaspää (frontend) ja palvelinpää (backend).

Web-selaimella käytettävissä palveluissa ohjelmiston toiminnallisuutta suoritetaan osittain selaimessa (asiakaspää). Erityisesti nykyisissä dynaamisissa käyttöliittymissä on runsaasti asiakaspäässä koodia, ja joskus koko sovellus ajetaan selaimessa.

Usein kuitenkin suurin osa palvelusta pyörii palvelimella. Palvelinpää sisältää esimerkiksi tietokannan, nk. bisneslogiikan eli palvelun ”älykkyyden” ja liittymät muihin järjestelmiin.

Verkkopalveluiden asiakas- ja palvelinpäät voidaan toteuttaa eri ohjelmointikielillä. Osaa kielistä voidaan myös hyödyntää molemmissa päissä.

Sovelluksia taas ei käytetä selaimella, vaan ne ovat itsenäisiä ohjelmia. Tietokoneissa puhutaan yleensä työpöytäsovelluksista, älypuhelimissa pelkästään sovelluksista. Sovellukset voivat toki tarvittaessa keskustella palvelinten tai muiden sovellusten kanssa.

On olemassa myös ohjelmia, joilla ei ole minkäänlaista käyttöliittymää. Tällaisia ovat esimerkiksi erilaiset tiedon prosessointiin käytetyt ohjelmat.

Mainitaan lopuksi vielä sulautetut järjestelmät. Niillä tarkoitetaan yksinkertaistetusti kaikenlaisissa elektronisissa vimpaimissa (rannekellosta avaruusalukseen) suoritettavia, erikoistuneita ohjelmia.

Java

Java on yksi maailman suosituimpia ohjelmointikieliä. Sillä toteutetut ohjelmat toimivat esimerkiksi Windows-, Linux- ja Mac-ympäristöissä. Lisäksi ohjelmistokehitys onnistuu näissä kaikissa. Myös Androidin sovellukset kirjoitetaan Java-kielellä, mutta PC-maailmaan tarkoitetut ohjelmat eivät suoraan toimi Androidilla (ja päinvastoin).

Java on tarkoitettu erityisesti verkkopalveluiden palvelinpään toteuttamiseen ja muihin palvelimella suoritettaviin ohjelmiin. Javalla voidaan toteuttaa myös työpöytäsovelluksia sekä verkkopalveluiden asiakaspäitä, mutta näihin käyttötarkoituksiin Java ei ole hyvä valinta (lisää aiheesta aikaisemmassa kirjoituksessa).

Levinneisyytensä ansiosta Javaa käyttäviä ohjelmistokehittäjiä ja -yrityksiä on paljon. Jatkokehittäjien löytäminen on siis helppoa.

Vaikka Javan tuottavuus on hyvä, tyhjältä pöydältä aloitettaessa se ei ole uudempien ohjelmointikielten tasolla. Sovelluksen ensimmäisen version valmistuminen voi siis kestää Javalla pidempään. Vincitillä olemme tämän taklanneet keräämällä oman laajan koodikirjaston, jota hyödyntäen pystymme nopeasti aloittamaan uuden projektin ja toteuttamaan kaikki yleisimmin tarvittavat toiminnot. Kirjasto nopeuttaa huomattavasti kehitystyötä ja parantaa tuottavuutta.

C#

Microsoftin C# (”c sharp”) on Javan ohella suosituimpia ohjelmointikieliä, ja sitä käytetään verkkopalveluiden sekä Windows-sovellusten toteuttamiseen. C# osaajia on runsaasti myös Suomessa.

C# on tuettu ainoastaan Windows-ympäristössä sekä Windows Phonessa. (Mono-teknologia tosin mahdollistaa joidenkin C#-ohjelmien käyttämisen myös esimerkiksi Macilla ja Linuxilla.)

Verkkopalveluiden toteuttamisessa C# ja Java ovat teknisesti hyvin samalla viivalla. Javalla (kuten myös muilla tämän kirjoituksen kielillä) voidaan hyödyntää enemmän ilmaista, avoimeen lähdekoodin perustuvaa teknologiaa, kun taas Microsoftin tapauksessa joudutaan usein investoimaan esimerkiksi kehitystyökaluihin ja tietokantaan.

Pelkästään Windowsilla käytettävien työpöytäsovellusten toteuttamiseen C# on paras valinta. Lisäksi on joitakin erikoisalueita, joissa kehittäminen on käytännössä tehtävä Microsoftin teknologioilla.

C/C++ ja Qt

C ja C++ ovat erittäin yleisiä ohjelmointikieliä. Molempia käytetään erityisesti laitteistoläheisessä ohjelmoinnissa.

C/C++ antavat ohjelmoijalle hyvin matalan tason pääsyn laitteistoon ja mahdollistavat osaavissa käsissä erittäin hyvän suorituskyvyn. Kääntöpuolella kielten tuottavuus ei pärjää korkeamman tason kielille, ja matalalla tasolla toimiminen lisää ohjelmointivirheiden riskiä.

Qt on C++:n päälle kehitetty laajennus, joka mahdollistaa graafisten käyttöliittymien helpon toteuttamisen. Qt on hyvä valinta, kun tehdään työpöytäsovellusta jonka halutaan toimivan esimerkiksi Windows, Mac ja Linux -ympäristöissä.

Objective-C

Objective-C kieltä käytetään pääasiassa Mac ja iOS (iPhone, iPad) ohjelmoinnissa, ja se on paras valinta kun riittää että sovellus toimii Applen käyttöjärjestelmissä. Mac/iOS kehitystä voi tehdä vain Mac-koneilla.

PHP

PHP kehitettiin webin alkuaikoina helpottamaan dynaamisen sisällön lisäämistä kotisivuille. Sitä hyödynnettiin aluksi erityisesti web-lomakkeiden käsittelyyn.

Vuosien myötä PHP on laajentunut täysimittaiseksi ohjelmointikieleksi, jota käytetään monissa suurissakin palveluissa. PHP on Suomessakin erittäin laajasti käytössä, joten osaajista ei ole pulaa. Suorituskyvyltään kieli on selvästi esimerkiksi Javaa ja C# hitaampi.

PHP:n suurin ongelma lienee se, että PHP:lla on erittäin helppo päästä alkuun ja toteuttaa ensimmäinen web-palvelu. Tämä voi antaa illuusion, että ohjelmointi on helppoa ja sitä voi tehdä ilman syvällisempää aiheeseen perehtymistä ja harjoittelua.

Hirveimmät näkemäni ohjelmat onkin toteutettu PHP:ta käyttäen. Lyhyessä ajassa on onnistuttu tuottamaan kierteinen spagettikoodigalaksi, jonka ymmärtäminen on vaikeaa, jatkokehitys lähes mahdotonta ja muokkaaminen erittäin hankalaa ja virhealtista. Pahimmissa tapauksissa kaikki tuotettu koodi on jouduttu hylkäämään ja aloittamaan alusta.

Jos sinulle tarjotaan PHP:ta toteutuskieleksi, pyydä perustelut miksi toimittaja pitää sitä parempana vaihtoehtona kuin esimerkiksi Javaa tai C#:aa. Jos ainoa perustelu on, että PHP on ainoa toimittajan osaama kieli, kannattaa pyytää muualtakin arvio sen soveltuvuudesta kyseiseen käyttökohteeseen (”jos sinulla on vain vasara…”). Kurinalaisesti käytettynä ja osaavissa käsissä PHP:kin on hyvä valinta web-palveluiden toteuttamiseen, mutta naiivi koodari ampuu itseään ensin jalkaan ja myöhemmin päähän.

Python

Pythonia hyödynnetään erityisesti sulautetussa koodissa sekä verkkopalveluiden toteuttamiseen. Verkkopalveluissa hyödynnetään lisäksi yleensä Django-laajennusta. Python-ohjelmat toimivat kaikilla alustoilla.

Python on yleinen ohjelmointikieli ja osaajia on hyvin tarjolla. Se soveltuu hyvin erityisesti pienten ja keskikokoisten projektien toteuttamiseen. Integroiduttaessa yrityksen muihin tietojärjestelmiin Java ja C# voivat olla turvallisempia vaihtoehtoja.

Ruby

Ruby on ohjelmointikieli, jota käytetään erityisesti verkkopalveluiden toteuttamiseen Ruby on Rails (RoR) laajennuksen avulla. Ruby on tarkoitettu pääasiassa Macia käyttäville ohjelmoijille. Suomessa kieli on aika vähän käytössä, joten osaajien löytäminen ei ole helppoa.

Tyhjältä pöydältä web-sovelluksen ensimmäisen version toteuttaminen RoR-laajennuksen avulla erittäin nopeaa aloittelijallekin. Suorituskyvyltään Ruby on kuitenkin esimerkiksi Javaa tai C# heikompi, joten se ei ole oikea valinta kovaa kuormituksen palveluiden toteuttamiseen. lisäksi Rubya vaivaa kielen eri versioiden heikko taaksepäin yhteensopivuus. Uuteen versioon päivittäminen voi vaatia ohjelmiston osien mittavaa uudelleenkirjoittamista.

Scala & Clojure

Näiden kahden hyvin erilaisen kielen yhteen niputtaminen nostaa insinöörikollegojen niskakarvat pystyyn, koska teknisessä mielessä kyse on hyvin erilaisista kielistä. Ostajan vinkkelistä katsottaessa yhtäläisyyksiä kuitenkin on runsaasti.

Molemmat ovat verraten uusia kieliä joten niiden osaajia on hyvin vähän. Vielä harvemmalla on kokemuksia laajempien ohjelmistojen toteuttamisesta tällä kaksikolla. Niinpä niiden tulevaisuuden ennustaminenkin on vaikeaa, ja jos tavoitteena on toteuttaa vaikkapa kymmenen vuotta käytössä oleva palvelu kannattaa valita konservatiivisempi vaihtoehto. Jos taas tavoitteena on toteuttaa lyhytikäisempi tai kokeellisempi palvelu, voi näiden modernien kielten kehittyneistä ominaisuuksista olla merkittävää etua.

JavaScript

JavaScript on käytössä käytännössä kaikkein verkkopalveluiden asiakaspäässä eli verkkosivuilla. Kaikki selaimessa toteutettu dynaamisuus perustuu JavaScript-koodiin.

Viime aikoina JavaScript on alkanut yleistyä kovaa vauhtia myös palvelinpäässä esimerkiksi node.js-ympäristön myötä. Toistaiseksi kuitenkin JavaScriptin käyttöön pätee sama ohjeistus kuin edellä Scalaan ja Clojureen: se kannattaa ottaa käyttöön vain jos kaikki osapuolet tiedostavat miksi juuri JavaScript on paras valinta.

HTML5

Tässä yhteydessä on hyvä mainita lyhyesti myös HTML5. HTML ei ole ohjelmointikieli vaan sivunkuvauskieli. Sen lisäksi siis tarvitaan aina JavaScript-koodia älykkyyden toteuttamiseen. HTML5 suhdetta ohjelmointikieliin on käsitelty tarkemmin aikaisemmassa kirjoituksessa.

Flash & Silverlight

Adoben Flash ja Microsoftin Silverlight on tarkoitettu esimerkiksi pelien toteuttamiseen selaimessa, ja ne tarvitsevat toimiakseen selaimeen asennettavan lisäosan (pluginin). Nykyisin HTML5 ja JavaScript mahdollistavat lähes kaiken sen, mihin aiemmin tarvittiin Flashia tai Silverlightia, ja edes Adobe ja Microsoft eivät suosittele niiden käyttämistä uusissa projekteissa.

Tykkäsitkö artikkelista?

Anna pienet aplodit!

Kommentit

  • Kehäkolmosen sisälläkin ovat tehneet vastaavanlaista vertailua: http://reaktor.fi/osaaminen/ohjelmointikielen_valinta/

  • Mielenkiintoinen vertailu ja siitä näkyi hyvin kirjoittajan epäuskoisuus PHP:n käyttämiseen. Itse olen jonkin verran nähnyt erilaisilla kielillä kirjoitettua koodia. Oma ura lähtee liikkeelle basicistä ja päätyy tuonne C#/Java/Php/Python osastolle.

    Eli php:tä arvioitaessa kirjoittaja mukavasti sotki koodauksen tekijän ja kielen keskenään. Eli ammattitaidoton koodari saa kaikilla kielillä aikaiseksi sellaista koodia ettei paremmasta ole väliä. Itse olen nähnyt javalla tehtyä periyttämistä, jossa periyttäminen oli pääasia eikä suinkaan uudelleenkäytettävyys.

    PHP ja muut kielet vaativat kurinalaista koodaamista. Eli ei ole kielen vika mikäli päättää webbisovelluksessa yhdistää esityskerroksen, liiketoimintalogiikan ja kantaoperaatiot yhteen ja samaan koodisekamelskaan.

    Vaikkakin php:ta arvioitaessa viimeisessä lauseessa mainittiin juuri tuosta osaamisesta, niin kieltä arvioitiin melkoisen negatiivisesti. Samoilla kriteereille myös nuo muut kielet ovat onnettomia.

    Todennäköisesti kirjoittajan kielien arvottaminen perustuu omaan kokemukseen koodaamisesta ja siihen, että osa noista kielistä on kuolevia kieliä nykyisessä teknokraattisessa maailmassa. Harva pohtii sitä, että esimerkiksi tekniseen laskentaan sopiva rest- rajapinta syntyy cgi-bin kautta sujuvasti c:llä apache-palvelimelle. Käyttämällä oikeita suunnittelumalleja ja frameworkkejä PHP:llä syntyy hyvin kaunista MVC- mallia.

    Kieliä arvottaessa kannattaa joskus miettiä koodauksen perusteita eli mihin se ohjelmointi perustuu. Eli se perustuu kolmeen perusasiaan eli peräkkäisiin käskyihin, ehtorakenteeseen ja silmukkaan. Ja noiden kolmen asian avulla todellisuudessa koodataan kielellä kuin kielellä. Jos meillä olisi aikaa, niin voisimme vielä koodata assemblerilla kaikki, mutta ohjelmistojen monimutkaistuessa on pakko käyttää hiukan parempia työkaluja. Eli koodin lyhyys vaikuttaa aika melkoisesti koodin laatuun eli kielen abstraktiotaso pitää olla aika korkea, jotta sillä pääsee toteuttamaan koodia tuottavasti. Eli eri tilanteissa valittavan kielen abstraktiotason pitää vastata toteutusta.

    Eli mielestäni on hiukan turhaa arvottaa yksi kielistä huonoksi, koska sitä käytetään huonosti. Eli silloin mieluummin pitää arvottaa perus php- koodaria eikä suinkaan kyseistä kieltä.

    Kari…

    p.s. Satiirista tekstiä siitä, etten osaa javaa: http://www.cowboykoodari.com/koodari/sa-et-oo-koodannu-javalla/

    Ja

    Joku peruskoodari ratkaisee PHP:llä viikon ensimmäistä päivää (esimerkki stackowerflosta).

    $current_date =date(’Y-m-d’);

    $year = date(’Y’);
    $month = date(’m’);
    $day = date(’d’);

    $first_day = get_week_start($year, $month, $day);

    $weeks_first_day =date(’Y-m-d’,$first_day);

    function get_week_start($year, $month, $day)
    {
    $timestamp = mktime(0, 0, 0, $month, $day, $year);
    return $timestamp = mktime(0, 0, 0, $month, date(’d’, $timestamp)-date(’w’, $timestamp), $year);
    }

    Toisaalta sen voi tehdä näinkin php:llä:

    function monday($today){
    $w = date(”W”, $today);
    $y = date(”Y”, $today);
    $str = $y . ”W” . $w;
    return strtotime($str);
    }.

  • ”Eli mielestäni on hiukan turhaa arvottaa yksi kielistä huonoksi, koska sitä käytetään huonosti.”

    En suinkaan väittänyt PHP:ta kielenä huonoksi, vaan kommentoin että se on eniten käytetty kieli huonon koodin tuottamiseen. Tämä näkemys pohjautuu pitkäaikaiseen kokemukseen.

  • Nyt on pakko kysyä mitä on huono koodi. Ja jotta pääsemme asiassa eteenpäin, niin kysyn yksinkertaisen kysymyksen.

    Miksi seuraava koodi on huonoa javaa:

    String s = ”C”;

    for (CodeLanguage c : languages) {
    s += ”, ” + c.getName();
    }

    Tuo ylläoleva on hyvä esimerkki siitä, kuinka kaunis ja yksinkertainen koodi saattaa olla huonoa. Oma kokemukseni on vain rajallista javasta, mutta siltikin tuollaisen nähdessäni saattaisin ottaa refaktorointikirveen käteen ja kirjoittaa tuon uudelleen.

    Eli voisin väittää, että kun puhutaan huonosta koodista, niin sitä syntyy kaikilla kielillä yhtä tehokkaasti. PHP:lle on saatu huono kaiku kahdesta eri syystä. Ensimmäinen on sen käyttöönoton helppous ja toinen se, että osaavaa PHP-koodaria ei arvosteta vaan vaan palkataan yleensä halvin.

    Oma pitkäaikanen kokemus kertoo kylläkin samaa kuin sinun kokemuksesi. Eli PHP:llä syntyy sutta mikäli sitä ei osata käyttää. Mutta sama kokemus kertoo, että samanlaista sutta syntyy myös Javalla, Cobolilla, C#, C++, Basicillä, JavaScriptillä jne. mikäli niitä ei osata käyttää.

    Eli nyt on lopuksi pakko hiukan viitata yhteen luentoon, jossa muistutettiin tasa-arvoisuudesta. Eli se ei ole sitä, mitä itse luulet toisen tarvitsevan. Vaan se on sitä, mitä toinen tarvitsee. Eli pitää pystyä aina katsomaan maailmaa toisen silmin. Eli jos omat kokemukset jostain kielestä ovat huonoja, niin se ei tarkoita että kaikkien muiden kokemukset olisivat huonoja. Eli aina pitää tutkia asioita myös muiden kuin itsensä kannalta.

    Kari…

    P.S. Ad verecundiam-tyyppistä perustelua kannattaa muuten käyttää aika varovasti. Lisätietoa asiasta: http://ajattelunammattilainen.fi/2012/05/28/5-yleisinta-argumenttivirhetta-ja-miten-selviat-niista/

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *