T-106.1210 Ohjelmoinnin peruskurssi, osa 1

Oppimistavoitteet

Kurssilla perehdytään oliopohjaiseen ohjelmointiin käyttäen Python-ohjelmointikieltä. Kurssin käytyäsi toivottavasti:

  1. Et ole sitä mieltä, että tietokoneohjelmointi on ihan typerää hommaa.
  2. Osaat ohjelmoinnin perusteita.

Tarkoitus olisi, että kurssin lopuksi opiskelijat osaavat kirjoittaa pieniä omia ohjelmia sekä ymmärtävät ja osaavat muokata muiden kirjoittamia ohjelmia. Kurssin käytyäsi sinulla tulisi olla riittävä ymmärrys ohjelmoinnin peruskäsitteistä, jotta pystyt laajentamaan ohjelmointitietojaan ja -taitojaan jatkokurssien tai omatoimisen opiskelun avulla. Suoritettuna hyvin tiedoin (vähintään arvosanalla kolme) kurssi tarjoaa pohjan ohjelmoinnin jatkokursseille (esim. T-106.1215).

Oma tavoitetaso

Kurssilla on mukana paljon erilaisia opiskelijoita. Toiset haluavat oppia enemmän, toisille riittää kurssin vähimmäistavoitteiden aavuttaminen. Kukin opiskelija voi asettaa oman tavoitetasonsa oman motivaationsa ja resurssiensa mukaisesti. Kurssilla voi valita harjoituksia tehtävikseen oman tavoitetason mukaan (ks. tehtäväsivu). Alla olevaa jaottelua voi käyttää apuna omien tavoitteiden asettelussa. Kysy itseltäsi: Haluatko vain päästä kurssista minimisuorituksella läpi? Haluatko oppia kaiken, mitä kurssilla on tarjota? Jotain siltä väliltä? Entä aiotko käydä ohjelmointiin liittyvillä jatkokursseilla? Tavoitteet voivat toki myös elää kurssin kuluessa.

Oma tavoitetaso vaikuttaa myös arvosanaan. Kurssin arvosteluperiaatteet on pyritty laatimaan siten, että arvosana 1 kertoo vähimmäistavoitteiden saavuttamisesta, arvosana 3 vastaa jotakuinkin jatkokursseille riittävää vähimmäisosaamistasoa ja arvosana 5 erinomaisesta osaamisesta.

Miten hyödynnän tätä sivua?

Kaikkia kurssin tavoitteita ei voi ymmärtää vielä kurssin alussa, koska ohjelmointiin liittyvät käsitteet ovat vielä vieraita. Vaikka tätä sivua kannattaakin silmäillä jo kurssin alussa, niin on hyvä myös palata alla lueteltujen oppimistavoitteiden äärelle kunhan käsitteet alkavat hieman selvitä.

Vähimmäistavoitteet

Nämä perusasiat on jokaisen kurssin käyneen opiskelijan osattava. Näiden asioiden osaamista edellytetään, jotta voi päästä kurssista läpi.

Ymmärrän tietokoneohjelmoinnin ja olio-ohjelmointiparadigman keskeisen käsitteistön (esim. ohjelmakoodi, muuttuja, luokka, olio, metodi, lauseke). Osaan keskustella näistä asioista alan terminologiaa käyttäen. Kun minulle annetaan ohjelmointiin liittyvää oppi- tai muuta materiaalia, kykenen lukemaan sitä ja pystyn oppimaan lisää sen perusteella. Osaan etsiä itsenäisesti lisätietoa ohjelmoinnista esimerkiksi Internetistä.

Ohjelmakoodin tuottamiseen liittyvät työvaiheet (esim. spesifikaation lukeminen, koodin kirjoittaminen, testaus) ovat minulle tuttuja. Osaan myös käyttää ohjelmoijan aputyökaluja (esim. sovelluskehitintä) tällaisten työtehtävien suorittamiseen.

Osaan lukea Python-kielellä kirjoitettuja ohjelmia ja tehdä päätelmiä niiden toiminnasta (kun ohjelmat ovat kokoluokkaa satoja koodirivejä, koostuvat useista yhteen toimivista luokista, sisältävät vain alkeellisia algoritmeja).

Osaan testata Python-luokan toimintaa luomalla siitä ilmentymiä ja koekäyttämällä sen metodeita.

Osaan toteuttaa luokkia Python-ohjelmointikielellä, kun annettu spesifikaatio määrittelee toteutettavien luokkien julkiset rajapinnat. Toisin sanoen: osaan toteuttaa määritellyn luokan ilmentymämuuttujat ja metodien algoritmit. Osaan sekä kirjoittaa luokkia "tyhjästä" että muokata valmiina annettua ohjelmakokonaisuutta siten että se täyttää spesifikaation.

Ymmärrän mm. seuraavia peruskäsitteitä ja -tekniikoita ja osaan käyttää niitä ohjelmaa kirjoittaessani: luokat, oliot, metodit, lausekkeet, operaattorit, tietotyypit, if-lauseet, silmukat, parametrit ja palautusarvot, alkiokokoelmat (ainakin listat), jne.

Tiedän mitä ovat luokkakirjastot (esim. Python Standrd Library). Osaan lukea luokkakirjastojen dokumentaatiota ja sen perusteella käyttää kirjastojen sisältämiä luokkia omissa ohjelmissani.

Ymmärrän, että hyvä ohjelmointityyli on tärkeää. Osaan muotoilla ohjelmakoodin siten, että se on ihmislukijalle ymmärrettävää ja selkeää (esim. järkevät sisennykset, muuttujien nimet).

"Jatkokursseille riittävät tavoitteet"

Pelkät vähimmäistavoitteet ovat tuskin riittävät ohjelmoinnista enemmän kiinnostuneille ja sellaisille opiskelijoille, jotka aikovat jatkaa ohjelmoinnin opiskelua myöhemmillä kursseilla. Esimerkiksi ohjelmistotekniikan laboratorion tarjoamilla jatkokursseilla Tietorakenteet ja algoritmit ja Ohjelmoinnin peruskurssi, osa 2 edellytetään esitietoina tämän alkeiskurssimme vähimmäistavoitteita laajempaa osaamista. Ohjelmoinnin parissa jatkaville ainakin seuraavat oppimistavoitteet ovat keskeisiä.

Näiden asioiden osaaminen vastaa suurin piirtein kurssiarvosanaa kolme.

Ymmärrän ainakin auttavasti, miten tietokone toimii suorittaessaan ohjelman. Tiedän, mitä ovat kääntäjä, tavukoodi, pino, keko, tulkki, jne. Tiedän, miten kutsupinoa käytetään ohjelman tilan säilyttämiseen tietokoneen muistissa.

Pystyn hahmottamaan, lukemaan ja muokkaamaan myös hieman isompia ohjelmakokonaisuuksia (kokoluokkaa reilut tuhat riviä tai noin kymmenen luokkaa) ja hieman monimutkaisempia algoritmeja.

Ymmärrän mitä on perintä. Osaan käyttää perintää tehdäkseni yleistyksiä toteutukseltaan erilaisista luokista, annetun spesifikaation mukaisesti.

Pystyn käyttämään tiedostoja ohjelmissani (sekä lukemaan tiedostosta että kirjoittamaan sinne)

Minulla on ainakin auttava käsitys siitä, että ohjelmakoodin laadun määrittävät muutkin seikat kuin sen toimivuus. Tiedän esimerkiksi, että ohjelmoijan tekemät ratkaisut vaikuttavat ohjelman muokattavuuteen ja tehokkuuteen, ja olen nähnyt tästä esimerkkejä. Tiedän mitä on uudelleenrakentaminen. (En silti välttämättä itse osaa vielä laatia ohjelmista erityisen muokattavia tai tehokkaita.)

Osaan käyttää debuggeria virheiden etsimiseen ohjelmista.

Ymmärrän rekursion käsitteen ja olen nähnyt esimerkkejä rekursiivisista metoditoteutuksista.

Tiedän, mikä on graafinen käyttöliittymä. Minulla on ainakin auttava käsitys siitä, miten graafinen käyttöliittymä toimii yhteen muun ohjelman kanssa. (En silti välttämättä itse osaa laatia graafista käyttöliittymää.)

Tunnen useita erilaisia tapoja varastoida lukuisia data-alkioita (listat, taulukot, hakemistorakenteet). Osaan yksinkertaisissa tapauksissa valita, mikä tapa on tiettyyn ohjelmaan sopivin.

"Kaikki mitä kurssilla käsitellään"

Kurssilla käsitellään myös sellaisia aiheita ja opitaan sellaisia taitoja, jotka eivät ole aivan välttämättömiä kussin vähimmäistavoitteiden saavuttamiseksi eivätkä jatkokursseilla selviämiseksi, mutta jotka kuitenkin liittyvät oleellisesti ohjelmoinnin alkeisiin. Myös näiden asioiden sisällyttäminen omiin oppimistavoitteisiin on erittäin suositeltavaa ja hyödyllistä, mutta ei pakollista.

Olen kokeillut suunnitella itse pienehköjä ohjelmia tai ohjelmien osia annettujen toiminnallisten vaatimusten perusteella. Ts. olen suunnitellut ohjelmia ilman, että minulle on ollut tarjolla spesifikaatiota, joka määrittää ennalta ohjelman rakenteen (luokat ja metodit). Olen toteuttanut ohjelmia tai ohjelman osia oman suunnittelutyöni perusteella.

Ymmärrän Python-tulkin toimintaan liittyvät peruskäsitteet ja periaatteet.

Osaan kirjoittaa yksinkertaisen graafisen käyttöliittymän apukirjastoa hyödyntäen.

Osaan suunnitella ja kirjoittaa yksinkertaisen rekursiivisen metoditoteutuksen.

Minulla on yleiskuva siitä, millaisia ohjelmointiparadigmoja on olemassa ja miten ohjelmointikielet ovat kehittyneet.

Mainittakoon vielä, että mm. seuraavia aiheita ei käsitellä tällä peruskurssilla, vaan vasta ohjelmoinnin peruskurssin toisella osalla: