Basic – helppo kieli ohjelmoinnin aloittamiseen (Ohjelmointikielet kautta aikojen 5)

Seuraava teksti on julkaistu alunperin Linkin Facebook-sivulla 21.10.2022

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

Basic-kielen kehitys käynnistettiin vuonna 1964 Dartmouthin yliopistossa. Tavoitteena oli saada aikaan helppo ohjelmointikieli, jonka avulla kuka tahansa opiskelija voisi tutustua ohjelmointiin ja tietokoneisiin. Basicista on toteutettu vuosien saatossa suuri määrä erilaisia versioita. Basic ei olekaan oikeastaan yksittäinen ohjelmointikieli vaan perhe ohjelmointikieliä, jotka muistuttavat toisiaan.

Perinteinen Basic-ohjelma muodostuu komennoista, joista jokaisen edessä on rivinumero. Esimerkiksi komento “LET X = 5” asettaa muuttujalle X arvon 5 ja komento “PRINT X” tulostaa muuttujan arvon. Tärkeässä roolissa ovat hyppykomennot, joiden avulla voidaan haarautua ehtojen perusteella sekä toteuttaa silmukoita. Esimerkiksi komento “IF X = 2 THEN GOTO 100” hyppää riville 100, jos muuttujan X arvo on 2.

Basic saavutti merkittävän aseman kotitietokoneissa ja ohjelmoinnin aloituskielenä 1980-luvulla. Esimerkiksi Commodore 64 -tietokoneessa Basic toimi käyttöjärjestelmänä: koneen käynnistämisen jälkeen avautui Basic-tulkki, jonka kautta pystyi käynnistämään muita ohjelmia. Tämän seurauksena jokainen koneen käyttäjä joutui ainakin vähän kosketuksiin Basic-ohjelmoinnin kanssa.

Basicia on arvosteltu siitä, että se kannustaa huonoon ohjelmointityyliin. Syynä tähän olivat erityisesti hyppykomennot, joiden vuoksi ohjelman rakenteesta tuli helposti sekava. Basic on kuitenkin kehittynyt pikkuhiljaa rakenteisen ohjelmoinnin suuntaan. Tämä tarkoittaa, että hyppykomentojen sijasta käytetään ehto- ja silmukkarakenteita, jotka helpottavat ohjelman ymmärtämistä. Basic on saanut tässä vaikutteita esimerkiksi Pascal-kielestä.
Tärkeä syy Basicin myöhempään suosioon oli se, että Microsoft panosti kieleen. Vuonna 1991 Microsoft julkaisi Visual Basic -kielen, josta tuli suosittu väline Windows-ohjelmointiin. Visual Basicissa ohjelmoija pystyi piirtämään sovelluksen käyttöliittymän ja lisäämään Basic-koodia tapahtumien (esimerkiksi “käyttäjä painaa nappia”) käsittelemiseen. Tämän ansiosta aiemmin vaikeana pidetty Windows-ohjelmointi tuli kaiken kansan saataville.
Basicin loiston päivät ovat nykyään kaukana takanapäin. Basic on menettänyt asemansa ohjelmoinnin aloituskielenä, ja modernimpi Python on perinyt sen aseman. Viimeinen naula Basicin arkkuun lyötiin keväällä 2020, kun Microsoft ilmoitti, ettei se aio enää kehittää Visual Basicia, vaan kieli on saavuttanut kehityksensä päätepisteen.

Kuva: Basicilla toteutettu peli DONKEY.BAS, jonka kehittivät Bill Gates ja Neil Konzen (lähde https://www.maizure.org/pro…/decoded-donkey-bas/index.html)

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

Opitaan tietokoneen toiminnasta!

Kaikki käyttävät tietokoneita nykyään lähes joka päivä. Vähintään puhelin, tuo pieni tietokone, kulkee mukana, kelle viihteenä ja kelle kommunikaatiovälineenä, bussikorttina tai maksuvälineenä. Tietokoneet ovat elämässämme kaikkialla, mutta kuinka moni meistä osaisi selittää miten tietokone toimii? Entä jos haluaisi oppia, kuka sitä opettaisi?

Koulujen opetussuunnitelmiin on lisätty tietojenkäsittelytieteen aiheita viime aikoina. Esimerkiksi alakouluissa on lapsille pakollista ohjelmointia. Usein kuitenkin tietojenkäsittelytiede rajoittuu kouluissa juuri ohjelmointiin ja algoritmiseen ajatteluun. Lapsille ja nuorille suunnattu tietojenkäsittelytieteen opetus ei useinkaan kerro siitä, miten tietokoneet, tietokoneverkot tai käyttöjärjestelmät toimivat. Näitä päivittäin käyttävien lasten voisi kuitenkin olla hyvä ymmärtää niiden toiminnasta edes perusteet.

Tietokone ei ole taikalaatikko, jonka toimintaa ei voisi ymmärtää. Nykyiset tietokoneet ovat toki monimutkaisia laitteita, mutta pohjimmiltaan nekin rakentuvat pienistä yksinkertaisista osista ja operaatioista, joista on koottu monimutkaisia toimintoja ja ohjelmia. Tietokoneen perusperiaate on kuitenkin kohtalaisen yksinkertainen.

Tietokone on nopeasti yksinkertaisia komentoja suorittava laite. Se osaa hypätä ohjelmassa uuteen kohtaan, vertailla lukuja ja laskea yhteen-, vähennys- ja kertolaskuja. Tietokone on myös hämäävä nimi, koska tietokone ei pahemmin tiedä mitään. Se on kuitenkin hirveän nopea suorittamaan komentoja, joten se voi tehdä monimutkaisia asioita nopeasti, vaikka se tekisi todellisuudessa paljon enemmän mekaanista laskemista ja työtä kuin ihminen vastaavassa tilanteessa.

Tietokoneiden toimintaan liittyy paljon tietoa, jota voisi hyvin pitää yleissivistävänä. Ohjelmoinnin lisäksi muista tietojenkäsittelytieteen aiheista on kuitenkin vain vähäisesti opetusta ja materiaalia lapsille ja nuorille. Siksi tiedeluokka Linkissä on kehitteillä materiaaleja myös tietokoneen toiminnan, tietoliikenteen ja käyttöjärjestelmien opettamiseen.

Tietokoneiden toiminnasta on tehty tänä keväänä oppimateriaalia yhteistyössä UniJunior-toiminnan kanssa. UniJunior järjestää lapsille suunnatun työpajan, jossa pohditaan mikä tietokone on, opitaan tietokoneen osista, binääriluvuista ja tietokoneen yksinkertaisten komentojen suorituksesta.

UniJuniorin toiminta on ruotsinkielistä ja siihen voi tutustua lisää täällä: https://www.helsinki.fi/sv/vetenskapsfostran/barn-unga-och-familjer/unijunior