Yleistä

Tämä materiaali on tarkoitettu syksyn 2018 kursseille Ohjelmoinnin perusteet (TKT10002) ja Ohjelmoinnin jatkokurssi (TKT10003). Materiaalin osat 1-7 liittyvät kurssiin ohjelmoinnin perusteet ja osat 8-14 kurssiin ohjelmoinnin jatkokurssi.

Tämän sivun ylälaidassa on linkit materiaalin osiin. Osia lisätään kurssin edetessä.

Kurssilla ei oleteta aiempaa ohjelmointikokemusta. Osallistumista varten tarvitset tietokoneen sekä mahdollisuuden kurssilla käytettävien ohjelmistojen asentamiseen. Tehtäviä voi tehdä myös Kumpulan kampuksella sijaitsevilla koneilla, jolloin omaa tietokonetta ei tarvita.

Kurssien oletettu työkuorma on noin 10-20 tuntia viikkoa kohden. Varaa kurssin tekemiseen aikaa.

Osaamistavoitteet

Kursseilla opitaan perustaidot ohjelmoinnista Java-kielellä.

Ohjelmoinnin perusteet
Osa Osaamistavoitteet
1 Osaat kirjoittaa ohjelmia, jotka lukevat käyttäjältä syötettä ja tekevät laskentaa syötteen perusteella. Tunnet käsitteet muuttuja, ehtolause ja toistolause, ja osaat käyttää näitä ohjelmissasi.
2 Tunnet muutamia osaongelmia sekä niihin liittyviä ratkaisumalleja. Tunnet loogiset operaatiot ja, tai ja ei ja osaat käyttää niitä ehto- ja toistolauseissa. Tunnet käsitteet metodi, metodin parametri, metodin palautusarvo ja ohjelman kutsupino. Osaat luoda metodeja ja ymmärrät miten ohjelman suoritus etenee kun metodia kutsutaan ja toisaalta kun metodikutsusta palataan.
3 Tiedät lähdekoodin kommentointitapoja ja ymmärrät miten muuttujien ja metodien nimentä vaikuttaa ohjelman ymmärrettävyyteen. Tunnet lista- ja taulukkorakenteen ja osaat käyttää niitä osana ohjelmia. Osaat käydä listan ja taulukon läpi while-toistolausetta ja indeksimuuttujaa käyttäen sekä for-each -toistolausetta käyttäen. Tunnet merkkijonoon liittyviä metodeja ja osaat pilkkoa merkkijonon pienempiin osiin.
4 Tunnet käsitteet tiedosto ja tiedostojärjestelmä ja osaat lukea merkkijonomuotoista tietoa tiedostosta. Tiedät mitä olio-ohjelmointi tarkoittaa. Tunnet olio-ohjelmointiin liittyvät keskeiset käsitteet kuten luokka ja olio. Osaat luoda luokkia ja olioita sekä käyttää niitä osana toteuttamiasi ohjelmia.
5 Tiedät mitä alkeis- ja viittaustyyppiset muuttujat ovat ja ymmärrät miten niiden toiminta eroaa toisistaan (muuttujan arvon asetus, metodin parametrina käyttö). Osaat luoda luokkaan useita konstruktoreja sekä useita samannimisiä metodeja. Osaat vertailla olioiden samankaltaisuutta sekä määritellä samankaltaisuuden vertailuun käytettävän metodin. Osaat määritellä luokkaan viittaustyyppisiä oliomuuttujia, käyttää olioita metodin paluuarvona, sekä käyttää listoja oliomuuttujina.
6 Ymmärrät staattisten ja ei-staattisten metodien erot. Tunnet hajautustaulun ja osaat käsitellä hajautustaulussa olevaa tietoa. Osaat käyttää olioita hajautustaulun arvona ja tiedät miten oliot toimivat hajautustaulun avaimena. Osaat ryhmitellä tietoa hajautustaulun avulla ja osaat käyttää listaa hajautustaulun arvona. Osaat käyttää olioita sekä tiedon esittämiseen että ohjelman jakamiseen useampaan vastuualueeseen (tekstikäyttöliittymä, sovelluslogiikka).
7 Osaat kertoa proseduraalisen ohjelmoinnin ja olio-ohjelmoinnin eroista ja toteuttaa ohjelmia kumpaakin ohjelmointiparadigmaa noudattaen. Tiedät mitä käsite algoritmi tarkoittaa ja osaat kuvailla muutamien järjestämis- ja hakualgoritmien toimintaa. Osaat kirjoittaa yksikkötestejä ja tiedät testivetoisen ohjelmistokehityksen perusaskeleet.
Ohjelmoinnin jatkokurssi
Osa Osaamistavoitteet
8 Tunnet käsitteet perintä ja rajapinta. Osaat luoda luokkia, jotka periytyvät toisesta luokasta ja osaat luoda luokkia, jotka toteuttavat yhden tai useamman rajapinnan. Tiedät miten abstraktit luokat toimivat. Ymmärrät että olio voidaan esittää kaikkien sen todellisten tyyppien avulla.
9 Osaat käsitellä tietokokoelmia virran avulla. Osaat rajata virran arvoja (filter) sekä muuntaa virran arvojen tyyppiä (map). Tunnet käsitteen lambda-lauseke. Osaat järjestää olioita Javan valmista Comparable-rajapintaa hyödyntäen. Tunnet käsitteet säännöllinen lauseke, lueteltu tyyppi, ja iteraattori, ja osaat hyödyntää näitä ohjelmissasi.
10 Tunnet luokkakaaviot ja osaat tulkita ja rakentaa ohjelmia luokkakaavioiden perusteella. Osaat käyttää Javan pakkauksia ja tiedät mistä import-lauseen osat muodostuvat. Tunnet Javan erilaisia poikkeuksia ja osaat käsitellä sekä heittää niitä eteenpäin. Osaat kirjoittaa tietoa tiedostoon ohjelmallisesti.
11 Tiedät mitä geneeriset tyyppiparametrit ovat ja osaat luoda luokkia jotka käyttävät niitä. Tiedät pääpiirteittäin ArrayListin ja HashMapin sisäisen toteutuksen ja osaat luoda niistä yksinkertaistetut omat versiot. Tiedät miten satunnaislukuja luodaan ja osaat käyttää Javan valmiita välineitä satunnaislukujen luomiseen. Tunnet menetelmiä moniulotteisen tiedon esittämiseen ja osaat luoda sekä käsitellä moniulotteisia taulukoita.
12 Tutustut graafisten käyttöliittymien ohjelmointiin. Tunnet muutamia käyttöliittymäkomponentteja, käyttöliittymäkomponenttien asettelun mekanismeja, sekä osaat käsitellä käyttöliittymän tapahtumia. Osaat tehdä käyttöliittymiä, jotka sisältävät useamman näkymän.
13 Tunnet menetelmiä tiedon visualisointiin ja osaat käyttää Javan valmiiksi tarjoamia kaavioita (viivakaavio, pylväskaavio). Osaat käyttää Javan tarjoamia välineitä yksinkertaisten piirrosten luomiseen. Osaat näyttää kuvia sekä soittaa äänitiedostoja. Luot suuremman ohjelman esimerkkiä noudattaen.
14 Tunnet menetelmiä simulaatioiden luomiseen ja kertaat kaksiulotteisten taulukkojen käyttöä. Tiedät, että muiden kirjoittamia kirjastoja voi käyttää osana omia ohjemia. Kertaat käsitettä yksikkötesti ja tunnet pääpiirteittäin käsitteen testikattavuus.

Työskentelytavat ja aikataulu

Kurssilla ohjelmoinnin perusteet (4.9.-28.10.) on viikoittaiset luennot tiistaisin klo 10:15 Kumpulan Exactumin salissa A111. Ohjelmoinnin jatkokurssilla on vain alku- ja loppuluennot (30.10. ja 11.12. klo 10:15 salissa A111.) Ensisijaisena tukimuotona kurssillla on Kumpulassa järjestettävä pajaohjaus. Pajaohjausta järjestetään tehtävien tekemiseen seuraavasti:

  • Maanantaisin klo 12-18 salissa B221 (26.11. klo 15->; 3.12. salissa BK107).
  • Keskiviikkoisin klo 12-16 salissa B221.
  • Torstaisin klo 12-16 salissa B221. (ei 6.12.; 8.11. klo 13-16)
  • Perjantaisin klo 12-16 salissa BK107 (7.12. ja 14.12. osittainen päällekkäisvaraus).

Kurssin pääpaino on viikoittain tehtävissä tehtävissä. Kurssin tehtävillä on viikoittainen deadline maanantaisin kello 23:59. Täysiin tehtäväpisteisiin tähdättäessä ensimmäisen osan tehtävät tulee olla palautettuna 10.9. klo 23:59 mennessä. Toisen osan tehtävät tulee olla palautettuna 17.9. klo 23:59 mennessä jne.

Tehtävien palauttaminen myöhässä on mahdollista neljän päivän ajan tehtävien alkuperäisestä deadlinestä, eli ensimmäisen osan tehtäviä voi palauttaa myöhäispalautuksina 14.9. klo 23:59 asti. Toisen osan tehtäviä voi palauttaa myöhäispalautuksina 21.9. klo 23:59 asti jne. Myöhässä palautetut tehtävät ovat kurssin arvostelussa 75 % arvoisia niiden alkuperäisestä pistemäärästä.

Tukiväylät

Pajaohjaus on kurssin ensisijainen tukimuoto. Pajaohjauksen lisäksi kurssin tehtävien tekemiseen voi kysyä apua sekä kurssiin liittyvän Moodlen keskustelualueella (osoite Moodleen on https://moodle.helsinki.fi/course/view.php?id=30111) että verkossa olevalta keskustelukanavalta.

Verkossa olevaan telegram-ryhmään ohjelmointi_s18 pääsee helpoiten ylälaidassa olevan "Chat"-linkin kautta tai mobiilisovelluksellasi (etsi ryhmä nimeltä ohjelmointi_s18 ja liity sinne).

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

Kurssin ohjaajat käyvät vastaamassa Moodlessa oleviin kysymyksiin muutamana päivänä viikossa.

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ä (kymmeniä 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ö edesauttaa jokaisen oppimista ja parantaa oppimistuloksia. Yhteistyö ja avun kysyminen 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.

Kokeessa yhteistyö ei ole sallittua.

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

Ohjelmoinnin perusteet

Opintojakson arvostelu perustuu harjoitustehtäviin sekä kurssin lopussa järjestettävään tenttiin. Osallistuakseen kurssin tenttiin, opiskelijan tulee tehdä kurssin jokaisen viikon tehtävistä vähintään 75 %. Ohjelmoinnin perusteiden arvosana muodostuu seuraavasti:

Arvosana 1 Vähintään 75 % jokaisen osan tehtäväpisteistä ja vähintään 50 % koepisteistä.
Arvosana 2 Vähintään 75 % jokaisen osan tehtäväpisteistä ja vähintään 60 % koepisteistä.
Arvosana 3 Vähintään 75 % jokaisen osan tehtäväpisteistä ja vähintään 70 % koepisteistä.
Arvosana 4 Vähintään 75 % jokaisen osan tehtäväpisteistä ja vähintään 80 % koepisteistä.
Arvosana 5 Vähintään 90 % jokaisen osan tehtäväpisteistä ja vähintään 90 % koepisteistä.

Tehtäväpisteet lasketaan tehtävätyyppikohtaisesti. Ohjelmointitehtävien kirjanpito löytyy TMC-järjestelmästä, johon voi kirjautua osoitteessa https://tmc.mooc.fi/org/hy. Muiden tehtävien kirjanpito on osana tätä materiaalia. Yhdistämme kurssin edetessä kaikkien tehtävien kirjanpidon materiaaliin.

Ohjelmoinnin jatkokurssi

Ohjelmoinnin jatkokurssin pisteytys poikkeaa hieman ohjelmoinnin perusteista. Ohjelmoinnin jatkokurssin (materiaalin osat 8-14) arvosana muodostuu seuraavasti.

Arvosana 1 Vähintään 75 % viiden osan tehtäväpisteistä ja vähintään 50 % koepisteistä.
Arvosana 2 Vähintään 75 % viiden osan tehtäväpisteistä ja vähintään 60 % koepisteistä.
Arvosana 3 Vähintään 75 % viiden osan tehtäväpisteistä ja vähintään 70 % koepisteistä.
Arvosana 4 Vähintään 90 % kolmen osan tehtäväpisteistä, vähintään 75 % viiden osan tehtäväpisteistä ja vähintään 80 % koepisteistä.
Arvosana 5 Vähintään 90 % kolmen osan tehtäväpisteistä, vähintään 75 % viiden osan tehtäväpisteistä ja vähintään 90 % koepisteistä.

Tehtäväpisteet lasketaan ohjelmointitehtävien perusteella. Ohjelmointitehtävien kirjanpito löytyy TMC-järjestelmästä, johon voi kirjautua osoitteessa https://tmc.mooc.fi/org/hy. Muiden tehtävien kirjanpito on osana tätä materiaalia. Materiaalissa olevat tehtävien luomistehtävät sekä kyselyt lasketaan bonuksena tehtäväpisteisiin (yhteensä max 5% / osa); näissä painotus työläämmissä tehtävissä eli luomistehtävissä.

Kurssien kokeet

Kurssien kokeet järjestetään ensisijaisesti verkkotenttinä, mikäli osallistuja tekee tehtäviä tenttiin osallistumiseen vaadittavan määrän. Muulloin tentti tulee suorittaa erilliskokeella, johon saa osallistua vaikkei ole tehnyt kurssiin kuuluvia tehtäviä. Erilliskokeet tehdään Examinariumissa

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. Kurssilla käytettyä teknologiaa tutkii ja kehittää Helsingin yliopiston Agile Education Research -tutkimusryhmä.

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