Yleistä

Tämä materiaali on tarkoitettu Helsingin yliopiston kevään 2018 kursseille ohjelmoinnin perusteet (5 op) ja ohjelmoinnin jatkokurssi (5 op) sekä 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 julkaistaan kurssin edetessä. 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. Kursseihin kuuluu viikoittain julkaistavat ohjelmointitehtäväsarjat, jotka tulee olla tehtynä kurssilla määriteltyyn määräaikaan mennessä.

  • Helsingin yliopiston Ohjelmoinnin perusteet -kurssilla kurssitehtävien määräajat ovat aina maanantaisin klo 23:59. Ensimmäisen osan tehtävien määräaika on 22.1.2018. Huom! Helsingin yliopiston Ohjelmoinnin perusteiden aikataulu ei siis koske Ohjelmoinnin MOOCia.
  • Aikataulutetun Ohjelmoinnin MOOCin aikataulu löytyy osoitteesta http://mooc.fi/courses/2018/ohjelmoinnin-mooc/
  • 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ä.

Kurssilla on viikoittain ohjausta Kumpulan Exactumin salissa BK107. Ohjausajat ovat seuraavat.

Päivä Kellonajat
Maanantai 12-18
Torstai 12-18
Perjantai 10-16

Sähköpostitse tapahtuvaa ohjausta ei kurssilla ole. Tenttiviikolla (5-9.3.2018), pääsiäistauon aikana (29.3-4.4.), tai vappuaattona (30.4.) ohjausta ei ole.

Kumpulan Exactumin mikroluokissa (BK107, B221) saa työskennellä myös ohjausaikojen ulkopuolella, jos siellä ei ole tuolloin muuta toimintaa.

Tukiväylät

Helsingin yliopiston kurssien ensisijainen tukiväylä on Kumpulan kampuksella Exactumissa tapahtuva ohjaus. Ohjaustilaisuudet ovat avoimia tilaisuuksia, joihin myös MOOCia tekevät saavat tulla vapaasti tekemään tehtäviä. Tilaisuuksissa saa myös luonnollisesti kysyä apua tehtäviin tai ihan vaan jutella tehtävistä tai kurssin aihepiiristä.

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

Sekä ohjelmoinnin perusteiden että ohjelmoinnin jatkokurssin arvostelu perustuu Helsingin yliopistolla kurssitehtäviin ja kokeeseen. Kummallakin kurssilla kurssitehtävistä voi saada yhteensä 70 pistettä ja kokeesta 30 pistettä. Kurssilla on käytössä koeleikkuri, eli kokeesta tulee saada vähintään puolet pisteistä kurssin läpäisemiseksi.

Arvosanarajat:

Kurssipisteet Arvosana
91 tai yli 5/5
86-90 4/5
81-85 3/5
76-80 2/5
70-75 1/5
< 70 hylätty

 

Täydet tehtäväpisteet saa kustakin osasta tekemällä 90% kyseisen osan tehtävistä. Huomaathan, että kaikki tehtävät eivät ole saman arvoisia ja joistakin tehtävistä voi saada enemmän pisteitä kuin toisista.

Huom! Edellä kuvattu arvostelu olettaa, että hyväksyt analytiikkadatan keräämisen kurssin tehtävistä ja mahdollisesti koneella tehtävistä koetehtävistä. Analytiikkadata sisältää ajoittain kerättäviä aikaleimattuja kopioita työstämästäsi tehtävästä sekä tietoa kurssimateriaalin käytöstä. Analytiikkadataa ei kerätä henkilökohtaisista projekteistasi tai muualta koneeltasi.

Sairaspoissaolot ja väliin jääneet tehtävät

Sairastapauksista johtuen tekemättä jääneet tehtävät hyväksiluetaan siten, että tehtävistä annetaan pisteitä muina viikkoina tehtyjen tehtävien keskiarvon perusteella. Tehtävien hyväksilukuun vaaditaan lääkärintodistus.

Ohjelmoinnin perusteiden ja jatkokurssin loppupuolella julkaistaan lisäksi kertaustehtäväsarja, joka lasketaan "bonustehtäväviikoksi". Kertaustehtävillä voi paikata väliin jääneitä tehtäviä HY:n kursseilla.

Kurssien kokeet

Helsingin yliopisto

Koe järjestetään koeviikon aikana Kumpulan kampuksella, jossa koe tehdään mikroluokassa BK107. Kumpulan kampuksella järjestettävä koe kestää kaksi ja puoli tuntia, ja sen voi tehdä joko omalla koneella tai Kumpulan kampuksen koneella. Koetilanteessa valvojat osaavat neuvoa Kumpulan kampuksen koneisiin liittyvissä pulmissa -- tukea oman koneen käyttöön koetilanteessa ei ole.

Kokeisiin ilmoittaudutaan sähköisesti ilmoittautumisjärjestelmässä. Ilmoittautumisjärjestelmän osoite on https://koeilmo.testmycode.io/ ja siihen kirjaudutaan TMC-tunnuksilla.

Huom! Otathan yhteyttä ennalta osoitteeseen arto.hellas@cs.helsinki.fi jos sinulla on tarve pidemmälle koeajalle (esim. lukihäiriö).

Ohjelmoinnin MOOC

Kurssi suoritetaan Helsingin yliopiston Avoimen yliopiston kautta ja tentti järjestetään Avoimen yliopiston Moodle-järjestelmässä. Opinto-oikeutta hakeville järjestetään näyttökokeita toukokuussa.

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öä. Jos et hyväksy tiedon keräämistä, kurssin pisteytyksessä ei voida ottaa näitä suorituksia huomioon. 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.

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ä. 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) lähestyä tilannetta, jossa oppimateriaali ja tehtävät osaavat ottaa oppijoiden yksilölliset erot paremmin huomioon ja reagoida niihin tarjoten kohdennetumpaa opetusta, (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ällaisesta 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 jos sallit. Tutkimuksemme päätavoitteena on osaamisen kehittymisen arviointi tekemisen arvioinnin sijaan, mikä johtaa tulevaisuudessa yksilöllistä osaamista paremmin kehittävien vinkkien ja tehtävien tarjoamiseen. Tutkimustuloksista ei pystytä tunnistamaan yksittäisiä opiskelijoita. Jos et salli kurssin aikana kerättyjen tietojen käyttämistä tutkimuksessa, siitä ei tule minkäänlaisia seuraamuksia.

Kurssilla tehdään lisäksi tutkimusta, joka voi vaikuttaa kurssikokemukseen (esim. kurssisisältö). Jos osallistut tutkimukseen, saatat saada esimerkiksi parannuksia materiaaliin. Jos et halua osallistua tutkimukseen, saat kurssin sisällöstä perusversion. Tutkimukseen osallistuminen ei vaikuta loppuarvosanaan.

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