Ero sivun ”Kurssikuvauksia” versioiden välillä

Fuksiwikistä
Ljleppan (keskustelu | muokkaukset)
pEi muokkausyhteenvetoa
Ljleppan (keskustelu | muokkaukset)
Päivitystä uuteen tutkintorakenteeseen
Rivi 1: Rivi 1:
[[Category:Vaatii_päivityksen]]
'''Huomaa että itseopiskeluversioita ei välttämättä järjestetä joka vuosi!''' Tarkista tilanne [https://www.cs.helsinki.fi/courses kurssitarjonnasta]
== Perusopinnot 25op ==
== Perusopinnot 25op ==


'''Perusopintoja on mahdollista suorittaa myös avoimessa yliopistossa.
'''Perusopintoja on mahdollista suorittaa myös avoimessa yliopistossa.


=== Johdatus tietojenkäsittelytieteeseen (5 op) ja Englanti (4 op) ===
=== Johdatus tietojenkäsittelytieteeseen (5 op) ja Englanti (4 op) ===
* Tunnetaan myös nimellä JTKT
* Tunnetaan myös nimellä JTKT
* 1. ja 2. periodissa
* I-II periodissa
 
* III - IV periodissa (itseopiskelu/verkkokurssi)
Kurssin vastuuhenkilö vaihtuu syksyllä 2016 ja kurssi on hyvin erilainen kuin aiemmin. Tämä kannattaa pitää mielessä kun kuuntelee vanhempien opiskelijoiden mielipiteitä JTKT:sta.


Kurssi on luonteeltaan yleiskatsaus tietojenkäsittelytieteeseen, sisältäen paljon asiaa laidasta laitaan. Kurssilla esitellään myös laitoksen tutkimustoimintaa liittyen kuhunkin osa-alueeseen. Kurssin suoritustapa poikkeaa lähes kaikista muista tietojenkäsittelytieteen kursseista, sillä kurssi suoritetaan pääasiassa tekemällä esseitä joko suomeksi tai englanniksi pienryhmissä. Laskaritilaisuuksissa ryhmät alustavat aiheita ja opponoivat vuorollaan.
Kurssi on luonteeltaan yleiskatsaus tietojenkäsittelytieteeseen, sisältäen paljon asiaa laidasta laitaan. Kurssilla esitellään myös laitoksen tutkimustoimintaa liittyen kuhunkin osa-alueeseen. Kurssin suoritustapa poikkeaa lähes kaikista muista tietojenkäsittelytieteen kursseista, sillä kurssi suoritetaan pääasiassa tekemällä esseitä joko suomeksi tai englanniksi pienryhmissä. Laskaritilaisuuksissa ryhmät alustavat aiheita ja opponoivat vuorollaan.
Rivi 21: Rivi 15:


=== Ohjelmoinnin perusteet (5 op) ===
=== Ohjelmoinnin perusteet (5 op) ===
* Tunnetaan myös nimellä OhPe
* Tunnetaan myös nimellä OhPe
* 1. periodissa
* I periodissa
* 3. periodissa (itseopiskelu)
* III periodissa (luennoton)


Kurssilla opetetaan fukseille, mitä ovat algoritmit, muuttujat, lauseet, lausekkeet, ohjausrakenteet ja erityisesti oliot. Heti alusta alkaen tehdään omia ohjelmia koneella. Kurssi on tarkoitettu ensisijaisesti niille, joilla ei ole olio-ohjelmointitaustaa, mutta osaavienkin ohjelmoijien on syytä vilkaista kurssimateriaaliin yhteisen kielen omaksumiseksi ja mennä sitten heti tenttiin. Toisinaan kun käy niinkin, että moni aiemmin ohjelmoinut luulee osaavansa, mutta saakin tentissä kuvannoillisesti lapiosta naamaan.
Kurssilla opetetaan fukseille mitä ovat algoritmit, muuttujat, lauseet, lausekkeet, ohjausrakenteet ja erityisesti oliot. Heti alusta alkaen tehdään omia ohjelmia koneella. Kurssi on tarkoitettu ensisijaisesti niille, joilla ei ole olio-ohjelmointitaustaa, mutta osaavienkin ohjelmoijien on syytä vilkaista kurssimateriaaliin yhteisen kielen omaksumiseksi ja mennä sitten heti tenttiin. Toisinaan kun käy niinkin, että moni aiemmin ohjelmoinut luulee osaavansa, mutta saakin tentissä kuvannoillisesti lapiosta naamaan. Kurssi on hyvin työpainotteinen ja tehtävien tekeminen korreloi tilastollisestikin suoraan läpipääsyn kanssa. Opetuskielenä on (edelleen) Java.
 
Kurssiin sisältyy kaksi koetta, konekoe ja paperikoe. Konekoe tehdään omalla koneella ja ajankohdan voit valita itse. Monelle tulee järkytyksenä, että ohjelmointikurssien tenteissä paperikoodataan. Tentissä kannattaa olla varuillaan, ettei aikaa tuhlaannu koodin kumittamiseen tai puhtaaksikirjoittamiseen. Tämän takia on tärkeää kehittää vahva rutiini yksinkertaisten ohjelmien kirjoittamiseen jo kurssin aikana. Kurssi on hyvin työpainotteinen ja tehtävien tekeminen korreloi tilastollisestikin suoraan läpipääsyn kanssa. Opetuskielenä on (edelleen) Java.


=== Ohjelmoinnin jatkokurssi (5 op) ===
=== Ohjelmoinnin jatkokurssi (5 op) ===
* Tunnetaan myös nimellä OhJa
* Tunnetaan myös nimellä OhJa
* 2. periodissa  
* II periodissa  
* 4. periodissa (itseopiskelu)
* IV periodissa (luennoton)


Kun ohjelmoinnin perusteet ovat hallussa, syvennytään Javaan, sen luokkiin ja olioihin tarkemmin. Kurssilla on perinteisesti työläät laskarit, opittavaa asiaakin on paljon ja harva fuksi sisäistää aivan kaiken kurssilla. Monet pitävät Ohjelmoinnin jatkokurssia kuitenkin kevyempänä kuin peruskurssia. Jos ohjelmoinnin jatkokurssilla joutuu opettelemaan vielä ohjelmointirutiinia, niin on syytä ottaa itseään niskasta kiinni.
Kun ohjelmoinnin perusteet ovat hallussa, syvennytään Javaan, sen luokkiin ja olioihin tarkemmin. Kurssilla on perinteisesti työläät laskarit, opittavaa asiaakin on paljon ja harva fuksi sisäistää aivan kaiken kurssilla. Monet pitävät Ohjelmoinnin jatkokurssia kuitenkin kevyempänä kuin peruskurssia. Jos ohjelmoinnin jatkokurssilla joutuu opettelemaan vielä ohjelmointirutiinia, niin on syytä ottaa itseään niskasta kiinni.
Rivi 40: Rivi 30:
Kurssilla ei käsitellä mitään tietyttyjä Javan kirjastopakkauksia, vaan enemmänkin kielen välineiden (luokat, oliot, metodit, perintä) hyödyntämistä ohjelmissa. Suurimmat ongelmat tulevat käsitteiden ymmärtämisestä, mutta toisin kuin matematiikassa, täällä asioille löytyy heti järkevä käyttötarkoitus. Kuten Ohjelmoinnin perusteetkin, tämäkin kurssi on erittäin käytännönläheinen - koko ajan ohjelmoidaan.
Kurssilla ei käsitellä mitään tietyttyjä Javan kirjastopakkauksia, vaan enemmänkin kielen välineiden (luokat, oliot, metodit, perintä) hyödyntämistä ohjelmissa. Suurimmat ongelmat tulevat käsitteiden ymmärtämisestä, mutta toisin kuin matematiikassa, täällä asioille löytyy heti järkevä käyttötarkoitus. Kuten Ohjelmoinnin perusteetkin, tämäkin kurssi on erittäin käytännönläheinen - koko ajan ohjelmoidaan.


OhPen tapaan tähänkin kurssiin sisältyy konekoe ja paperikoe.
=== Tietokoneen toiminta (5 op) ===
* Tunnetaan myös nimellä TiTo
* II periodissa
* IV periodissa (ohjattu itseopiskelu)


=== Ohjelmistotekniikan menetelmät (5 op) ===
Kurssilla opitaan perusteet siitä, mitä tietokoneen sisällä oikeasti tapahtuu, eli tutustutaan mm. prosessorin toimintoihin, yhden ohjelman suoritukseen koneessa ja opetellaan hiukan symbolista konekieltä. Tällä konekielellä tosin ei ole kovinkaan paljon tekemistä "oikeiden assemblerien" (Masm, Nasm, Fasm) kanssa vaan kurssilla käytetään laitoksen omaan opetuskäyttöön väsättyä TTK91-assemblyä ja Titokone-simulaattoria. Pääpaino on kuitenkin enemmän teorian ymmärtämisessä. Kurssin sisältö jakaa opiskelijoita ehkä selvimmin kahteen leiriin: niihin jotka hehkuttavat ja niihin jotka vihaavat yli kaiken.


* Tunnetaan myös niemellä OTM
Laskuharjoituksiin tulee varata kohtuullisesti aikaa, sillä vastaukset harvemmin löytyvät suoraan lähdekirjallisuudesta. Ne on itse löydettävä soveltamalla opittua asiaa. TTK91-symbolinen konekieli vaikuttanee hieman kankealta, mutta ajaa tehtävänsä. Moni on ihmetellyt, miksei opetuskielenä käytetä jotain oikeaa assemblyä. Vastaus on melko yksinkertainen: Kurssilla on tarkoitus oppia tietokoneen toimintaa eikä nykyisten assemblerien ominaisuuksia makroineen ja muine asioineen, joilla toimintaan liittyvät yksityiskohdat voisi sivuuttaa. Tietokoneen toimintaankin kurssi on loppujen lopuksi melko pintaraapaisu, josta voi jatkaa syventävään Tietokoneen Rakenne-kurssiin.
* Ennen nimellä Ohjemistojen mallintaminen (OhMa)
* 2. periodissa
* 4. periodissa (itseopiskelu)


Kurssilla annetaan perustiedot ohjelmistojen mallintamisessa käytetyistä työkaluista. Kurssilla piirretään ja luetaan kaavioita jotka kuvaavat ohjelman korkean tason rakennetta. Lisäksi opetukseen sisältyy hitunen testausta ja versionhallintaa, jotka ovat tärkeitä ohjelmointityön apuvälineitä. Tämän kurssin asioista on hyötyä Ohjelmoinnin harjoitustyön dokumentoinnissa (ja myöhemmin Tietokantasovelluksen dokumentoinnissa). Kaavioiden piirtämiseen kannattaa suhtautua ehdottomalla vakavuudella: Niitä piirrellään kaikkialla missä ohjelmistoja toteutetaan.
Kurssi on siitä erikoinen, että kurssin loppukokeen voi korvata neljällä kurssin aikana tehtävällä minikokeella.


=== Tietokantojen perusteet (5 op) ===
=== Tietokantojen perusteet (5 op) ===
* Tunnetaan myös nimellä Tikape
* Tunnetaan myös nimellä Tikape
* 1. periodissa (itseopiskelu)
* I periodissa (luennoton)
* 3. periodissa
* III periodissa


Kurssin vetäjä vaihtui ja kurssi uudistettiin syksyllä 2015. Kevään 2016 versioon poistettiin ohjelmointia sisältäneet yksilölliset harjoitustehtävät ja lisättiin ohjelmointia sisältävä ryhmätyö.
Tietokantojen perusteet -kurssi opettaa asioita relaatiokannoista ja SQL-kyselykielestä. Laskaritehtävät sisältävät paljon SQL-kyselyitä ja tietokantojen suunnittelua. Laskaritilaisuuksien läsnäolosta saa kurssipisteitä joten paikallaolo on suositeltavaa. Laskaritehtäviä on kahta eri lajia, etukäteen ja paikanpäällä tehtävät tehtävät. Ryhmätyössä sovelletaan opittuja asioita käytännössä. NoSQL-tietokantoja käsitellään pinnallisesti.
 
Tietokantojen perusteet -kurssi opettaa asioita relaatiokannoista ja SQL-kyselykielestä. Laskaritehtävät sisältävät paljon SQL-kyselyitä ja tietokantojen suunnittelua. Laskaritilaisuuksien läsnäolosta saa kurssipisteitä joten paikallaolo on suositeltavaa. Laskaritehtäviä on kahta eri lajia, etukäteen ja paikanpäällä tehtävät tehtävät. Ryhmätyössä sovelletaan opittuja asioita käytännössä. Dokumenttitietokantoja ei käsitellä.
 
Ohjelmistotekniikan menetelmät -kurssin suorituksesta on apua kaavioiden piirtämisessä, mutta pelkät OhPe/OhJa:n tiedot riittävät. Kurssi sopiikin hyvin mooc-fuksin ensimmäiseen periodiin.


== Pakolliset Aineopinnot ==
== Pakolliset Aineopinnot ==


=== Tietoliikenteen perusteet (5 op) ===
=== Tietorakenteet ja algoritmit (10 op) ===
 
* Tunnetaan myös nimellä Tilpe
* 2. periodissa
 
Kurssilla paneudutaan internetin peruskäsitteistöön ja -tekniikoihin. Kurssi etenee opettelemalla TCP/IP-pinoa taso tasolta. Tutuksi tulee siis pääpiirteittäin kaikki WWW-selaimen sielunelämästä aina verkkokortin bittitasolle asti. Kurssi antaa hyvät perustiedot tietoliikenteestä, jotka ovat tarpeen kaikkien eri linjojen opiskelijoille.
 
Kurssin sisältö on huomattavan laaja ja yksityiskohtainen opintopistemäärään nähden. Opiskelu perustuu paljolti TCP/IP-pinon kerrosten ja mekanismien toiminnan ulkoa opettelemiseen (esim. TCP-ruuhkanhallintamekanismit). Kokeessa ongelmaksi saattaa koitua hahmottaa, millä tasolla, ja kuinka yleinen vastaus kysymykseen halutaan (kokeessa saatetaan esimerkiksi kysyä, mitä tapahtuu kun opiskelija klikkaa linkkiä selaimellaan). Mikäli kurssilla vastaantuleva lyhenteiden ja käsitteistön määrä alkaa hirvittää, kurssilla käytettävä kurssikirja on mitä mainion apu pelonlievitykseen. Varoitettakoon, että asian ja detaljien suuresta määrästä johtuen kurssista on melko vaikea saada täyttä arvosanaa.
 
=== Tietorakenteet ja algoritmit (8-10 op) ===
 
* Tunnetaan myös nimellä TiRa
* Tunnetaan myös nimellä TiRa
* 1. ja 2. periodissa (itseopiskelu)
* I-II periodeissa (itseopiskelu, ei joka vuosi)
* 3. ja 4. periodissa
* III-IV periodeissa


Tietorakenteet ja algoritmit on mielenkiintoinen ja hyödyllinen kurssi sekä algoritmeista että ohjelmointitouhusta kiinnostuineille (yleensä nämä leirit omaavat hyvin poikkeavat mielipiteet perus- ja aineopintojen kursseista). Käytännön ohjelmointiprojekteissa tulee jatkuvasti vastaan tilanteita, joissa pitäisi käsitellä suuria tietomääriä: lisätä, poistaa, etsiä ja järjestellä tietoa. Tällä kurssilla opetetaan lukuisia toinen toistaan näppärämpiä keinoja hallita tietoalkiota. Oikeastaan vasta kurssin asiat hallittuaan voi sanoa oikeasti osaavansa koodata. Tietorakenteet ja algoritmit on myös ensimmäisiä peruskursseja, joilla kurkistetaan tietojenkäsittelyn teoreettisempaan puoleen (algoritmit ja niiden analysointi).
Tietorakenteet ja algoritmit on mielenkiintoinen ja hyödyllinen kurssi sekä algoritmeista että ohjelmointitouhusta kiinnostuineille (yleensä nämä leirit omaavat hyvin poikkeavat mielipiteet perus- ja aineopintojen kursseista). Käytännön ohjelmointiprojekteissa tulee jatkuvasti vastaan tilanteita, joissa pitäisi käsitellä suuria tietomääriä: lisätä, poistaa, etsiä ja järjestellä tietoa. Tällä kurssilla opetetaan lukuisia toinen toistaan näppärämpiä keinoja hallita tietoalkiota. Oikeastaan vasta kurssin asiat hallittuaan voi sanoa oikeasti osaavansa koodata. Tietorakenteet ja algoritmit on myös ensimmäisiä peruskursseja, joilla kurkistetaan tietojenkäsittelyn teoreettisempaan puoleen (algoritmit ja niiden analysointi).


Kuten kurssin nimestä voi aavistellakin, valtaosa opetuksesta keskittyy erilaisten tietorakenteiden käsittelyyn. Opiskelija voi olla varma, että kurssin suoritettuaan ainakin perustietorakenteet (taulukko, pino, lista) ovat syöpyneet lähtemättömästi tajuntaan. Hämäriä muistikuvia saattaa löytyä jopa hieman eksoottisemmistakin tietorakenteista kuten puista, hajautustauluista ja verkoista. Tietorakenteiden lisäksi kurssilla käydään läpi muutamia mielenkiintoisia haku- ja
Kuten kurssin nimestä voi aavistellakin, valtaosa opetuksesta keskittyy erilaisten tietorakenteiden käsittelyyn. Opiskelija voi olla varma, että kurssin suoritettuaan ainakin perustietorakenteet (taulukko, pino, lista) ovat syöpyneet lähtemättömästi tajuntaan. Hämäriä muistikuvia saattaa löytyä jopa hieman eksoottisemmistakin tietorakenteista kuten puista, hajautustauluista ja verkoista. Tietorakenteiden lisäksi kurssilla käydään läpi muutamia mielenkiintoisia haku- ja järjestysalgoritmeja ja tehdään algoritmien tehokkuusanalyysiä.
järjestysalgoritmeja ja tehdään algoritmien tehokkuusanalyysiä.


Kurssin esitietovaatimus on "Johdatus yliopistomatematiikkaan". Matemaattista esitietovaatimusta ei kuitenkaan ole syytä kavahtaa, sillä loppujen lopuksi itse käsiteltävät asiat ovat suhteellisen yksinkertaisia ja liittyvät oikeastaan vain tietorakenteiden formaaliin esittämiseen.  
Kurssin esitietovaatimus on "Johdatus yliopistomatematiikkaan". Matemaattista esitietovaatimusta ei kuitenkaan ole syytä kavahtaa, sillä loppujen lopuksi itse käsiteltävät asiat ovat suhteellisen yksinkertaisia ja liittyvät oikeastaan vain tietorakenteiden formaaliin esittämiseen.  


Laskuharjoitusten tekeminen on tässä kurssissa en-si-si-jai-sen tärkeää! Suurin ongelma opiskelijoille on, että kelkasta putoaa hyvin helposti, jos jättää kerran laskaritehtävät tekemättä. Jos jokin asia menee yli ymmärryksen, kannattaa heti vaatia luennoijaa tai laskarinpitäjää vääntämään asia rautalangasta, ettei tajuntaan jää mustia aukkoja. Toisaalta laitokselta on vaikea löytää henkilöä, joka ei pitäisi kurssia ainakin jossain määrin ehdottoman hyödyllisenä. Syksyllä hyvin menestyneelle opiskelijallekin koe saattaa tulla järkytyksenä - ei sen takia, että se olisi vaikea, mutta kokeesta ei pääse läpi, jos ei osaa soveltaa. Tästä kertoo sekin, että kokeeseen saa ottaa A4-muistilapun mukaan. Perinteisesti läpipääsyprosentti on kuitenkin ollut vähintään syksyn ohjelmointikurssien tasoa. Kurssi tosin on monelle työläs. Tekemällä 80% harjoitustehtävistä saa 9 op ja 95%:lla 10 op.
Laskuharjoitusten tekeminen on tässä kurssissa en-si-si-jai-sen tärkeää! Suurin ongelma opiskelijoille on, että kelkasta putoaa hyvin helposti, jos jättää kerran laskaritehtävät tekemättä. Jos jokin asia menee yli ymmärryksen, kannattaa heti vaatia luennoijaa tai laskarinpitäjää vääntämään asia rautalangasta, ettei tajuntaan jää mustia aukkoja. Toisaalta laitokselta on vaikea löytää henkilöä, joka ei pitäisi kurssia ainakin jossain määrin ehdottoman hyödyllisenä. Syksyllä hyvin menestyneelle opiskelijallekin koe saattaa tulla järkytyksenä - ei sen takia, että se olisi vaikea, mutta kokeesta ei pääse läpi, jos ei osaa soveltaa. Tästä kertoo sekin, että kokeeseen saa ottaa A4-muistilapun mukaan. Perinteisesti läpipääsyprosentti on kuitenkin ollut vähintään syksyn ohjelmointikurssien tasoa. Kurssi tosin on monelle työläs.


Tietorakenteet -kurssi on tietojenkäsittelytieteelle "sitä itseään" ja Helsingin yliopiston TKT-laitoksen erikoisuus ja ylpeys. Monien huippuyliopistojen (MIT) tietojenkäsittelytieteen opetukselle tyypillistä on, että tietorakenteita opetetaan kattavasti heti ensimmäisenä opiskeluvuonna. Muissa Suomen yliopistoissa käpistelijöiden ymmärrys tietorakenteista ja tehokkaista ratkaisuista on matalahkolla tasolla verrattuna laitoksen opiskelijaan. Kuulostaako hypettämiselta? Ota selvää ja varmistu.
Tietorakenteet -kurssi on tietojenkäsittelytieteelle "sitä itseään" ja Helsingin yliopiston TKT-laitoksen erikoisuus ja ylpeys. Monien huippuyliopistojen (MIT) tietojenkäsittelytieteen opetukselle tyypillistä on, että tietorakenteita opetetaan kattavasti heti ensimmäisenä opiskeluvuonna. Muissa Suomen yliopistoissa käpistelijöiden ymmärrys tietorakenteista ja tehokkaista ratkaisuista on matalahkolla tasolla verrattuna laitoksen opiskelijaan. Kuulostaako hypettämiselta? Ota selvää ja varmistu.


=== Käyttöjärjestelmät ===
=== Ohjelmistotekniikan menetelmät (5 op) ===
* Tunnetaan myös niemellä OTM
* IV periodissa


TODO
Kurssilla annetaan perustiedot ohjelmistojen mallintamisessa käytetyistä työkaluista. Kurssilla piirretään ja luetaan kaavioita jotka kuvaavat ohjelman korkean tason rakennetta. Lisäksi opetukseen sisältyy testausta ja versionhallintaa, jotka ovat tärkeitä ohjelmointityön apuvälineitä. Tämän kurssin asioista on hyötyä myöhemmissä harjoitustyöissä. Kaavioiden piirtämiseen kannattaa suhtautua ehdottomalla vakavuudella: Ne muodostavat sen ohjelmoijille yhteisen kielen jolla ohjelmien rakenteesta voidaan kommunikoida koodia yleisemmällä tasolla.
 
=== Laskennan mallit (8 op) ===


=== Laskennan mallit (5 op) ===
* Tunnetaan myös nimellä Lama
* Tunnetaan myös nimellä Lama
* Syksyisin
* I - II periodeissa
 
Kurssi luennoidaan koko lukukauden mittaisena niin, että viikossa on kaksi luento- ja kaksi laskarituntia.


Laskennan mallit on teoreettinen kurssi, jolla opetellaan varsin käytännöllisiä työvälineitä. Kurssilla käsitellään mm. laskennallisia ongelmia, äärellisiä automaatteja, säännöllisiä lausekkeita, kontekstittomia kielioppeja ja Turingin koneita. Kurssi saattaa tuntua hankalalta alun pallo-nuoli-automaattipiirtelyiden jälkeen, mutta kun tottuu lukemaan täsmällistä formaalia esitystapaa, itse asia ei olekaan niin kovin kummallista. Loppujen lopuksi kysymys on vain menetelmistä, joilla voidaan jäsentää ja käsitellä erilaisia määrämuotoisia merkkijonoja, kuten aritmeettisia lausekkeita, päivämääriä ja muuta vastaavaa. Tutuiksi tulevat myös Turingin koneet, jotka ovat äärimmäisen kömpelö tietokoneen teoreettinen malli, mutta samalla myös yksinkertaisin mahdollinen mekaanisen laskentakoneen malli. Loppuhuipennuksena törmätään surullisenkuuluisaan pysähtymisongelmaan. Kun sen merkityksen onnistuu ymmärtämään, ymmärtää jo paljon siitä, mitä ohjelmallisesti on mahdollista tehdä.
Laskennan mallit on teoreettinen kurssi, jolla opetellaan varsin käytännöllisiä työvälineitä. Kurssilla käsitellään mm. laskennallisia ongelmia, äärellisiä automaatteja, säännöllisiä lausekkeita, kontekstittomia kielioppeja ja Turingin koneita. Kurssi saattaa tuntua hankalalta alun pallo-nuoli-automaattipiirtelyiden jälkeen, mutta kun tottuu lukemaan täsmällistä formaalia esitystapaa, itse asia ei olekaan niin kovin kummallista. Loppujen lopuksi kysymys on vain menetelmistä, joilla voidaan jäsentää ja käsitellä erilaisia määrämuotoisia merkkijonoja, kuten aritmeettisia lausekkeita, päivämääriä ja muuta vastaavaa. Tutuiksi tulevat myös Turingin koneet, jotka ovat äärimmäisen kömpelö tietokoneen teoreettinen malli, mutta samalla myös yksinkertaisin mahdollinen mekaanisen laskentakoneen malli. Loppuhuipennuksena törmätään surullisenkuuluisaan pysähtymisongelmaan. Kun sen merkityksen onnistuu ymmärtämään, ymmärtää jo paljon siitä, mitä ohjelmallisesti on mahdollista tehdä.
Rivi 106: Rivi 79:
Älä turhaan masennu, jos pumppauslemma ja kumppanit menevät aluksi kertakaikkiaan yli hilseen, monella muulla on sama tilanne. Eräs vitsi laitoksella onkin, että laitokselta on vaikea löytää opiskelijaa, joka osaisi pumppauslemman selittää ("meni kokeessa oikein, en tiedä mitä tein"). Kurssia käydessä ei välttämättä ole minkäänlaista mielikuvaa, mihin kurssilla käsiteltäviä asioita voisi ikinä tarvita, mutta myöhemmin opinnoissa asioihin voi törmätä esim. Ohjelmointikielten kääntäjien tai rakenteisten dokumenttien käsittelyn yhteydessä, joista voitaneen mainita esimerkiksi XML-dokumenttien muuttaminen esimerkiksi HTML-esitysmuotoon. Kurssi kannattaa kuitenkin käydä läpi ajatuksen kanssa, koska mekaaninen ulkoapänttääminen ei juuri auta. Tietorakenteet -kurssin tapaan asiat pitää oikeasti tajuta, jotta kurssista suoriutuu.
Älä turhaan masennu, jos pumppauslemma ja kumppanit menevät aluksi kertakaikkiaan yli hilseen, monella muulla on sama tilanne. Eräs vitsi laitoksella onkin, että laitokselta on vaikea löytää opiskelijaa, joka osaisi pumppauslemman selittää ("meni kokeessa oikein, en tiedä mitä tein"). Kurssia käydessä ei välttämättä ole minkäänlaista mielikuvaa, mihin kurssilla käsiteltäviä asioita voisi ikinä tarvita, mutta myöhemmin opinnoissa asioihin voi törmätä esim. Ohjelmointikielten kääntäjien tai rakenteisten dokumenttien käsittelyn yhteydessä, joista voitaneen mainita esimerkiksi XML-dokumenttien muuttaminen esimerkiksi HTML-esitysmuotoon. Kurssi kannattaa kuitenkin käydä läpi ajatuksen kanssa, koska mekaaninen ulkoapänttääminen ei juuri auta. Tietorakenteet -kurssin tapaan asiat pitää oikeasti tajuta, jotta kurssista suoriutuu.


=== Tietokoneen toiminta (5 op) ===
=== Ohjelmistotuotanto (6 op) ===
* Tunnetaan myös nimellä Ohtu
* II periodissa


* Tunnetaan myös nimellä TiTo
Kurssilla perehdytään ohjelmistotuotantoon, sen ongelmiin ja ketterään prosessimalliin. Ohjelmistotuotanto-kurssia voidaan pitää Ohjelmistotekniikan mentelmät -kurssin jatkeena. Viikottaisten laskaritehtävien lisäksi toteutaan neljä viikkoa kestävä miniprojekti ryhmätyönä. Projektin ideana on harjoitella ketterää ohjelmistokehitystä Ohjelmistotuotantoprojektia varten.
* 2. periodissa
* 4. periodissa (itseopiskelu)


Kurssilla opitaan perusteet siitä, mitä tietokoneen sisällä oikeasti tapahtuu, eli tutustutaan mm. prosessorin toimintoihin, yhden ohjelman suoritukseen koneessa ja opetellaan hiukan symbolista konekieltä. Tällä konekielellä tosin ei ole kovinkaan paljon tekemistä "oikeiden assemblerien" (Masm, Nasm, Fasm) kanssa vaan kurssilla käytetään laitoksen omaan opetuskäyttöön väsättyä TTK91-assemblyä ja Titokone-simulaattoria. Pääpaino on kuitenkin enemmän teorian ymmärtämisessä. Kurssin sisältö jakaa opiskelijoita ehkä selvimmin kahteen leiriin: niihin jotka hehkuttavat ja niihin jotka vihaavat yli kaiken.
Kurssin hyväksytty suorittaminen on vaatimus Ohjelmistotuotantoprojekti -kurssille.


Laskuharjoituksiin tulee varata kohtuullisesti aikaa, sillä vastaukset harvemmin löytyvät suoraan lähdekirjallisuudesta. Ne on itse löydettävä soveltamalla opittua asiaa. TTK91-symbolinen konekieli vaikuttanee hieman kankealta, mutta ajaa tehtävänsä. Moni on ihmetellyt, miksei opetuskielenä käytetä jotain oikeaa assemblyä. Vastaus on melko yksinkertainen: Kurssilla on tarkoitus oppia tietokoneen toimintaa eikä nykyisten assemblerien ominaisuuksia makroineen ja muine asioineen, joilla toimintaan liittyvät yksityiskohdat voisi sivuuttaa. Tietokoneen toimintaankin kurssi on loppujen lopuksi melko pintaraapaisu, josta voi jatkaa syventävään Tietokoneen Rakenne-kurssiin.
=== Käyttöjärjestelmät (5 op)===
* Tunnetaan myös nimellä Käjä
* III periodissa


Kurssi on siitä erikoinen, että koe on edellisissä toteutuksissa muodostunut neljästä minikokeesta.
Kurssin voi käsittää siltana Tietokoneen toiminta -kurssin ja Ohjelmoinnin perusteet -kurssin välillä. Käsiteltävät asiat sisältävät käyttöjärjestelmien rakenteen ja toimintaperiaatteet, rinnakkaisuuden toteutuksia ja ongelmia, muistinhallintaa ja virtuaalimuistia, prosessorin vuoronantoa jne.


=== Ohjelmistotuotanto (5+1 op) ja Versionhallinta (1 op) ===
Samoin kuin TiTossa, Käjänkin tentin voi suorittaa neljällä minitentillä kurssin aikana.


* Tunnetaan myös nimellä Ohtu
=== Tietoliikenteen perusteet (5 op) ===
* 4. periodissa
* Tunnetaan myös nimellä Tilpe
* IV periodissa


Kurssilla perehdytään ohjelmistotuotantoon, sen ongelmiin ja ketterään prosessimalliin. Ohjelmistotuotanto-kurssia voidaan pitää Ohjelmistotekniikan mentelmät -kurssin jatkeena. Viikottaisten laskaritehtävien lisäksi toteutaan neljä viikkoa kestävä miniprojekti ryhmätyönä. Projektin ideana on harjoitella ketterää ohjelmistokehitystä Ohjelmistotuotantoprojektia varten.
Kurssilla paneudutaan internetin peruskäsitteistöön ja -tekniikoihin. Kurssi etenee opettelemalla TCP/IP-pinoa taso tasolta. Tutuksi tulee siis pääpiirteittäin kaikki WWW-selaimen sielunelämästä aina verkkokortin bittitasolle asti. Kurssi antaa hyvät perustiedot tietoliikenteestä, jotka ovat tarpeen kaikkien eri linjojen opiskelijoille.


Extrapintopisteitä on mahdollista saada tekemällä tehtäviä. Normaaleista laskaritehtävistä voi saada yhden lisäopintopisteen ja tekemällä kaikki versionhallintatehtävät saa yhden opintopisteen kokoisen versionhallinta -kurssin suorituksen.
Kurssin sisältö on huomattavan laaja ja yksityiskohtainen opintopistemäärään nähden. Opiskelu perustuu paljolti TCP/IP-pinon kerrosten ja mekanismien toiminnan ulkoa opettelemiseen (esim. TCP-ruuhkanhallintamekanismit). Kokeessa ongelmaksi saattaa koitua hahmottaa, millä tasolla, ja kuinka yleinen vastaus kysymykseen halutaan (kokeessa saatetaan esimerkiksi kysyä, mitä tapahtuu kun opiskelija klikkaa linkkiä selaimellaan). Mikäli kurssilla vastaantuleva lyhenteiden ja käsitteistön määrä alkaa hirvittää, kurssilla käytettävä kurssikirja on mitä mainion apu pelonlievitykseen. Varoitettakoon, että asian ja detaljien suuresta määrästä johtuen kurssista on melko vaikea saada täyttä arvosanaa.


Kurssin hyväksytty suorittaminen on vaatimus Ohjelmistotuotantoprojekti -kurssille.
=== Ohjelmistotuotantoprojekti (10 op) ===
 
* Tunnetaan myös nimellä Ohtuprojekti
=== Ohjelmistotuotantoprojekti (9+1 op) ===
* I-II periodeissa
* III-IV periodeissa
* Kesän aikana


* Tunnetaan myös nimellä Ohtuprojekti
Kurssin esitietovaatimuksena on suoritettu Ohjelmistotuotanto-kurssi sekä kaksi aineopintojen harjoitustyötä (kts. alla).
* Syksyisin, keväisin, kesäisin


Ohjelmistotuotantoprojektissa harjoitellaan projektin toteuttamista jotakuinkin reaalimaailmaa vastaavin menetelmin. Projekti toteutetaan 5-6 hengen ryhmässä. Projektilla on siis ihkaoikea asiakas (yleensä laitokselta, yliopistolta tai jostain yrityksestä), joka asettaa vaatimukset tuotteelle. Näihin vaatimuksiin ryhmän pitäisi sitten pystyä ohjelmistollaan vastaamaan mahdollisimman hyvin. Projektin aiheeseen ei voi vaikuttaa, mutta haluamastaan ryhmästä voi esittää toiveen. Aihe voi olla periaatteessa mikä tahansa. Ei ole ollenkaan tavatonta, että ensitöikseen joutuu opettelemaan uuden ohjelmointikielen.
Ohjelmistotuotantoprojektissa harjoitellaan projektin toteuttamista jotakuinkin reaalimaailmaa vastaavin menetelmin. Projekti toteutetaan 5-6 hengen ryhmässä. Projektilla on siis ihkaoikea asiakas (yleensä laitokselta, yliopistolta tai jostain yrityksestä), joka asettaa vaatimukset tuotteelle. Näihin vaatimuksiin ryhmän pitäisi sitten pystyä ohjelmistollaan vastaamaan mahdollisimman hyvin. Projektin aiheeseen ei voi vaikuttaa, mutta haluamastaan ryhmästä voi esittää toiveen. Aihe voi olla periaatteessa mikä tahansa. Ei ole ollenkaan tavatonta, että ensitöikseen joutuu opettelemaan uuden ohjelmointikielen.
Rivi 142: Rivi 119:
Kurssista saa eniten irti, jos sopii ryhmän kanssa erilaisten työtapojen ja menetelmien (esim. eri pituiset sprintit) kokeilemisesta, koska oikeilla työpaikoilla tällaisia kokeiluja harvemmin pääsee enää toteuttamaan. Kurssin tärkein opetus lienee, että asiakkaan kaikkiin vaatimuksiin ei missään nimessä ole pakko suostua, ja että tekniset hankaluudet pystytään todennäköisesti ohittamaan onnistuneilla neuvotteluilla.
Kurssista saa eniten irti, jos sopii ryhmän kanssa erilaisten työtapojen ja menetelmien (esim. eri pituiset sprintit) kokeilemisesta, koska oikeilla työpaikoilla tällaisia kokeiluja harvemmin pääsee enää toteuttamaan. Kurssin tärkein opetus lienee, että asiakkaan kaikkiin vaatimuksiin ei missään nimessä ole pakko suostua, ja että tekniset hankaluudet pystytään todennäköisesti ohittamaan onnistuneilla neuvotteluilla.


Kurssista saa kokonaisuudessaan 10 opintopistettä: Itse projektista saa 9 op ja yksi "lisäopintopiste" tulee "työelämään orientoivista opinnoista".
=== Kandidaatintutkielma (6 op) + Äidinkieli (3 op) + Tutkimustiedonhaku (1 op) ===
* Tunnetaan jäärien joukossa nimellä Tieteellinen kirjoittaminen tai Tiki
* I-II periodeissa
* III-IV periodeissa


=== Tieteellisen kirjoittamisen kurssi (10 op) ===
Tämä kolmen kurssin kokonaisuus on käytännössä yksi iso suoritus. Kandidaatintutkielman kirjoittamisen ohessa opetellaan tieteellistä kirjoittamista, tutkimustiedonhakua sekä esiintymistä. Arvostelu koostuu seuraavista osasuorituksista: 2-4 sivun referaatti, 10 sivun aine, 1.5-2 sivun kypsyysnäyte, 15-20min esitelmä ja ~20 sivun tutkielma. Näistä viimeinen on se varsinainen "kandi", joka on samalla ainoa arvosanaan vaikuttava komponentti. Muut suoritukset on pakko tehdä, mutta ne arvostellaan binäärisesti "tehty/ei tehty".


* Tunnetaan myös nimellä Tiki
Optimaalisessa tilanteessa opiskelija kirjoittaa kurssin aikana yhtä tekstiä, jonka eri vaiheet muodostavat tarvittavat kirjalliset komponentit. Monen tulee kuitenkin *pivotattua* jossain vaiheessa, jolloin siihen mennessä kirjoitetusta iso osa pitää heittää roskiin. Tämän välttää parhaiten ottamalla alun aiheenvalinnan tosissaan.
* Sisältää kandidaatin tutkielman
* Syksyisin ja keväisin


Tieteellisen kirjoittamisen kurssi koostuu neljästä kirjallisesta työstä: referaatti, aine, kypsyysnäyte ja varsinainen kandidaatin tutkielma. Kaikki näistä neljästä työstä liittyvät samaan aihepiiriin. Alkujaan oli kaunis ajatus, että referaatin (2-4 sivua) ja aineen (10 sivua) saisi suoraan osaksi tutkielmaa (20 sivua), mutta tämä toteutuu nykyään harvoin. Samasta aihepiiristä huolimatta töiden sisältö ei välttämättä liity suoranaisesti toisiinsa. Tekstiä kurssilla tulee yhteensä tuotettua siis lähemmäs 40 sivua. Käpistelijälle on tunnetusti tekstin tuottaminen ongelma, tieteellisestä kirjoittamisesta nyt puhumattakaan. Kurssissa ei välttämättä pärjää tosin hyväkään kirjoittaja, koska tieteellisten artikkelien kirjoittaminen ottaa hieman eri lähtökohdan kuin esseen, raporttien tai dokumentaation laatiminen. Hermot menevät takuuvarmasti jossain vaiheessa mitättömiltä tuntuvien pikkuasioiden viilaamiseen, joita ohjaaja jaksaa ja jaksaa kaivaa esiin joka kerralla.
Käpistelijälle on tunnetusti tekstin tuottaminen ongelma, tieteellisestä kirjoittamisesta nyt puhumattakaan. Kurssissa ei välttämättä pärjää tosin hyväkään kirjoittaja, koska tieteellisten artikkelien kirjoittaminen ottaa hieman eri lähtökohdan kuin esseen, raporttien tai dokumentaation laatiminen. Hermot menevät takuuvarmasti jossain vaiheessa mitättömiltä tuntuvien pikkuasioiden viilaamiseen, joita ohjaaja jaksaa ja jaksaa kaivaa esiin joka kerralla.


Ryhmät jaetaan sen perusteella, minkä olet ilmoittautumisessa ilmaissut mahdolliseksi maisterilinjaksesi. Ryhmässä on 5-6 henkilöä, ohjaaja sekä valvoja. Valvojalla ei ole juuri muuta virkaa kuin varsinaisen tutkielman tarkastaminen. Ohjaajan kanssa sovitaan viikoittainen tapaamisaika. Ohjauksen laatu vaihtelee, eikä suoria neuvoja välttämättä saa ohjaajalta missään vaiheessa. Tutkielman aihepiiriin kuuluvasta aiheesta pidetään myös esitelmä muulle ryhmälle. Ryhmällä ei ole omien töiden kannalta muuta merkitystä kuin se, että referaatti, aine ja esitelmä todennäköisesti vertaisarvioidaan, tai ainakin mietitään jokaisen työn hyviä ja huonoja puolia. Kurssin arvosanan määrää käytännössä vain tutkielman arvosana. Kurssi sisältää ohessa ns. kypsyysnäytteen, jossa pitää laatia parin sivun mittainen kielellisesti huoliteltu teksti jostain tutkielman aihepiiristä.
Ryhmät jaetaan sen perusteella, minkä olet ilmoittautumisessa ilmaissut mahdolliseksi maisterilinjaksesi. Ryhmässä on 5-6 henkilöä, ohjaaja sekä valvoja. Valvojalla ei ole juuri muuta virkaa kuin varsinaisen tutkielman tarkastaminen. Ohjaajan kanssa sovitaan (yleensä) viikoittainen tapaamisaika. Ohjauksen laatu vaihtelee, eikä suoria neuvoja välttämättä saa ohjaajalta missään vaiheessa.  


Aiheenvalintakäytäntö vaihtelee ohjaajittain. Tutkielman aihepiirin aihe valitaan useimmiten valmiista listasta, mutta joissakin ryhmissä aihetta saa itsekin ehdottaa. Moni on ampunut itseään jalkaan ehdottamalla omaa aihepiiriä, ja on huomannutkin jälkeenpäin, että tutkimustietoa aihealueesta ei joko löydy ymmärrettävässä mudossa tai sitten löytyy aivan liikaa. Ennen oman aiheen ehdottamista kannattaa varmistaa, että aiheesta todellakin löytyy riittävästi "lukukelpoista" tutkimustietoa. Aihepiiri valitaan jo ensimmäisessä tapaamisessa. Kurssiin sisältyy alkupuolella myös kymmenisen luentoa, joilla opetetaan tieteellisen kirjoittamisen tyyliä ja tiedonhaun perusteita.
Esitelmä (15-20min) pidetään oman pienryhmän kesken omasta aiheesta, yleensä aineen pohjalta. Tätäkään ei kannata stressata liikaa, sillä "arvostelu" on ihan oikeastikin tasolla "suoritettu jos jotain mumisee ryhmän edessä".  


== Aineopintojen harjoitustöiden valintakori ==
Kurssi sisältää ohessa myös ns. kypsyysnäytteen, jossa pitää laatia parin sivun mittainen kielellisesti huoliteltu teksti jostain tutkielman aihepiiristä. Tämä vastaa teknisesti toisen kotimaisen kielen kurssia sikäli, että kypsyysnäyte on todistus siitä että opiskelija osaa oman äidinkielensä "virkamiestasolla".
 
Aiheenvalintakäytäntö vaihtelee ohjaajittain. Tutkielman aihepiirin aihe valitaan useimmiten valmiista listasta, mutta joissakin ryhmissä aihetta saa itsekin ehdottaa. Moni on ampunut itseään jalkaan ehdottamalla omaa aihepiiriä, ja on huomannutkin jälkeenpäin, että tutkimustietoa aihealueesta ei joko löydy ymmärrettävässä mudossa tai sitten löytyy aivan liikaa. Ennen oman aiheen ehdottamista kannattaa varmistaa, että aiheesta todellakin löytyy riittävästi "lukukelpoista" tutkimustietoa. Aihepiiri valitaan jo ensimmäisessä tapaamisessa.


=== Ohjelmoinnin harjoitustyö (5 op) ===
Kurssiin sisältyy myös kymmenisen luentoa, joilla opetetaan tieteellisen kirjoittamisen tyyliä ja tiedonhaun perusteita. Näistä ainakin ensimmäisellä on pakollinen läsnäolo.


* Tunnetaan myös nimellä Javalabra
== Aineopintojen valinnaisen osan valintakori ==
* Ryhmiä joka periodissa sekä kesäisin


"Javalabra" laajentaa Ohjelmoinnin jatkokurssin asioita. Ohjelmoinnin jatkokurssin loppupuolen laskarit ovat juuri sitä tärkeää ja olennaista kamaa, jonka joutuu viimeistään täällä opettelemaan, vaikka se kurssilla yleensä skipataankin nopeasti. Näitä ovat mm. tiedostojen käsittely, poikkeukset, rajapintaluokat sekä pakkaukset. Kannattaa siis höristää korviaan jo Ohjelmoinnin jatkokurssilla näitä avainsanoja kuullessaan, vaikka mieli tekisikin jättää parit viimeiset laskarit väliin. API-kuvausten lukutaito on '''erittäin''' hyödyllinen esitieto.
Aineopintoihin tulee sisällyttää vähintään yksi kurssi tästä korista.


Labrassa on myös ohjelmointikursseille uutta ja ihmeellistä asiaa: Javan valmiit työkalut, graafisen käyttöliittymän ohjelmointi (Swing-komponenteilla), ohjelman suunnittelu olioita käyttäen, koodin kommentointi ja testaus, projektin dokumentointi jne. Lisäksi pitää vielä oppia pysymään projektin aikataulussa, ihan ilman äidin apua. Ajankäytön opettelu on jo itsessään aikamoinen työmaa.
=== Johdatus tekoälyyn (5 op) ===
* Tunnetaan myös nimellä JohTek.  
* I periodissa


Kurssilla tehdään oma, kokonainen, pienehkö mutta toimiva ohjelma. Ohjelmasta saa tehdä niin upean kuin osaa, mutta parasta olisi tässä vaiheessa pitää liika into tallessa. Palkkana on kuitenkin vain oppia ja 4 opintopistettä, eikä niitäkään saa, jos megamahtava Hekumometri jokasuuntaisella kutkulaattorilla ei toimi, leviää käsiin ja kaataa kääntäjän kotiovella. Lisäksi ruutia pitää jättää myös ohjelman dokumentaation kirjoittamiseen. Ja tämä kaikki pitäisi saada valmiiksi 6 viikossa! Nopea laskutoimitus osoittaa, että jos otat löysästi labran alkupuoliskon, loppupuolella sinulle rapsahtaa jo lähes 30 viikkotuntia pelkkää labratyötä.
Tämän vielä hieman muotoaan hakevan kurssin tarkoituksena on johdattaa tekoälyn eri osa-alueisiin, tutkimusongelmiin ja alan kulmakiviin. Vaihtuvina teemoina käsitellään niin koneoppimista, robotiikkaa, perinteistä logiikkaa kuin pelitekoälyjäkin. Sillisalaatista pitäisi jäädä käteen jonkinlainen kuva alan valtavasta kirjosta. Kurssilla on tätänykyä vähän ohjelmointitehtäviäkin, mutta pääpaino lienee aiheiden yleisessä esittelyssä. Luvattu on, että jotain pääsee silti itsekin tekemään.
 
Älä turhaan katsele vanhoja kurssisivuja, äläkä varsinkaan osta mitään kirjaa. Hyppää suohon ja löydä sieltä sisäinen intohimosi älykkäitä järjestelmiä kohtaan.


Labraopetus koostuu alun yhteisluennosta, parista ryhmätapaamesista ja viikoittaisista henkilökohtaisista ohjauspalavereista. Alkuluennoilla käydään läpi mm. graafisen käyttöliittymän laatimisen perusteita ja dokumentointia, ryhmätapaamisissa esitellään omaa työtä muille. Huomaa että alkuluennolle osallistuminen on labraan osallistumisen kannalta pakollista. Ohjauspalavereissa raportoidaan ohjaajalle työn edistymisestä ja ihmetellään ohjaajan kanssa vaikeita kohtia. Tapaamisten lisäksi ohjaajilla on päivystysajat, jolloin päivystävältä ohjaajalta saa käydä kysymässä apua. Labraneuvonta toimii yleensä kakkoskerroksen aulassa (tarkat neuvonta-ajankohdat ilmoitetaan kurssilla).
===Tietoturvan perusteet (5 op)===
* Tunnetaan myös nimellä Titu
* II periodissa


Työn alkaessa pääsee yleensä itku. Joudut synkkään metsään vain voiveitsen kanssa. Työsi ohjaajalta, kavereilta ja verkosta saat kyllä apua. Ryhmätapaamisiin, ohjelman suunnitteluun ja dokumentointiin, Javan hienouksien opetteluun sekä varsinaiseen koodaukseen menee joka tapauksessa paljon aikaa. Kalenteriin onkin parasta merkitä jo kurssia aloittaessaan ne 80 tuntia, jotka käytät tämän kurssin suorittamiseen ennen deadlinea. Jos Ohjelmoinnin perusteet ja Ohjelmoinnin jatkokurssi on tullut suoritettua hieman horjuen (alle kolmosen arvosanalla), on syytä suosiolla lisätä parikymmentä tuntia aikatauluun. Jos sinulla on jo ammattillista kokemusta koodauksesta tai dokumentaation kirjoittamisesta, voit pienentää arviota tuntimäärästäsi.
Suoritetaan verkkokurssina, jolla käsitellään kyberturvallisuutta, operatiivista tietoturvaa, turvallisen web-ohjelmiston kehitystä, web-ohjelmistojen tyypillisiä haavoittuvuuksia ja niiden korjaamista sekä vastatoimia.


Suurin haaste useimmalle opiskelijalle on suunnittelu- ja toteutusdokumentin kirjoittaminen (yleensä dokumenttien kirjoittaminen kurssista riippumatta). Toteutusdokumentin kirjoittamista ei missään nimessä tule jättää viimeiseen iltaan. Dokumentointi on taito, jota käpistelijä tarvii kaikkialla. Se on syytä opetella ajoissa ettei tulevissa harjoitustöissä tule itku, Ohjelmistotuotantoprojektissa parku ja työelämässä kenkää.
== Aineopintojen harjoitustöiden valintakori ==


=== Tietorakenteiden harjoitustyö (4-5 op) ===
Tästä korista tulee valita kaksi opintosuoritusta. Näiden pitää olla valmiina ennen Ohjelmistotuotantoprojektia (kts. yllä).


=== Tietorakenteiden harjoitustyö (4 op) ===
* Tunnetaan myös nimellä Tiralabra
* Tunnetaan myös nimellä Tiralabra
* Ryhmiä yleensä joka periodissa ja kesäisin
* I periodissa
* II periodissa
* Kesäisin


Tietorakenteiden harjoitustyö eli Tiralabra on käytännön jatkoa Tietorakenteet-kurssille. Kurssilla pääsee leikkimään tietorakenteilla ihan oikeasti, eli tekemään kokonaisen ohjelman, jossa hyödynnetään joitain tietorakenteita ja algoritmeja. Ohjelma tulee tietenkin myös testata ja dokumentoida, mutta dokumentointivaatimukset ovat minimaaliset aiempiin harjoitustöihin verrattuna. Sallitut ohjelmointikielet riippuvat pitkälti harjoitustyön ohjaajasta, mutta laitoksella opetettavat kielet ovat yleensä käytettävissä.
Tietorakenteiden harjoitustyö eli Tiralabra on käytännön jatkoa Tietorakenteet-kurssille. Kurssilla pääsee leikkimään tietorakenteilla ihan oikeasti, eli tekemään kokonaisen ohjelman, jossa hyödynnetään joitain tietorakenteita ja algoritmeja. Ohjelma tulee tietenkin myös testata ja dokumentoida, mutta dokumentointivaatimukset ovat minimaaliset aiempiin harjoitustöihin verrattuna. Sallitut ohjelmointikielet riippuvat pitkälti harjoitustyön ohjaajasta, mutta laitoksella opetettavat kielet ovat yleensä käytettävissä.
Rivi 186: Rivi 174:
Kurssilta kannattaa ottaa kaikki hyöty irti, koska seuraava paikka, jossa ohjelmointitaitoja koetellaan, on yleensä Ohjelmistotuotantoprojekti ja siellä ohjelmoinnin oletetaan jo sujuvan rutiinilla.
Kurssilta kannattaa ottaa kaikki hyöty irti, koska seuraava paikka, jossa ohjelmointitaitoja koetellaan, on yleensä Ohjelmistotuotantoprojekti ja siellä ohjelmoinnin oletetaan jo sujuvan rutiinilla.


=== Tietokantasovellus (5 op) ===
=== Tietokantasovellus (4 op) ===
* Tunnetaan myös nimellä Tsoha tai Tsohalabra
* III periodissa
* IV periodissa
 
Kurssi on käytännössä pienen SQL-relaatiotietokantaa käyttävän WWW-sovelluksen laatimista (esim. yksinkertainen verkkokauppa). Tämän harjoitustyön keskeinen teema on tietokantojen hallintaan liittyvät asiat sekä myös huolelliseen suunnitteluun keskittyminen. Kurssi on monen webbikoodariksi aikovan mielestä erittäin hyödyllinen ja palkitseva. Jos tunnistit itsesi, kannattaa varoa ettei innostu liikaa ja tee vahingossa muutaman tuhannen rivin harjoitustyötä.
 
Opiskelijasta voi kurssilla kirjoitettavan dokumentaation määrä turhauttavalta ja suuri houkutus onkin tehdä dokumentit vasta viimeisenä iltana. Dokumenttien tarkoitus on kuitenkin opastaa opiskelijaa oikeaan suuntaan suunnittelessaan omaa sovellustaan. Harjoitustyön ohjaajaa saa käyttää surutta apuna sekä ohjelmiston suunnittelun ongelmien että dokumenttien laatimisen kanssa.


* Ryhmiä yleensä joka periodissa sekä kesäisin
Itse toteutuksen tekeminen onkin sitten vähemmän työlästä, jos suunnittelu on kunnolla tehty. WWW-sivustolle tulevan rakennelmansa saa toteuttaa varsin monella tavalla ja tietokannoissakin on valinnan varaa. Suurin osa tekee harjoitustyönsä joko PHP:llä, Javalla, tai Ruby on Railssillä, mutta jos intoa (tai aiempaa osaamista) löytyy jonkin eksoottisemman ympäristön käyttämiseen, niin sekin on usein kelvannut ohjaajalle.


Ohjelmistotekniikan menetelmät ja Tietokantojen perusteet ovat esitietovaatimuksena Tietokantasovellus-harjoitustyölle. Kurssi on käytännössä pienen SQL-relaatiotietokantaa käyttävän WWW-sovelluksen laatimista (esim. yksinkertainen verkkokauppa). Tämän harjoitustyön keskeinen teema on tietokantojen hallintaan liittyvät asiat sekä myös huolelliseen suunnitteluun keskittyminen. Kurssi on monen webbikoodariksi aikovan mielestä erittäin hyödyllinen ja palkitseva. Jos tunnistit itsesi, kannattaa varoa ettei innostu liikaa ja tee vahingossa muutaman tuhannen rivin harjoitustyötä.
===Tietoliikenteen harjoitustyö (4 op)===
* Järjestetään toukokuun intensiivijaksolla, Tietoliikenne-kurssin jälkeen


Opiskelijasta voi kurssilla kirjoitettavan dokumentaation määrä turhauttavalta ja suuri houkutus onkin tehdä dokumentit vasta viimeisenä iltana. Dokumenttien tarkoitus on kuitenkin opastaa opiskelijaa oikeaan suuntaan suunnittelessaan omaa sovellustaan. Harjoitustyön ohjaajaa saa käyttää surutta apuna sekä ohjelmiston suunnittelun ongelmien että dokumenttien laatimisen kanssa.
Osallistuminen edellyttää vähintään arvosanaa 3 Tietoliikenteen perusteet -kurssilta. Huonommallakin arvosanalla saattaa päästä mukaan jos osaa selittää vakuuttavasti.


Itse toteutuksen tekeminen onkin sitten vähemmän työlästä, jos suunnittelu on kunnolla tehty. WWW-sivustolle tulevan rakennelmansa saa toteuttaa varsin monella tavalla ja tietokannoissakin on valinnan varaa. Suurin osa tekee harjoitustyönsä joko PHP:llä, Javalla tai Ruby on Railssillä, mutta jos intoa löytyy jonkin eksoottisemman ympäristön käyttämiseen, niin sekin on usein kelvannut ohjaajalle.
Harjoitustyössä ei lähtökohtaisesti ohjelmoida mitään, vaan enemminkin määritellään jokin tutkimusongelma johon etsitään itse vastaus. Perusratkaisu on analysoida jonkinlaista verkkoliikennettä. Muunkinlaisia projekteja on kuitenkin hyväksytty.


== Aineopintojen valinnaiset kurssit ==
== Aineopintojen valinnaiset kurssit ==
Osaston kurssitarjonta muuttuu valinnaisten kurssien osalta jatkuvasti, tarkista ajantasainen kurssitarjonta esim. Weboodista.


=== C-ohjelmointi (5 op) ===
=== C-ohjelmointi (5 op) ===
* Tunnetaan myös nimellä C
* Tunnetaan myös nimellä C
* 1. periodissa
* 1. periodissa
Rivi 208: Rivi 205:
Muistiosoittimien ja muistinhallinnan kanssa pelaaminen, joka Javassa on automaattista, voi osoittautua hankalaksi omaksua. Myöskään linkitettyjen listojen ohjelmointi, johon perehdytään varsin tarkkaan, ei tule vastaan ohjelmoinnin perus- ja jatkokurssilla. Kurssilla opetetaan nykyään myös puiden ja verkkojen (tietorakenteita nämäkin) käsittelyä, tosin vähemmällä tarkastelulla kuin esim. Tietorakenteet-kurssilla. Tämä kurssi tuo varsin mukavaa vaihtelua ensimmäisen syksyn Java-annostukseen varsinkin, jos olet ohjelmoinut C:llä aikaisemmin.
Muistiosoittimien ja muistinhallinnan kanssa pelaaminen, joka Javassa on automaattista, voi osoittautua hankalaksi omaksua. Myöskään linkitettyjen listojen ohjelmointi, johon perehdytään varsin tarkkaan, ei tule vastaan ohjelmoinnin perus- ja jatkokurssilla. Kurssilla opetetaan nykyään myös puiden ja verkkojen (tietorakenteita nämäkin) käsittelyä, tosin vähemmällä tarkastelulla kuin esim. Tietorakenteet-kurssilla. Tämä kurssi tuo varsin mukavaa vaihtelua ensimmäisen syksyn Java-annostukseen varsinkin, jos olet ohjelmoinut C:llä aikaisemmin.


===Algoritmit ongelmanratkaisussa (10 op)===
===Computer Organization II (5 op)===


=== Johdatus tekoälyyn (5 op) ===
===Full Stack -websovelluskehitys (3-7 op)===


* Tunnetaan myös nimellä JohTek.
===Full Stack -websovelluskehitys harjoitustyö (1-10 op)===
* 3. periodissa
===Introduction to Game Programming (5 op)===


Johdatus tekoälyyn luennoidaan tulevana syksynä vasta neljännen kerran. Tähän mennessä jokainen kerta on ollut sekä sisällöltään että opetusmuodoltaan täysin erilainen kuin aiemmat - eikä ensi syksy tule tekemään poikkeusta. Sen sijaan luennoitsija on vaihtunut ja sisältöä puukotettu rajulla kädellä, joten kurssi toivottavasti on muuttunut antoisammaksi ja enemmän himottavaa otsikkoaan vastaavaksi.
===Introduction to Lambda Calculus (2-5 op)===
===Johdatus funktionaaliseen ohjelmointiin (5 op)===


Kurssin tarkoituksena on johdattaa tekoälyn eri osa-alueisiin, tutkimusongelmiin ja alan kulmakiviin. Vaihtuvina teemoina käsitellään niin koneoppimista, robotiikkaa, perinteistä logiikkaa kuin pelitekoälyjäkin. Sillisalaatista pitäisi jäädä käteen jonkinlainen kuva alan valtavasta kirjosta. Kurssilla on tätänykyä vähän ohjelmointitehtäviäkin, mutta pääpaino lienee aiheiden yleisessä esittelyssä. Luvattu on, että jotain pääsee silti itsekin tekemään.
===Kilpaohjelmointi (2-3 op)===
===Ohjelmointihaasteita I (1-3 op)
===Robottiohjelmoinnin harjoitustyö (4 op)===
===Tietokannan suunnittelu (5 op)===


Älä turhaan katsele vanhoja kurssisivuja, äläkä varsinkaan osta mitään kirjaa. Hyppää suohon ja löydä sieltä sisäinen intohimosi älykkäitä järjestelmiä kohtaan.
===Web-palvelinohjelmointi Java (5 op)===
 
Kurssi on mallilukujärjestyksessä ajoitettu toisen vuoden syksyyn, mutta sopii myös myöhemmin suoritettavaksi tai esimerkiksi jo toisessa oppilaitoksessa opiskelemaan ehtineelle fuksille. Kurssi ollaan tänä vuonna luomassa käytännössä uusiksi, joten jos suoritus vielä puuttuu, nyt on hyvä hetki tarttua härkää sarvista erilliskokeeseen pänttäämisen sijaan. Myös kaikki kurssin aikana annettu palaute opetuksesta ja sisällöstä katsotaan arvokkaana asiana kurssin tulevia iteraatioita ajatellen.
 
=== Tietokannan Suunnittelu (5 op) ===
 
* 1. periodissa
 
=== Human-Computer Interaction (6 op) ===
 
* Tunnetaan myös nimellä HCI
* 1. periodissa
 
=== Algorithms for Bioinformatics (4 op) ===
 
* 1. periodissa
 
=== Computer Organization II (5 op) ===
 
* 1. periodissa
 
Computer Organization I on Tietokoneen Toiminta.
 
=== Introduction to Game Programming (5 op) ===
 
* 2. periodissa
 
=== Linux Fundamentals (2-4 op) ===
 
* 2. periodissa
 
=== Linux-ylläpito (6 op) ===
 
* 3. ja 4. periodissa


== Muut pakolliset opinnot ==
== Muut pakolliset opinnot ==


=== Tietokone työvälineenä (1+3 op) ===
=== Tietokone työvälineenä (1 op) ===


* Tunnetaan myös nimellä Lapiokurssi tai pelkkä Lapio
* Tunnetaan myös nimellä Lapiokurssi tai pelkkä Lapio
* Tiiviskurssi lukuvuoden alussa (pääaineopiskelijat) sekä normaali kurssi 3. periodissa (sivuaineopiskelijat)
* I periodissa


Työvälinekurssi on peruskurssi, jolla opetellaan myöhemmillä kursseilla välttämättömiä käytännön taitoja. Kurssilla opetellaan käyttämään laitoksella käytössä olevia ohjelmistoja ja laitteistoja sekä valitsemaan tehtävään sopiva työkalu. Keskeisimmät Unix/Linux-komennot, HTML-perusteet, tekstieditorien ja tekstinkäsittelyohjelmien käyttö jne. kannattaa oppia, ettei sitten myöhemmin kulu pään raapimiseen enemmän aikaa kuin itse tekemiseen. Kokeneet tietokoneharrastajat voivat kyllä suorittaa kurssin tenttimällä, mutta kurssilla on pakollisia harjoitustöitä, jotka täytyy tehdä, vaikka menisi suoraan kokeeseen. Monelle kokeneellekin tietokoneenkäyttäjälle kurssilla todennäköisesti on uutta asiaa ainakin laitoksen järjestelmistä, joten kurssimateriaali ainakin kannattaa lukea läpi.
Työvälinekurssi on peruskurssi, jolla opetellaan myöhemmillä kursseilla välttämättömiä käytännön taitoja. Kurssilla opetellaan käyttämään laitoksella käytössä olevia ohjelmistoja ja laitteistoja sekä valitsemaan tehtävään sopiva työkalu. Keskeisimmät Unix/Linux-komennot, HTML-perusteet, tekstieditorien ja tekstinkäsittelyohjelmien käyttö jne. kannattaa oppia, ettei sitten myöhemmin kulu pään raapimiseen enemmän aikaa kuin itse tekemiseen. Monelle kokeneellekin tietokoneenkäyttäjälle kurssilla todennäköisesti on uutta asiaa ainakin laitoksen järjestelmistä, joten kurssimateriaali ainakin kannattaa lukea läpi.


Kurssin yhteydessä suoritetaan kaikille pakollinen TVT-ajokortti (3 op). TVT-ajokorttikoe ei oletetusti ole vaikea, mutta sitä ei pääse läpi ilman tietämystä yliopiston järjestelmistä.
===Akateemiset taidot (1-2 op)===
===Opiskelijan digitaidot: orientaatio (2 op)===
 
[[Category:Vaatii_päivityksen]]

Versio 20. huhtikuuta 2018 kello 20.35

Perusopinnot 25op

Perusopintoja on mahdollista suorittaa myös avoimessa yliopistossa.

Johdatus tietojenkäsittelytieteeseen (5 op) ja Englanti (4 op)

  • Tunnetaan myös nimellä JTKT
  • I-II periodissa
  • III - IV periodissa (itseopiskelu/verkkokurssi)

Kurssi on luonteeltaan yleiskatsaus tietojenkäsittelytieteeseen, sisältäen paljon asiaa laidasta laitaan. Kurssilla esitellään myös laitoksen tutkimustoimintaa liittyen kuhunkin osa-alueeseen. Kurssin suoritustapa poikkeaa lähes kaikista muista tietojenkäsittelytieteen kursseista, sillä kurssi suoritetaan pääasiassa tekemällä esseitä joko suomeksi tai englanniksi pienryhmissä. Laskaritilaisuuksissa ryhmät alustavat aiheita ja opponoivat vuorollaan.

Kurssilla on koe, mutta tehtäviin osallistuminen ja läsnäolo ovat välttämättömiä. Kurssin yhteydessä suoritetaan myös pakollinen 4-op-englanti pois alta joten alkuosan esseet ja laskaritilaisuudet ovat englanniksi.

Johdatus tietojenkäsittelytieteeseen -kurssin on tarkoitus antaa jonkinlainen kokonaiskuva opiskeltavasta alasta. Tekstit ovat usein englanniksi myös suomenkielisiä esseitä varten, johtuen alan yleiskielestä. Osa aiheista saattaa olla haastavia, mutta tarkoituksena onkin perehtyä alaan ja sen monimuotoisuuteen, ei oppia kaikesta kaikkea.

Ohjelmoinnin perusteet (5 op)

  • Tunnetaan myös nimellä OhPe
  • I periodissa
  • III periodissa (luennoton)

Kurssilla opetetaan fukseille mitä ovat algoritmit, muuttujat, lauseet, lausekkeet, ohjausrakenteet ja erityisesti oliot. Heti alusta alkaen tehdään omia ohjelmia koneella. Kurssi on tarkoitettu ensisijaisesti niille, joilla ei ole olio-ohjelmointitaustaa, mutta osaavienkin ohjelmoijien on syytä vilkaista kurssimateriaaliin yhteisen kielen omaksumiseksi ja mennä sitten heti tenttiin. Toisinaan kun käy niinkin, että moni aiemmin ohjelmoinut luulee osaavansa, mutta saakin tentissä kuvannoillisesti lapiosta naamaan. Kurssi on hyvin työpainotteinen ja tehtävien tekeminen korreloi tilastollisestikin suoraan läpipääsyn kanssa. Opetuskielenä on (edelleen) Java.

Ohjelmoinnin jatkokurssi (5 op)

  • Tunnetaan myös nimellä OhJa
  • II periodissa
  • IV periodissa (luennoton)

Kun ohjelmoinnin perusteet ovat hallussa, syvennytään Javaan, sen luokkiin ja olioihin tarkemmin. Kurssilla on perinteisesti työläät laskarit, opittavaa asiaakin on paljon ja harva fuksi sisäistää aivan kaiken kurssilla. Monet pitävät Ohjelmoinnin jatkokurssia kuitenkin kevyempänä kuin peruskurssia. Jos ohjelmoinnin jatkokurssilla joutuu opettelemaan vielä ohjelmointirutiinia, niin on syytä ottaa itseään niskasta kiinni.

Kurssilla ei käsitellä mitään tietyttyjä Javan kirjastopakkauksia, vaan enemmänkin kielen välineiden (luokat, oliot, metodit, perintä) hyödyntämistä ohjelmissa. Suurimmat ongelmat tulevat käsitteiden ymmärtämisestä, mutta toisin kuin matematiikassa, täällä asioille löytyy heti järkevä käyttötarkoitus. Kuten Ohjelmoinnin perusteetkin, tämäkin kurssi on erittäin käytännönläheinen - koko ajan ohjelmoidaan.

Tietokoneen toiminta (5 op)

  • Tunnetaan myös nimellä TiTo
  • II periodissa
  • IV periodissa (ohjattu itseopiskelu)

Kurssilla opitaan perusteet siitä, mitä tietokoneen sisällä oikeasti tapahtuu, eli tutustutaan mm. prosessorin toimintoihin, yhden ohjelman suoritukseen koneessa ja opetellaan hiukan symbolista konekieltä. Tällä konekielellä tosin ei ole kovinkaan paljon tekemistä "oikeiden assemblerien" (Masm, Nasm, Fasm) kanssa vaan kurssilla käytetään laitoksen omaan opetuskäyttöön väsättyä TTK91-assemblyä ja Titokone-simulaattoria. Pääpaino on kuitenkin enemmän teorian ymmärtämisessä. Kurssin sisältö jakaa opiskelijoita ehkä selvimmin kahteen leiriin: niihin jotka hehkuttavat ja niihin jotka vihaavat yli kaiken.

Laskuharjoituksiin tulee varata kohtuullisesti aikaa, sillä vastaukset harvemmin löytyvät suoraan lähdekirjallisuudesta. Ne on itse löydettävä soveltamalla opittua asiaa. TTK91-symbolinen konekieli vaikuttanee hieman kankealta, mutta ajaa tehtävänsä. Moni on ihmetellyt, miksei opetuskielenä käytetä jotain oikeaa assemblyä. Vastaus on melko yksinkertainen: Kurssilla on tarkoitus oppia tietokoneen toimintaa eikä nykyisten assemblerien ominaisuuksia makroineen ja muine asioineen, joilla toimintaan liittyvät yksityiskohdat voisi sivuuttaa. Tietokoneen toimintaankin kurssi on loppujen lopuksi melko pintaraapaisu, josta voi jatkaa syventävään Tietokoneen Rakenne-kurssiin.

Kurssi on siitä erikoinen, että kurssin loppukokeen voi korvata neljällä kurssin aikana tehtävällä minikokeella.

Tietokantojen perusteet (5 op)

  • Tunnetaan myös nimellä Tikape
  • I periodissa (luennoton)
  • III periodissa

Tietokantojen perusteet -kurssi opettaa asioita relaatiokannoista ja SQL-kyselykielestä. Laskaritehtävät sisältävät paljon SQL-kyselyitä ja tietokantojen suunnittelua. Laskaritilaisuuksien läsnäolosta saa kurssipisteitä joten paikallaolo on suositeltavaa. Laskaritehtäviä on kahta eri lajia, etukäteen ja paikanpäällä tehtävät tehtävät. Ryhmätyössä sovelletaan opittuja asioita käytännössä. NoSQL-tietokantoja käsitellään pinnallisesti.

Pakolliset Aineopinnot

Tietorakenteet ja algoritmit (10 op)

  • Tunnetaan myös nimellä TiRa
  • I-II periodeissa (itseopiskelu, ei joka vuosi)
  • III-IV periodeissa

Tietorakenteet ja algoritmit on mielenkiintoinen ja hyödyllinen kurssi sekä algoritmeista että ohjelmointitouhusta kiinnostuineille (yleensä nämä leirit omaavat hyvin poikkeavat mielipiteet perus- ja aineopintojen kursseista). Käytännön ohjelmointiprojekteissa tulee jatkuvasti vastaan tilanteita, joissa pitäisi käsitellä suuria tietomääriä: lisätä, poistaa, etsiä ja järjestellä tietoa. Tällä kurssilla opetetaan lukuisia toinen toistaan näppärämpiä keinoja hallita tietoalkiota. Oikeastaan vasta kurssin asiat hallittuaan voi sanoa oikeasti osaavansa koodata. Tietorakenteet ja algoritmit on myös ensimmäisiä peruskursseja, joilla kurkistetaan tietojenkäsittelyn teoreettisempaan puoleen (algoritmit ja niiden analysointi).

Kuten kurssin nimestä voi aavistellakin, valtaosa opetuksesta keskittyy erilaisten tietorakenteiden käsittelyyn. Opiskelija voi olla varma, että kurssin suoritettuaan ainakin perustietorakenteet (taulukko, pino, lista) ovat syöpyneet lähtemättömästi tajuntaan. Hämäriä muistikuvia saattaa löytyä jopa hieman eksoottisemmistakin tietorakenteista kuten puista, hajautustauluista ja verkoista. Tietorakenteiden lisäksi kurssilla käydään läpi muutamia mielenkiintoisia haku- ja järjestysalgoritmeja ja tehdään algoritmien tehokkuusanalyysiä.

Kurssin esitietovaatimus on "Johdatus yliopistomatematiikkaan". Matemaattista esitietovaatimusta ei kuitenkaan ole syytä kavahtaa, sillä loppujen lopuksi itse käsiteltävät asiat ovat suhteellisen yksinkertaisia ja liittyvät oikeastaan vain tietorakenteiden formaaliin esittämiseen.

Laskuharjoitusten tekeminen on tässä kurssissa en-si-si-jai-sen tärkeää! Suurin ongelma opiskelijoille on, että kelkasta putoaa hyvin helposti, jos jättää kerran laskaritehtävät tekemättä. Jos jokin asia menee yli ymmärryksen, kannattaa heti vaatia luennoijaa tai laskarinpitäjää vääntämään asia rautalangasta, ettei tajuntaan jää mustia aukkoja. Toisaalta laitokselta on vaikea löytää henkilöä, joka ei pitäisi kurssia ainakin jossain määrin ehdottoman hyödyllisenä. Syksyllä hyvin menestyneelle opiskelijallekin koe saattaa tulla järkytyksenä - ei sen takia, että se olisi vaikea, mutta kokeesta ei pääse läpi, jos ei osaa soveltaa. Tästä kertoo sekin, että kokeeseen saa ottaa A4-muistilapun mukaan. Perinteisesti läpipääsyprosentti on kuitenkin ollut vähintään syksyn ohjelmointikurssien tasoa. Kurssi tosin on monelle työläs.

Tietorakenteet -kurssi on tietojenkäsittelytieteelle "sitä itseään" ja Helsingin yliopiston TKT-laitoksen erikoisuus ja ylpeys. Monien huippuyliopistojen (MIT) tietojenkäsittelytieteen opetukselle tyypillistä on, että tietorakenteita opetetaan kattavasti heti ensimmäisenä opiskeluvuonna. Muissa Suomen yliopistoissa käpistelijöiden ymmärrys tietorakenteista ja tehokkaista ratkaisuista on matalahkolla tasolla verrattuna laitoksen opiskelijaan. Kuulostaako hypettämiselta? Ota selvää ja varmistu.

Ohjelmistotekniikan menetelmät (5 op)

  • Tunnetaan myös niemellä OTM
  • IV periodissa

Kurssilla annetaan perustiedot ohjelmistojen mallintamisessa käytetyistä työkaluista. Kurssilla piirretään ja luetaan kaavioita jotka kuvaavat ohjelman korkean tason rakennetta. Lisäksi opetukseen sisältyy testausta ja versionhallintaa, jotka ovat tärkeitä ohjelmointityön apuvälineitä. Tämän kurssin asioista on hyötyä myöhemmissä harjoitustyöissä. Kaavioiden piirtämiseen kannattaa suhtautua ehdottomalla vakavuudella: Ne muodostavat sen ohjelmoijille yhteisen kielen jolla ohjelmien rakenteesta voidaan kommunikoida koodia yleisemmällä tasolla.

Laskennan mallit (5 op)

  • Tunnetaan myös nimellä Lama
  • I - II periodeissa

Laskennan mallit on teoreettinen kurssi, jolla opetellaan varsin käytännöllisiä työvälineitä. Kurssilla käsitellään mm. laskennallisia ongelmia, äärellisiä automaatteja, säännöllisiä lausekkeita, kontekstittomia kielioppeja ja Turingin koneita. Kurssi saattaa tuntua hankalalta alun pallo-nuoli-automaattipiirtelyiden jälkeen, mutta kun tottuu lukemaan täsmällistä formaalia esitystapaa, itse asia ei olekaan niin kovin kummallista. Loppujen lopuksi kysymys on vain menetelmistä, joilla voidaan jäsentää ja käsitellä erilaisia määrämuotoisia merkkijonoja, kuten aritmeettisia lausekkeita, päivämääriä ja muuta vastaavaa. Tutuiksi tulevat myös Turingin koneet, jotka ovat äärimmäisen kömpelö tietokoneen teoreettinen malli, mutta samalla myös yksinkertaisin mahdollinen mekaanisen laskentakoneen malli. Loppuhuipennuksena törmätään surullisenkuuluisaan pysähtymisongelmaan. Kun sen merkityksen onnistuu ymmärtämään, ymmärtää jo paljon siitä, mitä ohjelmallisesti on mahdollista tehdä.

Älä turhaan masennu, jos pumppauslemma ja kumppanit menevät aluksi kertakaikkiaan yli hilseen, monella muulla on sama tilanne. Eräs vitsi laitoksella onkin, että laitokselta on vaikea löytää opiskelijaa, joka osaisi pumppauslemman selittää ("meni kokeessa oikein, en tiedä mitä tein"). Kurssia käydessä ei välttämättä ole minkäänlaista mielikuvaa, mihin kurssilla käsiteltäviä asioita voisi ikinä tarvita, mutta myöhemmin opinnoissa asioihin voi törmätä esim. Ohjelmointikielten kääntäjien tai rakenteisten dokumenttien käsittelyn yhteydessä, joista voitaneen mainita esimerkiksi XML-dokumenttien muuttaminen esimerkiksi HTML-esitysmuotoon. Kurssi kannattaa kuitenkin käydä läpi ajatuksen kanssa, koska mekaaninen ulkoapänttääminen ei juuri auta. Tietorakenteet -kurssin tapaan asiat pitää oikeasti tajuta, jotta kurssista suoriutuu.

Ohjelmistotuotanto (6 op)

  • Tunnetaan myös nimellä Ohtu
  • II periodissa

Kurssilla perehdytään ohjelmistotuotantoon, sen ongelmiin ja ketterään prosessimalliin. Ohjelmistotuotanto-kurssia voidaan pitää Ohjelmistotekniikan mentelmät -kurssin jatkeena. Viikottaisten laskaritehtävien lisäksi toteutaan neljä viikkoa kestävä miniprojekti ryhmätyönä. Projektin ideana on harjoitella ketterää ohjelmistokehitystä Ohjelmistotuotantoprojektia varten.

Kurssin hyväksytty suorittaminen on vaatimus Ohjelmistotuotantoprojekti -kurssille.

Käyttöjärjestelmät (5 op)

  • Tunnetaan myös nimellä Käjä
  • III periodissa

Kurssin voi käsittää siltana Tietokoneen toiminta -kurssin ja Ohjelmoinnin perusteet -kurssin välillä. Käsiteltävät asiat sisältävät käyttöjärjestelmien rakenteen ja toimintaperiaatteet, rinnakkaisuuden toteutuksia ja ongelmia, muistinhallintaa ja virtuaalimuistia, prosessorin vuoronantoa jne.

Samoin kuin TiTossa, Käjänkin tentin voi suorittaa neljällä minitentillä kurssin aikana.

Tietoliikenteen perusteet (5 op)

  • Tunnetaan myös nimellä Tilpe
  • IV periodissa

Kurssilla paneudutaan internetin peruskäsitteistöön ja -tekniikoihin. Kurssi etenee opettelemalla TCP/IP-pinoa taso tasolta. Tutuksi tulee siis pääpiirteittäin kaikki WWW-selaimen sielunelämästä aina verkkokortin bittitasolle asti. Kurssi antaa hyvät perustiedot tietoliikenteestä, jotka ovat tarpeen kaikkien eri linjojen opiskelijoille.

Kurssin sisältö on huomattavan laaja ja yksityiskohtainen opintopistemäärään nähden. Opiskelu perustuu paljolti TCP/IP-pinon kerrosten ja mekanismien toiminnan ulkoa opettelemiseen (esim. TCP-ruuhkanhallintamekanismit). Kokeessa ongelmaksi saattaa koitua hahmottaa, millä tasolla, ja kuinka yleinen vastaus kysymykseen halutaan (kokeessa saatetaan esimerkiksi kysyä, mitä tapahtuu kun opiskelija klikkaa linkkiä selaimellaan). Mikäli kurssilla vastaantuleva lyhenteiden ja käsitteistön määrä alkaa hirvittää, kurssilla käytettävä kurssikirja on mitä mainion apu pelonlievitykseen. Varoitettakoon, että asian ja detaljien suuresta määrästä johtuen kurssista on melko vaikea saada täyttä arvosanaa.

Ohjelmistotuotantoprojekti (10 op)

  • Tunnetaan myös nimellä Ohtuprojekti
  • I-II periodeissa
  • III-IV periodeissa
  • Kesän aikana

Kurssin esitietovaatimuksena on suoritettu Ohjelmistotuotanto-kurssi sekä kaksi aineopintojen harjoitustyötä (kts. alla).

Ohjelmistotuotantoprojektissa harjoitellaan projektin toteuttamista jotakuinkin reaalimaailmaa vastaavin menetelmin. Projekti toteutetaan 5-6 hengen ryhmässä. Projektilla on siis ihkaoikea asiakas (yleensä laitokselta, yliopistolta tai jostain yrityksestä), joka asettaa vaatimukset tuotteelle. Näihin vaatimuksiin ryhmän pitäisi sitten pystyä ohjelmistollaan vastaamaan mahdollisimman hyvin. Projektin aiheeseen ei voi vaikuttaa, mutta haluamastaan ryhmästä voi esittää toiveen. Aihe voi olla periaatteessa mikä tahansa. Ei ole ollenkaan tavatonta, että ensitöikseen joutuu opettelemaan uuden ohjelmointikielen.

Kurssin päätyttyä tuotteeseen ei sisälly ylläpitovastuuta. Useat projektit menevät keskeneräisenä tuleville osanottajille jatkokehitykseen, mutta osa on päätynyt oikeaan tuotantoonkin. Kurssin perimmäinen tarkoitus on kuitenkin harjoitella prosessia enemmän kuin itse projektin toteuttamista. Ei kannata liikaa stressata, että tuotteen tulisi olla valmis kurssin päättyessä. Ohjelmoimaankin pääsee varmasti tarpeeksi, ja ohessa mahdolliset uudet työkalutkin tulevat väkipakostakin tutuksi.

Projekti toteutetaan käyttäen laitoksen omaa ketterää ohjelmistokehitysmenetelmää (Scrum-variaatio). Varsinaista projektipäällikköä ei ryhmässä ole, ellei ryhmä sellaista keskuudestaan välttämättä halua valita. Kurssi on hyvin opettavainen ja ryhmä saa käytännössä lähes vapaat kädet itsensä toteuttamiseen. Ryhmätyön merkitys ja asiakkaan kanssa vaatimuksista vääntäminen ovat kurssin ydinkauraa. Ongelmilta (lue: haasteilta) ei voi projektin edetessä välttyä ja moiset kannattaa ottaa oppimiskokemuksena. Kurssin arvostelu perustuu pitkälti ryhmän vertaisarviointiin. Asiakkaan antamalla arvosanalla ei juuri merkitystä ole.

Kurssista saa eniten irti, jos sopii ryhmän kanssa erilaisten työtapojen ja menetelmien (esim. eri pituiset sprintit) kokeilemisesta, koska oikeilla työpaikoilla tällaisia kokeiluja harvemmin pääsee enää toteuttamaan. Kurssin tärkein opetus lienee, että asiakkaan kaikkiin vaatimuksiin ei missään nimessä ole pakko suostua, ja että tekniset hankaluudet pystytään todennäköisesti ohittamaan onnistuneilla neuvotteluilla.

Kandidaatintutkielma (6 op) + Äidinkieli (3 op) + Tutkimustiedonhaku (1 op)

  • Tunnetaan jäärien joukossa nimellä Tieteellinen kirjoittaminen tai Tiki
  • I-II periodeissa
  • III-IV periodeissa

Tämä kolmen kurssin kokonaisuus on käytännössä yksi iso suoritus. Kandidaatintutkielman kirjoittamisen ohessa opetellaan tieteellistä kirjoittamista, tutkimustiedonhakua sekä esiintymistä. Arvostelu koostuu seuraavista osasuorituksista: 2-4 sivun referaatti, 10 sivun aine, 1.5-2 sivun kypsyysnäyte, 15-20min esitelmä ja ~20 sivun tutkielma. Näistä viimeinen on se varsinainen "kandi", joka on samalla ainoa arvosanaan vaikuttava komponentti. Muut suoritukset on pakko tehdä, mutta ne arvostellaan binäärisesti "tehty/ei tehty".

Optimaalisessa tilanteessa opiskelija kirjoittaa kurssin aikana yhtä tekstiä, jonka eri vaiheet muodostavat tarvittavat kirjalliset komponentit. Monen tulee kuitenkin *pivotattua* jossain vaiheessa, jolloin siihen mennessä kirjoitetusta iso osa pitää heittää roskiin. Tämän välttää parhaiten ottamalla alun aiheenvalinnan tosissaan.

Käpistelijälle on tunnetusti tekstin tuottaminen ongelma, tieteellisestä kirjoittamisesta nyt puhumattakaan. Kurssissa ei välttämättä pärjää tosin hyväkään kirjoittaja, koska tieteellisten artikkelien kirjoittaminen ottaa hieman eri lähtökohdan kuin esseen, raporttien tai dokumentaation laatiminen. Hermot menevät takuuvarmasti jossain vaiheessa mitättömiltä tuntuvien pikkuasioiden viilaamiseen, joita ohjaaja jaksaa ja jaksaa kaivaa esiin joka kerralla.

Ryhmät jaetaan sen perusteella, minkä olet ilmoittautumisessa ilmaissut mahdolliseksi maisterilinjaksesi. Ryhmässä on 5-6 henkilöä, ohjaaja sekä valvoja. Valvojalla ei ole juuri muuta virkaa kuin varsinaisen tutkielman tarkastaminen. Ohjaajan kanssa sovitaan (yleensä) viikoittainen tapaamisaika. Ohjauksen laatu vaihtelee, eikä suoria neuvoja välttämättä saa ohjaajalta missään vaiheessa.

Esitelmä (15-20min) pidetään oman pienryhmän kesken omasta aiheesta, yleensä aineen pohjalta. Tätäkään ei kannata stressata liikaa, sillä "arvostelu" on ihan oikeastikin tasolla "suoritettu jos jotain mumisee ryhmän edessä".

Kurssi sisältää ohessa myös ns. kypsyysnäytteen, jossa pitää laatia parin sivun mittainen kielellisesti huoliteltu teksti jostain tutkielman aihepiiristä. Tämä vastaa teknisesti toisen kotimaisen kielen kurssia sikäli, että kypsyysnäyte on todistus siitä että opiskelija osaa oman äidinkielensä "virkamiestasolla".

Aiheenvalintakäytäntö vaihtelee ohjaajittain. Tutkielman aihepiirin aihe valitaan useimmiten valmiista listasta, mutta joissakin ryhmissä aihetta saa itsekin ehdottaa. Moni on ampunut itseään jalkaan ehdottamalla omaa aihepiiriä, ja on huomannutkin jälkeenpäin, että tutkimustietoa aihealueesta ei joko löydy ymmärrettävässä mudossa tai sitten löytyy aivan liikaa. Ennen oman aiheen ehdottamista kannattaa varmistaa, että aiheesta todellakin löytyy riittävästi "lukukelpoista" tutkimustietoa. Aihepiiri valitaan jo ensimmäisessä tapaamisessa.

Kurssiin sisältyy myös kymmenisen luentoa, joilla opetetaan tieteellisen kirjoittamisen tyyliä ja tiedonhaun perusteita. Näistä ainakin ensimmäisellä on pakollinen läsnäolo.

Aineopintojen valinnaisen osan valintakori

Aineopintoihin tulee sisällyttää vähintään yksi kurssi tästä korista.

Johdatus tekoälyyn (5 op)

  • Tunnetaan myös nimellä JohTek.
  • I periodissa

Tämän vielä hieman muotoaan hakevan kurssin tarkoituksena on johdattaa tekoälyn eri osa-alueisiin, tutkimusongelmiin ja alan kulmakiviin. Vaihtuvina teemoina käsitellään niin koneoppimista, robotiikkaa, perinteistä logiikkaa kuin pelitekoälyjäkin. Sillisalaatista pitäisi jäädä käteen jonkinlainen kuva alan valtavasta kirjosta. Kurssilla on tätänykyä vähän ohjelmointitehtäviäkin, mutta pääpaino lienee aiheiden yleisessä esittelyssä. Luvattu on, että jotain pääsee silti itsekin tekemään.

Älä turhaan katsele vanhoja kurssisivuja, äläkä varsinkaan osta mitään kirjaa. Hyppää suohon ja löydä sieltä sisäinen intohimosi älykkäitä järjestelmiä kohtaan.

Tietoturvan perusteet (5 op)

  • Tunnetaan myös nimellä Titu
  • II periodissa

Suoritetaan verkkokurssina, jolla käsitellään kyberturvallisuutta, operatiivista tietoturvaa, turvallisen web-ohjelmiston kehitystä, web-ohjelmistojen tyypillisiä haavoittuvuuksia ja niiden korjaamista sekä vastatoimia.

Aineopintojen harjoitustöiden valintakori

Tästä korista tulee valita kaksi opintosuoritusta. Näiden pitää olla valmiina ennen Ohjelmistotuotantoprojektia (kts. yllä).

Tietorakenteiden harjoitustyö (4 op)

  • Tunnetaan myös nimellä Tiralabra
  • I periodissa
  • II periodissa
  • Kesäisin

Tietorakenteiden harjoitustyö eli Tiralabra on käytännön jatkoa Tietorakenteet-kurssille. Kurssilla pääsee leikkimään tietorakenteilla ihan oikeasti, eli tekemään kokonaisen ohjelman, jossa hyödynnetään joitain tietorakenteita ja algoritmeja. Ohjelma tulee tietenkin myös testata ja dokumentoida, mutta dokumentointivaatimukset ovat minimaaliset aiempiin harjoitustöihin verrattuna. Sallitut ohjelmointikielet riippuvat pitkälti harjoitustyön ohjaajasta, mutta laitoksella opetettavat kielet ovat yleensä käytettävissä.

Harjoitustyö on vaativampi kuin Ohjelmoinnin harjoitustyö, joten kurssille ei kannata ilmoittautua, ellei ole varannut riittävästi aikaa työn tekemiseen. Keskimäärin työhön menee n. 80 työtuntia, mutta tehtävän aiheesta ja omista taidoista riippuen työtuntimäärä saattaa vaihdella huomattavastikin suuntaan tai toiseen. Jos työn aloittaa, sitä ei kannata lopettaa kesken, vaikka vähän vastustaisikin: Harjoitustyön keskeyttäneet ovat muita heikommassa asemassa, kun valitaan labraryhmään pääseviä.

Kurssilta kannattaa ottaa kaikki hyöty irti, koska seuraava paikka, jossa ohjelmointitaitoja koetellaan, on yleensä Ohjelmistotuotantoprojekti ja siellä ohjelmoinnin oletetaan jo sujuvan rutiinilla.

Tietokantasovellus (4 op)

  • Tunnetaan myös nimellä Tsoha tai Tsohalabra
  • III periodissa
  • IV periodissa

Kurssi on käytännössä pienen SQL-relaatiotietokantaa käyttävän WWW-sovelluksen laatimista (esim. yksinkertainen verkkokauppa). Tämän harjoitustyön keskeinen teema on tietokantojen hallintaan liittyvät asiat sekä myös huolelliseen suunnitteluun keskittyminen. Kurssi on monen webbikoodariksi aikovan mielestä erittäin hyödyllinen ja palkitseva. Jos tunnistit itsesi, kannattaa varoa ettei innostu liikaa ja tee vahingossa muutaman tuhannen rivin harjoitustyötä.

Opiskelijasta voi kurssilla kirjoitettavan dokumentaation määrä turhauttavalta ja suuri houkutus onkin tehdä dokumentit vasta viimeisenä iltana. Dokumenttien tarkoitus on kuitenkin opastaa opiskelijaa oikeaan suuntaan suunnittelessaan omaa sovellustaan. Harjoitustyön ohjaajaa saa käyttää surutta apuna sekä ohjelmiston suunnittelun ongelmien että dokumenttien laatimisen kanssa.

Itse toteutuksen tekeminen onkin sitten vähemmän työlästä, jos suunnittelu on kunnolla tehty. WWW-sivustolle tulevan rakennelmansa saa toteuttaa varsin monella tavalla ja tietokannoissakin on valinnan varaa. Suurin osa tekee harjoitustyönsä joko PHP:llä, Javalla, tai Ruby on Railssillä, mutta jos intoa (tai aiempaa osaamista) löytyy jonkin eksoottisemman ympäristön käyttämiseen, niin sekin on usein kelvannut ohjaajalle.

Tietoliikenteen harjoitustyö (4 op)

  • Järjestetään toukokuun intensiivijaksolla, Tietoliikenne-kurssin jälkeen

Osallistuminen edellyttää vähintään arvosanaa 3 Tietoliikenteen perusteet -kurssilta. Huonommallakin arvosanalla saattaa päästä mukaan jos osaa selittää vakuuttavasti.

Harjoitustyössä ei lähtökohtaisesti ohjelmoida mitään, vaan enemminkin määritellään jokin tutkimusongelma johon etsitään itse vastaus. Perusratkaisu on analysoida jonkinlaista verkkoliikennettä. Muunkinlaisia projekteja on kuitenkin hyväksytty.

Aineopintojen valinnaiset kurssit

Osaston kurssitarjonta muuttuu valinnaisten kurssien osalta jatkuvasti, tarkista ajantasainen kurssitarjonta esim. Weboodista.

C-ohjelmointi (5 op)

  • Tunnetaan myös nimellä C
  • 1. periodissa
  • 3. periodissa (itseopiskelu)

C on aineopintojen valinnainen kurssi, joka on tarkoitettu ohjelmoinnin perusasiat osaaville ja perustietorakenteet tunteville. Ensin kannattaa siis suorittaa suosiolla ensimmäisen vuoden ohjelmointikurssit harjoitustöineen sekä Tietorakenteet. Javalla ohjelmoineille kielen syntaksin omaksuminen on helppoa, mutta pelkän ulkoisen samannäköisyyden ei kannata antaa pettää itseään. C on käsitemaailmaltaan ja rakenteiltaan varsin erilainen kieli kuin Java ja sitä myös käytetään hieman erilaisiin tarkoituksiin. C:llä tehdään mm. koneenläheisiä, suurta tehoa vaativia, usein tekstipohjaisia työkaluohjelmia. Javalla taas on mukavampi rakennella sekä ohjelmoijan että käyttäjän kannalta turvallisia sovelluksia, usein graafisia sellaisia - mikäli nopeus ei ole kriittisin tekijä.

Muistiosoittimien ja muistinhallinnan kanssa pelaaminen, joka Javassa on automaattista, voi osoittautua hankalaksi omaksua. Myöskään linkitettyjen listojen ohjelmointi, johon perehdytään varsin tarkkaan, ei tule vastaan ohjelmoinnin perus- ja jatkokurssilla. Kurssilla opetetaan nykyään myös puiden ja verkkojen (tietorakenteita nämäkin) käsittelyä, tosin vähemmällä tarkastelulla kuin esim. Tietorakenteet-kurssilla. Tämä kurssi tuo varsin mukavaa vaihtelua ensimmäisen syksyn Java-annostukseen varsinkin, jos olet ohjelmoinut C:llä aikaisemmin.

Algoritmit ongelmanratkaisussa (10 op)

Computer Organization II (5 op)

Full Stack -websovelluskehitys (3-7 op)

Full Stack -websovelluskehitys harjoitustyö (1-10 op)

Introduction to Game Programming (5 op)

Introduction to Lambda Calculus (2-5 op)

Johdatus funktionaaliseen ohjelmointiin (5 op)

Kilpaohjelmointi (2-3 op)

===Ohjelmointihaasteita I (1-3 op)

Robottiohjelmoinnin harjoitustyö (4 op)

Tietokannan suunnittelu (5 op)

Web-palvelinohjelmointi Java (5 op)

Muut pakolliset opinnot

Tietokone työvälineenä (1 op)

  • Tunnetaan myös nimellä Lapiokurssi tai pelkkä Lapio
  • I periodissa

Työvälinekurssi on peruskurssi, jolla opetellaan myöhemmillä kursseilla välttämättömiä käytännön taitoja. Kurssilla opetellaan käyttämään laitoksella käytössä olevia ohjelmistoja ja laitteistoja sekä valitsemaan tehtävään sopiva työkalu. Keskeisimmät Unix/Linux-komennot, HTML-perusteet, tekstieditorien ja tekstinkäsittelyohjelmien käyttö jne. kannattaa oppia, ettei sitten myöhemmin kulu pään raapimiseen enemmän aikaa kuin itse tekemiseen. Monelle kokeneellekin tietokoneenkäyttäjälle kurssilla todennäköisesti on uutta asiaa ainakin laitoksen järjestelmistä, joten kurssimateriaali ainakin kannattaa lukea läpi.

Akateemiset taidot (1-2 op)

Opiskelijan digitaidot: orientaatio (2 op)