Arcade-pelien ohjelmointi
Pythonilla ja Pygamella

Chapter 2: Mikä on ohjelmointikieli?

Video: What is a computer language?

Mitä ohjelmointikielellä tehdään? Miksi tietokoneeseen tarvitaan ohjelmointikieli? Miksi ohjelmointikieliä on monia erilaisia?

Nämä ovat hyviä kysymyksiä, mutta voit silti opetella ohjelmoimaan tietämättä vastauksia näihin. Samoin kuin voit opetella ajamaan autoa ymmärtämättä moottorin ja muiden osien tarkkaa toimintaa. Tietokoneen toimintaa pitää kuitenkin ymmärtää, kun haluat kehittyä ohjelmoinnissa edistyneemmälle tasolle. Tässä kappaleessa tutustumme tietokoneen toimintaan ja ohjelmointikieliin.

2.1 Ohjelmoinnin lyhyt historia

Tietokone on elektroninen digitaalitekniikkaan perustuva laite. Kaikki sen toiminta perustuu johtimissa oleviin jännitetasoihin. Jännitteetön johdin vastaa tietokoneelle lukua 0 (nolla) ja vastaavasti jännitteellinen johdin vastaa lukua 1. Tietokone voi itse asiassa käsitellä vain nollia ja ykkösiä sekä niistä muodostettuja yhdistelmiä.

Tietokoneen historian alkuaikoina ykköset ja nollat syötettiin tietokoneen muistiin kytkimillä. Wikimedia Commonsin 2.1, kuva, Altair 8800. Etupaneelin kytkimillä ladataan ohjelma muistiin. Pienet ledivalot näyttävät ohjelman tulosteen. Monitoria ei tässä koneessa ollut.

fig.altair
Figure 2.1: Altair 8800

Kytkimien on/off asennoilla saadaan esitettyä eri numeroyhdistelmiä koneelle. Ja jokainen numeroyhdistelmä vastaa tietokoneen dataa tai suoritettavaa komentoa. Tällaista ykkösten ja nollien yhdistelmillä esitettyjä numeroita ja dataa kutsutaan binäärijärjestelmäksi. Sitä kutsuttiin myös ensimmäisen sukupolven ohjelmointikieleksi, 1GL (first generation programming language).

Binaarilukuja esitettiin tavallisesti neljän bitin ryhmissä. Esimerkiksi:

1010 0010 0011

Sekä data että komennot tallennetaan binaarimuodossa. Konekieli on binaarilukuina esitettyjä komentoja ja ohjeita, jotka tietokone kääntää suoritettavaksi koodiksi. Kaikki binaarikoodi ei kuitenkaan ole konekieltä. Myös dokumentit, tietokannat, graafiset kuvaajat ym. esitetään tietokoneessa binaarilukuina. Tätä dataa ei ole tarkoitettu kuitenkaan suoritettavaksi koneessa.

Seuraavassa kehitysvaiheessa tietokoneohjelmien syöttämisessä alettiin käyttää heksadesimaalilukuja. Meille tutussa kymmenlukujärjestelmässä on käytössä numerot 0-9. Heksadesimaalijärjestelmässä on numeroiden 0-9 lisäksi vielä numerot A-F, jolloin kaikki lukuvaihtoehdot 0-15 saadaan esitettyä neljän kytkimen (eli bitin) yhdistelmävaihtoehdoilla. Alla taulukossa on esitettynä binaarilukujen, kymmenlukujen ja heksadesimaalilukujen vastaavuudet.

BinaarilukuDesimaalilukuHeksaluku
000
111
1022
1133
10044
10155
11066
11177
100088
100199
101010A
101111B
110012C
110113D
111014E
111115F
1 00001610
1 00011711
Video: Decimal, binary, and hexadecimal systems

Myöhemmin ohjelmien syöttäminen tuli helpommaksi, kun käyttöön otettiin assembly-kieli. Assebly-kielessä komennot ovat helpommin ymmärrettäviä (mnemonisia) ja ohjelma käännetään kääntäjällä mnemonisesta muodosta tietokoneen ymmärtämään numeeriseen muotoon. Tätä kieltä kutsuttiin 2GL kieleksi, toisen sukupolven ohjelmointikieleksi.

Kuvassa 2.2 on esitettynä esimerkkipätkä assembly-kielisestä ohjelmasta (lähde: Wikimedia Commons) .

fig.assembly
Figure 2.2: Esimerkki assembly-kielestä

Assembly-kieli oli valtava kehitysharppaus, mutta se ei vieläkään ollut kovin helppoa ohjelmoida. Seuraavan sukupolven ohjelmointikielet siirsivät kielen esittämisen korkeammalle tasolle. Niiden komennot olivatkin paljon helpommin ymmärrettävissä. Esimerkiksi COBOL, FORTRAN ja LISP olivat ensimmäisiä kolmannen sukupolven kieliä, joiden kieliasua (syntaksia) oli helppo lukea.

Toisen ja kolmannen sukupolven ohjelmointikielissä on erityinen kääntäjä. Kääntäjä kääntää ohjelmoijan kirjoittaman lähdekoodin) konekielelle. Tämä konekieli suoritetaan (ajetaan) ja alkuperäinen lähdekoodi säilyy koskemattomana eikä sitä ajeta.

Jos ohjelma koostuu useammasta lähdekooditiedosta, voidaan lähdekoodit linkittää yhdeksi suoritettavaksi ohjelmaksi erityisen linkitysohjelman avulla. Linkitysohjelmalla linkitetty ohjelma käännetään ja saadaan suoritettava ohjelma. Kääntämisen jälkeen lähdekoodia ei enää tarvita, paitsi jos ohjelmaan tehdään muutoksia.

fig.compiler_and_linker
Figure 2.3: Kääntäjä ja linkitys

Konekielelle kääntämisessä haittana on se, että ohjelma toimii vain siinä konetyypissä, jossa käännös on tehty. Windows-ohjelmat eivät toimi Applen tietokoneissa, eikä Linux-koneissa.

Kääntämiset ja linkkaamiset saattavat tuntua monimutkaiselta varsinkin ohjelmoinnin aloittelijoille. Siksi on kehitetty ns. tulkkaavia ohjelmointikieliä joissa on erityinen tulkkiohjelma. Tulkkaava ohjelma lukee lähdekoodia ja kääntää sitä konekielelle samalla kertaa ja suorittaa komennot "lennosta". Tulkkaava ohjelma voidaan helposti siirtää ja suorittaa Windows, Mac ja Unix-koneiden välillä, kunhan käytössä on laitekohtainen tulkkiohjelma.

Tulkkaavan ohjelmointikielen haittana on, että sen suorittaminen tulkkiohjelman läpi on hitaampaa kuin valmiiksi koneelle kääntäjällä käännetyn konekielen suorittaminen.

fig.interpreter
Figure 2.4: Tulkki

Python on yksi esimerkki tulkaavasta ohjelmointikielestä. Pythonilla ohjelmointi on helpompaa kuin esimerkiksi C-kielellä, mutta Python suorittaa ohjelman hitaammin ja vaatii koneeseen Python-tulkin toimiakseen.

Kääntävä ohjelmointikieli Java suorittaa konekielen ns. Java virtuaalikoneessa (Java Virtual Machine, JVM),varsinaisen koneen sijasta. Samantyyppistä virtuaalikonetta käyttää myös C#, (Common Language Infrastructure) (CLI) kieli, jossa on ns. Virtual Execution System (VES) virtuaalikone. Näiden kielten ja virtuaalikoneiden tarkempi käsittely ei kuulu tähän dokumenttiin, mutta voit lukea niistä halutessasi lisää.

Ohjelmointikieliä on tarjolla useita eri vaihtoehtoja. Koska koneilla suoritetaan hyvin erilaisia tehtäviä, tarvitaan näiden erikoistehtävien toteutuksiin erilaisia ohjelmointikieliä. Esimerkiksi C on erinomainen kieli käyttöjärjestelmien ja sulautettujen järjestelmien (automaatit, älypuhelin, robotit jne.) ohjelmointiin. Taasen PHP on sopiova valinta web-palvelujen ohjelmointiin. Python on yleiskäyttöinen, helppo kieli ja soveltuu hyvin ohjelmoinnin opetteluun.

Tiobe-yhtiön sivuilla on lista eri kielten käyttöasteista maailmalla. Vastaavasti DICE ylläpitää listaa siitä, minkä ohjelmointikielen taitajille työpaikkoja on tarjolla.

Onneksi kaikilla kielillä on hyvin samankaltaiset kieliopilliset yhtäläisyydet ja ja elementit, joten osaamalla jonkin kielen ohjelmoinnin voit samoilla tiedoilla ja taidoilla siirtyä helposti käyttämään jotakin toista ohjelmointikieltä.

Seuraavissa "Nörttien riemuvoitto" (englannin kielisissä) videoissa on hauskasti esitetty mikrotietokoneen historiaa: Triumph of the Nerds tekijä: Robert X Cringley, kolmiosainen hauskasti toteutettu sarja ohjelmoinnin synnystä. Myös seuraava kirja on suositeltava, Accidental Empires, jos haluat luettavaa elokuvien sijaan.

Mitä tapahtuikaan noiden videoiden tekemisen jälkeen? Niissä ei ollut mitään esim. Internetistä! Katsopa seuraavat videot Nörtit 2.0.1 tekijänä myös Robert X Cringely.

2.2 Review

2.2.1 Multiple Choice Quiz

Klikkaa tästä monivalintatehtävään.

2.2.2 Short Answer Worksheet

Klikkaa tästä kappaleen kertaustehtäviin.

2.2.3 Lab

Klikkaa tästä ohjelmointitehtäviin.


You are not logged in. Log in here and track your progress.