Tämä kurssi on jo päättynyt.

Kurssin viimeisimmän version löydät täältä: O1: 2024

Luku 1.2: Ohjelmoinnista

Tästä sivusta:

Pääkysymyksiä: Mitä ovat ohjelmat ja ohjelmointi? Mihin ohjelmoija kirjoittaa ohjelmakoodin? Miten laadittu ohjelma käynnistetään? Miten kurssilla palautetaan ohjelmia arvioitaviksi?

Mitä käsitellään? Ohjelmoinnin perusajatus ja yleisiä piirteitä. Ohjelmoijan työvälineitä: ohjelmointikieli, ohjelmakoodi, ohjelmointiympäristö (IDE), pakkaukset ja kooditiedostot.

Mitä tehdään? Luetaan sekä kokeillaan ohjelmointityökaluja. Muokataan annettuja sovellusohjelmia.

Suuntaa antava työläysarvio:? Puolitoista tuntia. Enemmänkin voi mennä, jos asennat samalla ohjelmointityökaluja omalle koneellesi.

Pistearvo: A12.

Oheismoduulit: GoodStuff (uusi), O1Library (uusi), Pong (uusi).

../_images/person01.png

Ohjelmien laatiminen ja ajaminen

Perinteikäs ja hyvä tapa kuvailla tietokoneohjelmointia on verrata sitä ruuanlaittoon. Alla tämä vertaus on vuorovaikutteisena esityksenä:

Ohjelman ajaminen

../_images/computer_as_cook.png

Ohjelmoija määrittää, miten tietokoneen halutaan toimivan, kun ohjelma ajetaan. Esimerkiksi kurssi-ilmoittautumisohjelmaa laativa ohjelmoija voi määritellä tietokoneelle ohjeen: "Kun käyttäjä painaa tiettyä nappia, lisää tuo käyttäjä kurssille ilmoittautuneiden luetteloon."

Sovellusohjelman käyttäjällä on käytössään kopio ohjelmasta tallennettuna tietokoneellaan. Kun hän käynnistää ohjelman, ohjelma ajetaan eli suoritetaan (run, execute). Tällöin tietokone noudattaa sille ohjelmassa ennalta määrättyjä käskyjä.

Esimerkki: Käyttäjä näpäyttää kuvaketta ruudulla ja antaa näin tietokoneen käyttöjärjestelmälle käskyn käynnistää tekstinkäsittelysovellus. Tällöin tietokone toimii niin kuin kyseinen sovellusohjelma määrää. Kunhan ohjelmoija on tehnyt työnsä hyvin, niin toiminta on käyttäjän kannalta mielekästä: tekstinkäsittelyä varten avautuu uusi ikkuna, joka reagoi käyttäjän toimiin halutulla tavalla.

Onko käyttäjällä sittenkään aina sovellusta itsellään?

Yllä esitetty kuvaus ohjelman ajamisesta tietokoneessa pätee edelleen monissa tilanteissa ja riittää tämän kurssin tarpeisiin. Uudet tietotekniset suuntaukset ovat kuitenkin jo muuttaneet joidenkin ohjelmien luonnetta.

Vapaaehtoinen lisätehtävä: selvitä internetin avulla, mitä ovat web-sovellus (web application), pilvilaskenta (cloud computing) ja Software as a Service.

Ohjelmointikielet

Kukin tietokoneen toimintaa ohjaava prosessori tekee vain tasan sen, mitä käsketään. Se suorittaa käskyjä yksitellen, järjestyksessä. Toisin kuin reseptiä lukeva ja asiansa osaava kokki, prosessori ei ymmärrä mitään käskyjen merkityksestä ohjelmakokonaisuudessa. Se ei osaa päätellä, arvioida eikä soveltaa. Tietokone on siis pohjimmiltaan tyhmä. Se on kuitenkin nopea, tarkka ja hyvämuistinen.

Ohjelmaa kirjoittaessa täytyy kuvailla yksityiskohtaisesti ja kirjaimellisesti, mitä tietokoneen halutaan tekevän, kun ohjelma ajetaan. Jotta tämä onnistuisi, on käytettävien ilmaisujen oltava täsmällisiä ja yksiselitteisiä. Luonnollinen ihmisten kieli ei ole täsmällistä eikä yksiselitteistä, eikä sovellu ohjelmointiin: "suolaa maun mukaan", "kunnes on kauniin ruskea".

Ohjelmakoodi kirjoitetaan jollakin ohjelmointikielellä (programming language). Ohjelmointikielet ovat formaaleja eli muodollisia, ja niissä on rajattu määrä hyvin määriteltyjä sanoja ja ilmaisutapoja. Kustakin hyväksyttävästä ohjelmointikielen ilmaisusta voidaan tarkasti sanoa, mitä se tarkoittaa. Vertailukohdaksi voi ottaa vaikkapa kemian molekyylikaavat, joita myöskin säätelevät tietyt tarkat säännöt; ne ovat tosin ohjelmointikieliä yksinkertaisempia.

Erilaisia ohjelmointikieliä on vuosikymmenten aikana kehitetty valtava määrä. Esimerkiksi Wikipediasta löytyy nääin pitkä lista eikä sekään ole missään nimessä kaikenkattava.

Jotkut ohjelmointikielet sopivat paremmin toisiin tarkoituksiin, toiset toisiin. Osa on tarkoitettu yleiskäyttöisiksi, toiset nimenomaan tietynlaisiin tarkoituksiin. Osa on jäänyt historian romukoppaan, toiset porskuttavat vuosikymmenestä toiseen. Uusia kieliä syntyy edelleen, samoin uusia versioita vanhoista kielistä.

../_images/ohjelmointikieliä.png

Eräiden ohjelmointikielten nimiä. Käytämme yhtä näistä kielistä.

../_images/scala_logo.png

Scala-kielen logo. Portaikko on italiaksi scala.

Scala, eräs ohjelmointikieli

Tällä kurssilla käytämme modernia ja monipuolista ohjelmointikieltä nimeltä Scala. Samalla kun käytät Scalaa, opit myös yleisemmistä ohjelmoinnin käsitteistä, joita voit soveltaa muillakin kielillä ohjelmoidessasi. Kokenut ohjelmoija voi opetella uusia ohjelmointikieliä suhteellisen nopeasti.

Alla on kolme Scala-kielistä käskyä esimerkkeinä siitä, miltä kieli näyttää. Käskyjen teemana on yksinkertainen (ja kuvitteellinen) kirjanpitojärjestelmä, jossa voi käsitellä yrityksen työntekijöiden tietoja.

val palkattuHenkilo = Tyontekija("Tea Teekkari", 1992, 3200.0)
palkattuHenkilo.tyoaika = 0.5
palkattuHenkilo.korotaPalkkaa(1.2)

Tätä esimerkkiä ei tarvitse (tai voi) tässä vaiheessa kunnolla sisäistää. Alta voit kuitenkin lukea lyhyen yleiskuvauksen siitä. Siirtele hiiren kursoria vihreäpohjaisten selitystekstien päällä, niin esimerkistä korostuu aina kyseiseen tekstiin liittyvä kohta. Kokeile! Voit myös klikata selitystekstiä, jolloin korostus "jää päälle".

Ensimmäinen rivi luo uuden työntekijän tiedot tietokoneen muistiin. Työntekijällä on nimi, syntymävuosi ja kuukausipalkka.

Toinen rivi asettaa työntekijän puolipäiväiseksi: työajaksi asetetaan 0.5 eli 50 prosenttia.

Kolmas rivi kirjaa työntekijälle 20 prosentin palkankorotuksen.

Näissä käskyissä on käytetty suomenkielisiäkin sanoja. Ohjelmoija voi valita monia ohjelmassa käytettäviä käsitteiden nimiä itse; tähän hän voi käyttää vaikkapa englannin tai suomen sanoja.

Eräät ohjelmatekstin sanat ovat osa Scala-kieltä eivätkä ole Scala-kieltä käyttävän ohjelmoijan itsensä valitsemia. Scala-kielen sanat perustuvat englantiin; val on lyhennetty sanasta "value".

Scala-kielestä opit paljon lisää koko kurssin ajan. Silti kaikkia tämän monipuolisen kielen piirteitä ei käydä läpi kurssilla. Scalaa käytetään myös usealla muulla Aallon ohjelmointikurssilla ja toki myös yliopistomaailman ulkopuolella.

Käytämme Scala-kielen versiota 3. (Tarkemmin sanoen käytämme Scala 3:n aliversiota 3.3). Vuonna 2021 julkaistu Scala 3 poikkeaa vanhemmasta Scala 2:sta, joten jos luet muita lähteitä, kannattaa pitää silmällä, mistä kieliversiosta niissä on kyse.

Ohjelma — siis mikä?

Jo tässä vaiheessa kannattaa huomata, että sanalla "ohjelma" viitataan kahteen eri asiaan:

  1. Ohjelmatekstiin eli ohjelmakoodiin (program code), joka kuvaa sarjan käskyjä tietokoneen suoritettavaksi.

  2. Ohjelman suoritukseen eli niihin asioihin, jotka tapahtuvat tietokoneen suorittaessa ohjelmakoodin käskyt.

Niinpä voit sanoa laatimastasi ohjelmasta esimerkiksi "Mun ohjelmassa on 15000 riviä koodia." mutta myös "Klikkaa tosta napista, niin mun ohjelma lähettää tulokset printterille."

Ohjelma on siis toisaalta staattinen, passiivinen kirjoitus tietokoneen halutusta toiminnasta. Toisaalta ohjelma on dynaaminen, aktiivinen prosessi, joka toimii tietokoneessa ja voi vuorovaikuttaa käyttäjien kanssa. Sama kaksinaisuus esiintyy monessa muussakin ohjelmoinnin käsitteessä, ja tähän teemaan palaamme vielä kurssin mittaan useasti.

Sovellusohjelma sisältä ja ulkoa

../_images/app_components-fi.png

Loppukäyttäjä ja sovellusohjelman osia

Sovellusohjelmilla on kaksi pääosaa:

  • Käyttöliittymä (user interface eli UI) eli ohjelman ulospäin näkyvä tai muuten havaittava osa, jonka kanssa sovelluksen käyttäjä voi vuorovaikuttaa. Nykyaikaisissa sovelluksissa on usein graafinen käyttöliittymä eli GUI (graphical user interface), joka muodostuu ikkunoista, nappuloista yms.

  • "Sisuskalut" eli malli (model) ohjelman aihepiiristä, ohjelman sisäinen toimintalogiikka. Esimerkiksi tekstinkäsittelyohjelmassa on sisäisesti määritelty, miten oikoluku toimii ja miten dokumentit rakentuvat tekstikappaleista ja otsikoista.

Sovelluksen käyttäjä tietää yleensä (korkeintaan) sen, miten sovelluksen käyttöliittymää käytetään. Ohjelmoijan on sen sijaan pystyttävä kuvaamaan tietokoneelle sekä ohjelman käyttöliittymän että sisuskalujen toiminta. Toisin kuin käyttäjän, ohjelmoijan on myös voitava tarkastella ja muokata sekä sovelluksen dynaamista toimintaa että sen staattista esitysmuotoa eli ohjelmakoodia.

Luvun jäljellä olevassa osassa tarkastellaan kahta valmiiksi laadittua sovellusohjelmaa "sisältä ja ulkoa". Samalla pääset tarttumaan ohjelmoijan työkalupakkiin.

Ohjelmoijan työkaluista

Ohjelmoijat käyttävät erilaisia apuohjelmia, siis toisten ohjelmoijien jo tekemiä ohjelmia, jotka auttavat uusien ohjelmien laatimisessa. Esimerkiksi:

  • Ohjelmakoodi kirjoitetaan ja tallennetaan tiedostoihin jonkin editorin avulla. (Lisää tästä ihan kohta.)

  • Kääntäjä (compiler) on apuohjelma, jolla voidaan automaattisesti muokata ihmisen laatima ohjelmakoodi tietokoneen suoritettavaksi paremmin sopivaan muotoon. (Lisää luvussa 5.4.)

  • Debuggerin avulla voi tarkkailla ohjelman sisäistä toimintaa samalla kun ohjelmaa ajetaan. Tämä on hyödyllistä varsinkin virheitä (eli bugeja) etsiessä ja ohjelmointia opetellessa.

  • Monimutkaista ohjelmaa on helpompi kehittää vähitellen, kun ohjelmoijalla tai tiimillä on apuohjelma versionhallintaan (version control, revision control). (Lisää jatkokursseilla.)

  • Virtuaalikonetta käytetään apuna muun muassa monien Scala-kielellä kirjoitettujen ohjelmien ajamiseksi. (Lisää luvussa 5.4.)

Ohjelmointiympäristö (IDE)

Editori
Kääntäjä
Virtuaalikone
Debuggeri
Versionhallinta
Debuggeri
Kääntäjä
Editori
Versionhallinta
Virtuaalikone

Integroidusti vai erikseen?

Ohjelmoija voi käyttää erillistä apuohjelmaa — editoria, debuggeria jne. — kuhunkin eri tarpeeseen. Toinen tapa on käyttää apuohjelmaa, joka kokoaa yhteen ohjelmien kehitystyössä käytettäviä työkaluja. Tällaisesta apuohjelmasta käytetään suomeksikin usein nimitystä IDE (sanoista integrated development environment; sovelluskehitin tarkoittaa suunnilleen samaa). IDE:ssä voi myös kätevästi jakaa tuotetun ohjelmakoodin haluamallaan tavalla erillisiin moduuleihin eli osioihin, mikä helpottaa lukuisten kooditiedostojen käsittelyä.

Suosittelemme IDE:n käyttöä tällä kurssilla, ja tämä materiaali on muotoiltu sen oletuksen pohjalta, että käytät erästä IDE:tä.

IntelliJ IDEA

../_images/ij_logo.png

IntelliJ’n logo.

Kurssin virallisena ohjelmointityökaluna IDE nimeltä IntelliJ IDEA. Kutsumme sitä lyhyemmin IntelliJ’ksi; tuttavallisimmat sanovat vain IJ.

Kokonaisuutena IntelliJ on monipuolinen ja monimutkainen kuten monet muutkin IDE:t. Tällä kurssilla käytämme vain pientä osaa sen toiminnoista.

IntelliJ’hin on saatavilla mitä erilaisimpia lisäosia (plugin), joilla sen toimenkuvaa voi laajentaa. Käytämme sen Scala-lisäosaa sekä tarkoituksiimme räätälöityä A+ Courses -lisäosaa. Jälkimmäinen helpottaa kurssin ohjelmointitehtävien noutamista ja palauttamista A+:n arvosteltaviksi (ja muutenkin parantaa IntelliJ’n käyttömukavuutta).

Käytämme IntelliJ’n versiota Community Edition 2023.2. Sekä tuo Community Edition että mainitut lisäosat ovat ilmaisia.

Aallon opiskelijat voivat käyttää IntelliJ’tä Aalto IT:n Linux-työasemilla. Niiltä löytyy valmiina IntelliJ’n kurssille sopiva versio.

Saa tehdä toisinkin

Joillakin kurssin osallistujilla on entuudestaan suosikkityökaluja, joita he ovat käyttäneet aiemmin ohjelmoidessaan. Vaikka käytämme virallisesti IntelliJ’tä, on sallittua käyttää sen sijaan muuta työkalustoa. Moinen on kuitenkin täysin opiskelijan omalla vastuulla, eikä kurssihenkilökunta osaa neuvoa kaikkien muiden työkalujen käytössä. Tehtävien nouto ja palautus on myös selvästi vaivalloisempaa, ellet käytä IntelliJ’tä ja sen A+ Courses -lisäosaa.

IntelliJ Aallossa

IntelliJ’n kurssille sopiva versio tarvittavine lisäosineen löytyy ainakin useimmilta Aalto IT:n Linux-työasemilta. Yliopiston tarjoama Linux-ympäristö on kurssin virallinen ohjelmointiympäristö.

Ainakaan useimmilla Aallon Windows-koneilla ei ole tarvittavia ohjelmia asennettuna. (Jos jostain syystä on tarve käyttää IntelliJ’tä Aallon Windows-koneilla, voit kokeilla OOD-ympäristöä, joka toimii selaimessa; ks. alta.)

IntelliJ omalle koneelle

Jos haluat ohjelmoida omalla koneellasi, sinun täytyy itse asentaa IntelliJ lisäosineen. Tästä on ohjeita erillisellä sivulla. Kun noudatat tuon sivun ohjeita, saat juuri oikeat version itsellesi.

Lue tätä kurssimateriaalia tästä eteenpäin koneella, jolla voit käyttää IntelliJ’tä.

Jos käytät IntelliJ’tä omalla koneellasi ja olet juuri asentanut sen ohjeemme mukaisesti, voit ohittaa seuraavan osion ja siirtyä suoraan osioon Valmiina annetut ohjelmat tällä kurssilla alempana tällä sivulla.

Vaihtoehto: IntelliJ selaimessa, ilman asennusta

Aallolla on koekäytössä Open OnDemand (OOD) -niminen ympäristö, jota voi käyttää selaimella ja johon IntelliJ on asennettu. Näin on mahdollista käyttää IntelliJ’tä verkon yli sen sijaan, että asentaisit sen omalle koneelle. Tai ehkä vain haluat kokeilla tätä, vaikka asentaisitkin IntelliJ’n?

Kokeilujemme perusteella IntelliJ toimii OOD-ympäristössä yllättävänkin jouheasti, kunhan verkkoyhteys on kunnossa. OOD on kuitenkin nyt (syksyllä 2023) vasta koekäytössä, emmekä voi luvata, että se toimii saumattomasti. Jos kokeilet sitä, otamme erittäin mielellämme vastaan palautetta siitä!

(Huomaa: Muutamissa O1:n alkupään tehtävässä luodaan tietokoneella ääniä, mutta äänet eivät kuulu OOD:n kautta. Nuo tehtävät voi silti läpäistä OOD-ympäristössä, mutta ne ovat tylsempiä.)

OOD-ympäristöön pääsee näin:

  1. Kirjaudu Aalto-tunnuksillasi osoitteeseen https://ood.cs.aalto.fi/.

  2. Valitse sivun yläreunan valikosta Interactive Apps ja esiin tulevasta pudotusvalikosta palvelimeksi IntelliJ IDEA (O1). Istunnon pituudeksi on automaattisesti valittu yksi tunti, mutta voit halutessasi pidentää sitä.

  3. Paina Launch käynnistäksesi istunnon. (Tässä voi mennä hetki.)

  4. Kun istunto on valmiina, valitse Connect to the Container. IntelliJ’n pitäisi avautua selaimessa uudelle välilehdelle

  5. OOD-ympäristössä on valmiina oikea versio IntelliJ’stä sekä kurssilla tarvittavat lisäosat. Niinpä voit ohittaa muutaman seuraavista asennusohjeista ja hypätä suoraan kohtaan Projektikansion luonti alla.

Ensimmäinen IntelliJ’n käynnistyskerta

Ensimmäisellä IntelliJ’n käynnistyskerralla on tarpeen tehdä asetuksia IntelliJ’n sujuvaa kurssikäyttöä varten. Se käy seuraavasti.

IntelliJ käyntiin

Aallon IT-palvelukeskuksen Linux-koneilla IntelliJ löytyy valikosta nimellä IntelliJ IDEA. (Jos ei löydy, käynnistä se avaamalla Terminal-ikkuna ja kirjoittamalla sinne idea. Viimeistään ensimmäisen käyttökerran jälkeen IntelliJ’n pitäisi löytyä myös valikosta.) Muissa ympäristöissä IntelliJ käynnistyy esimerksi Start-valikosta tai näpäyttämällä asennushakemistosta löytyvää komentotiedostoa (nimeltään Idea, idea64.exe tai vastaava).

../_images/ij_start.png

Ensimmäisellä käynnistyskerralla IntelliJ saattaa kysyä käyttötilastojen jaosta ja vanhojen asetusten palauttamisesta. Jos näin käy, voit valita Do not import settings ja painaa OK.

IntelliJ toivottaa sinut tervetulleeksi:

../_images/ij_welcome.png

A+ Courses -lisäosa

Asenna lisäosa IntelliJ’hin näin:

  1. Valitse IntelliJ’n tervetuloikkunan vasemmasta reunasta Plugins.

  2. Esiin tulee luettelo lisäosista. Kirjoita yläreunan hakukenttään A+ Courses, niin kyseinen lisäosa ilmestyy luettelon kärkeen. Paina Install.

../_images/ij_plugin_install.png
  1. IntelliJ varoittaa, että olet asentamassa kolmannen osapuolen laatiman lisäosan. Paina Accept hyväksyäksesi.

  2. Paina Restart IDE viimeistelläksesi asennuksen.

    • Mikäli tuota nappulaa ei ilmesty, sulje itse IntelliJ ja käynnistä uudelleen.

    • Saatat nähdä varoituksen keskeneräisestä "indeksoinnista", mikä ei ole vakavaa.

  3. IntelliJ’n käynnistyttyä uudelleen olet taas Welcome-näkymässä.

Projektikansion luonti

IntelliJ ehdottaa, että luot tai valitset ns. projektin, jonne laatimasi ohjelmat tallennetaan. Valitse New Project.

Esiin ponnahtaa New Project -ikkuna, jonka vasemassa reunassa on luettelo erilaisia projektityyppejä. Valitse A+ Courses eli kurssiprojekti ja paina Next.

../_images/ij_new_project.png

Syötä seuraavan näkymän kohtaan Project Name kurssiprojektillesi jokin kuvaava nimi (esim. o1, o1ohjelmat tai ScalainenKansio). Kirjaa Location -kohtaan sijainti kansiolle, johon haluat tuon projektin tiedostot. Ehdotettu oletussijainti kelpaa, jos et tiedä haluavasi muokata sitä.

Paina Create. Pian esiin tulee Project Structure-niminen ikkuna, jossa kohta jatkamme asetusten parissa.

../_images/ij_project_structure.png

JDK-työkalupakki osaksi IntelliJ-projektia

IntelliJ’ssä ohjelmoidessasi tarvitset JDK:ksi kutsuttua työkalupakkia. Sen asennus käy seuraavasti.

Esillä on Project Structure -ikkuna. Valitse sen yläosasta Project.

Näet SDK-pudotusvalikon. Löytyykö tuosta valikosta OpenJDK 17?

  • Jos sattuu löytymään, valitse se.

  • Jos ei löydy, toimi alla olevien kuvien mukaisesti: Valitse pudotusvalikosta Add SDK → Download JDK. Valitse kentästä Version 17 ja kentästä Vendor esimerkiksi Amazon Corretto. Voit valita itse, mihin JDK ladataan; oletussijainti käy hyvin. Paina lopuksi Download, jolloin IntelliJ noutaa tuon työkalupakin.

Sulje lopuksi Project Structure -ikkuna painamalla OK.

../_images/ij_add_sdk.png
../_images/ij_download_jdk.png

Valitse kurssi

../_images/ij_plugin_tab.png

Edessäsi on nyt IntelliJ’n päänäkymä ja siinä uusi projekti, jonka loit. Projektissa ei toistaiseksi ole sisältöä.

Pohjusta kurssiprojektisi Ohjelmointi 1:lle seuraavasti. Näin tehdessäsi saat myös kurssilla tarvittavan version Scala-kielestä.

  1. Katso näkymän oikeaa ylänurkkaa. Sieltä löytyy A+ Courses -symboli plugin-logo (kellon kuvan alta) kuten oheisessa kuvassa.

  2. Napsauta tuota symbolia. IntelliJ ehdottaa, että liität projektiisi kurssin:

../_images/ij_select_course_button.png
  1. Paina tuota Select an A+ Course -nappulaa.

  2. Esiin tulee pieni ikkuna, jossa valitaan suoritettava kurssi. Valitse O1 Fall 2023 ja paina OK.

  3. Valitse aukeavasta kielivalikosta Finnish. IntelliJ ilmoittaa samalla muokkaavansa asetuksia kurssille sopiviksi. Paina OK hyväksyäksesi.

    • Tuo kielivalinta vaikuttaa vain siihen, kummat kieliversiot eräistä kurssin alkupään tehtävistä palautat. Tätä suomenkielistä oppikirjaa lukevien on syytä valita Finnish. IntelliJ-ympäristö on joka tapauksessa englanniksi.

  4. Pienen odottelun jälkeen IntelliJ ehdottaa uudelleenkäynnistystä, jotta asetukset tulevat voimaan. Paina OK, ja IntelliJ käynnistyy uudelleen.

Pääsyavain tehtävien palauttamiseen

Jotta IntelliJ voi palauttaa tehtäviä A+:n arvioitaviksi, on sille annettava lupa toimia nimissäsi A+:ssa. Lisää luvan antava "pääsyavain" (API Access Token) näin:

  1. Avaa selaimessa oma profiilisivusi A+:ssa.

  2. Kohdassa API Access Token / API-pääsyavain on pitkä merkkijono. Kopioi se leikepöydälle. (Pääsyavain vastaa salasanaa. Älä kerro tuota henkilökohtaista pääsykoodiasi muille.)

Palaa IntelliJ’hin ja etene seuraavasti.

  1. Ikkunan oikean reunan A+ Courses -välilehdellä näet nappulan, jossa lukee Set A+ Token. Paina sitä.

../_images/ij_set_token_button.png
  1. Kirjaa avain sille varattuun kenttään ja paina OK.

  2. A+ Courses -välilehdeltä löytyy nyt O1-kurssin sisältöä, jota tarvitset kurssilla usein.

Valmiina annetut ohjelmat tällä kurssilla

Tällä kurssilla tehdään usein näin: materiaali esittelee jonkin enemmän tai vähemmän valmiin ohjelman, minkä jälkeen itse tutkit sitä ja usein myös jatkokehität tai muuten muokkaat tuota annettua ohjelmaa.

Paitsi että pääset näin oppimaan esimerkkien kautta, niin tämä on tyypillinen tilanne myös ammattiohjelmoijalle. Ohjelmoija ei läheskään aina aloita puhtaalta pöydältä vaan muokkaa jotakin olemassa olevaa.

GoodStuff-ohjelmasta

Haetaan nyt tarkasteltavaksi GoodStuff-muistikirjaohjelma. GoodStuff on tätä kurssia varten laadittu esimerkkisovellus, johon käyttäjä voi kirjata kokemuksiaan ja niille antamiaan arvosanoja. Kokemukset voivat olla vaikkapa hotelleja, joissa käyttäjä on asunut.

GoodStuff on annetussa muodossa varsin alkeellinen ja puutteellinenkin. Se on kuitenkin kehityskelpoinen, ja ennen kaikkea se sopii monen ohjelmoinnin käsitteen esittelemiseen. Palaammekin tähän sovellukseen vielä useita kertoja tulevissa luvuissa.

Vielä emme ole opiskelleet riittävästi ohjelmointia GoodStuff-sovelluksen ohjelmakoodin ymmärtämiseksi, mutta voimme jo hieman tutkia sitä. Näin saat kokonaiskuvan siitä, miltä ohjelma näyttää IntelliJ’ssä ja miten sitä voi käsitellä. Tässä luvussa tehdään seuraavaksi näin:

  1. Noudetaan GoodStuff-sovellus IntelliJ’hin.

  2. Katsotaan yleisellä tasolla, millaisiin osioihin sovellus on jaettu.

  3. Ajetaan sovellus IntelliJ’stä käsin ja kokeillaan, mitä sovelluksella voi tehdä.

  4. Kurkistetaan hieman sovelluksen ohjelmakoodiin ja korjataan siitä pienen pieni virhe.

Ohjelma IntelliJ’ssä

../_images/ij_aplus_toggle.png

A+ Courses -napilla saat näkyviin tai piiloon luettelon O1:n tarjoamista sisällöistä. Kokeile.

IntelliJ’ssä ohjelmat jäsennetään moduuleihin. Ohjelmoija voi koota moduuliin tiedostoja ja asetuksia, jotka kuuluvat yhteen. O1-kurssin esimerkkiohjelmat ja ohjelmointiharjoitukset ovat tarjolla moduuleina. Suuremmat ohjelmat voivat koostua useasta moduulista.

Kurssimoduulin noutaminen IntelliJ’hin

Pidä mielessä IntelliJ-näkymän oikean yläkulman A+ Courses -nappula plugin-logo, joka tuo esiin luettelot kurssin moduuleista ja tehtävistä. Sama nappula piilottaa nuo luettelot, jos haluat ne välillä pois näkyvistä.

../_images/ij_project_toggle.png

Project-napilla saat näkyviin tai piiloon luettelon oman kurssiprojektisi sisältämistä moduuleista. Kokeile.

Valitse nyt Modules-luettelosta GoodStuff-niminen moduuli. Napsauta sitä kahdesti, niin IntelliJ lataa moduulin verkosta ja tuo sen käyttämällesi tietokoneelle.

Mitään kauhean näkyvää ei kylläkään vielä tapahtunut, mutta tutkitaanpa tarkemmin:

IntelliJ’n Project-välilehti

IntelliJ’n toisessa reunassa, lähellä vasenta yläkulmaa, on toinen tärkeä nappula project-logo. Tällä nappulalla säädät, näkyykö Project-välilehti, jossa näkyy oman kurssiprojektisi sisältö: ohjelmat, joita työstät kurssilla. Ota tuo välilehti näkyviin. (Yleensä se kannattaa pitää näkyvissä jatkossakin.)

../_images/ij_modules.png

Kaksi moduulia IntelliJ’n Project-välilehdellä.

Moduulit ja pakkaukset

Juuri noutamasi GoodStuff-moduuli näkyy nyt Project-välilehdellä.

../_images/ij_files.png

GoodStuff-sovelluksen ohjelmakoodi on neljässä tiedostossa.

Lisäksi kurssiprojektistasi löytyy jo moduuli O1Library. Tarvitset sitä koko kurssin ajan. O1Library-moduuli sisältää työkaluja, joita useat kurssilla käytetyt ohjelmat (kuten GoodStuff) tarvitsevat toimiakseen. Voit jättää sen nyt muuten huomiotta.

Selaile Goodstuff-moduulin tiedostoja Project-välilehdellä. Neljä tiedostoa määrittelevät GoodStuff-ohjelman: CategoryDisplayWindow.scala, GoodStuff.scala, Category.scala ja Experience.scala. (IntelliJ näyttää nimet ilman .scala-päätettä.)

Mainitut tiedostot jakautuvat pakkauksiin (package). Voit ajatella pakkausten olevan Scala-kielen vastine tiedostokansioille. Ne helpottavat varsinkin isompien ohjelmien jäsentämistä ja toisiinsa liittyvien osien ryhmittelyä kokonaisuuksiksi. Pakkauksilla voidaan esimerkiksi ryhmitellä käyttöliittymä ja aihealueen malli omiksi kokonaisuuksikseen.

GoodStuff-ohjelman neljästä osasta: Experience ja Category kuvaavat ohjelman "sisuskaluja" eli muistikirjaan kirjattavia kokemuksia ja niiden kategorioita. Ne on tallennettu suoraan pakkauksen o1.goodstuff sisään. Kaksi jälkimmäistä osaa liittyvät ohjelman käyttöliittymän toteutukseen ja ovat pakkauksessa o1.goodstuff.gui.

Nuo pakkaukset sisältävät siis GoodStuff-ohjelman varsinaisen toteutuksen: ohjelmakoodin. Moduulissa voi olla ohjelmakoodin lisäksi muutakin. GoodStuff ja monet muut O1-kurssin moduulit sisältävät esimerkiksi doc-kansion, joissa on ohjelmaa kuvailevia dokumentteja. Palaamme näihin dokumentteihin myöhemmin (luku 3.2).

Käynnistetään nyt se vihdoinkin

Scala-sovelluksessa on aina jokin tiedosto, joka toimii sen ns. käynnistystiedostona. GoodStuff-ohjelman käynnistystiedosto on pakkauksen o1.goodstuff.gui sisältämä GoodStuff. Etsi se Project-välilehdeltä ja napsauta hiiren oikealla nappulalla saadaksesi esiin valikon. Valitse Run 'GoodStuff'.

GoodStuff-ohjelman käyttöliittymä käynnistyy erilliseen ikkunaan ja näyttää tältä:

../_images/godstuff.png

Koska tämä esimerkkisovellus on tulevissa luvuissa toistuvasti esillä, niin siihen on nyt hyvä hieman tutustua ihan käyttäjänkin näkökulmasta. Kokeile GoodStuff-ohjelman käyttöä hetken ajan: käytä Add new hotel -nappulaa ja syötä parin, kolmen hotellin tiedot (jotka voit vetää hatusta). Huomaa ainakin seuraavat asiat sovelluksen toiminnassa:

  • Tässä yksinkertaisessa sovelluksessa on vain yksi kokemuskategoria: hotellimajoitukset.

  • Sovellus laskee kullekin syötetylle kokemukselle hinta–laatu-suhteen jakamalla arvosanan hinnalla.

  • Sovellus irvistää käyttäjän suosikkikokemuksen ikkunan vasempaan laitaan. Suosikkikokemukseksi katsotaan se, jolla on korkein arvosana.

Sulje lopuksi GoodStuff-ikkuna.

Kurkistus ohjelmakoodiin

Napsauttamalla kooditiedostojen nimiä kahdesti saat tiedostojen sisällön näkyviin IntelliJ’n editoriin. Kokeile!

Kommentit

Yksi silmiinpistävimmistä asioista GoodStuffin ohjelmakoodissa on se, että koodiin sisältyy varsinaisten Scala-kielisten käskyjen lisäksi myös paljon IntelliJ’n vihreäksi tai harmaaksi värittämää tekstiä, joka ei ole Scalaa vaan englantia.

Kooditiedostoihin yleisesti kirjoitetaan mukaan kommentteja (comment) eli selitystekstiä. Kommenteilla voidaan esimerkiksi avata ohjelman osien merkitystä ja käyttötapoja toisille ohjelmoijille. Kommentin kirjoittanut ohjelmoija itsekin hyötyy siitä, kun hän palaa työstämään osin jo unohtunutta ohjelmakoodiaan.

Ohjelmakoodia ei kirjoiteta vain tietokonetta varten!

Kommentit ovat ensimmäinen kohtaamamme osoitus siitä, että vaikka ohjelmat laaditaankin tietokoneiden suoritettaviksi, on tärkeää huomioida myös ihmislukijat. Fiksusti käytettyinä kommentit voivat olla hyvän ohjelmointityylin kulmakivi.

Kommenttimerkinnät Scalassa

Scala-kielessä merkintöjen /* ja */ välinen teksti tulkitaan kommentiksi eikä vaikuta ohjelman toimintaan. Tästä on esimerkkejä pitkin GoodStuffin ohjelmakoodia.

Kaksi kauttaviivaa eli // puolestaan aloittaa kommentin, joka jatkuu rivin loppuun. IntelliJ’n Scala-editori osaa monien muiden ohjelmointityökalujen tapaan automaattisesti värittää kommentit, jotta ne erottuvat muusta koodista.

Tällä kurssilla ei yleisesti ottaen ole pakollista, että itse kirjoitat kommentteja ohjelmakoodiisi. Hyvä idea se voi silti olla. Joka tapauksessa tulet lukemaan paljon valmista koodia, jossa on kommentteja.

Silmäile vähän

Käytä muutama minuutti GoodStuff-ohjelman koodin tutkailuun. Vaikka suurin osa ei olekaan opetetun perusteella ymmärrettävissä — kommenteissakin kun esiintyy tuntematonta ohjelmoinnin termistöä — niin saat käsitystä siitä, miltä Scala-koodi näyttää. Ohjelmassa voi myös hyvinkin olla kohtia, joissa ohjelmakoodi näyttää järkeenkäyvältä tai joiden toiminnan pystyt arvaamaan. Jos kaikki näyttää täysin käsittämättömältä, niin sekään ei tässä vaiheessa haittaa.

Seuraavassa luvussa 1.3 ryhdymme käsittelemään ohjelmakoodiin liittyviä käsitteitä ja Scala-kielisiä käskyjä pieni palanen kerrallaan. Aikanaan pystyt ymmärtämään esimerkiksi GoodStuff-ohjelman koodin ja monimutkaisempiakin ohjelmia, sekä laatimaan omia ohjelmia.

Kokeillaan koodin muokkaamista

Huomasitko muuten kirjoitusvirheen GoodStuff-käyttöliittymäikkunan otsikossa? Siinähän lukee GodStuff!

Tämän korjaamiseen ei vielä kummempia ohjelmointitaitoja tarvita. Korjataan virhe ja kokeillaan samalla ohjelman palauttamista automaattiseen tarkastukseen.

Ikkunan otsikko on määritelty GoodStuff-käyttöliittymän ohjelmakoodissa. Jos haluat etsiä virheellisen tekstin itse, niin sekin käy, mutta sopii tuo tästäkin katsoa:

Missä otsikko on määritelty?

CategoryDisplayWindow.scala-tiedoston rivillä 35.

Toimi seuravaasti:

  1. Lisää mainitulle riville yksi o-kirjain asiaankuuluvaan paikkaan.

  2. Kokeile, toimiko: käynnistä ohjelma uudelleen GoodStuff-tiedoston oheisvalikosta. Ikkunan otsikon pitäisi nyt olla kunnossa.

  3. Aiotko palauttaa yksin vai parin kanssa? Jos parin kanssa, varmista että olette muodostaneet täällä A+:ssa valikon kautta ryhmän.

Olet valmis palauttamaan ratkaisusi:

  1. Etsi IntelliJ’n oikeasta laidasta jälleen A+ Courses ja sieltä Assignments-osio, joka luettelee kurssin tehtävä viikoittain.

  2. Etsi ykkösviikon GoodStuff-tehtävä. Valitse se. Paina sitten Submit-nappulaa submit luettelon yläpuolella.

  3. Avautuu pikkuikkuna. Valitse palautatko yksin vai parin kanssa. Näet samalla, että IntelliJ tulee lähettämään tarkastettavaksi juuri tiedoston CategoryDisplayWindow.scala. Paina OK.

  4. Näet ilmoituksen, että tehtävä on lähetetty ja palaute tulee myöhemmin. Pienen odottelun jälkeen näet toisen ilmoituksen: palaute on saatavilla täällä A+:ssa.

  5. Pääset palautteeseen IntelliJ’stä helposti linkkiä seuraamalla, jolloin kyseinen sivu avautuu selaimeen. A+ on antanut sinulle automaattisesti palautetta ja tehtäväpisteitä.

Tiedostojen tallentaminen ja palauttaminen IntelliJ’ssä

IntelliJ tallentaa tiedostosi automaattisesti työskennellessäsi ja pitää kirjaa muutosten historiasta. Jos haluat lisävarmistuksen, voit painaa Ctrl+S (Macilla Cmd+S) tallentaaksesi kaikki muutokset kaikkiin avoimiin tiedostoihin, mutta käytännössä tätä ei tarvita.

Jos joskus päädyt tilanteeseen, jossa on tarpeen palauttaa aiempi versio tiedostostasi (eikä Undo riitä), voit napsauttaa tiedostoa tai kansiota oikealla napilla ja valita Local History.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.

Toinen muokkaustehtävä: Pong-peli

Pohjustus

Tutustu vielä toiseen sovellukseen, versioon mailapeliklassikosta Pong.

Scala-kielinen ohjelma löytyy Pong-nimisestä kurssimoduulista. Ota moduuli käyttöön samaan tapaan kuin GoodStuff äsken ja kokeile peliä. Näin:

  1. Etsi Pong-moduuli A+ Courses-välilehden Modules-osiosta ja napauta kahdesti noutaaksesi sen kurssiprojektiisi.

  2. Aja ohjelma: Etsi Project-välilehdeltä pakkaus o1.pong.gui ja sen tiedostoa PongApp.scala. Napsauta sitä hiiren oikealla napilla ja valitse Run 'runPong'.

  3. Vasemmanpuoleista mailaa liikutetaan W- ja S-näppäimillä, oikeanpuoleista nuolinäppäimillä.

Tehtävänanto, osa 1/2

Pakkauksen o1.pong tiedostossa package.scala on määritelty mm. eräitä lukuarvoja, jotka vaikuttavat Pong-pelin ulkomuotoon ja toimintaan. Avaa sen sisältämä ohjelmakoodi editoriin.

Eräällä tiedoston alkupään riveistä määritellään BallRadius. Vaihda tuolta riviltä luku 10 luvuksi 50.

Käynnistä peli uudelleen. Huomaat muutoksen pallossa.

Tehtävänanto, osa 2/2

Pakkauksen o1.pong tiedostossa Ball.scala on määritelty säännöt, joita Pong-pelin pallo noudattaa liikkuessaan. Eräällä riveistä lukee:

this.velocity = this.velocity.switchY

Tämä käsky saa pallon vaihtamaan suuntaa sen kimmotessa kentän ylä- tai alareunasta. Kommentoi rivi ulos, kuten sanotaan. Siis: kirjoita rivin alkuun kaksi /-merkkiä, jolloin se muuttuu kommentiksi eikä ole enää osa suoritettavaa ohjelmaa.

Käynnistä peli uudelleen.

Onko pelissämme nyt bugi (bug) eli toimintavirhe? No, mehän halusimme muokata siitä tuollaisen, joten kyseessä ei ole bugi vaan ominaisuus (feature).

Palauta muokattu peli arvioitavaksi.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.

Lisää Pong-leikkejä

Voit kokeilla tehdä muitakin muutoksia. Esimerkiksi:

  • Mitä tapahtuu, jos muutat package.scalasta vaikkapa Sizen ja Thicknessin toisiin lukuarvoihin?

  • Löydätkö package.scalasta kohdan, joka määrittelee, kuinka nopeasti mailat liikkuvat?

  • Löydätkö käyttöliittymän (GUI) koodista osia, jotka määräävät piirtämisessä käytettyjä värejä? Onnistutko vaihtamaan niitä?

  • Osaatko vaihtaa näppäimiä, joilla PongApp.scala määrittelee mailoja ohjattavan?

  • Mitä jos PongApp.scala:ssa lukisikin push(Right) eikä push(Up)?

Tehtävän päätteeksi

Jos nautit Pongin vääntelystä, saatat nauttia myös seuraavasta lainauksesta. Se sisältää myös syvemmän viestin ohjelmien staattisesta ja dynaamisesta olomuodosta:

Yksi fysiikan alkeiskursseilla ensimmäisinä käsiteltävistä asioista on potentiaalienergian ja kineettisen energian välinen ero. Potentiaalienergian voi mieltää energiaksi, joka on varastoituneena vaikkapa akkuun tai mäen huipulle asetettuun kiveen. Kineettinen energia on energiaa, joka on parhaillaan muutostilassa, kuten akkuun varastoituneen sähkön liikuttaessa moottoria tai kiven pyöriessä alas mäenrinnettä.


Vastaavasti kun ihminen suunnittelee ohjelman, syntyy potentiaali laskennalle, joka pääsee valloilleen, kun ohjelma suoritetaan tietokoneessa. Tuon laskennan voi mieltää kineettiseksi, liikkuvaksi.


Aivan kuin papattia kokeileva lapsi voi yllättyä erosta potentiaalisen ja kineettisen energian välillä, myös tietokoneohjelmoijat usein yllättyvät (iloisestikin) erosta potentiaalisen ja kineettisen laskennan välillä.


—Gary Flake (käännetty ote kirjasta The Computational Beauty of Nature)

Vinkki: vaihtoehtoisia käynnistystapoja

Edellä mainittiin, että sovelluksen voi käynnistää käynnistystiedoston (kuten GoodStuff tai PongApp) oheisvalikosta. Toinen tapa on valita tuo tiedosto Project-välilehdellä ja painaa Ctrl+Shift+F10.

Jos sinulla on kyseinen käynnistystiedosto (esim. GoodStuff.scala) auki editorissa, voit vaihtoehtoisesti painaa pientä play-kuvaketta vasemmassa marginaalissa (rivillä, joka alkaa sanalla object).

Tulet kurssin mittaan käynnistämään ohjelmia toistuvasti. Käytä mielestäsi luontevinta tapaa.

Yllä mainituissa käynnistystavoissa pitää aluksi valita tai avata käynnistystiedosto. Vaihtoehtoisesti voit painaa Shift+F10, jolloin ajettavaksi valiutuu automaattisesti se ohjelma, jonka viimeksikin ajoit. Tämä on usein kätevää.

Vielä yksi mahdollisuus on pikkuvalikko IntelliJ’n oikeasta ylänurkassa play-napin vieressä. Sieltä voi valita ajettavaksi jonkin aiemmin ajetuista ohjelmista.

Ohjelmointi aktiviteettina

Päätetään luku pohtimalla, millaista touhua ohjelmointi on.

Ohjelmointi ongelmien ratkaisemisena

Ohjelmoijan työ lähtee tyypillisesti liikkeelle ongelmasta tai tarpeesta, johon etsitään ratkaisua. Alla on muutama esimerkki ongelmista, joita voidaan ratkoa tietokoneen avulla.

  • Halutaan puhua puhelimella internetin yli toiselle puolelle maapalloa.

  • On saatava yritykselle uudenlainen laskutussovellus.

  • Tarvitaan paras reitti kohteeseen autolle. Tai avaruusalukselle.

  • Halutaan laatia malli, joka kuvaa tai ennustaa ihmisten käyttäytymistä sosiaalisessa verkossa, tautien leviämistä, ilmastonmuutosta tai eri sanojen käyttöä menneinä vuosikymmeninä.

  • Halutaan tarjota käyttäjälle mahdollisimman hyviä muita ostossuosituksia, kun hän ostaa tietyn tuotteen verkkokaupasta.

  • Tarvitaan työkalu, jolla voidaan muokata mittausdataa sopivaan muotoon jatkokäsittelyä varten.

  • Halutaan simuloida alkeishiukkasten liikettä ilmiöiden ennustamiseksi.

  • Halutaan simuloida tunteikkaiden siivekkäiden liikettä painovoimakentässä kohti sorkkaeläimiä.

  • Ja niin edelleen. Ja niin edelleen.

Uusia kiinnostavia ongelmia luodaan koko ajan. Niitä luovat sekä ohjelmoijat itse että muut. Tuttuihinkin ongelmiin voi etsiä aina aiempaa parempia ratkaisuja.

Algoritmit

Ohjelmoijat puhuvat usein algoritmeista (algorithm). Lyhyesti kuvailtuna algoritmi tarkoittaa vaiheittaista ratkaisumenetelmää jollekin tietylle ongelmalle. Leivonnankin puolella on algoritmeja, vaikka termiä ei siellä käytetäkään: esimerkissämme mestarileipurin idea siitä, miten kakku pitäisi tehdä, on hänen keksimänsä algoritmi. Hän kirjoitti tämän ajatuksensa muistiin reseptitekstiksi. Vastaavasti ohjelmoija toteuttaa algoritmeja — ongelmien ratkaisuja — ohjelmakoodiin.

Osaongelmien ratkaisuina voi käyttää eri algoritmeja. Esimerkiksi tekstinkäsittelyohjelmassa yhtä algoritmia voidaan käyttää oikolukuun ja toista etsimistoimintoon.

Ohjelmoijana voit keksiä osan käyttämistäsi algoritmeista itse ja soveltaa muiden kehittämiä algoritmeja joihinkin osaongelmiin. Ainakin on keksittävä se, miten osaongelmia ratkovat algoritmit toteutetaan ja yhdistellään tietyssä ohjelmassa.

Minitehtävä: algoritmit ja ohjelmat

Mikä seuraavista pitää parhaiten paikkansa? Huomaa, että saat palautetta oikeista ja vääristä vastauksista. Tehtävistä saatu palaute on osa tämän vuorovaikutteisen oppikirjan tekstiä ja syytä lukea. Ei haittaa, jos ei mene ensimmäisellä oikein.

Ohjelmoinnin piirteitä

Ohjelmointi on siis eräs ongelmien ratkomisen muoto. Ohjelmoijan tehtäviin kuuluu miettiä, millainen algoritmi (osa-algoritmeineen) sopii annetun ongelman ratkaisuksi ja miten algoritmi kuvataan tietokoneelle ohjelmana. Vastauksia ei käytännössä koskaan ole yhtä ainoaa. Ohjelmoijan onkin vertailtava erilaisia mahdollisuuksia ja pohdittava, miten ohjelmasta saadaan mahdollisimman laadukas: esimerkiksi nopeasti toimiva, käyttäjäystävällinen, turvallinen tai helposti jatkokehitettävä.

Ohjelmoinnissa tarvitaan järjestelmällistä ajattelua, luovuutta ja huolellisuutta. Monen mielestä se on hauskaa aivojumppaa, ja lähes kaikkien mielestä ohjelmoimalla voidaan luoda hyödyllisiä työkaluja ja tuotteita.

Toisin kuin usein kuvitellaan, ohjelmointiin liittyy myös paljon ihmislähtöistä. Vaikkapa ohjelmakoodin jatkokehityskelpoisuutta ja helppokäyttöisyyttä täytyy arvioida inhimillisistä lähtökohdista. Ja tietysti ohjelmia laaditaan ihmisten tarpeita varten.

Ohjelmia on erikokoisia ja niin on ohjelmankehitysporukoitakin: ohjelmia tehdään niin yksittäisten ihmisten kuin suurten kansainvälisten tiimien voimin. Käytännön ohjelmointityössä ihmisten välinen viestintä on usein huomattavassa roolissa.

Osa ammattinsa yhteydessä ohjelmoivista ihmisistä on päätoimisia ohjelmistokehittäjiä, jotka pyrkivät luomaan laadukkaita ohjelmia kaupallisiin tai muihin tarkoituksiin. Vielä suuremman ryhmän muodostavat muiden alojen ammattilaiset, joille ohjelmointi on työkalu oman alan ongelmien ratkomiseen: talousanalyytikot, sosiaalitieteilijät, lääke- ja geenitutkijat, fyysikot, graafikot, kielitieteilijät, ilmastotutkijat, insinöörit ja muut. Jotkut valjastavat ohjelmoinnin taiteen välineeksi.

Ohjelmoimalla voi laatia työkaluja, jotka helpottavat arjen rutiineja ja tehostavat omaa sovellusten — vaikkapa taulukkolaskennan tai jonkin pelin — käyttöä. Voi jopa sanoa, että ohjelmointi on kasvavassa määrin sivistyneen ihmisen perustaito, joka auttaa hyödyntämään tietotekniikan mahdollisuuksia ja ymmärtämään ympärillämme olevia tietotekniikkaan nojaavia järjestelmiä.

Keksitkö itse jonkin ohjelman, jollaisen haluaisit olevan olemassa? Jollaisen haluaisit itse luoda? Millainen ohjelma tekisi maailmasta paremman?

Yhteenvetoa

  • Kun tietokone ajaa eli suorittaa ohjelman, se seuraa ohjelmoijan laatimaa ohjeistusta vaihe vaiheelta pilkulleen.

  • Ohjelmointi on luovaa ratkaisujen etsimistä ihmisiä kiinnostaviin ongelmiin.

  • Ohjelmat kirjoitetaan jollakin ohjelmointikielellä, tämän kurssin tapauksessa Scalalla.

  • Kurssilla käytetään IntelliJ-nimistä ohjelmointiympäristöä. Tällainen ympäristö, IDE, kokoaa yhteen useita ohjelmoijan tarvitsemia työkaluja.

    • IntelliJ’ssä voi muun muassa muokata ohjelmakoodia sekä ajaa ohjelman tutkiakseen, miten muutokset vaikuttivat sen toimintaan.

    • Scala-ohjelman osat voi ryhmitellä pakkauksiin. Pakkaus voi sisältää useita ohjelman osia omissa tiedostoissaan.

    • IntelliJ’ssä eri ohjelmat voi ryhmitellä moduuleiksi. Moduuli voi sisältää useita pakkauksia.

    • Moniin kurssimateriaalin lukuihin liittyy valmiina tai osittain valmiina annettuja ohjelmia, jotka tarjotaan käyttöösi IntelliJ-moduuleina.

  • Ohjelmakoodi ei ole tarkoitettu vain tietokoneen luettavaksi. Kommentit selventävät ohjelmakoodin merkitystä ihmiselle.

  • Lukuun liittyviä termejä sanastosivulla: ohjelmointi, ohjelma; sovellusohjelma, käyttöliittymä; algoritmi; dynaaminen, staattinen; ohjelmakoodi, ohjelmointikieli, Scala; kommentti; IDE eli sovelluskehitin.

Palaute

Huomaathan, että tämä on henkilökohtainen osio! Vaikka olisit tehnyt lukuun liittyvät tehtävät parin kanssa, täytä palautelomake itse.

Tekijät

Tämän oppimateriaalin kehitystyössä on käytetty apuna tuhansilta opiskelijoilta kerättyä palautetta. Kiitos!

Materiaalin luvut tehtävineen ja viikkokoosteineen on laatinut Juha Sorva.

Liitesivut (sanasto, Scala-kooste, usein kysytyt kysymykset jne.) on kirjoittanut Juha Sorva sikäli kuin sivulla ei ole toisin mainittu.

Tehtävien automaattisen arvioinnin ovat toteuttaneet: (aakkosjärjestyksessä) Riku Autio, Nikolas Drosdek, Kaisa Ek, Joonatan Honkamaa, Antti Immonen, Jaakko Kantojärvi, Niklas Kröger, Kalle Laitinen, Teemu Lehtinen, Mikael Lenander, Ilona Ma, Jaakko Nakaza, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä, Anna Valldeoriola Cardó ja Aleksi Vartiainen.

Lukujen alkuja koristavat kuvat ja muut vastaavat kuvituskuvat on piirtänyt Christina Lassheikki.

Yksityiskohtaiset animaatiot Scala-ohjelmien suorituksen vaiheista suunnittelivat Juha Sorva ja Teemu Sirkiä. Teemu Sirkiä ja Riku Autio toteuttivat ne apunaan Teemun aiemmin rakentamat työkalut Jsvee ja Kelmu.

Muut diagrammit ja materiaaliin upotetut vuorovaikutteiset esitykset laati Juha Sorva.

O1Library-ohjelmakirjaston ovat kehittäneet Aleksi Lukkarinen ja Juha Sorva. Useat sen keskeisistä osista tukeutuvat Aleksin SMCL-kirjastoon.

Tapa, jolla käytämme O1Libraryn työkaluja (kuten Pic) yksinkertaiseen graafiseen ohjelmointiin, on saanut vaikutteita tekijöiden Flatt, Felleisen, Findler ja Krishnamurthi oppikirjasta How to Design Programs sekä Stephen Blochin oppikirjasta Picturing Programs.

Oppimisalusta A+ luotiin alun perin Aallon LeTech-tutkimusryhmässä pitkälti opiskelijavoimin. Nykyään tätä avoimen lähdekoodin projektia kehittää Tietotekniikan laitoksen opetusteknologiatiimi ja tarjoaa palveluna laitoksen IT-tuki. Pääkehittäjänä on nyt Markku Riekkinen, jonka lisäksi A+:aa ovat kehittäneet kymmenet Aallon opiskelijat ja muut.

A+ Courses -lisäosa, joka tukee A+:aa ja O1-kurssia IntelliJ-ohjelmointiympäristössä, on toinen avoin projekti. Sen suunnitteluun ja toteutukseen on osallistunut useita opiskelijoita yhteistyössä O1-kurssin opettajien kanssa.

Kurssin tämänhetkinen henkilökunta löytyy luvusta 1.1.

Lisäkiitokset tähän lukuun

IntelliJ’n käyttöönotosta kertova osio perustuu Niklas Krögerin kirjoittamaan ohjeeseen, Open OnDemand -ympäristöstä kertova puolestaan Ilona Man kirjoittamaan.

IntelliJ’n käyttöönotosta kertova osio perustuu Niklas Krögerin kirjoittamaan ohjeeseen.

a drop of ink
Palautusta lähetetään...