wiki:s2014/qa
Last modified 3 years ago Last modified on 2014-09-18 10:49:45

Ohjelmointi 1/ Kysymyksiä ja vastauksia

Kysymykset ovat alun perin kotoisin demotehtävästä, missä sai esittää luennoitsijalle yhden kysymyksen. Vastaan näihin "henkilökohtaisiin" sitä mukaa kuin ehdin, mutta yleisempiin saa toki muutkin vastata.

Vastaajat:

  • VL: Vesa Lappalainen
  • AJK: Antti Juhani Kaijanaho (mm. erilaisten kieliin liittyvien kurssien pitäjä, jatko-opiskelija)
  • TJ: Tero Jäntti (Jypeli-kehittäjä)
  • TK: Tomi Karppinen (Jypeli-kehittäjä)
  • AJL: Antti-Jussi Lakanen (Ohj1-kurssin luennoija keväisin)
  • TM: Tiina Mononen (Ohj1-kurssin tuntiopettaja)
  • ji: Jonne Itkonen
  • VT: Tirronen
  • JP: Jouni Potila (Ohj1-kurssin tuntiopettaja s2012 ja k2013)
  • TS: Tuomo Sipola (tutkija, tiedonlouhinta)
  • JV: Jukka Varsaluoma (jatko-opiskelija, pelitutkimusta ja peliaiheeseen liittyviä kursseja)
  • H-J: Heikki-Jussi Niemi (jatko-opiskelija, erilaisissa ohjaustehtävissä toiminut)
  • VS: Vesa Savolainen, Emeritus professori, tietojärjestelmätiede
  • MS: Markku Sakkinen, Emeritus professori, ohjelmistotuotanto
  • ML: Mauri Leppänen, lehtori, järjestelmäkehitys

Syksy 2014

1. Kurssin suorittaminen

Q: Voiko oikeasti aloittaa tyhjästä ja päästä kurssin läpi?
Q: Voiko kurssista selvitä kunnialla läpi tietokoneen peruskäyttötaidoilla ilman aikaisempaa ohjelmointikokemusta?
Q: Selitetäänkö kurssin aikana vastaantulevaa "uutta" sanastoa jollain tavalla? Eli jo ohjelmointikokemus on luokkaa nolla ja tietokoneella on tullut lähinnä pelattua ja käytettyä tekstinkäsittelyohjelmia yms. muuta perus, onko sitä sitten ihan hukassa, kun syvempää termistöä alkaa sadella?
A: Tarkoitus todella on että tietokoneen peruskäyttötaidot riittävät kurssilla. Ja näin on aina riittänytkin, kunhan vain halua oppimiseen on. Uudet asiat tuottavat aina töitä. Muistakaa että kaikki tämän vuoden ohjaajatkin olivat lähteneet nollasta. Termien suhteen vastuu on opiskelijoilla. Jos käytetään jotakin termiä jota luennoitsija ei huomaa opiskelijoille tuntemattomaksi, on tästä kysyttävä. Kurssin termistöä on kerätty omalle sanasto -sivulle.

Q: Millainen koe tulee olemaan eli pitääkö osata kirjoittaa koodinpätkä paperille vai onko logiikka tärkeintä.
Q: Millainen tentti kurssista pidetään?
A: Katso esim: demon 11 mallitentti. Lunttilappu saa olla mukana kokeessa, eli ulkomuistin varaan ei mitään tarvitse jättää. Jos on itse tehnyt joka demossa 6 tehtävää, niin koe on muodollisuus. Molemmat ovat tärkeitä, sekä kirjoittaminen että logiikka. Koe on kynällä ja paperilla kun kukaan ei ole esittänyt toimivaa vaihtoehtoa 200 henkilön konetentin (tietyssä mielessä demot on osa tenttiä ja nehän tehdään koneella)järjestämiseksi. - vl

Q: Miksi nämä tehtävät annetaan vasta lauantaina, kun jäljellä on huimat neljä tuntia ns. virka-aikaa ennen luentoa? Miten me opiskelijat hoidamme hommamme ajoissa, jos tehtävänannot tulevat näin myöhässä?
A: Normaalisti tehtävät annetaan maanantain luennolla. Demo 0 oli tarkoitus julistaa edellisellä viikolla, mutta olen uuden materiaalin kimpussa ollut yli 80 tuntia/viikko ja suoraan sanoen muistin tuon vasta kun rupesin katsomaan että mitä tehtiin edellisenä vuotena. Minun vika! - vl

Q: Mitä Ohjelmointi 1 -kurssin pääteohjauksissa tehdään?
A: Opetellaan käyttämään ohjelmia ja ympäristöjä jotta niiden kanssa pärjää sitten itsenäisesti. Ensikosketukset noihin on aina helpompi tehdä kun joku on antamassa apua silloin kun epätoivo on suurin. Toki kun pääteohjauksen oppimistavoite on saavutettu, voi jatkaa demojen tekemisellä. - vl

Q: Vaatiiko ohjelmointi hyviä matemaattisia taitoja?
Q: Onko matematiikan opiskelu välttämätöntä ohjelmoinnin kannalta?
A: Ohjelmointia on hyvin monenlaista. Tietynlaisia WWW-sovelluksia voi varmaan tehdä ilmankin matematiikan taitoja. Mutta koska ohjelmointi on pitkälle matemaatikkojen kehittämää, on siitä ajattelusta, mitä matematiikassa opitaan, kovastikin hyötyä ohjelmoinnissa. Koko rakennelma on samanlainen. Iso ongelma jaetaan pienempiin osiin, matematiikassa lauseen todistaminen lemmoihin jne. Ohjelmoinnissa esimerkiksi olioihin ja aliohjelmiin (funktioihin). Sitten on ohjelmoinnin osia, jossa ei voi pärjätä ilman matematiikkaa. Esimerkiksi simulointi ja optimointi. Samoin monet graafiset asiat tulevat syvältä matematiikasta kuten myös kuvan käsittely, hahmon tunnistaminen jne. Joka tapauksessa asioiden esittäminen symbolisesti ja ongelman abstraktointi ovat taitoja, jota matematiikka opettaa, vaikka jostakin voisikin tuntua että yliopistomatematiikasta ei ole hyötyä. Oma pohjakoulutuksen on fysiikka/matematiikka. - vl
A: Ihan ohjelmoinnin perustasolla, josta tällä kurssilla puhutaan, matematiikka ei ole välttämätöntä, toki siitä on siinäkin hyötyä. Vaativampien työtehtävien tekemiseen sen sijaan usein vaaditaan myös teorian (jota opetetaan myöhemmillä kursseilla) osaamista, ja ohjelmoinnin teoria on pitkälti matematiikkaa. - AJK

Q: Kuinka suuri osa tietojärjestelmätieteilijöistä suorittaa kaikki tarjolla olevat Ohjelmointi -kurssit?
A: Tuskin kukaan suorittaa kaikkia, on niitä kuitenkin sen verran tarjolla. Mutta Ohj1+Ohj2+GKO+WWW-ohjelmointi tekee varsin moni. - vl

Q: Jos aion tehdä kurssin demoja sekä kotikoneella että koulun koneella, tarvitseeko minun luoda komentorivin avulla molempiin koneisiin kansio kurssit->ohj1->demot.. jne? Ja onko muita tehtäviä/toimintoja, joita minun täytyisi kahden koneen käytön takia tehdä ns. tuplana?
A: Kannattaa tehdä mahdollisimman samanlaiset rakenteet molempiin paikkoihin, niin silloin tietojen siirtäminen on helpompaa. Toki demojen palauttamisen kannaltahan tuo ei näy, koska lopulta palautetaan tiedostoja, ei hakemistoja. Sitten esim. Visual Studion asetukset kannattaa laittaa mahdollisimman samanlaisiksi molemmissa paikoissa. - vl

Q: Miksei yliopistolla järjestetä jonkinlaista "ohjelmointi tutuksi" kurssia jonka voisi käydä ennen ohjelmointi1 kurssia? Vaikkakin kurssilla toki käydään asiat alusta, helpottaisi perusasioiden osaaminen valtavasti sitä että voisi oppia. Tämä varmasti nostaisi läpäisyprosenttia sekä oppilaiden osaamista.
A: Tämän ja Nuorten peliohjelmointi -kurssin väliin ei enää hirveästi mahdu. Kurssin läpäisyprosentti nytkin on jo 70%, mikä on varsin kohtuullinen. Ja lopettamiset eivät johdu osaamattomuudesta, vaan siitä että ei viitsitä tehdä töitä (tai ei ole aikaa tehdä vaadittavaa työmäärää).- vl

Q: Voisiko nykyisen ja seuraavan viikon demot olla aina samaan aikaan nähtävillä, jotta voisi tarvittaessa tehdä kahden viikon demot ennakkoon ja saisi viikon "vapaata" kurssilta?
A: Ei varmaan ehdi tuota tehdä, mutta voitte itse auttaa asiassa ottamalla edellisen vuoden demojen tehtäviä ja siirtämällä niitä tälle vuodelle. Tehtävät eivät hirveästi tule muuttumaan. Tai minimissään katsoo viime vuoden kohdalta niitä tehtäviä ja tekee sieltä. Varmasti 90% tulee ainakin olemaan samoja, usein kaikki. - vl

Q: Kuinka ohjelmoinnin opetteleminen on ylipäänsä mahdollista kun se tuntuu niin mahdottoman vaikealta. Voiko kurssista ylipäänsä selvitä ilman suurta matemaattista lahjakkuutta?
A: Ei ohjelmointi ole vaikeaa. Se voi olla monimutkaista, mutta kun vain harjoittelee ja kokeilee, kaikki selviää, ja ohjelmoinnista tulee helppoa. Sama toimii ihan minkä tahansa uuden asian kanssa. Ennakkoluulottomasti vain kokeilemaan ja harjoittelemaan, leikkimään ja pelailemaan, niin ohjelmoinninkin oppii nopeasti. Harvassa ovat ne, jotka ovat pelkän kirjan lukemalla oppineet ohjelmoimaan. Itse tein pieniä animaatioita ZX Spectrumin Basicilla. Matemaattista lahjakkuutta ei tarvita, vain ennakkoluulotonta kokeilua. Paljon auttaa myös se, jos keksit kokeilla, miten voit ohjelmoimalla auttaa itseäsi tekemään töitäsi tai harrastuksiasi tehokkaammin, paremmin. -ji
A: Oletko analysoinut mikä siinä on sinulle vaikeaa? Lähes kaikki jotka tekevät pyydetyn työmäärän, oppivat ainakin merkittävän osan kurssin asioista. - vl

Q: Mitä ohjelmointiin liittyviä kursseja suosittelisit tulevalle teoreettiselle fyysikolle?
A: Eiköhän ensin kannata nämä Ohj1 + Ohj2 tehdä. Harjoitustyö kannattaa yrittää molemmissa valita niin, että se tukisi omaa mielenkiintoa. Sitten fysiikan alasta riippuen kannattaa käydä keskustelemassa Simuloinnin ja Optimoinnin tutkijoiden kanssa jatkosta. - vl
A: Ja suosittelen vielä kursseja Funktio-ohjelmointi 1 ja 2. Sen aiemmin läpikäynyt teoreettinen fyysikko teki fysiikan todistustehtäviään kurssin innoittamana funktionaalisella kielellä nimeltä Cog. Toinen fyysikko tylytti työkaverinsa, kun kurssin ansiosta hänen Matlab-koodinsa ajo kesti vain muutaman minuutin, kun kavereilla se kesti useita tunteja. -ji

Q: Videoidaanko Ohjelmointi 1 -kurssin luennot nettiin?
Q: Näkyykö luennot "livenä" netissä?
A: Ei näy. Luento nauhoitetaan ja nauhoitus menee koneen lokaalille levylle, josta se luennon jälkeen laitetaan toiselle levylle, josta siitä tehdään MP4-versiota. Tämä tapahtuu n. 1-2 tunnissa. Eli n. tunnin kuluttua luennon päättymisestä voi alkaa odottamaan videota. Paitsi joskus ma klo 14 ei ehkä ehdi ja konvertointi alkaa vasta demojen jälkeen klo 18. - vl

Q: Onko luennot aivan välttämättä pakko pitää oletettavasti nauhoituksen takia ilman taukoja, vai koskiko tämä vain ensimmäistä luentoa?
A: Ei ole pakko pitää. Aikaisempina vuosina on äänestetty, pidetäänkö yhteen vai tauon kanssa. Aina on ilman taukoa saanut ylivoimaisen enemmistön. Tänä vuonna tuon takia on unohtunut järjestää äänestys. - vl

Q: En valitettavasti saanut töitä järjesteltyä siten, että pääsisin ma 8.9. luennolle, joten kysymys on: luentomonisteesta varmasti löytyy paljon olennaista tietoa, mutta mitä muuta pitäisi tietää ensimmäisen päivän jälkeen?
A: Kannattaa katsoa ne luentovideot :-) Luennot -linkki siellä kurssin sivujen yläreunassa. - vl

Q: Ymmärrän, että ohjelmointi on taito, joka pitää opetella omin käsin ja itse tekemällä, mutta mikäli olisi kiinnostusta ja jaksamista lukea alan kirjallisuutta omatoimisesti, niin olisiko teillä ehdotuksia oheislukemistoksi?
A: Kyllä:

Nuo eivät ole C# kirjoja, mutta ne jokainen opettavat ohjelmointia ja siinä tarvittavia ajatusmalleja ihan perustasolta lähtien. Varsinkin ensimmäinen kirja lähtee ihan alkeista. Toinen ja kolmas kirja ovat parhaimmillaan Ohjelmointi 1 -kurssin jälkeen tai loppupuolella. -ji
A: Tämän kurssin näkökulmasta olen tuonne koonnut kirjallisuutta. -AJL

Q: Paljon on laskettu opiskelijan käyttävän aikaa viikoittaisiin demotehtäviin, jos koko kurssin laajuus on vain 6op? Kurssi on kuitenkin kestoltaan melkopitkä (syys-joulukuu). Luentojen ja demojen lisäksi kun on vielä pääteohjaukset, mahdolliset pahasti pihalla ohjaukset ja harjoitustyö.
A: Laskelma on Korpin etusivulla kurssin kohdalla. Eli noin 15 h/viikko. - vl

Q: Kysymys: Kuinka paljon kotona itsenäistä syventymistä kurssi vaatii?
A: Ks. edellä. Eli jos on 4h luentoja 2h demojen palautusta, niin n. 9 h riippuen siitä, paljonko tuosta ajasta on käyttänyt pääteohjauksessa. - vl

Q: Mihin KTM tarvitsee tätä? :-)
A: On täysin järkeenkäypää, että tietojenkäsittelyn opiskelija osaa käsitellä tietoa. Lisäksi Excelin täyttö on helpompaa, jos osaa ohjelmoida. -TS
A: Jos on mukana projektissa, jossa tehdään tuote johon kuuluu osana (kuten nykyisin suuressa osassa) ohjelmistoa, niin olisi todella hyvä, että projektin jäsenet ymmärtävät ja kunnioittavat toisiaan ja toistensa osaamista. Jos ei itse oppisikaan super-koodariksi, niin olisi hyvä ymmärtää ohjelmoinnin mahdollisuudet ja haasteet. Ja miksi ei ole kannattavaa lähettää työtä Intiaan tehtäväksi. - vl
A: KTM:llä on varmasti myös töissään monia tehtäviä, jotka voisi automatisoida, ja vapauttaa näin aikaa tärkeämmille (mielekkäämmille?) töille. Tässä ohjelmointitaito auttaa todella paljon. Kuten sanottu, ei ohjelmoinnin tarvitse olla erillisillä työkaluilla tehtyä, vaan esim. Office-perhe sisältää hyvät ohjelmointityökalut jo itsessään. Samoin on Applen ohjelmistojen ja käyttöjärjestelmän kanssa, esim. Automator ja AppleScript. Ja odottakaapas, kun tulette tutuiksi Windowsin PowerShellin ja sen mahdollisuuksien kanssa. -ji

Q: Jos ei ole lainkaan peli-ihminen, niin oliko harjoitustyössä jokin vaihtoehto pelille?
A: Harjoitustyö voi periaatteessa olla mitä tahansa, missä tulee tehtäväksi kurssin oppimistavoitteena olevat asiat (tärkeimpinä aliohjelmat, silmukat, taulukot). Neuvottele ohjaajien kanssa. Tosin vaikkei pelaisikaan, niin opetuspelin tekeminen voi tarjota ihan hyvän vaihtoehdon. - vl

Q: Mikä on yleensä kurssilaisille ohjelmoinnissa kaikkein hankalinta?
A: 1) Uskoa mitä sanotaan. 2) Kuunnella mitä sanotaan. 3) Tehdä vaadittu työmäärä. 4) Ottaa se kynä ja paperia esiin :-) - vl

Q: Onko odotettavista, että materiaalin lukeminen selkiytyy, kun ohjelmoinnista tulee enemmän kokemusta? Tällä hetkellä materiaali vaikuttaa erittäin sekavalta.
A: Eipä se materiaali siitä mihinkään muutu, mitä se nyt on. Olethan hommannut sen painetun luentomonisteen ja lukenut sen TIM-versiota. Noissa pyritään "lineaarisuuteen", eli pois siitä linkkien sekamelskasta mitä esim. Wiki on. - vl

Q: Minkälaiset ovat vaatimukset laajalle harjoitustyölle eli pelille? Mikä on "heikoin" tai vaatimattomin peli, jolla kurssi on läpäisty?
A: En sanoisi heikoin, mutta jos joku ottaa valmiin pohjan tasohyppelystä ja vaihtaa siihen hieman kuvia, niin eihän tuossa valtavasti ole työtä. Se että oppiiko sillä mitään, on sitten toinen kysymys ja riippuu hyvin paljon siitä, miten tekijä tuohon suhtautuu. Matkiminen on kuitenkin merkittävä oppimisen muoto. Jos kurssilla on muusta motivaatiosta kuin halusta oppia asiaa, niin ainahan voi vähällä päästä. Oppimishaluinen asettaa sitten itselleen sopivat päämäärät (joita ohjaajat rajoittavat jos tuntuu liian "mahdottomalta"). - vl
A: Aikaisempien vuosien palautteen perusteella ne jotka todella ottavat harkkatyön vakavasti ovat siihen jälkeenpäin tosi tyytyväisiä, koska ensinnäkin kokivat ylittäneet itsensä, ja saavat onnistumisen elämyksiä. Toiseksi, siinä saa jo ihan hyvän kokonaiskuvan tietokoneohjelman tekemisestä. -AJL

2. Työkaluista

Q: Miksi Alicen lataaminen kestää niin kauan?
A: Onhan tuossa kokoa 1GB-verran, mutta saattaa olla tuolla päässä hitaat linjatkin - vl

Q: Kannattaako luennoille, demoihin tai pääteohjauksiin ottaa mukaan kone, vai pärjääkö kynällä ja paperilla tai älypuhelimella?
A: Voi kun ihmisillä olisikin kynä ja paperia mukana :-) Se helpottaisi asioita kummasti. Uuden luentomonisteen myötä joitakin tehtäviä voi kokeilla tehdä jo luennolla kannettavalla, tabletilla tai älypuhelimella. Miten hyvin mikäkin käytännössä toimii, se nähdään syksyn aikana. Kyseessä on prototyyppi. Jo aikaisemminkin osa opiskelijoista on kirjoittanut ohjelmia luennon aikana. Osa on käyttänyt painettua luentomonistetta ja tehnyt siihen merkintöjä. Sanoisin että kyseessä on henkilökohtainen valinta ja kaikilla tavoilla voi pärjätä. Myös siis sillä pelkällä kynällä ja paperille. - vl

Q: Käytän omalla koneellani käyttöjärjestelmänä Ubuntua. Onnistuuko kurssin suorittaminen Linux-pohjaisella käyttöjärjestelmällä, vai tarvitaanko kurssilla myös Windowsia?
A: Jypelistä on myös Mono-porttaus, jossa suuri osa toiminnoista toimii. Ohjeistus on vielä kesken ja tässä joutuu hieman pioneerin asemaan. Toinen mahdollisuus mitä aikaisemmat kurssilaiset ovat käyttäneet, on virtuaalikoneen tai dual-bootin käyttäminen, sekä Mac että Linux. - vl

Q: Minulla on käytössä mac, eroavatkohan kurssin tehtävät paljon windowsin ja macin välillä? Jos eroavat, olisikohan mahdollista saada ohjeita myös macille?
A: Tehtävät ovat samoja käyttöjärjestelmästä riippumatta. Mac OS X:llä pystyy kyllä tekemään hommia, mutta käytännössä lienee helpointa, jos voit asentaa rinnalle Windowsin. Lisää ohjeita täällä. -AJL

Q: Miksi kurssilla käytetään vain Microsoftin työkaluja? esim tuo visual studio. Ei ne siellä Applellakaan varmasti koske tikullakaan noihin. Oli hyvä jos voisi alustasta riippumatta suorittaa näitä kursseja.
A: Kyllä Apple tekee jonkin verran Windows-softaa, joten varmasti koskevat. Toisin päin myös, Microsoftin ohjelmia löytyy OS X:lle, onpa jotkut tehtykin ensin Macintoshille, esim. Excel. Miksi käytetään, siihen saa joku muu vastata. Applen XCode olisi monilta puolin mukavampi, varsinkin tämä uusin versio, joka tukee Applen Swift-ohjelmointikieltä. -ji
A: Itse asiassa nyt Monon ja Xamarinin myötä päästään siihen, että nämä eivät ole "pelkkiä" Microsoft työkaluja. Apple-työkalujen käyttöä olisi vielä turhauttavampaa suurimmalle osalle kuulijoista. Jos Apple olisi fiksu, se tekisi uudesta kielestään avoimen ja teiksi sille hyvät työkalut muihin järjestelmiin - tosin en tähän usko että tekisivät - vl
A: Minä taas toivon, että tekevät. Kääntäjähän on jo avoin ja tunnetaan nimellä http://llvm.org LLVM, mutta kääntäjän ymmärtämälle välikielelle Swiftin kääntävä työkalu ei ole, tosin sitä vielä kehitetään muutenkin. Koko kehitysympäristö tuskin tulee ikinä avoimeksi tai tarjolle muihin käyttiksiin, kuten ei käy ikinä Visual Studiollekaan. Apple tosin jakaa kehittäjätyökalut ilmaiseksi, Microsoft pyytää niistä rahaa, paitsi jos olet onnellisessa asemassa kuten meidän opiskelijat ovat. Tästä voi päätellä, kummalla tehdään enemmän softaa maailmassa. :-) - ji

Q: Aikaisemmin, kun tein demo 1 tehtäviä, sain tehtyä ne ja katsottua esim. lumiukon komentorivin kautta, mutta kokeilin tehdä demo 2 tehtäviä niin se ei enää tunnista jypeliä vaikka en ole muuttanut mitään. Mikä voi olla syynä ja miten sen saa taas toimimaan?
A: Veikaisin että jos kyseessä on Visual Studio, niin et ole tehnyt Fysiikkapeli-projektia. Jos komentorivi, niin sinulla ei ole jypeli.dll samassa hakemistossa tai et käännä samoilla "loitsuilla" kuin pääteohjaus 1:ssä. - vl

Q: Mikä on näytönohjaimen tarkoitus?
A: Näytönohjain siirtää tietokoneen muistista kuvan näytölle, tarkemmin näytönohjaimen muistiin ja sieltä näytölle, tai se lukee tietokoneen muistista ohjelman, jonka se suorittaa, ja tuloksena on grafiikkaa näytöllä. Eli yleistetysti, se muuttaa muistissa olevat luvut sähkösignaaleiksi, jotka sytyttävät halutun värisen kuvapisteen (pikselin) näyttölaitteessa. -ji
A: Itse asiassa nykypäivän näyttökortti tekee paljon paljon enemmän. Se tekee suuren osan siitä laskentatyöstä, että miten jossakin pelissä olevat hahmot näytetään. Kuka peittää kenetkin, miten varjostukset näkyvät jne... Näyttökortin laskentateho on jopa niin kova, että laittamalla niitä useampia samaan koneeseen ja pistämällä ne laskemaan rinnakkain asioita (joissa näyttökortti on parhaimmillaan), päästään entisten supertietokoneiden tehoihin pöytäkoneen hinnalla. Näytönohjain voi tarkoittaa näyttökorttia tai sitä apuohjelmaa, joka ohjaa näyttökorttia. - vl
A: Paitsi että nykypäivän näytönohjaimilla ei päästä enää supertietokoneiden tehoihin. Näytönohjaimien (-korttien) piireistä on suljettu osa toiminnoista, jolloin ne eivät olekaan enää käytettävissä tehokkaina laskimina. Sen sijaan samat piirit saa "laskentakorteilla" nämä suljetut ominaisuudet avoimina ja huomattavasti hinnakkaampina. "Elämme markkinataloudessa", kuten joku viisas aikoinaan totesi. -ji

Q: Kuinka kauan Dreamsparkista saatavien käyttisten lisenssit kestävät?
A: Yleensä vuoden, mutta ne voi hakea uudelleen. - vl

Q: Miksi wikiä ei ole voitu kirjoittaa luentomoniste muotoon mistä on sitten vaikka linkkejä muille sivuille. Nyt moniste ja wiki ovat vähän irrallisia.
A: Haave olisi, että joskus iso osa Wiki-sivuista olisi TIM-monisteena. TIM-moniste on vasta Beta-vaiheessa ja oli siinä ja siinä että saadaanko edes itse moniste siihen tänä syksynä. Wiki taas on erittäin kömpelö pitempien sivujen käsittelyssä (jopa tämä QA sivu on Wikiin liian pitkä muokattavaksi).

Q: Mistä voisi johtua että kotona käyttämässäni pc:ssä on windows 8, mutta jostakin syystä en saa XNA game studiota ladattua? Herjaa yhteensopivuusongelmasta?
A: Varmaankaan et ole mennyt sivun: [wiki/dotnet-tyokalut/w8vs2013 w8vs2013] ohjeita täydellisesti, vaan olet ladannut XNA:n muualta. - vl

Q: Millaisella näppäinyhdistelmällä voi kopioida/liittää tekstiä komentoriville? Normaali Ctrl+V ei toimi.
A: Paina hiiren oikealla vasemman yläkulman ikonia. Täältä ota properties ja sitten Options völilehdeltä "Quick Edit Mode". Nyt liittäminen tapahtuu painamalla hiiren oikeata nappia. Ja valitseminen (vain) maalaamalla hiirellä ja sitten Enter.

Q: Miksi kurssilla tarvittavien työkalujen asentaminen on niin monimutkaista?
A: Sen kun tietäisi! M$:illa on tapana saada helpotkin asiat monimutkaisiksi. Mutta toisaalta kuin nuo saa asennettua, on niistä paljon iloakin. - vl

Q: Onko win8 tosiaan parempi kuin win7. Itse en henkilökohtaisesti yhtään pidä win8:sta ja monet ystävänikin ovat moittineet sitä.
A: On. Näpäytä Windows-näppäintä ja ala kirjoittamaan haluamasi sovelluksen tai dokumentin nimeä, niin se aukeaa tarjolle käytettäväksi. Eli et tarvitse Start-valikkoa. Tämä on nykyään yleinen tapa käynnistää tai aukaista sovelluksia ja dokumentteja muissakin käyttöjärjestelmissä. Windows+s taas esimerkiksi aukaisee etsintäikkunan, jossa voit samalla tavalla kirjoittamalla etsiä sovelluksia. Muitakin kivoja näppäinoikoteitä on, kannattaa tutustua niihin. Äläkä usko kavereita kritiikittä, kokeile itsekin. :-) -ji
A: Ei pidä sotkea käyttöliittymää ja käyttöjärjestelmää. Win8 laatikkoliittymäpuuoli on toki surkea esitys työpöytäkäyttäjälle (toki ihan OK tabletissa). Uudempana järjestelmänä Win8 tarjoaa monta pientä mukavaa asiaa (joita toki saa Win7 kun asentelee lisäohjelmia). Esim. tässä kurssin alussa yksi kiva ominaisuus on se, että jos on DVD-levyn kuva (.iso -tiedosto), niin sitä klikkaamalla tuo muuttuu virtuaaliseksi levyasemaksi ja asennuksen voi aloittaa ehti. Lisäksi Win8 on jonkin verran nopeampi. Asenna esim. Classic Shell ja et edes huomaa olevasi Win8. -vl

3. Eri kielistä

Q: Miksi C#?
Q: Miksi kurssilla käytettävä/opetettava ohjelmointikieli on juuri c#?
Q: Miksi aloitamme ohjelmoinnin opettelun juuri C#-kielellä ja mitä muita kieliä opettelemme?
A: Jypeli tehtiin aikanaan C#-kielelle ja Ohjelmointi 1:lle haluttiin sitten pelin tekemistä motivaatioksi. Tällöin C# oli luonnollinen valinta. Lisäksi C# on varsin hyvä ja nykyaikainen kieli, joka kehittyy koko ajan. Tällä hetkellä Javaa edellä monessa asiassa. Ja C/C++:aa vielä enemmän :-) Jatkossa esimerkiksi Ohjelmointi 2:lla tulee Java, sen jatko-osassa C/C++, Funktio-ohjelmointi -kurssilla Haskell, WWW-sovellukset kurssilla Javascript ja Python jne... - vl
A: Oliosuunnittelun kurssilla tulee kasapäin vahvasti oliosuuntautuneita kieliä: Smalltalk, CLOS, Javascript, Python. -ji

Q: Jos mahdollinen jumala olisi ohjelmoinut maailman, millä ohjelmointikielellä hän olisi tämän todennäköisimmin tehnyt?
A: Elämän osalta näyttää käyttäneen DNA:ta ja sen monistumiskykyä. Mutta vakavasti ottaen kysymyksellä "Mikä on paras ohjelmointikieli?", ei saa muuta kuin riidan aikaiseksi. - vl
A: http://xkcd.com/224/ -ji

Q: Mitkä ohjelmointikielet ovat nykyään hyödyllisimpiä tai mitkä tulevat olemaan?
Q: Mikä on sinun mielestäsi paras ohjelmointikieli yleiseen ohjelmointiin?
Q: Mitkä ovat luennoitsijan mielestä parhaat ohjelmointikielet?
A: Vrt. edellä. Vastaamalla tällaiseen saa aikaan vain sodan. Kieliä tulee ja menee, ajatusmalli säilyy, elää ja kehittyy. Mutta ei me huonoja kieliä näillä kursseilla käytetä. Jos käytettäisiin, niin vaihdettaisiin (ja on useasti vaihdettu vuosien varrella). Javascript (valitettavasti :-) tulee olemaan yksi pakollisista selainten "vakiokielenä". Rinnakaisohjelmoinnin yleistyessä funktiokielet voivat antaa paremman mahdollisuuden rinnakaistamiseen kuin nykyiset valtakielet. - vl

Q: Mikä on tärkein ja mikä on käytetyin ohjelmointikieli?
A: Tärkein on se, mitä joudut käyttämään tai käytät juuri nyt, käytetyin löytyy seuraavasta osoitteesta, tulkinta jätetään lukijalle: http://langpop.com -ji

Q: Onko Python ohjelmointitaustasta enemmän hyötyä vai haittaa C#-ohjelmoinnissa? Mitkä ovat kielten merkittävimmät erot (vaikka 3kpl)?
A: On siitä sekä hyötyä, että haittaa. Merkittävimmät erot ovat, että Pythonissa "muuttujat" ovat enemmän "viitteitä", eli ne voivat viitata mihin tahansa olioon, tai sisältää perustietotyyppiä olevaa dataa. Pythonissa on myös selkeämpi syntaksi, paitsi ehkä C#-fanien mielestä. Python on myös avoimesti kehitetty ja toteutettu, joten sen saa (toimivana) useaan, lähes kaikkiin, eri käyttöjärjestelmään. Ongelmia tulee lähinnä vain, jos käyttää jotain käyttöjärjestelmäriippuvia osia, joskin ne on Pythonissa eristetty omiin paketteihinsa. -ji

Q: Miten helposti voi omaksua muita ohjelmointikieliä, kun on oppinut C#-kielen?
A: Kurssillahan pääasiassa opetellaan ajattelutapa, eli miten tietokonetta käskytetään tekemään haluttu asia. Kun sen on tajunnut, uusien kielten opettelu on kiinni kyseisen kielen merkintätapojen opettelusta. Toisin sanoen, helposti, kunhan opit kurssilla ohjelmoimaan. -TS
A: Olen eri mieltä. C#:n jälkeen voi olla kohtuu helppoa oppia C#:n kaltaisia kieliä, mutta monesti on nähty, että täysin erilaisen ajattelutavan mukaisia kieliä onkin sitten vaikeampi oppia, kuin puhtaalta pöydältä. Esim. Haskell, joka on funktionaalisen ohjelmoinnin vahva edustaja, on tyystin erilainen kieli, eikä C# auta sen oppimisessa mitään, pikemminkin haittaa. Visual Studiossa on kuitenkin tarjolla kieli nimeltä F#, joka taas on funktionaalinen kieli. Suosittelen siihen tutustumista, sillä se auttaa ymmärtämään muita funktionaalisia kieliä, ja antaa samalla ohjelmoijalle tosi kätevän ja tehokkaan uuden työkalun käyttöön. -ji
A: Tämä on sitten se seuraava taso, jolle kannattaa pyrkiä. Jos kiinnostusta riittää, kannattaa ehdottomasti katso mitä muita ohjelmointiparadigmoja on. -TS
A: Helpompaa on jämähtää siihen yhteen jonka ekana opetteli. Mutta on virkistävää kokeilla joskus ihan jotain muuta. Itse opettelin ensin skriptausta, imperatiivisia kieliä ja olio-ohjelmointia (C, Java, C#, PHP, ...) ja vasta pari vuotta sitten tutustuin lyhyesti Haskelliin, ja onhan se ajatusmaailma erilainen verrattuna edellämainittuihin kieliin mutta en itse kokenut että aiemmin opitusta paradigmasta (mikä on paradigma?) olisi ollut isosti haittaa. Ennemminkin oli jännittävää huomata että "oho, näinkin voi ohjelmoida". -AJL

Q: Mikä on vaikein/hyödyllisin ohjelmointikieli?
Q: Mikä on monimutkaisin ohjelmointikieli?
A: Vaikein ja monimutkaisin ohjelmointikieli lienee Malbolge http://en.wikipedia.org/wiki/Malbolge, vaikein hyödyllisin ehkä C++. ;-) -ji

Q: Miten ohjelmointi oikeasti määritellään?
A: Kaikkien hyväksymää määritelmää ei ole olemassa. Yksi mahdollinen tapa määritellä se on seuraava: Ohjelmointi tarkoittaa toimintaohjeiden (ohjelman) etukäteistä laatimista tietokoneelle, jotta tietokone ratkaisisi jonkin tietyn ongelmaperheen. Toimintaohjeet yleensä kykenevät rajoitetusti mukautumaan kulloinkin vallitseviin olosuhteisiin reagoimalla tietokoneelle tuleviin ärsykkeisiin (esim. syöte tai vuorovaikutus käyttäjän kanssa). (Ks. lisensiaatintutkielmani sivut 18-19.) - AJK

Q: Mitä tarkoittaa C, C++ ym ja mitä muita kieliä on ja miten ne eroaa toisistaan?
A: C-kieli Dennis Ritchien 1970-luvun alussa UNIX-käyttöjärjestelmälle kehittämä kieli, joka pohjautuu Ken Thompsonin B-kieleen. 70-luvun lopussa olio-ohjelmointi nosti päätään ja C-kieleen tuli eri oliolaajennuksia. Näistä tällä hetkellä "elinvoimaisin" on Bjarne Stroustrupin kehittämä C++ (eli ++ ilmaiseen yhtä eteenpäin, joten tämän piti tarkoittaa että "parempi C"). Lähes jokainen C-ohjelma on samalla C++ ohjelma (muutamaa poikkeusta lukuunottamatta). Tästä syystä C++ samalla sisältää kaikki C:n suuret ongelmat (joita toki voi olla käyttämättä :-). Kun Java tuli 90-luvun alkupuolella, se oli "pelastusrengas" C++:aan kyllästyneille. C# on taas Javan jälkeen kehitetty kieli, joten siinä on osattu ottaa huomioon Javan "ongelmia". Aikaisemmin C/C++ ratsasti nopeudella, mutta kääntäjä/virtuaalikone tekniikan kehittymisen myötä tehokkuuskysymykset ovat jääneet aika pitkälle taka-alalle.

Q: Mitä muita ohjelmointikieliä tulisi opetella yliopitso-opiskelun aikana kuin C#- ja Java-ohjelmointikielet?
A: Mahdollisimman monia. -ji

Q: Miten C# eroaa Javasta ja miksi kyseinen kieli on valittu ohjelmointi 1 kurssille?
Q: Mitä eroa on Javalla ja c#:illa.
A: C# on hieman uudempi kieli ja sillä on erilainen tausta. Lisäksi C#:in kehitys on ollut "vapaampaa", eli ominaisuuksia siihen on saatu nopeammin kuin Javaan. Monelta osin ne ovat hyvin samanlaisia ja esim. Ohj2-kurssilla ihmiset eivät kahden viikon jälkeen enää muistakaan että ovat juuri vaihtaneet kieltä. Ainoastaan muutama puuttuva ominaisuus harmittaa. Graafisen käyttöliittymän tekemiseksi työkalut ovat C# puolella edistyneempiä. Tuosta miksi kurssilla on C#, on aikaisemmissa vastauksissa (lähinnä syy siis Jypeli). - vl

4. Kurssin sisällöstä

Q: Miten monimutkaiseen toiminnallisuuteen tämän kurssin aikana päästään? (jokin demo tästä ensimmäisellä luennolla?)
A: Oikeasti ei kamalan pitkälle, sillä tämä on suurimmalle osalla ensimmäinen ohjelmointikurssi. Jypelin avulla pystynään tekemään tasohyppelyn vaikeutta oleva peli. Opitaan etsimään tiettyjä palasia tiedostosta. - vl

Q: Käsitelläänkö Ohjelmointi1:llä eri ohjelmointikielien eroja muuten, kuin yleisellä tasolla? C# on ilmeisesti "työkielenä", mutta opetetaanko Javasta mitään ennen ohjelmointi2:sta?
A: Esim. Villessä voitte halutessanne vaihtaa käytettävän kielen (tosin tuon tason tehtävissä ero Javan ja C#:in kohdalla on mitätön. Sanon kyllä missä tulee eroja.). Sitten luentojen sivuillakin on jo linkkejä saman ohjelman eri kielillä tehtyihin versioihin. Kannattaa tutustua. - vl

Q: Mitä kaikkea tulen tällä kurssilla oppimaan?
A: Toivottavasti rakenteisen ohjelmoinnin perusteet. - vl

Q: Voiko ohjelmointi ykkösen ja kakkosen jälkeen jo hakea töitä ohjelmoinnin alalta?
A: Kunhan ymmärtää että matka ammattilaisuuteen on vielä pitkä. Mutta osaajista on huutava pula ja hyvät valitettavasti pääsevät töihin noillakin tiedoilla ja jäävät sinne ja opinnot jäävät kesken. -vl

Q: Mitkä asiat ovat mielestäsi tärkeimpiä liittyen ohjelmoinnin opiskeluun?
A: MOTIVAATIO. MOTIVAATIO. MOTIVAATIO. Harjoittelu. Halu oppia! - vl

5. Jypeli

6. Yleistä ohjelmoinnista

Q: Mikä on ohjelmoinnissa vaikeinta?
A: Suostua ajattelemaan, jäsentää ongelmaa, tehdä itse useita kertoja sitä asiaa, mitä on ohjelmoimassa. Jos ei ole sen alan asiantuntija, mitä on ohjelmoimassa, on työ vaikeaa. - vl
A: Uskoa, että yhdellä ohjelmointikielellä ja ajattelutavalla tekee vain elämänsä vaikeaksi. -ji
A: Alan Blackwellin (PDF) mukaan ohjelmoinnista tekee vaikeaa neljä asiaa: (1) ohjelma suoritetaan yleensä eri aikaan kuin se kirjoitetaan; (2) ohjelma kirjoitetaan useimmiten suoritettavaksi useammin kuin kerran, kulloinkin eri tilanteessa, jolloin ohjelmoijan on pakko varautua suoritustilanteen monimuotoisuuteen; (3) erityisen merkintätavan (ohjelmointikielen) käyttö; ja (4) abstraktion käyttö tahallaan monimutkaisuuden hallitsemiseksi. - AJK

Q: Kuinka tarkkaan kannattaa dokumentoida koodia sitä tehtäessä?
A: Parhaan vastauksen saat kun itse luet koodiasi puolen vuoden kuluttua :-) Joka tapauksessa tällä kurssi on pakko dokumentoida yleisellä tasolla mitä kukin luokka/aliohjelma tekee. Aliohjelman tapauksessa sen parametrien käyttötarkoitus. Sekä tekijä. Tämä siksi että saadaan tuosta hyvä dokumentaatio. Mitä aliohjelmat sisäisesti tekevät, sen dokumentointi riippuu ihan niiden monimutkaisuudesta. Usein riittää että aliohjelmat ovat riittävän lyhyitä, jolloin niiden merkityksen dokumentoinnin lukeminen riittää siihen. että ymmärtää mitä aliohjelma tekee. Missään tapauksessa ei kommentoida: int a = 5; // sijoitetaan a:han viisi, tämän näkee jokainen kieltä yhtään osaava :-) -vl

Q: Miksi "oikeilla" ohjelmoijilla on tapana aloittaa koodin seuraava rivi etäämpää kuin aiempi rivi? https://www.dropbox.com/s/7u8p1984szgiezi/screen1.png?dl=0 Linkistä aukeaa kysymystä selventävä kuva.
A: Sisennys auttaa hahmottamaan ohjelman rakennetta. Rivit, jotka on sisennetty enemmän kuin niiden ympärillä olevat, ovat jossakin loogisessa mielessä kyseisten ympärillä olevien rivien määrittelemän lohkon "sisällä". Peräkkäiset rivit, jotka on sisennetty saman verran, ovat samantasoisia, kumpikaan ei ole toisen "sisällä". C#:ssä sisennys on pelkkä esitystapa, jolla ei ole merkitystä ohjelman toiminnan kannalta. Joissakin toisissa kielissä (esim. Python ja Haskell) sisennys on osa kielen syntaksia, ja se jopa ohjaa ohjelman käyttäytymistä. - AJK

Q: Tulisiko ohjelmointi lisätä peruskoulun opetusohjelmaan? Jos Kyllä, miltä luokalta alkaen?
A: Ohjelmointi tulee (todennäköisesti) peruskoulun opetussuunnitelman perusteisiin alkaen vuonna 2016. Käytännössä se tulee olemaan osa muita oppiaineita, erityisesti matematiikkaa. Tuossa lyhyt kooste siitä miten se näkyy kullakin luokka-asteella. -AJL
A: Jos minulta kysyttäisiin, niin EI. Syy: Siitä tulee huonosti opetettuna toinen matematiikka (eli aina jota kaikki vihaavat ja eivät siitä halua kuulakkaan), ja siihen tällä yhteiskunnalla ei ole varaa. Parempi on tehdä asiasta niin kiinnostavaa, että ihmiset hakeutuvat ohjelmoimaan vapaaehtoisesti. - vl

Q: Kiinnostaisi kuulla mitä olet mieltä koodaamisen sisällyttämisestä opintosuunnitelmiin perus ja ylä-aste opiskelijoille? Minkä ikäisille koodaamista tulisi mielestäsi opettaa?
A: Nelivuotiaasta eteenpäin, ja on hienoa, että ohjelmointi on vihdoin 2016 tulossa peruskouluun. Minusta se on yksi perustaito, kuten lukeminen, laskeminen, kirjoittaminen ja piirtäminenkin. -ji
A: Siinä vaiheessa kun lasta kiinnostaa. Pakolla ei saa muuta kuin vastenmielisyyttä aikaan. Motivaatio on kaiken a ja o. Kaikille ei minkään ikäisenä. - vl

Q: Miksi ohjelmoinnissa on niin tärkeää komentojen/objektien kirjoitusasu? Eli siis isojen ja pienten kirjainten merkitys?
A: Ensinnäkin, kaikille sattuu kirjoitusvirheitä, ja hyvät ohjelmointiympäristöt, kuten Visual Studio, auttavat käytännön kirjoittamisessa huomattavasti. Kun kirjoitat jotain vähän väärin, ympäristö ehdottaa yleensä sopivia korjauksia. Varsinaiseen kysymykseesi vastauksena, että esimerkiksi C#-kielessä on sovittu, että isot ja pienet kirjoitusmerkit tulkitaan eri merkeiksi, joten int kissoja = 3; on eri asia kuin Int kissoja = 3;. Jälkimmäinen aiheuttaa itse asiassa käännösvirheen. Isojen ja pienten merkkien erottelu mahdollistaa ilmaisuvoimaisemman kielen (tekee enemmän asioita vähemmällä määrällä merkkejä) ja välttää sekaannuksia eri nimeämistyylien välillä. -AJL
A: Esim. Pascal-kielessä isot ja pienet kirjaimet ovat samoja. - vl

Q: Minkälainen koulutustausta on henkilöillä, jotka tekevät tietokonepelejä ammatikseen? Entä mitä osaamista vaaditaan ohjelmoinnista?
A: Monet omaavat ihan yleisen teknisen koulutustaustan ja/tai ovat itseoppineita, omien projektien ja harrastuneisuuden kautta. Varsinaista pelialan koulutusta ei ole ollut olemassa vielä edes montaa vuotta, mutta sen merkitys on jatkuvassa kasvussa.
Hyödyllisestä koulutustaustasta:
1) Hyvät perustiedot ja kokemusta ohjelmoinnista. Jämäköiden perusteiden oppiminen kursseilla sekä oma intohimo aiheeseen, kurssien lisäksi opiskeluaikana kannattaa tehdä myös omia peliohjelmointiprojekteja. (Niistäkin voi saada opintopisteitä!)
2) Ymmärrys muustakin kuin tekniikasta. Pelit ovat vähintään yhtä paljon taidetta kuin tekniikkaa, esimerkiksi pelisuunnittelu on kokonaan oma taiteenlajinsa, peligrafiikasta ja -äänestä sekä tuottamis- ja markkinointipuolesta puhumattakaan. Vaikka pelisovellukset ovatkin formaalisti määriteltyjä ohjelmistoja, on niiden tarkoitus synnyttää informaali kokemus käyttäjässään. Pelinkehittäjän on hyvä osata katsoa maailmaa myös tiukan teknisen näkövinkkelin ulkopuolelta, esimerkiksi lukea jotain vähemmän teknistä sivuainetta.
3) Näyttöä osaamisesta ja projektien loppuunviemisestä. Käytännössä tällä hetkellä pelialalla koulutustaustan lisäksi merkitystä on hyvin paljon omalla portfoliolla. Yksi valmiiksi, ehkä jopa julkaisuun asti toteutettu pieni peliprojekti on arvokkaampi kuin kymmenen pöytälaatikossa pyörivää koodieeposta.

Pelit ovat parhaimmillaan hyvin monimutkaisia sovelluksia, joissa yhdistyy monenlainen ohjelmointiosaaminen. Peleihin liittyy usein reaaliaikaisuus, joka asettaa vaatimuksia toteutukselle. Vaikka kääntäjät osaavatkin monissa tapauksissa optimoida koodia, on hyvä ainakin ymmärtää miten koodista ylipäätään saa tehokasta ja miten sitä voi optimoida. Ohjelmoija voi keskittyä vain yhteen osa-alueeseen kuten grafiikkaohjelmointiin, tekoälyyn tai pelitapahtumien scriptaamiseen, mutta usein pienissä tiimeissä tai yksin pakertavina indie-pelinkehittäjinä ohjelmoijan on hyvä hallita laaja-alaisesti ohjelmoinnin eri osa-alueita. -JV

Q: Mitkä ovat riittävät taidot/taidot että ymmärtää pintapuolisesti tietokoneen sielunelämää graafisen liittymän alla? Monesi kuulee sanottavan että alussa kannattaa keskittyä tiettyihin "työkaluihin" (esim Java + Python + PHP + UNIX) eikä opetella vähän kaikkea. Onko olemassa jotain hyvää tai suositeltavaa listaa yleisimmin vaadituista kokonaisuuksista?
A: Kyllä ne tulevat tässä kun meidän perusopinnot käy läpi. Nuo eri kielet eivät sinänsä auta ymmärtämään koneen sielunelämään. Konekieli (assembler) lähinnä. - vl

Q: Mikä on kaikista oleellisinta ohjelmoinnissa?
A: Looginen ja johdonmukainen ajattelu. -TS

Q: Mitenkä tekstin avulla saadaan jokin sovellus luotua? Miten se siis käytännössä tapahtuu, että teksti muuttuu toimivaksi palaseksi osaksi sovellusta?
A: Teksti noudattaa jonkin kielen syntaksia. Teksti käännetään (esim. C#) kääntäjällä koneen ymmärtämään muotoon, joka voi olla suoraan konekieltä tai välikieltä jota sitten tulkitaan. 3. viikon luennoilla tulee esimerkki siitä, miten kone sitten tuota "kieltä" käsittelee. - vl

Q: Mikä ohjelmoinnissa on kaikkein tärkein taito fysiikan pääaineopiskelijalle? Miten ohjelmointia käytetään simuloinnissa?
A: Varmaankin se, että pystyy tekemään sen, mitä muut haaveilevat. Simulointi riippuu simuloinnin tasosta. Joitakin asioita voi toki itse ohjelmoida, mutta yleensä joutunee turvaantumaan muiden tekemiin kirjastoihin tai ohjelmistoihin, joita kutsumalla toki on mahdollista luoda myös uuttakin. Kannattaa olla yhteydessä Tietotekniikan laitoksen Simuloinnin ja Optimoinnin tutkijoihin. - vl

Q: Missä kaikissa ammateissa ohjelmointi on välttämätön työkalu?
A: Ohjelmistokehittäjän :-) Mutta tulevaisuudessa hyvin moni tuote sisältää ohjelmistotuotteen. Ja jos on mukana tällaisessa ketjussa, niin taidoista on varmasti hyötyä. Eikä edes opettajalle ole hyödytön taito, koska jos haluaa tehdä opetuspelin, olisi hyvä osata ohjelmoida. Ohjelmointia on vaikea (=kallis) ostaa ulkopuolisilta, sillä ulkopuolisen motivaatio tehdä asioita ei ole samanlainen, kuin sillä joka tekee asioita itselleen. Sen takia monen pienen yrittäjän haaveet jäävät hyvästä ideasta huolimatta toteuttamatta. Ei taideta muuten lehmiäkään lypsää enää paljoa ilman tietokonetta. Toki maanviljelijä ei itse joudu koneita ohjelmoimaan, mutta vaikea välttyä tietotekniikalta. - vl

7. Henkilökohtaista

Q: Miten innostuitte tietokoneista, minkä ikäisenä? Minkälainen oli ensikosketuksenne tietokoneisiin?
Q: Kuinka itse aloitit ohjelmoinnin?
A: Itse asiassa alunperin opiskelemaan tullessa ajattelin (1979), että jos tietokoneet ovat niin monimutkaisia että niitä pitää opiskella, saavat minun puolestani olla. Ensimmäinen kosketus ohjelmointiin oli 70-luvun puolivälissä enoni HP-laskin, jossa oli pieni tekstuaalinen kuuhun laskeutumispeli. Tuohon sitten yritettiin vaihtaa algoritmia, millä polttoa laskettiin. Se oli aika loogista. Opiskelun aluksi ostin itselleni ohjelmoitavan HP 41-laskimen. Sen ohjelmointi oli hyvin likellä konekielistä ohjelmointia. Tein mm. fysiikan töitä varten siihen tarvittavat laskuohjelmat valmiiksi, jotta työt pystyi palauttamaan saman tien. Yliopiston ensimmäisillä ohjelmointikursseilla oli käytössä Univac 1100 - tietokone. Ehkä teholtaan vaatimattoman älypuhelimen luokkaa. Kymmenen rivin Pascal-ohjelman kääntämiseen sillä saattoi mennä 10 min ja sen jälkeen tuli ilmoitus että puolipiste puuttuu. Tämä ei tietysti vielä vakuuttanut, mutta sitten kun pääsi tekemään graafisempia ohjelmia ja sai mielenkiintoisia pintoja piirrettyä näytölle, rupesi tuntumaan että voihan tässä olla jotakin järkeäkin. Omaa Vic 20 tai Commadore 64:sta minulla ei koskaan ollut, vaikka jotakin lainasinkin. Homma helpottui huomattavasti kun markkinoille tuli PC-koneita (aluksi monelta muulta valmistajalta kuin IBM:ltä ja parempia). Sitten kun näihin vielä sai Turbo-Pascalin, rupesi käännöskin kestämään alle sekunnin. Tietokoneista huolimatta IT-urani alku (harrastus+oma firma) oli aluksi logiikkapiireistä kasattuja sulautettuja järjestelmiä. Sitten mukaan tuli samat mikroprosessoriohjattuna. Tämän taustan takia minulla onkin kohtuullinen kuva siitä, mitä koneessa tapahtuu. Itse asiassa nykyisin on orpo olo kun uusia ohjelmointitekniikoita tuppaa tulemaan nopeammin kuin niihin ehtii tutustua, erityisesti WWW-ohjelmoinnin puolella. - vl

Q: Mitä ohjelmointikieltä olet käyttänyt eniten elämäsi aikana?
A: Jos lasketaan Turbo Pascal ja Delphi Pascal-kieliksi, niin Pascalia. Aikaan kirjoitin paljon myös konekielellä (osin Pascalin aliohjelmiksi eniten nopeutta vaativiin kohtiin, mutta ihan suoraan sulautettuihin järjestelmiinkin). - vl

Q: Mikä on isoin projekti jossa olet ollut, ja miten paljon siihen suunnilleen meni aikaa?
A: Joskus 80-luvun alussa perustin firman joka tekee sulautettuja järjestelmiä ja se sama tuote (muutaman kerran muotoaan ja alustaansa muuttaneena) on edelleen kehityksen alla. Teollisuudessa ei vaihdeta järjestelmiä joka vuosi :-) Sitten toki Korppi (ks: Korpin historia). Tuokaan historia ei kerro ihan kaikkea, sillä ensimmäinen Korpin edeltäjä, eli KurKi? (KURssien KIrjanpito) aloitettiin muistaakseni -81 tai -82 ja oli käytössä 80-luvun lopulle matikan laitoksella kurssitietojen kirjaamiseksi. Internetin valtakauden alettua tuosta lähdettiin sitten tekemään nettiversiota (toinen Kurki) ja siitä useiden projektien kautta nykyisin käytössä oleva Korppi (projektien nimet olivat aina suomalaisia K:lla alkavia linnun nimiä, paitsi Kolibi, jonka jäsenet eivät tainneet olla lintutieteilijöitä tai sitten olettivat Suomen suuremmaksi :-). Matkalla Korppiin oli myös Sali, jonka toiminnot yhdistettiin aikanaan Korppiin. Sali oli käytössä 80-luvun lopulta melkein 2000-luvun puoleen väliin. Tuosta näkee hyvin ohjelmistojen elinkaaren pituuden, mitä nykyisten työkalujen jatkuva vaihtuminen ei oikein tue. Eli suurena riskinä on valita työkaluja, joita ei enää kohta ole olemassakaan. Ja eritysesti pitää muistaa että ohjelmat eivät koskaan tule valmiiksi. On vain ominaisuuksia, joita niihin ei ehditä/ei ole varaa tehdä. -vl

Q: Mikä itseäsi kiehtoo ohjelmoinnissa?
A: Se että saa näkyvää ja toimivaa aikaiseksi. Voi toteuttaa itseään. - vl

Q: Mistä tekemästäsi ohjelmasta olet kaikkein ylpein?
A: Yleensä siitä, mitä juuri on työstämässä. Mutta olihan toki aikanaan hienoa esitellä Korppia Helsingin yliopiston porukoille kun heillä ei ollut mitään vastaavaa. Eikä kokonaisintegrointia vieläkään ole kenelläkään. Ja meillä olisi vieläkin parempi tilanne jos hallinto ei jarruttaisi. - vl

Q: Mikä on suosikkiohjelmointikielesi?
A: Yleensä se, millä nykyistä projektia tehdään (no nyt TIMin myötä ei kyllä Javascript eikä Python ole sellaiseksi kohonnut :-) - vl

8. Lajittelemattomat vastatut

Q: Kun on tarpeeksi kauan ohjelmointia harrastanut, niin rupeavatko koodit tulemaan jo ajatuksiin ja uniin?
A: Jos hyvin ja onnellisesti käy, niin kyllä. Tosin sama lienee minkä tahansa mieluisen harrastuksen kanssa. -ji

Q: Miten tehtävä B2 kuuluisi vastata, kun tehtävänanto on niin lyhyt? "B2. Numeron siirtäminen Yhtä numeroa siirtämällä tee yhtälöstä 62 - 63 = 1 tosi. "
A: Voisin tehtävän laatijana vastata tähän. 2-potenssien (kurssin osaamistavoite) lisäksi tuossa tehtävässä vaadittiin sellaista "laatikon ulkopuolelta" -ajattelua. Aika usein näin on myös ohjelmoinnissa, sillä ohjelmointi on yllättävän usein luovaa ja kekseliäisyyttä vaativaa työtä, ei mitään mekaanista näppäimistön naputtelua. Välillä se voi olla turhauttavaakin, vähän niinkuin kirjailijoilla voi joskus olla tyhjän sivun syndrooma jne. Jonkun mielestä tämä voi olla kaukaa haettua mutta tämä olikin bonus-tehtävä :-). -AJL

9. Historia

Q: Miten ensimmäinen graafinen käyttöliittymä on pystytty kehittämään?
A: Helposti, vain hitunen mielikuvitusta ja innostuneisuutta kehiin. Katodisädeputki keksittiin 1800-luvun viimeisinä vuosina, ja sillä saatiin piirrettyä kuvia 1900-luvun alkuvuosina. Televisio tuli kuvaan mukaan (heh!) 1930-luvulla. Tuolloin siis osattiin muuttaa sähkön jännitevaihtelut näkyväksi kuvaksi. Tietokone toimii aina sähkön jännitteen vaihteluilla, joten katodisädeputken ohjaaminen on vain sätöstämisestä ja pohtimisesta kiinni. Ivan Sutherland sitten teki 1963 jo vaikuttavia graafisia käyttöliittymiä tekniseen suunnitteluun, katso Sketchpad. Tähän ja tämän jälkeen tuleviin keksintöihin vaikutti kovasti parikymmentä vuotta aikaisemmin Vannevar Bushin julkaisema As We May Think. Vuonna 1968 tuli sitten iso paukku, Engelbartin Mother of all Demos. Tuo loi perustan sille, mitä nykyään käytämme. Demoa oli katsomassa mm. Alan Kay, joka sitten loi nykyaikaisen työpöydän (ja oliosuuntautuneen ohjelmoinnin) 1970-80-luvuilla, eli Xeroxin PARCin, joka oli käytössä jo 1973 Xerox Altossa. Herrat Bill 'Microsoft' Gates ja Steve 'Apple' Jobs sitten aikanaan näkivät tuon, ja lopun arvaattekin. -ji

Q: Miten ohjelmointi on saanut alkunsa ja mistä se on kehitetty?
A: Toivottavasti tähän tulee konkareilta parempia vastauksia. Aloita vaikka Charles Babbage. Voi toki kysyä olivatko mekaaniset pianot jo tietokoneita, sillä sama idea niissä, eli "kone" voidaan ohjelmoida tekemään erilaisia asioita (soittamaan erilaisia kappaleita). Tietyssä mielessä siis jopa soittorasiat ovat "tietokoneita". Myös kutomakoneita voidaan (ks. Edmund Cartwright). pitää jonkinlaisena tietokoneena. Kaikissa em. kone tekee yhdellä ohjelmalla koko ajan samaa asiaa, eli syötteellä ei hirveästi voida vaikuttaa tulokseen. Tämä on tyypillistä monelle sulautetulle järjestelmälle, esimerkiksi rannekellolle. Toki toisen maailmansodan aikaiset salakirjoituslaitteet ja niiden purkulaitteet olivat sellaisia, joissa syöte vaikutti merkittävästi (ks Alan Turing). Alunperin monet sulautetut järjestelmät on toteutettu transistoreiden tai tiettyä tarkoitusta olevien mikropiirien avulla. Piirilevyn suunnitteluvirhe (tai puuttuva ominaisuus mieluummin) johtaa kalliisiin muutoksiin. Seuraava vaihe on siirtää logiikkaa piireiltä ohjelmaan, joka voi olla kiinteästi ROM-piirille poltettu tai nykyisin yleensä jopa lennosta vaihdettavaksi tehty. Esim. Mars-mönkijöidenkin ohjelmia päivitetään jälkeenpäin tai jopa käytetään eri ohjelmistoa laskeutumisvaiheessa ja eri ohjelmistoa tutkimusajossa. Ohjelmointi on varsin luonnollinen kehityskulku siitä, että joku erityistä tehtävää varten tehty laite saadaan toimimaan yleisemmin, jolloin on halvempi vaihtaa laitteen toimintaa. Toki esimerkiksi nykyisen auton ohjelmat tehdään nimenomaan sitä varten että tuote on auto. Silti auton käyttäytymisominaisuuksia voidaan säätää ohjelmiston avulla kun ennen vaadittiin mekaanisia muutoksia.- vl

10. Lajittelemattomat

Q: Mitä hyviä ilmaisia internetlähteitä löytyy eri ohjelmointikielten itseopiskeluun?
A: Tuolla on muutamia mainittu. Mielellään kyllä otetaan lisää ehdotuksia vastaan hyvistä opiskelumateriaalin lähteistä. -AJL

Q: Onko joku aikaisemmilla kursseilla tehty peli päässyt kaupalliseen levitykseen?
A: Tähän kurssiin liittyy kännykkäohjelmoinnin jatko-osa 1-2 op., jonka tiimoilta Microsoftin kauppapaikkaan asti menneet pelit - ne joista meillä on tietoa - on koottu omalle sivulleen. Pitää tietenkin muistaa että nuo ovat lähes kaikille ensimmäisiä kokonaisia ohjelmia/pelejä joten kaupallinen menestys ei välttämättä ole se ykkösprioriteetti joten on kohtuullista että pystyy myös arvostelemaan ko. tuotoksia sen mukaisesti :-). -AJL

Q: Mikä on tähän mennessä laajin/monimuotoisin peli, joka ohjelmointi 1- kurssilla on toteutettu?
A: Laajimmat mitkä minä tiedän lienevät Miska K:n My Warfare 2 (esim. moninpeli, oma nettiserveri ym.) ja Denis Z:n LynkAdventures (pelkällä XNA:lla tehty, omat törmäyskäsittelijät, GUI-ohjelmointia ym.) Molemmat tuhansia koodirivejä. -AJL

Vastauksia joihin ei ole kysymystä

A: 42
A: https://www.cs.utexas.edu/~EWD/ewd13xx/EWD1305.PDF

Vanhoja kysymyksiä ja vastauksia