C vaatii ohjelmoijalta tarkkuutta (Ohjelmointikielet kautta aikojen 8)

C-koodia tekstieditorissa ja käännettynä objdump-työkalun avulla tutkittuna.

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

Miltä tietokoneen suorittama koodi oikeasti näyttää?

Oheisessa kuvassa on vasemmalla C-kielellä kirjoitettu ohjelma ja oikealla sitä vastaava konekielinen koodinpätkä, tässä tapauksessa Linux-käyttöjärjestelmän C-kääntäjän tuottamana. Esimerkiksi Linuxin objdump-työkalulla saa kääntäjän tuottamasta binäärikoodista heksadesimaaleiksi tulkitun esityksen. Kukin heksadesimaalimerkki vastaa neljää binäärilukua. 2^4 = 16, eli yhdellä merkillä on 16 mahdollista arvoa, mistä nimi heksadesimaali. Kukin kahden merkin pari vastaa siis kahdeksaa binäärilukua eli yhtä tavua, joka on tietokoneissa yleensä käytetty yhden muistipaikan koko.

 

Kuvassa oikealla ensimmäisessä sarakkeessa on konekielisen komennon osoite, esimerkiksi 1155. Myös osoitteet esitetään heksadesimaalimuodossa. Kukin kahden merkin mittainen komennon osa vie yhden muistipaikan, joten tämän seitsemän merkkiparin mittaisen komennon jälkeen seuraavan komennon osoite on 115c. Osoitteen jälkeen toisessa sarakkeessa on itse komento kahden heksadesimaalimerkin pareina.

 

Kolmannessa sarakkeessa on sama komento ihmisen luettavassa muodossa. Luettavuus on suhteellista: esimerkiksi “movl” tarkoittaa “move long”, eli siirrä tai tallenna pitkä kokonaisluku. Neljännestä sarakkeesta löytyvät komennon parametrit, eli tässä tapauksessa tallennettava kokonaisluku ja tallennusosoite. Tämä konekielinen komento, joka alkaa muistipaikasta 1155, vastaa siis C-ohjelman riviä

int x = 0;

 

1970-luvulla alkunsa saanut C on esimerkki matalan tason ohjelmointikielestä, jonka avulla pääsee melko suoraan käsittelemään tietokoneen sisäisiä rakenteita. Suuri osa ohjelmakoodista onkin suoraviivaisesti yhdistettävissä konekielisiin komentoihin, kuten kuvan koodiesimerkissä.

C:n opiskelu on monelle ohjelmoijalle silmiä avaava kokemus, kun esimerkiksi tietokoneen muistin rajallisuus täytyy ottaa ohjelmoidessa huomioon. Osaavan ohjelmoijan käsissä C on yksi resurssitehokkaimmista ohjelmointikielistä, ja esimerkiksi käyttöjärjestelmien koodissa on usein paljon C:tä. C on edelleen yksi maailman käytetyimmistä ohjelmointikielistä.

C:n tarkkuus, yksityiskohtaisuus ja rajoitteet eivät kuitenkaan sovi kaikkiin tarkoituksiin, joten sen pohjalta on kehitetty useita muita kieliä, kuten C++ ja C#. Näissä kielissä yhdistyy C:stä perityt tehokkaat ominaisuudet, kuten matalan tason muistin käsittely, korkeamman tason rakenteisiin, kuten olio-ohjelmointiin. C++ on laajalti käytössä mm. peliohjelmoinnissa ja kilpaohjelmoinnissa. Myös Arduino-mikrokontrollereita ohjelmoidaan yleensä C:llä tai C++:lla.

Vaikka C on jo 50 vuotta vanha ohjelmointikieli, sitä kehitetään jatkuvasti. Todennäköisesti tänä tai ensi vuonna päästään päättämään C:n seuraavasta standardoidusta versiosta – edellinen versio on vuodelta 2017. C onkin tämän julkaisusarjan ensimmäinen kieli, jota myös edelleen laajasti opiskellaan, ja josta on tarjolla paljon eri tasoisille suunnattuja oppimateriaaleja. Alla listattuna joitakin niistä.

Ohjelmointiputkan C-oppimateriaali: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=cohj_1
Tie koodariksi -sivuston C++ -kurssi ohjelmoinnin perusteet osaavalle https://tie.koodariksi.fi/cpp/
FiTech-verkostoyliopiston kautta on usein tarjolla avoimia C-ohjelmoinnin yliopistokursseja: https://fitech.io/

 

Pascal – tehokas, mutta liiankin kompakti (Ohjelmointikielet kautta aikojen 7)

Turbo Pascal 7.0. -asennuslevykkeitä

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

Pascal-ohjelmointikielen kehitys alkoi 1960-luvun lopulla osana ALGOL-ohjelmointikielen uudistusprosessia. Vuonna 1970 Niklaus Wirth julkaisi projektinsa kuitenkin erillisenä ohjelmointikielenä, joka sai nimensä ranskalaiselta luonnontieteilijältä Blaise Pascalilta. Pascal-kielen tavoitteena oli olla tehokas ja kompakti, ja se saavuttikin suosiota 1960-70-luvuilla tietokoneiden levitessä oppilaitosten ja korporaatioiden ulkopuolelle pienempiin yrityksiin ja laajemmalle käyttäjäkunnalle.

Pascal oli 1980-luvulla myös suosittu ohjelmoinnin opetuskieli sekä kouluissa että yliopistoissa. Pascalin tavoitteena oli olla riittävän helppo kieli aloittamiseen, mutta kuitenkin opettaa alusta alkaen hyvää ohjelmointityyliä. Esimerkiksi seuraava Pascal-ohjelma tulostaa ruudulle kymmenen merkin levyisen ja korkuisen neliön risuaita-merkeillä:

var
    n, i, j: integer;
begin
    n := 10;
    for i := 1 to n do
    begin
        for j := 1 to n do write('#');
        writeln();
    end;
end.

Koodissa näkyy, että muuttujan asettamiseen käytetään merkintää := eikä =. Merkintä = on puolestaan varattu vertailemiseen. Esimerkiksi “n := 10” asettaa muuttujan n arvoksi 10, kun taas “n = 10” tutkii, onko muuttujan n arvo 10. Tämä eroaa nykyään yleisemmästä käytännöstä, jossa muuttuja asetetaan yhtäkuin-merkillä =, kun taas vertailu tapahtuu kahdella merkillä ==.

Pascal-kielen menestykseen vaikutti Borlandin edullinen ja tehokas Turbo Pascal -kääntäjä, jonka avulla oli helppoa opetella ohjelmointia DOS-ympäristössä. Myöhemmin Borland julkaisi Windows-ohjelmointia varten Pascaliin pohjautuneen Delphi-kääntäjän, josta tuli myös suosittu.

Vaikka Pascal oli hyvin suosittu kieli 1990-luvulle asti, nykyään se on lähes tuntematon eikä kovin moni taho käytä sitä. Pascalin kompaktius koitui jossain määrin sen tuhoksi: kieli ei suoraan sopinut erikoistuneempiin käyttötarkoituksiin, joten käyttäjät kehittivät eri suuntiin leviäviä laajennuksia kieleen. Seurauksena oli useita virallisempia ja epävirallisempia kieliversioita, ja Pascal-ohjelmoijan täytyi käytännössä osata useaa eri ohjelmointikieltä voidakseen ohjelmoida Pascalilla. Lopulta paremmin standardisoidut ohjelmointikielet kuten C ja Java ajoivat Pascalin ohi.

Kuvassa Turbo Pascal 7.0 -asennuslevykkeitä, lähde Wikimedia.

Logo – lasten oma ohjelmointikieli (Ohjelmointikielet kautta aikojen 6)

Logo-koodi, joka piirtää spiraalin sekä kuva koodin suorituksen tuloksesta.

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

Logo on opetuskäyttöön tarkoitettu ohjelmointikieli, jonka ensimmäinen versio kehitettiin vuonna 1967. Keskeinen henkilö Logon kehityksessä oli MIT:n professori Seymour Papert, joka oli kiinnostunut uuden teknologian käyttämisestä opetuksessa. Tavoitteena oli luoda ohjelmointikieli, joka kehittäisi lasten ajattelua konkreettisen tekemisen kautta. Nimi Logo tulee kreikan kielen sanasta “logos”, joka tarkoittaa sanaa tai ajatusta

Logo tunnetaan erityisesti kilpikonnagrafiikasta, jossa ruudulla liikkuu kilpikonna. Tavallisia komentoja ovat kilpikonnan liikuttaminen eteenpäin sekä kilpikonnan suunnan muuttaminen. Liikkuessaan kilpikonna piirtää viivaa, minkä avulla voidaan piirtää kuvioita ruudulle. Yllättävää kyllä, Logon ensimmäisissä versioissa ei kuitenkaan ollut graafisia ominaisuuksia, vaan kieli oli alun perin tarkoitettu tekstin ja symbolien käsittelyyn.

Logossa on funktionaalisen ohjelmoinnin piirteitä ja siinä on vaikutteita Lisp-kielestä. Tyypillinen tapa ohjelmoida Logolla on määritellä lyhyitä komentoja, jotka liikuttavat kilpikonnaa tietyllä tavalla. Komennoissa voi olla parametreja, jotka vaikuttavat niiden suoritukseen. Yhdistämällä tällaisia komentoja toisiinsa voidaan luoda ohjelmia, jotka tuottavat monimutkaisia kuvioita.

Logo saavutti suunnilleen nykyisen muotonsa 1960-luvun lopussa, kun kieleen lisättiin grafiikkaominaisuudet. Kuitenkin kieli vietti vuosikausia hiljaiseloa ja vain harvat tiesivät Logosta ennen 1980-lukua, jolloin kieli alkoi saavuttaa suosiota. Tähän vaikutti Papertin vuonna 1980 ilmestynyt kuuluisa kirja “Mindstorms: Children, Computers, And Powerful Ideas”, joka käsitteli Logon taustalla olevia ideoita.

Kun Logo alkoi yleistyä 1980-luvulla, siitä tuli haastaja Basic-kielelle, jolla oli valta-asema ohjelmoinnin opettamisessa. Logosta annettiin kuva Basicia kehittyneempänä kielenä, joka kehittäisi paremmin lasten ajattelua. Erityisesti Logon sanottiin soveltuvan Basicia paremmin luovaan ohjelmointiin. Logon vahvuutena oli funktionaalisen ohjelmoinnin tyylinen ajattelu, jossa ongelman ratkaisun pystyi rakentamaan pienistä paloista.

Nykyään Logoa ei käytetä paljoakaan, vaan Scratch on pitkälti korvannut sen ohjelmoinnin alkeiden opetuksessa. Scratchissa on vaikutteita Logosta, mutta kieli on nykyaikaisempi ja se tarjoaa enemmän mahdollisuuksia ohjelmoijalle. Siinä missä Logolla voi lähinnä piirtää kuvioita kilpikonnan avulla, Scratchilla voi tuottaa pelejä, joissa on liikkuvia kuvia ja vuorovaikutteisuutta.

Logo on käännetty myös suomeksi. Voit testata logolla ohjelmointia täällä (https://fergusq.github.io/jslogo/?lang=fi#).

Kuvassa esimerkki spiraalin piirtävästä Logo-koodista Linkki-tiedeluokan historiikin sivulta 41.

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