(nettipäiväkirja 08.02.2017) Nykyään kuulee aina joskus sanottavan, että Java on uusi COBOL: pikku hiljaa vanhanaikaiseksi jäävä kieli, jolla on tehty niin tolkuton määrä firmojen koodia, että Java-ohjelmoijille riittää työtä maailman tappiin asti. Huomio sinänsä pitää kyllä paikkansa, mutta minusta tilanne on vielä pahempi.
COBOL nimittäin ei ole kovin vaikea kieli, sen opettelee helposti viikossa (ainakin, jos osaa mitään muuta ohjelmointia). Vanhat COBOL-ohjelmat saattavat olla sotkuisia ja pitkiä, mutta -- tylsiä ja yllätyksettömiä. Ja COBOLin aikana ohjelmilla on tehty kivoja, siistejä asioita, kuten luettu tekstitiedostoja ja laitettu niitä tietokantaan.
Java on ihan toisenlainen maailma. Pelkän kielen osaamisella ei pääse mihinkään, ja kielestäkin on tässä parinkymmenen vuoden aikana julkaistu kahdeksan niin erilaista versiota, ettei tämän ajanjakson ylittävää, yhtenäistä Java-ohjelmointityyliä ole (katso nettipäiväkirja 22.10.2015). Javan mukana tulee tolkuton määrä kirjastoja eri asioiden tekemiseen -- esim. kaksi omaa widget-toteutusta, AWT ja Swing, sekä SOAP-palveluiden tuottaminen on katsottu peruskirjastoon liittämisen arvoisiksi -- ja yli puolet näistä on niin huonosti suunniteltuja, että ne on jo aikaa sitten korvattu taas jollain muulla. Ja näiden Javan peruskirjastojen lisäksi Javan päälle on kasattu kerros kerrokselta erilaisia "frameworkeja", työkaluja, kirjastoja ja muuta. Frameworkit ovat erityisen pahoja, koska ne käytännössä vaativat kirjoittamaan ohjelman tietyllä tavalla, eli jokainen uusi framework on tarkoittanut taas uutta tyyliä järjestellä ohjelmia.
Mitä siitä kaikesta seuraa? Ainakin se, että vaikka kehittäjä olisi ollut Javan kanssa tekemisissä 20 vuotta, silti saattaa käydä niin, ettei hän tunne niitä teknologioita, joita käytetään jossain hänelle uudessa ohjelmassa. Toisaalta, jos kehittäjä on Javan suhteen aika uusi, kestää helposti useita kuukausia, että hän oppii tuntemaan jossain projektissa käytetyt kaikki teknologiat. Javan piti olla ylläpidettävä kieli, jossa kehittäjiä voi vaihtaa kuin kokoonpanolinjan työläisiä. Sen sijaan siitä on tullut monimutkainen ekosysteemi, jossa ihmiset ovat erikoistuneet omiin kulmiinsa. Kaikki Java-teknologia ei ole myöskään hallittavissa osaamalla Javaa: useissa tapauksissa pitää kirjoittaa myös XML-, Groovy- ja muita tiedostoja, jotta buildi toimii ja komponentit löytävät toisensa.
Hassua on, että tällä hillittömän monimutkaisella tavalla tehdään oikeastaan aika helppoja asioita. Näin vähän aikaa sitten Javalla tehdyn webbisovelluksen, sellaisen aika perinteisen, jossa käsitellään ja tarkastellaan tietokannassa olevia tietoja erilaisten lomakkeiden kautta. JBoss-sovelluskehyksessä Liferay-portaaliin puskettuna tämä sovellus onnistui kuluttamaan 1,7 gigatavua muistia, josta suurin osa oli koodia (tietysti siis erilaisia kirjastoja, ei toki omaa koodia). Tämä ohjelmalle, jota vastaavan pystyisi tekemään muutamalla AWK-skriptillä, jotka yhteensä veisivät ehkä 5k koodiriviä eli noin 200 kilotavua. (Mainitsen AWKin siksi, että sekin on melkein yhtä vanha teknologia kuin COBOL.)