Kurssin viimeisimmän version löydät täältä: O1: 2024
Lukuohje
Tässä kurssimateriaalissa yhdistyvät eräänlainen ohjelmoinnin oppikirja ja siihen liittyvät harjoitustehtävät. Materiaali on räätälöity syksyn 2020 Ohjelmointi 1 -kurssille sopivaksi, mutta sitä voi käyttää myös omatoimiseen opiskeluun näiden kurssien ulkopuolella.
Materiaali jakautuu kierroksiin, jotka rytmittävät kurssia: kullakin kierroksella on oma deadlinensa.
Kierrokset jakautuvat lukuihin. Myöhemmät luvut rakentuvat aiempien varaan, ja materiaali onkin tarkoitus käydä läpi järjestyksessä jättämättä lukuja välistä. Aiempia lukuja voi toki palata kertaamaan myöhempiä käsitellessään, mikä voikin olla mainio ajatus.
Ensimmäinen luku 1.1 toimii johdantona kurssille.
Materiaaliin sisältyy paljon esimerkkiohjelmia, joista osa on upotettu suoraan materiaalin sivuille ja osa tarjotaan pakkauksina, joita käsitellään erillisessä ohjelmointiympäristössä.
Oppimateriaalin luvut eivät ole hakuteos. Sivut Scalaa kootusti ja Sanasto voivat tässä suhteessa auttaa, samoin sanahakusivu.
Teknisiä vaatimuksia
Tutustut kurssin ohjelmointiympäristöön tämän materiaalin luvussa 1.2. Lue materiaalia koneella, jolta pääset käsiksi tuohon ohjelmointiympäristöön.
Materiaalia ei ole suunniteltu luettavaksi mobiililaitteilla. Ei sellaisen käyttö kiellettyäkään ole, muttet pysty mobiililaitteella käyttämään tarvittavaa ohjelmointiympäristöä. Jotkin materiaalin osat saattavat toimia näillä laitteilla vajavaisesti.
Kurssimateriaali toimii kunnolla vain, jos sinulla on ajanmukainen web-selain ja sen JavaScript-tuki on päällä.
Materiaali sisältää kohtia, joissa käytetään koneen tuottamaa ääntä. Tämä tietysti järjestyy vain, jos sinulla on äänentoistolaitteisto käytettävissäsi. Jos opiskelet ihmisten keskellä, esimerkiksi Aallon tietokoneluokissa, varaa omat kuulokkeet mukaan. Äänikohdat eivät ole aivan välttämättömiä, eikä niitä ole kovin monta. Pakon edessä voit myös ohittaa ne.
Käytetyistä merkinnöistä
Harmareunuksiset laatikot
Tällaisissa harmaareunaisissa laatikoissa on vapaaehtoista luettavaa, jonka ohittaminen ei vahingoita ohjelmoinnin keskeisimpien perusteiden oppimista tai kurssisuoritustasi. Näissä laatikoista löytyy muun muassa lisäselityksiä valituista aiheista sekä enemmän ja vähemmän haastavia vapaaehtoisia lisätehtäviä.
Tutustu myös näiden laatikoiden sisältöön, jos haluat ja ehdit, mutta jos jostain pitää karsia, niin karsi niistä.
Oppimateriaaliin on upotettu lainauksia aiempien ja myös käynnissä olevan kurssin opiskelijoiden kommentteja tähän tyyliin:
Seuraavanlaisissa laatikoissa on ohjelmatekstiä eli ohjelmakoodia. Tällaisia laatikoita käytetään materiaalissa toistuvasti esimerkkiohjelmia käsiteltäessä. Monesti käytetään erivärisiä tekstejä ohjelmakoodin eri osien korostamiseen kuten alla.
def nosta(summa: Int) = {
val nostettu = min(summa, this.saldo)
this.saldo = this.saldo - nostettu
nostettu
}
Seuraavanlaisissa laatikoissa on ns. REPL-esimerkkejä eli esimerkkejä REPLiksi kutsutun vuorovaikutteisen ohjelmointiympäristön käytöstä. Tummemmalla pohjalla on käyttäjän antama syöte ja vaaleammalla tietokoneen antama vastaus. REPL-ympäristö esitellään luvussa 1.3.
1 + 1res0: Int = 2 50 + 50 > 100res1: Boolean = false
Seuraavanlaisia vihertäviä laatikoita käytetään monien esimerkkien selityksinä. Siirtämällä hiiren kursorin laatikon päälle korostuvat esimerkistä ne kohdat, joihin selitys liittyy. Voit myös näpäyttää laatikoita, jolloin korostus jää päälle.
Raikkaan punaisissa laatikoissa on pseudokoodia eli ohjelmakoodia muistuttavaa mutta ainakin osittain vain ihmislukijalle tarkoitettua tekstiä. Pseudokoodia käytetään ensi kerran luvussa 2.5.
def totalPrice = { Vuorotellen jokaiselle huutokaupalle puskurissa this.items: - Selvitä huutokaupan hinta ja lisää summaan. Lopuksi palauta summa. }
Kurssimateriaaliin on myös upotettu erilaisia vuorovaikutteisia osia kuten monivalintakysymyksiä ja vaiheittaisia animaatioita, joita lukija voi kontrolloida. Näiden osien käyttö on joko itseselitteistä tai siihen on annettu apua paikan päällä.
Palaute
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, Joonatan Honkamaa, Jaakko Kantojärvi, Niklas Kröger, Teemu Lehtinen, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä 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 tällä hetkellä 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 ovat luoneet Nikolai Denissov, Olli Kiljunen ja Nikolas Drosdek yhteistyössä Juha Sorvan, Otto Seppälän, Arto Hellaksen ja muiden kanssa.
Kurssin tämänhetkinen henkilökunta löytyy luvusta 1.1.
Joidenkin lukujen lopuissa on lukukohtaisia lisäyksiä tähän tekijäluetteloon.