Cobol – ohjelmointikieli, jota pomokin ymmärtää (Ohjelmointikielet kautta aikojen 4)

Seuraava teksti on julkaistu alunperin Linkin Facebook-sivulla 14.10.2022

Tämä julkaisu on neljäs osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Cobol on vuonna 1959 julkaistu ohjelmointikieli, joka suunniteltiin kaupallisia ja hallinnollisia sovelluksia varten. Tietokoneet alkoivat yleistyä yrityksissä ja oli tarvetta kielelle, jonka avulla voisi käsitellä yrityksen toimintaan liittyvää tietoa ja tuottaa esimerkiksi raportteja. Tällaisten sovellusten luominen oli hankalaa esimerkiksi Fortranilla, joka oli suunnattu tieteelliseen laskentaan.
Cobol suunniteltiin nopeasti ja alun perin tarkoitus oli, että Cobol olisi vain välivaihe ennen kehittyneemmän kielen suunnittelua. Kielen kehityksen taustalla oli Yhdysvaltain puolustusministeriö, joka alkoi myös vaatia tietokoneiden valmistajia lisäämään Cobolin myytäviin koneisiin. Tämän seurauksena Cobolista tuli suosittu kieli, koska se oli valmiina monissa tietokoneissa.

Tavoitteena Cobolin suunnittelussa oli, että kieltä olisi helppo ymmärtää. Tämä näkyy Cobolissa siinä, että se on lähellä englannin kieltä. Esimerkiksi Cobol-kielinen komento “MULTIPLY PRICE BY AMOUNT GIVING TOTAL” sijoittaa muuttujaan TOTAL lausekkeen PRICE*AMOUNT arvon. Haaveena oli jopa, että ohjelmointia osaamaton yrityksen pomo voisi ymmärtää Cobolilla toteutetun ohjelman toiminnan.

Kuitenkin tavoite luoda ymmärrettävä ohjelmointikieli toteutui vain osittain. Vaikka laskutoimitukset voi ilmaista englannin kielen tapaisesti, monet muut asiat Cobolissa ovat vaikeita ymmärtää. Esimerkiksi komento “77 NAME PICTURE X(20)” määrittelee muuttujan NAME, jossa on 20 merkin pituinen merkkijono. Jopa kokeneen ohjelmoijan on vaikeaa ymmärtää, mitä 77, PICTURE ja X tarkoittavat.

Cobol saattaa olla pilkatuin kieli ohjelmointikielten historiassa. Vanhan ajan ohjelmointiharrastajat pitivät Cobolin käyttämistä jopa nolompana kuin Basicin käyttämistä (lisää tietoa Basicista on tulossa myöhemmin tässä sarjassa). Arvostettu tietojenkäsittelytieteen tutkija Dijkstra puolestaan totesi, että Cobolin käyttäminen aiheuttaa aivovaurion, joten kielen opettamista tulisi pitää rikoksena.

Toisaalta Cobol-osaaminen voi olla merkittävä etu ohjelmoijalle. Vuosituhannen alussa Cobol-ohjelmoijista tuli pula, kun kieltä osaavat ohjelmoijat alkoivat jäädä eläkkeelle mutta käytössä oli vielä paljon Cobol-sovelluksia. Joissain tapauksissa ainoa vaihtoehto on ollut houkutella eläkeläisiä takaisin töihin hinnalla millä hyvänsä. Cobol-osaajia koulutetaan edelleen, ja työpaikkailmoituksissakin Cobol saatetaan välillä mainita, erityisesti finanssialalla.

Kuva: Cobol-esimerkki kirjasta Computer Languages (Baron 1988, Penguin Books)

Lisp – vanhan ajan tekoälyohjelmointikieli (Ohjelmointikielet kautta aikojen 3)

Seuraava teksti on julkaistu alunperin Linkin Facebook-sivulla 6.10.2022

Tämä julkaisu on kolmas osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Lisp-ohjelmointikielen kehitys alkoi vuonna 1958, jolloin Dartmouthin yliopiston professori John McCarthy alkoi suunnitella uudenlaista ohjelmointikieltä. Tavoitteena oli luoda kieli, joka soveltuisi luonnollisen kielen ja ihmisen ajattelussa esiintyvien käsitteiden käsittelyyn. Lispiä ennen kehitetty Fortran tuntui sopivan huonosti tällaiseen ohjelmointiin, koska kieli oli suunnattu numeeriseen laskentaan.

Nimi Lisp tulee sanoista “LISt Processor”, mikä viittaa listojen käsittelyyn. Lisp-ohjelmassa sekä käsiteltävä data että ohjelman haluttu toiminta esitetään suluilla merkityissä listoissa. Esimerkiksi (apina banaani cembalo) on kolme sanaa sisältävä lista, kun taas lista (* (+ 1 2) (+ 3 4)) vastaa laskutoimitusta (1 + 2) * (3 + 4). Lisp-ohjelmat muodostuvat siis sisäkkäisistä listoista, minkä vuoksi koodissa on usein suuri määrä sulkeita. Tämän vuoksi nimelle Lisp on keksitty myöhemmin myös vaihtoehtoinen selitys “Lots of Irritating Silly Parentheses”.

Lisp tuli tunnetuksi erityisesti tekoälyjen ohjelmointikielenä. Tekoälyjen kehitys oli alkanut 1950-luvulla, mutta alkuinnostuksen jälkeen tilanne näytti toivottomalta. Toimivan tekoälyn rakentaminen oli paljon vaikeampaa kuin aluksi luultiin. Yksi ajatus oli, että hyvän tekoälyn voisi saada aikaan valitsemalla tekoälyn toteuttamiseen soveltuvan ohjelmointikielen. Lisp vaikutti tähän hyvältä valinnalta, koska listojen avulla pystyi esittämään esimerkiksi tekoälyn tietämystä ihmisten maailmasta.

Nykypäivän näkökulmasta tuntuu erikoiselta, että ohjelmointikielen valintaa pidettiin merkittävänä asiana tekoälyn toteuttamisessa. Kuitenkin lähestymistapa tekoälyyn oli erilainen kuin nykyään. Ennen tavoitteena oli usein luoda asiantuntijajärjestelmä, jonka muistiin kirjattiin tietoja ihmisten maailmasta, kun taas nykyään tekoälyt perustuvat usein numeerisen tiedon käsittelyyn ja raakaan laskentaan.

Lisp vaikutti merkittävästi funktionaalisen ohjelmoinnin kehitykseen. Funktionaalisen ohjelmoinnin piirteitä Lispissä olivat esimerkiksi rekursio sekä funktioiden käsittely arvoina. Rekursiota voidaan käyttää Lispissä toistamiseen niin, että silmukan sijasta funktio kutsuu itseään toistaakseen tiettyä asiaa. Funktioiden käsittely arvoina tarkoittaa puolestaan, että listassa voi olla funktioita, funktion parametri voi olla funktio ja funktio voi palauttaa funktion.

Myöhempiä funktionaalisia ohjelmointikieliä ovat esimerkiksi Scheme (1975), Haskell (1990) ja Clojure (2007).

Kuva: Tekoälyesimerkki kirjasta Lisp-maailma 2 (Hyvönen ja Seppänen 1987, Kirjayhtymä)

Fortran – tehokas korkean tason ohjelmointikieli (Ohjelmointikielet kautta aikojen 2)

Seuraava teksti on julkaistu alunperin Linkin Facebook-sivulla 28.9.2022

Tämä julkaisu on ensimmäinen osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Ohjelmoinnin yleistyessä 1950-luvulla suunniteltiin monia korkean tason ohjelmointikieliä, jotka helpottivat ohjelmoijan työtä matalan tason konekielen käyttämiseen verrattuna. Korkean tason kielissä ohjelmoija pystyi esimerkiksi lisäämään ohjelmaan suoraan matemaattisia lausekkeita (kuten x+3*y-5) toisin kuin konekielessä, jossa laskutoimitukset täytyi esittää erillisinä komentoina (kuten “ADD 5” kasvattaa lukua 5:llä).

Uusien ohjelmointikielten suunnittelijoilla oli kuitenkin vaikeuksia saada kielilleen käyttäjiä. Ongelmana oli hitaus: Korkean tason ohjelmointikielet hävisivät auttamattomasti nopeudessa konekielelle, eivätkä ne vaikuttaneet käyttökelpoisilta todelliseen ohjelmointiin. Vaikka konekielellä oli työlästä ohjelmoida, tuloksena olevat ohjelmat toimivat nopeasti.
Fortran-kielen kehityksessä lähtökohdaksi asetettiin, että kielellä tulisi pystyä saamaan aikaan tehokkaita ohjelmia. Kielen kehitys käynnistettin vuonna 1953, kun IBM:llä töissä ollut John Backus ehdotti IBM 704 -tietokoneen ohjelmointiin soveltuvan uuden kielen kehittämistä. Nimi Fortran tuli sanoista “Formula Translating System”.

Fortranin kehitys ei ollut helppo tehtävä vaan vei useita vuosia aikaa. Ensimmäinen Fortran-kääntäjä tuli saataville vuonna 1957. Tämä oli kuitenkin vasta alku Fortranin kehitykselle, ja kieleen lisättiin suuri määrä uusia ominaisuuksia seuraavina vuosikymmeninä. Vuonna 1966 Fortran standardoitiin ensimmäisen kerran, mikä vakiinnutti kielen asemaa.
Alkuperäinen Fortran oli lähellä konekieltä. Esimerkiksi if-lause muodostettiin antamalla laskulauseke ja sitten kolme rivinumeroa, joihin hypätään riippuen siitä, onko lausekkeen arvo negatiivinen, nolla vai positiivinen. Lisäksi kiinnostava piirre Fortranissa oli, että muuttujan nimen ensimmäinen kirjain määräsi muuttujan tyypin. Esimerkiksi muuttujat, joiden nimi alkoi kirjaimilla väliltä I–N, olivat kokonaislukutyyppisiä.

Fortran saavutti suuren suosion, ja sitä alettiin käyttää erityisesti tieteellisessä laskennassa esimerkiksi fysiikan alalla. Kieli sinnittelee edelleen, koska on olemassa paljon vanhoja käytössä olevia ohjelmia, jotka on toteutettu Fortranilla. Helsingin yliopistossa Fortrania ei ole opetettu tietojenkäsittelytieteen oppiaineessa 1990-luvun jälkeen, mutta ainakin fyysikot käyttävät sitä jossain määrin edelleen juuri olemassa olevien ohjelmien takia.

Haluatko oppia itse Fortrania? Johdatus moderniin Fortran-ohjelmointiin: https://fortran-lang.org/en/learn/

Kuva: vanhan ajan Fortran-ohjelma, joka laskee kolmion pinta-alan (lähde Wikibooks, Fortran)

Reikäkortteja ja mekaanisia kytkentöjä – miten kaikki alkoi (Ohjelmointikielet kautta aikojen 1)

Seuraava teksti on julkaistu alunperin Linkin Facebook-sivulla 9.9.2022

Tämä julkaisu on toinen osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Syksyn ajan Linkissä perehdytään erilaisiin ohjelmointikieliin ja pohditaan sitä, miksi kieliä on niin monta, miten kielet ovat saaneet alkunsa ja mihin tarkoitukseen mikäkin kieli erityisesti sopii. Ennen tutustumista varsinaisiin ohjelmointikieliin kurkistetaan hieman kauemmaksi menneisyyteen. Millaista ohjelmointi oli ennen nykyisen kaltaisia tietokoneita? Entä mitkä olivat aivan ensimmäiset ohjelmointikielet?
Maailman ensimmäisen ohjelmointikielen määrittäminen ei ole aivan helppoa, kuten ei ensimmäisen tietokoneenkaan. Charles Babbagen (1791–1871) kehittämää analyyttista konetta voidaan kuitenkin pitää ensimmäisenä tietokoneena – vaikkakaan konetta ei Babbagen elinaikana rakennettu valmiiksi.
Babbagen ystävä, matemaatikko Ada Lovelace (1815–1852) kehitti analyyttisen koneen käyttöä varten ohjelman ja hahmotteli, miten analyyttista konetta voitaisiin käyttää eri tarkoituksia varten. Häntä pidetäänkin maailman ensimmäisenä ohjelmoijana. Mitään varsinaista nimeä Ada Lovelacen käyttämällä “ohjelmointikielellä” (jos sellaisesta voidaan edes puhua) ei ollut. Hänen mukaansa on kuitenkin myöhemmin nimetty ohjelmointikieli Ada.
Babbagen analyyttista konetta ohjattiin reikäkorteilla, jotka oli alunperin kehitetty kankaankudontaa varten ja joiden käyttöä laajennettiin sittemmin väestölaskennan tarpeisiin ja edelleen monipuoliseen tietojen käsittelyyn ja laskentaan tietokoneilla. Tietokoneiden kehittyessä reikäkortteja käytettiin sekä niiden ohjelmointiin että käsiteltävän datan syöttöön vuosikymmenten ajan, paikoitellen aina viime vuosikymmeniin asti.
Reikäkorttien aikalaisia ovat myös samaan tapaan käytetyt reikänauhat sekä magneettinauhat. Ohjelmointiin käytettiin tietokoneen suoraan ymmärtämää konekieltä sekä mekaanisia vipuja ja kytkentöjä. Vähitellen alettiin kehittää ihmisen kannalta helpompikäyttöisiä korkean tason ohjelmointikieliä (vrt. konekieli “matalana” tasona). Kone kääntää tällaisilla kielillä kirjoitetut ohjelmat konekieleksi ennen ohjelman suorittamista.
Varhaisimpia, elektronisille tietokoneille tarkoitettuja korkean tason ohjelmointikieliä olivat 1940–50-luvuilla kehitetyt kielet kuten Plankalkül, Short Code ja Autocode. Näiden kielten jälkeen päästäänkin niihin kieliin, joihin nykyään yleensä viitataan ohjelmointikielinä. Niistä lisää tulevina viikkoina – kannattaa pysyä kuulolla!
Kokeile itse! Syötä haluamasi merkkijono ja katso, miltä tiedon esittävä reikäkortti näyttäisi. http://www.kloth.net/services/cardpunch.php
Kuvat: Veera Lupunen
Reikäkortteja pinossaReikäkorttirullia