Tämä ei ole uusin versio kurssista. Katso myös Ohjelmoinnin MOOC 2019: https://ohjelmointi-19.mooc.fi.

Yleistä

Tämä materiaali on tarkoitettu vuoden 2018 Ohjelmoinnin MOOCin materiaaliksi. Materiaalin osat 1-7 liittyvät kurssiin ohjelmoinnin perusteet ja osat 8-14 kurssiin ohjelmoinnin jatkokurssi. Ohjelmoinnin MOOC kattaa sekä ohjelmoinnin perusteet että ohjelmoinnin jatkokurssin. Materiaalia käytetään myös muilla kursseilla.

Tämän sivun ylälaidassa on linkit materiaalin osiin.

Materiaali on tarkoitettu kaikille ohjelmoinnin oppimisesta kiinnostuneille eikä kurssilla oleteta aiempaa ohjelmointikokemusta. Kurssille saa osallistua kuka tahansa: kurssi on ilmainen. Osallistumista varten tarvitset tietokoneen sekä mahdollisuuden kurssilla käytettävien ohjelmistojen asentamiseen. Helsingin yliopiston opiskelijat voivat tehdä kurssin tehtäviä Kumpulan kampuksella sijaitsevilla koneilla, jolloin omaa tietokonetta ei tarvita.

Kurssien oletettu työkuorma on noin 8-20 tuntia yhtä osaa kohden. Varaa kurssin tekemiseen aikaa.

Osaamistavoitteet

Kursseilla opitaan perustaidot ohjelmoinnista Java-kielellä. Tutuksi tulevat muun muassa syötteen lukeminen, tulostaminen, ehtolauseet, toistolauseet, listojen käsittely, oliot, ymym.

Ohjelmoinnin perusteet
Osa Osaamistavoitteet
1 Tuntee ohjelmoinnin peruskäsitteistä muuttujat, ehtolauseet, toistolauseet. Ymmärtää ohjelman suoritusjärjestyksen. Tuntee loogiset operaatiot ja ja tai. Osaa kirjoittaa ohjelmia, jotka lukevat käyttäjältä syötettä ja tekevät laskentaa syötteen perusteella.
2 Ymmärtää vuokaavioiden idean ja osaa piirtää vuokaavioita annetusta ohjelmasta. Hahmottaa ja tunnistaa ohjelman käyttämien muuttujien tilan ohjelman eri suoritusvaiheessa. Osaa soveltaa toistolausetta ohjelmointiongelmissa. Tuntee käsitteet metodi, parametri ja kutsupino. Osaa luoda ja käyttää parametrillisia metodeja.
3 Osaa luoda metodeja, jotka palauttavat arvon. Ymmärtää miten ohjelman suoritus etenee metodikutsun yhteydessä. Ymmärtää muuttujien näkyvyyden ja olemassaolon. Tuntee käsitteen merkkijono ja osaa käsitellä merkkijonoja (erit. vertailu). Tuntee listarakenteen ja osaa lisätä ja poistaa listalla olevia alkioita. Tuntee käsitteen indeksi ja osaa käydä listan läpi while-toistolauseen avulla.
4 Tuntee käsitteet olio, konstruktori ja olion metodit. Luo ainakin yhden oman luokan. Luo olioita tekemistään luokista. Ymmärtää static-määreellä ja ilman static-määrettä olevien metodien eron. Tietää olio-ohjelmoinnin perusperiaatteet ja luo luokkia, jotka kuvaavat annettua ongelma-aluetta.
5 Ymmärtää alkeis- ja viittaustyyppisten muuttujien erot. Osaa määritellä olioita, jotka sisältävät olioita. Osaa käyttää olioita metodin parametrina sekä luoda metodeja, jotka palauttavat olioita. Osaa käsitellä olioita listarakenteessa sekä käyttää listaa oliomuuttujana.
6 Tuntee käsitteen tiedosto. Osaa lukea tietoa erilaisista tietolähteistä (mm. tiedosto, verkko). Ymmärtää hajautustaulun periatteen. Osaa kirjoittaa hajautustaulua käyttäviä ohjelmia ja osaa luoda satunnaislukuja Javan avulla. Tuntee staattisten ja ei staattisten metodien erot ja tutustuu sovelluksen jakamiseen useampaan vastuualueeseen (tekstikäyttöliittymä, sovelluslogiikka).
7 Osaa pilkkoa ohjelman useampaan osaan, missä yhden vastuulla on (tekstimuotoinen) käyttöliittymä, toisen vastuulla sovelluslogiikka. Tuntee testivetoisen ohjelmistokehityksen perusajatuksen ja osaa kirjoittaa ohjelman metodien toiminnallisuutta tarkastelevia testejä. Ryhmittelee arvoja hajautustaulun avulla ja osaa käyttää listaa hajautustaulun arvona. Osaa luoda yksinkertaisia simulaatioita.
Ohjelmoinnin jatkokurssi
Osa Osaamistavoitteet
8 Tuntee käsitteen object ja ymmärtää miksi jokaisella oliolla on metodi toString ja hashCode. Tietää joitakin käyttökohteita em. metodeille. Tuntee käsitteen rajapinta ja osaa luoda luokan, joka toteuttaa annetun rajapinnan. Osaa määritellä rajapinnan ja tietää, että eri luokista luodut oliot voivat toteuttaa saman rajapinnan.
9 Tuntee luokkaakaavioiden merkintätavan ja luo luokkia luokkakaavioiden perusteella. Ymmärtää käsitteen pakkaus ja osaa hyödyntää pakkauksia ohjelman jäsentelyssä. Tuntee Javan erityyppiset poikkeukset ja luo ohjelmia, jotka varautuvat poikkeuksiin. Tuntee käsitteen perintähierarkia ja kertaa arvojen ryhmittelyä hajautustaulun avulla. Tallentaa olioita useampaan hajautustauluun.
10 Osaa luoda luokkia, jotka periytyvät toisesta luokasta. Ymmärtää perinnän hyödyt ja osaa toisaalta esittää tapauksia, joihin perintä ei sovi. Tietää miten abstraktit luokat toimivat. Tietää miten perintä merkitään luokkakaavioon. Osaa käsitellä tietokokoelmia arvojen virtana ja osaa käyttää lambda-lauseketta Javassa.
11 Osaa käsitellä yksi- ja useampiulotteisia taulukoita, ja ymmärtää miten taulukot käyttävät tilaa tietokoneen muistissa. Kertaa indeksien käyttöä. Osaa kertoa sekä taulukoiden että hajautustaulujen eduista. Tuntee ainakin yhden järjestämisalgoritmin sekä hakualgoritmin, ja tietää miten Javan omia järjestämiseen tarkoitettuja apuvälineitä käytetään. Tuntee rajapinnan Comparable ja hyödyntää sitä olioiden järjestämisessä.
12 Tutustuu graafisten käyttöliittymien ohjelmointiin. Tuntee muutamia käyttöliittymäkomponentteja, käyttöliittymäkomponenttien asettelun mekanismeja, sekä osaa käsitellä käyttöliittymän tapahtumia. Osaa tehdä käyttöliittymiä, jotka sisältävät useamman näkymän (esimerkiksi kirjautumisnäkymä, tiedon listaukseen käytettävä näkymä, tiedon muokkaukseen käytettävä näkymä).
13 Osaa piirtää graafisen käyttöliittymän avulla. Tuntee erilaisia kaavioita (viivakaavio, pylväskaavio). Osaa näyttää kuvia sekä soittaa äänitiedostoja. Luo suuremman ohjelman esimerkkiä noudattaen.
14 Tuntee käsitteet säännöllinen lauseke, lueteltu tyyppi, ja iteraattori, ja osaa käyttää näitä osana ohjelmia. Osaa kirjoittaa tiedostoon. Muistaa käsitteen yksikkötesti ja osaa kertoa hyvien ja huonojen yksikkötestien ominaisuuksista. Tietää miten paljon käytetyt ArrayList ja HashMap toimivat. Tietää aikaan perustuvan tavan tietorakenteiden tehokkuuden vertailuun. Tietää ohjelmoinnin jatkokurssin jälkeen otettavia kursseja.

Työskentelytavat ja aikataulu

Merkittävä osa kurssin työskentelystä on ohjelmointia. Aikatauluttamattomassa Ohjelmoinnin MOOCissa tehtäviä voi tehdä omaan tahtiin. Seuraavan osan tehtäviin pääsee käsiksi kun on tehnyt vähintään 75% edellisen osan tehtävistä.

Tukiväylät

Helsingin yliopiston kurssien ensisijainen tukiväylä on kurssin Moodle.

Verkon yli nopein tapa avun kysymiseen on kurssin keskustelukanava #mooc.fi, johon pääsee helpointen kanavan Matrix-huoneen kautta: https://riot.im/app/#/room/#mooc.fi:matrix.org. Jos et pidä modernista teknologiasta, voit myös liittyä huoneeseen Ircnetin kautta seuraamalla näitä ohjeita: http://mooc.fi/courses/general/ohjelmointi/tukikanavat/irc/ohjeet/.

Huomaathan, että kanavan osallistujat ovat kanssaopiskelijoita ja kurssin aiemmin tehneitä opiskelijoita. Toiminta perustuu vapaaehtoisuuteen.

Kurssimateriaalin lukeminen

Lue kurssimateriaalia siten, että teet samalla itse kaikki lukemasi esimerkit. Esimerkkeihin kannattaa tehdä pieniä muutoksia ja tarkkailla, miten muutokset vaikuttavat ohjelman toimintaan. Äkkiseltään voisi luulla, että esimerkkien tekeminen ja muokkaaminen hidastaa opiskelua. Tämä ei kuitenkaan pidä paikkansa.

Proseduraalisten taitojen kuten ohjelmoinnin oppiminen perustuu oleellisesti aktiiviseen tekemiseen ja rutiinin kasvattamiseen. Esimerkkien ja erityisesti erilaisten omien kokeilujen tekeminen on parhaita tapoja "sisäistää" kurssin aihepiiri.

Pyri tekemään tai ainakin yrittämään tehtäviä sitä mukaa kuin luet kurssimateriaalia. Jos et osaa heti tehdä jotain tehtävää, älä masennu, vaan kysy neuvoa tehtävän tekemiseen. Haastavimpia tehtäviä kannattaa tehdä useampaan otteeseen siten, että tehtävien uudelleen tekemisen välillä pitää muutaman tunnin tai päivän tauon.

Kurssimateriaalia ei ole tarkoitettu vain kertaalleen luettavaksi. Joudut varmasti myöhemmin palaamaan jo aiemmin lukemiisi kohtiin tai aiemmin tekemiisi tehtäviin. Kurssimateriaalin teksti ei myöskään sisällä kaikkea oleellista ohjelmointiin liittyvää. Itse asiassa ei ole olemassa kirjaa josta löytyisi kaikki oleellinen. Joudut joka tapauksessa ohjelmoijan urallasi etsimään tietoa myös omatoimisesti. Kurssin harjoitukset sisältävät jo jonkun verran ohjeita, mistä suunnista ja miten hyödyllistä tietoa on mahdollista löytää.

Tehtävätyypit ja tehtävien tekeminen

Kurssin tehtävät on upotettu osaksi kurssimateriaalia. Kurssitehtävät sisältävät ohjelmointitehtäviä (20-30 osaa kohden), monivalintatehtäviä, selitystehtäviä (muutamia per osa), selitystehtävien vertaisarviointia (muutamia per osa) sekä tehtävien keksimistehtäviä. Tehtävät palautetaan kurssilla käytössä olevan Test My Code -ympäristön kautta sekä kurssimateriaalin kautta.

Yhteistyö

Hyvä yhteistyö keskittyy jokaisen osapuolen oppimiseen ja parantaa oppimistuloksia. Yhteistyö on kurssin tehtäviä tehdessä sallittua ja suositeltavaa. Jos teet tehtäviä yhdessä muiden kanssa, sinun tulee kuitenkin tehdä ja palauttaa omat ratkaisusi itse.

Hyvä ohjesääntö yhteistyöhön on ns. Gilligan's Island -sääntö:

The Gilligan's Island Rule: You are free to meet with fellow students(s) and discuss an assignment with them. Writing on a board or shared piece of paper during the meeting is acceptable; however, you should not take any written (electronic or otherwise) record away from the meeting. Everything that you derive from the collaboration should be in your head. After the meeting, engage in at least a half-hour of mind-numbing activity (like watching an episode of Gilligan's Island), before starting to work on the assignment. This will assure that you are able to reconstruct what you learned from the meeting by yourself.

Opintovilpistä

Kurssilla seurataan Helsingin yliopiston opintokäytäntöjä. Plagiarismi ja opintovilppi, eli esimerkiksi netissä olevien tai kaverilta saatujen vastausten kopiointi ja niiden palauttaminen omana työnä on kiellettyä.

Todettu opintovilppi johtaa kurssisuorituksen hylkäämiseen ja toistuva opintovilppi voi johtaa opinto-oikeuden määräaikaiseen menettämiseen. Lue lisää osoitteesta http://blogs.helsinki.fi/alakopsaa/opiskelijalle/.

Arvostelu

Arvosteluperusteet löytyvät kurssin Moodlesta.

Kurssien kokeet

Kurssi suoritetaan Helsingin yliopiston Avoimen yliopiston kautta ja tentti järjestetään Avoimen yliopiston Moodle-järjestelmässä.

Tenttien tiedot, ilmoittautumisohjeet, sekä tiedot arvostelusta löydät osoitteesta http://mooc.fi/courses/2018/ohjelmoinnin-mooc/.

Tunnukset ja työvälineet

Kurssilla käytetään Test My Code (TMC) -järjestelmää tehtävien automaattiseen arviointiin ja palauttamiseen. Tarvitset tunnukset kyseiseen järjestelmään. Tämän lisäksi tarvitset koneellesi Java-ohjelmien kehittämiseen tarkoitetun Javan kahdeksannen version.

Ohjeistus Javan asentamiseen, TMC-järjestelmän asentamiseen, käyttäjätunnusten luomiseen sekä ensimmäisen kurssitehtävän tekemiseen löydät osoitteesta https://materiaalit.github.io/tmc-asennus/netbeans/.

Kun olet luonut käyttäjätunnuksen edellä kuvattuja ohjeita seuraten, voit kirjautua tähän materiaaliin materiaalin oikeassa ylälaidassa olevan "Kirjaudu sisään"-napin kautta.

Huomaathan, että kurssin työvälineet löytyvät valmiiksi asennettuina Kumpulan kampuksen Exactumin mikroluokista B221 ja BK107. Ohjelma löytyy nimellä "TMCBeans".

Analytiikkadatan keräämisestä ja kurssilla tehtävästä tutkimuksesta

Analytiikkadatan kerääminen ja arvostelu

Kurssin aikana tehdyistä tehtävistä kerätään tietoa. Kerätty tieto sisältää materiaalissa olevien kyselyiden vastauksia, osittaisen ohjelmointitehtävien ratkaisuprosessin, sekä kurssimateriaalin käyttöä. Tallennettu tieto sisältää henkilökohtaisen tunnisteen, jonka perusteella ei voida suoraan päätellä henkilöllisyyttäsi. Tieto ei esimerkiksi siis sisällä nimeäsi tai sähköpostiosoitettasi.

Mikäli käytät TMC:stä vanhempaa versiota (pienempi kuin 1.1.14) Varmista että TMC:n asetuksissa (Valikko TMC -> Settings) kohdassa "Send snapshots of your progress for study" on ruksi. MOOC-suorituksia tai Helsingin yliopiston avoimen yliopiston suorituksia ei arvostella ilman tätä. Uudemmissa versiossa valinta on automaattisesti päällä.

Jos olet opiskelijana Helsingin yliopistolla ja et halua että työstämistäsi tehtävistä kerätään ajoittaista dataa kurssiarvostelua varten, kurssin voi suorittaa Kumpulassa järjestettävällä erilliskokeella. Analytiikkadataa kerätään vain kurssiin liittyvästä toiminnasta, ei esimerkiksi muista ohjelmointiprojekteistasi tai muuten koneeltasi.

Kurssilla tehtävästä tutkimuksesta

Kurssilla tehdään oppimiseen liittyvää tutkimusta. Tällä tutkimuksella on useampia tavoitteita: (1) luoda oppimateriaali, joka ottaa yksilölliset erot huomioon ja reagoi tarvittaessa tarjoten kohdennetumpaa oppisisältöä, (2) kehittää digitaalisissa ympäristöissä tapahtuvaan oppimiseen liittyvää ymmärrystä ja tietoa, sekä (3) tukea tutkimustiedon kautta muita oppimateriaalien kehittäjiä ja oppimisen tutkijoita. Tämä johtaa luonnollisesti myös parempaan oppimiskokemukseen opiskelijoille.

Tällaisesta oppimisanalytiikaksi kutsutusta tutkimuksesta kiinnostuneiden kannattaa tutustua esimerkiksi artikkeliin Educational Data Mining and Learning Analytics in Programming: Literature Review and Case Studies.

Tutkimusdatan hallinnasta vastaa Helsingin yliopiston tietojenkäsittelytieteen laitoksen Agile Education Research -ryhmän Arto Hellas. Anonymisoimattomaan tutkimusdataan eivät pääse käsiksi muut tutkijat. Voit myös pyytää milloin tahansa sinusta kerätyn datan poistamista lähettämällä sähköpostin osoitteeseen arto.hellas@cs.helsinki.fi

Työskentelystä kerättyä tietoa käytetään tutkimuksessa. Kerätty tieto sisältää tietoa oppimateriaalien käytöstä, kurssitehtävien tekemisestä sekä kokeissa pärjäämisestä. Tutkimustuloksista ei pystytä tunnistamaan yksittäisiä opiskelijoita. Jos et osallistu tutkimukseen, siitä ei tule minkäänlaisia seuraamuksia.

Sitten materiaaliin...

Löydät tämän sivun ylälaidasta linkin "Osa 1", jolla pääset ensimmäiseen osaan käsiksi. Siirtyminen onnistuu myös tästä painamalla.

Kurssimateriaalin tekijät ja lisenssi

Kurssimateriaalin ovat tehneet Arto Hellas (né Vihavainen) ja Matti Luukkainen. Kurssin sisältöön ovat vaikuttaneet myös Matti Paksula, Antti Laaksonen, Pekka Mikkola, Juhana Laurinharju, Martin Pärtel, Joel Kaasinen ja Mikael Nousiainen.

Tämä materiaali on lisensoitu Creative Commons BY-NC-SA-lisenssillä, joten voit käyttää ja levittää sitä vapaasti, kunhan alkuperäisten tekijöiden nimiä ei poisteta. Jos teet muutoksia materiaaliin ja haluat levittää muunneltua versiota, se täytyy lisensoida samalla lisenssillä. Materiaalien käyttö kaupalliseen tarkoitukseen on ilman erillistä lupaa kielletty.

Voit osallistua kurssimateriaalin parantamiseen myös itse. Jokaisen sivun alalaidassa on linkit, joilla pääset ehdottamaan muutoksia. Muutosten ehdottaminen vaatii Github-tunnuksen.

Sisällysluettelo