wiki:s2013/qa
Last modified 3 years ago Last modified on 2014-09-06 11:51:54

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 (jatko-opiskelija, tutkimusalana 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 2013

1. Kurssin suorittaminen

Q: Paljonko normaalisti menee aikaa, että alkaa tajuamaan ohjelmoinnista edes jotain?
A: Riippuu mitä tarkoittaa "edes jotain". Jo ensimmäisten kurssidemojen jälkeen osaa perusteita ohjelmoinnista! Kurssin puolenvälin jälkeen alkaa tulla syvällisempiä ahaa-elämyksiä alkupään asioista, kun alkaa tajuta, miksi asiat neuvottiin tekemään tietyllä tavalla, miksi johonkin kohtaan koodia tuli jokin tietty varattu sana ja niin edelleen. Kurssin jälkeen on vähintään jonkinlainen tuntuma siitä, mitä ohjelmoimalla voi yleensäkään tehdä, sekä osaamista sen verran, että tuleviin tarpeisiinsa voi kirjoittaa ihan vapaaehtoisestikin ohjelman helpottamaan muuten raskasta työtä. Niin ja yhtä kieltä osaamalla voi helposti opetella muitakin. -JP

Q: Mistä tietää, että kannattaa mennä Pahasti pihalla ryhmään?
A: Jos ei saa tehtyä yli 4 tehtävää/kerta - VL
A: Kannattaa muistaa, että tehtäviin voi alussa mennä hyvinkin paljonkin aikaa, työntekoa ei saa pelätä. Aina pitää ensin yrittää itse, hankkia tietoja monisteesta ja netistä, kilauttaa kaverille, jne. -AJL

Q: Voiko harjoitustyön tehdä ohjelmasta, jota on jo aikaisemmin tehnyt itse vapaa-ajalla?
A: Toki, kunhan se tehdään (tai muutetaan) kurssin työtavoilla ja välineillä

Q: Miksi ihmeessä ohjelmointikurssien tenteissä koodataan paperille? Opiskelijat tottuvat käyttämään kurssin aikana tekstieditoria ja sitten loppujen lopuksi joudutaankin näyttämään oma osaaminen ruutupaperille. Ketä tämä palvelee?
A: Se palvelee kustannustehokkaasti kaikkia :-) Kurssilla tarjotaan mahdollisuutta tehdä tentti koneella. n. 10 vuosittain ottaa tarjouksen vastaan. Oma kokemukseni on, että aikaa menee siihen muuhun kuin itse ajatteluun paljon enemmän kun ollaan tekemisissä koneen kanssa. Toki hyvä editori antaa helpommin lisätä lauseita toisten väliin ja korjata virheitä. Ja ajaminen + debuggaus yms. menetelmät antavat hyvän mahdollisuuden tarkistaa että tulos on "oikein". Ongelmaksi tulee vaan että miten tämä järjestetään kustannustehokkaasti 250 opiskelijalle. Nyt suunnitellaan sähköisiä ylioppilaskirjoituksia ja kaikki yritykset tehdä tuo turvallisesti on toistaiseksi korkattu. Eli on todella vaikea valvoa tilaisuutta niin, että tarpeelliset välineet ovat käytössä, mutta ei postailla kaverille "miten teet tämän". Tentin ohjelmat ovat todella lyhyitä kun tehdään paperilla, jolloin tuo editointi ei ole niin suuri kynnyskysymys kuin ymmärrys. pari puuttuvaa puolipistettä ei pistä tehtävää nollille ja se lunttilappu saa olla mukana ettei tarvitse mitään muistaa ulkoa. -VL

Q: Veljeni on AMK:ssa ja heillä ei ollut mitään tenttiä jossa koodataan paperille. Miksi yliopistossa on käytössä tuollainen systeemi? Eikö tuon osaamisen voisi näyttää laajemmalla harjoitustyöllä?
A: Harjoitustyön vika on aina se, että ei ole tapaa todeta kuka sen on oikeasti tehnyt. Harjoitustöitä myydään käytävillä edelleenkin (en tiedä mikä on päivän hinta). Massakurssissa jossa on pakko antaa numero, tarvitaan jokin tapa todentaa tuo oma osaaminen. Koska ei ole resursseja järjestää konetta kaikille, niin silloin paperi on toistaiseksi ainoa mahdollisuus. Halukkaille on kyllä tarjottu mahdollisuutta konetenttiin. - VL

Q: Kuinka tehtäväkohtaiset pisteet (0-1) vaikuttavat arviointiin?
A: Noiden summa muodostaa kunkin demokerran pisteet (siis se max 8/kerta) ja niistä lasketaan sitten ne hyvityspisteet annetun hyvitystaulukon mukaan. Eli 27 tuommoista tuottaa yhden lisäpisteen tenttiin. - VL
A: Kannattaa myös muistaa, että 6 tehdyllä tehtävällä viikossa saa 90% vaadituista tehdyiksi. 8 per demokerta on vain maksimi, jolla voi korvata esimerkiksi edellisellä viikolla vaille jääneitä pisteitä. Kannattaa tehdä 8 pisteen edestä joka viikko, niin tentti sujuu helpommin. -JP

Q: Voiko ohjelmoinnista selvitä ilman intohimoa alaan?
A: Ohjelmoinnista ei, mutta kurssista kyllä. Ohjelmointia työnä/harrastuksena ei ole järkevää tehdä, jos siitä ei edes vähäsen nauti. - VL

Q: Kuulin huhua, että jos tekee joka demokerralla demotehtäviä 8 pisteen edestä eli täydet, ei tarvitse osallistua tenttiin. Pitääkö huhu paikkaansa?
A: Ei pidä paikkaansa. Jos joskus on muutamalle tosi ahkeralla jokin palkinto annettu, se ei tarkoita, että näin kävisi joka kerta. Ohj2:lla on hieman eri asia, koska siellä vaovotaan harjoitustyön kautta koko ajan tekijöitä jolloin ihan demoja kopioimalla (kyllä, näitä valitettavasti on joka vuosi) ei ole mahdollista päästä läpi. Jos tekee sen 8/kerta, ei ole mitään mahdollisuutta munia tenttiä, rutiini on silloin niin kova että tenttitehtävät ovat oikeasti lasten leikkiä. - VL

Q: Mikä on hauskin yksittäinen asia tällä kurssilla?
A: Minusta se kun ihmiset saavat lumiukon silmät pään sisälle. On tuo varmaan kiva kokemus opiskelijallekin. Kivaa on myös kun "toimivia" pelejä esitellään kavereille ja kaikki ei menekään ihan kuten pitäisi, mutta riittävän likelle. Silloin on yleisöllä hauskaa, miksei myös tekijällä. - VL

Q: Voiko tämän kurssin suoritettuaan kutsua itseään nörtiksi?
A: Nörttiys ei ehkä ole niinkään taito kuin asenne. Ja voiko asennetta muuttaa yhden kurssin aikana? Jos taitoja mitataan, niin ei puolessa vuodessa oikeasti paljoa saada aikaiseksi. Jonkinlainen alustava kuva siitä, mitä ohjelmointi voi olla. Tässä tuntee itsensä aina vaan vuosi vuodelta epätäydellisemmäksi, samoin kuin lentämisessäkin (vaikka jäi tässä joku aika sitten haukka jälkeen nostossa). - VL

Q: Mitä tietotekniikan kursseja suosittelisit luonnontieteilijöille (matemaatikoille, fyysikoille, kemisteille), ajatellen laskentaohjelmia, erilaisten mittaustulosten käsittelyä, analysointia, jäsentelyä yms.
A: Ohjelmointi-kurssit, Algoritmi n-kpl, toki oman alan kurssit, koska ei Tietotekniikan laitoksella ole tiedossa mitkä ovat uusimpia ohjelmia tietyllä alalla. Tilastotieteen kurssit (SPSS:n käyttötaito), kursit missä käsitellään Exceliä (tosin harvassa kunnolla laskemisen kannalta). - VL

Q: Mitä kirjaa suosittelisit lisämateriaaliksi kurssille/jatkoa ajatellen?
Q: Mitä kirjoja kannattaa lukea luentomonisteen lisäksi?
A: Monipuolisesti mitä vaan mitä saa käsiinsä joka käsittelee ohjelmointia. Ehkä ihan pelkkiä tietyn kielen syntaksia käsitteleviä kannattaa vierastaa, mutta toki useissa kirjoissa on joku kieli esimerkkikielenä. Yleensä näistä saa vaan sodan aikaiseksi :-) - VL
A: How to Design Programs, ja jos haluaa haastetta Structure and Interpretation of Computer Programs. -ji

Q: Minkälaisen ohjelman me teemme kurssin harjoitustyönä? Tuleeko siihen fysiikka suoraan esim Jypeli-kirjastosta vai kirjoitetaanko itsekin jotain vastaavaa? Kuinka paljon peliin täytyy itse luoda koodia vai onko se paljonkin ctrl + c -> ctrl + v meininkiä jo olemassa olevasta koodista?
A: Fysiikka kannattaa ottaa Jypelistä. Toki esim. joku PacMan-tyyppinen on melkein parempi ilman fysiikkaa, koska fysiikan kanssa otukset lähtevät kimpoilemaan seinistä. Silti piirtäminen, kentän luominen yms kannattaa jättää Jypeli huoleksi. Kuinka paljon Copy/Pastea tulee, se riippuu ihan tekijästä. Monessa pelissä on samoja elementtejä ja toki jos joku AngryLegosta saa ideoita, niin saahan niitä käyttää. Mutta toivottavasti omaakin koodia tulee joku 100-200 riviä. - VL

Q: Voiko kurssin harjoitustyötä tehdä pareittain, yhteisenä projektina? Ymmärtääkseni joskus näin on voinut toimia.
A: Kyllä voi. Pari vaan kannattaa valita niin, että yhteistä aikaa ja tahtoa löytyy. - VL

Q: Voisitko näyttää tarkemmin linkkien tekemistä wiki-sivuille?
A: Joo, tämä tulee siinä kun katsotaan miten harkkatyö laitetaan Wiki-sivuille. Jos on hirveä kiire, voi vastaavan luennon videon katsoa viimevuodelta etukäteen. Mutta periaate on helppo Hakasulkuihin ensin linkki ja perään se teksti mikä näkyy sivulla. - VL

Q: Olisiko kurssilla mahdollista käydä läpi vähän useamman tyylisiä harkkatyö mahdollisuuksia? Kevään ohj1 kurssilla oli suurin osa esimerkeistä tasohyppelypeleistä.
A: Mahdollisuudethan ovat rajattomat. Harkkatyön nettiin laittamisen yhteydessä näytän suunnitelmaa hirsipuupelistä. "Peli" voi olla myös grafiikan piirtämistä johonkin mittaustuloksiin, lasten lukemaan/laskemaan/tms opettamispeli, vain mielikuvitus on rajana. Se että tasohyppelyjä tulee paljon, johtuu siitä, että se on valmiina Jypelin projektimallina. Pitäisi ehkä kurssilta poistaa, mutta nuorten kurssilla se on välttämätön joillekin, jotka eivät hirveästi ehdi oppia ohjelmoimaan viikon aikana. Vaihtamalla tuohon hahmoja ja taustoja, tuntee saaneensa oman pelin aikaiseksi. Ja nuorten kurssin yksi tärkeimmistä asioista on onnistumisen tunteen luominen. Tällä kurssilla on jalommat päämäärät (toivottavasti sitä onnistumisen tunnettakin toki tulee), joten jos joku tekee tasohyppelyitä, niin toivottavasti siihen on tehty muutakin kuin vaihdettu hahmoja ja tasojen paikkoja. Oikeastaan merkittävin raja Jypelillä on se, että "pelin" pitäisi olla 2D, sivusta tai ylhäältä katsottu. Muihin joutuu tekemään paljon enemmän itse. - VL

Q: Onko tutkimusta siitä, kuinka kauan alkuinnostus jatkuu kurssin aikana? :)
A: Yksi "tutkimushan" on pelkästään tuo käyrä tuolla demosivuilla. Eli valitettavasti se osalta laskee, mutta kurssin kehittämisen myötä on kyllä laskua pystytty hidastamaan. Suurin ongelmahan tässä on että niin kauan kuin ohjelmointi on jollekin pakkopulla, niin vaikea sitä innostusta on ylläpitää. Mutta jos todella haluaa itse tehdä itselleen jotakin, niin se elättää sitä tiedonjanoa ja innostusta. Siksi HT kannattaa miettiä sellaiseksi joka on lähellä sydäntä ja yrittää tehdä sitä etuajassa, kohdata ongelmia ja saada niihin vastauksia sitten kurssin aikana. Siitä tulee AHAA-elämyksiä. - VL

2. Työkaluista

Q: Miksi meidän pitää käyttää Visual Studio 2010 kun 2012 on jo käytettävissä ja uusimmasta versiosta on jo ns. "Preview" ladattavissa?
A: Ei PIDÄ, mutta se on helpompaa koska MS on jättäytymässä pois XNA:sta ja VS2010 tukee sitä paremmin. Kurssin sivuilla on toki ohjeet tehdä asiat VS2012 ja itsekin käytän sitä, mutta se ei tällä tasolla tarjoa oikeastaan vielä mitään enempää. Paitsi jos haluaa tehdä WP8/RT-ohjelmia. Lisäksi muutamia muitakin juttuja on jätetty pois VS2012 :-( - VL

Q: Ymmärsinkö oikein, että Visual Studio 2010 Ultimatea ei tarvitse, jos asentaa Windows Phone SDK 7.1. Vai onko mitään järkeä asentaa molemmat?
A: Et täysin :-) WP SDK tuo mukanaan Windows Phone työkalut ja VS Express (joka on kaikille ilmainen, riisuttu versio). Tuolla Express-versiolla voi tehdä suuren osan kurssin jutuista, mutta ei automaattista testaamista. Sen taas tuo mukaan mm. tuo Ultimate-versio. - VL

Q: Mitä kaikkea ohjelmia pitää ladata tietokoneelle ja miten?
A: Mitä tarkoitusta varten? Kurssia varten on kurssin kotisivuilla linkki työkaluihin. - VL

Q: Kurssilla tärkeä työkalu kynän lisäksi on tekstieditori. Jos ohjelmointikokemus on nolla, kannattaako nähdä ylimääräinen vaiva alussa ja opetella käyttämään suoraan Emacsia tai muuta "korkeamman oppimiskynnyksen ohjelmaa"? Onko hyötyä verrattuna esim. Notepad ++:aan?
A: Ei siitä kovin paljoa vaivaa ole ja kyllä se tulevaisuudessa kannattaa. Editorejakin on monenlaisia. Vanhat hyvät emacs ja vim ovat edelleen tehokäyttäjien suosiossa, mutta esimerkiksi sublime text 2 antaa suuren osan hyödystä samalla vaivalla kuin Notepad++. - VT
A: Kannattaa kokeilla ja opetella ainakin jollain tasolla käyttämään monia editoreja. Tämä pätee yleisemminkin: Kannattaa tutkia ja kokeilla monia ohjelmointikieliä, ympäristöjä, käyttöjärjestelmiä, ... -AJL
A: Tuo "korkeampi oppimiskynnys" viittaa siihen, että noiden editorien kanssa joutuu poisoppimaan aiemmin oppimiaan tapoja ja ajattelumalleja tekstin editoinnista, jotta paras hyöty löytyy. Näinhän on työkalun kuin työkalun laita. Vastineena saa sitten jotain, joka kasvaa ja mukautuu käyttäjänsä taidon karttuessa. Tätä eivät "notepädit" tarjoa. -ji

Q: Kuinka monta koodiriviä on Windows 8:ssa?
A: Jossakin oli arveltu että Windows 7:ssa olisi suuruusluokkaa 40 M riviä. Eli eikähän karkeasti samassa kategoriassa olla W8:ssa. Kun olin vielä mukana Korpissa, siinä oli noin 500k riviä. AngryLegossa näyttää olevan 1037 riviä. Jypelistä PowerShellin komennolla (dir -include *.cs,*.xaml -recurse | select-string .).Count tulee n. 90k riviä (epätyhjiä rivejä). Tosin rivimäärän laskeminen ei ole oikein mielekästä, koska sitä voidaan laskea hyvin monella tavalla. Lasketaanko vain koodirivit, entä sulkurivit, kommenttirivit jne? Tapoja on yhtä paljon kuin laskijoita. Lisäksi joillakin kielillä voidaan muutamilla riveillä ilmaista enemmän asiaa kuin monilla toisilla. Tekemällä tyhmää koodia, saadaan rivejä paljon, asiaa vähän ja päinvastoin. Eli koodirivien määrään kannattaa aina suhtautua varauksella! - VL

Q: Kun mustaan koodauslaatikkoon (en tiedä sen nimeä) tehdään ohjelmia, ne jäävät ymmärrykseni mukaan tallennettuina tietokoneelle. Olisiko siis saman mustan laatikon kautta mahdollista muokata kaikkia tietokoneen ohjelmia, vai onko laatikko itsessään jokin ohjelma, jolla voi luoda lähinnä vain uutta? Koodaus on minulle aivan uusi juttu, joten kaikki perusasiat tuntuvat oudoilta.
A: Tarkoitat varmaankin komentoriviä (tunnetaan myös nimillä komentoliittymä, konsoli, komentotulkki, terminaali, englanniksi command line interface, command prompt, jne. Rakkaalla lapsella on monta nimeä.). Perusidea on se, että komentorivi on ohjelma (kyllä!), johon voit kirjoittaa tekstinä komennon (ja lopuksi painaa Enteriä) jonka tietokone sitten suorittaa. Voit käynnistää sen klikkaamalla Windows + R ja kirjoita cmd ja paina Enter. Esimerkiksi voit sanoa (Windowsissa) komentorivillä vaikkapa dir > tiedostot.txt | notepad tiedostot.txt. Kokeile itse mitä tapahtuu :-). Komentoja on käyttöjärjestelmästä riippuen rajallinen määrä. -AJL
A: Mielestäni komentorivin pääpointti on se, että voit automatisoida joukon toimintoja. Esimerkiksi, voidaan tehdä komentoriviohjelma, joka tarkkailee tietokoneelle tallennettavia tiedostoja, ja jos ne ovat tietynlaisia videotiedostoja, ne muutetaan toiseen videomuotoon. Automatisointi on mahdollista kun komennot annetaan tekstimuodossa: hiirellä tai kosketuskäyttöliittymällä tuollainen automaatio on vaikeaa tai mahdotonta, asiat pitää tehdä silloin "manuaalisesti" itse (ja se maksaa rahaa). -AJL
A: Komentorivi on ohjelma, jonka tarkoitus on lukea käyttäjän syöte ja sitten etsiä sitä vastaava ohjelma (polku + path-extension) ja käynnistää se. Ei oikeastaan muuta. Hiiriliittymässä saman asian ajaa työpöytä, mutta työpöydältä ei voi (=tavallinen ihminen ei osaa) antaa parametreja käynnistyvälle ohjelmalle. Ja kuten edellä sanottiin, niin komentorivin suurin etu on, että sillä voi automatisoida tehtäviä. Kokeilin joskus tehdä vähän samanlaista hiirikäyttöistä, jossa ohjelmia raahataan "jonon" päälle, mutta oikeastaan siitä ei tullut sen helppokäyttöisempää ja luovuin ajatuksesta. - VL

Q: Miten pääsen käsiksi kiintolevyjen ns. raakadataan (bitteihin)?
A: Tämä on mennyt ajansaatossa uusien järjestelmien myötä vaikeammaksi. Välillähän tuota tallennustapaa jopa salaillaan ja meni vuosia ennenkuin esim. Linux pystyi lukemaa Microsoftin NTFS-järjestelmää. Tuohon on kyllä erilaisia ohjelmia, joilla voi esim. palauttaa poistettuja tiedostoja (koska poistaminen on vain merkitä levylle että tämä alue on käyttämätöntä, mutta mitään ei oikeasti poisteta). Nykyisin en ole enää tuota sisältöä suoraan nuuskinut, eli en tunne nimeltä sellaisia ohjelmia, joille voi suoraan sanoa että lue tämän levyn tuon uran tuo sektori. Ennen taisin tuollaisen tehdä jopa itsekin niitä opiskelijoiden diskettejä pelastamaan. Uskoisin että Linux-puolella tähän on enemmän kaluja, joku tietävämpi voinee kertoa lisää. - VL
A: Nykyisin SSD:t ja välimuistia itsessään sisältävät levyt voivat olla vieläpä niin ovelia, että piilottavat käyttöjärjestelmältä oikean raakadatan. Eli kun käyttöjärjestelmä pyytää, että annas kohtaan x tallennettu tietty data, niin oikeasti se saattaakin sijaita nopeussyistä aivan eri puolella levyä. Tämä vaikeuttaa esimerkiksi sellaisten ohjelmien käyttöä, jotka kirjoittavat tietyn tiedoston päälle useita kertoja satunnaista dataa tarkoituksena pyyhkiä tiedosto fyysisesti lukukelvottomaksi. Nehän eivät sitten enää toimikaan halutusti, kun dataa kirjoitellaan minne sattuu, vaikka levy kertoo kirjoittaneensa sen tiettyyn kohtaan. Hyvänä puolena logiikkaa sisältävissä levyissä on niiden nopeus ja SSD-levyissä arvokkaiden kirjoituskertojen säästäminen. -JP

3. Eri kielistä

Q: Kuinka paljon C# poikkeaa Javasta? Mitä olennaisia eroja niillä on, vai onko niitä?
A: C#:illa voi tehdä melkein kaiken saman kuin Javalla. Toisaalta C# on uudempi kieli ja siinä on erinomaisia ominaisuuksia mm. Jypelin tekemiseksi (esim. delegaatit ja lambda-funktiota jotka vasta tekevät tuloaan Javaan). Ohj2:lle käytetään sitten Javaa, niin näette eron. Tästä on hyviä kirjoja, joissa noita eroja verrataan jommankumman kielen suhteen. - VL

4. Kurssin sisällöstä

Q: Olisi yksi ehdotus kurssin kotisivujen käytettävyyden parantamiseksi: Linkit voisi aueta suoraan uuteen välilehteen. Vai onko tähän joku syy/selitys ettei näin ole?
A: Suurin osa ei halua näin ja siksi on parempi, että ne aukeavat samaan ikkunaan ja ne jotka haluavat eri ikkunaan, pitävät Ctrl-pohjassa kun klikkaavat. Eli silloin jokaisella on mahdollisuus valita mitä haluaa. - VL
A: Linkkien aukeamista (oletuksena) uuteen ikkunaan/välilehteen pidetään yleisesti ottaen huonona käytäntönä webbiohjelmoinnissa. Mutta tosiaan Ctrl-näppäin pohjaan tai sitten hiiren keskinapilla (rullalla) klikkaaminen avaa uuden välilehden. -AJL

5. Jypeli

Q: Miksi linux ja mac koneet on jätetty paitsioon?
A: Kun homma aloitettiin, niin työkalut olivat Windowsille paljon paremmat kuin em. Nyt tilanne on paranemassa kun MonoGamella ehkä voidaan korvata XNA. Hyviä MultiPlatform-työkaluja ei ole ollut oikein olemassa. Toki Macille on hyviä työkaluja, mutta ne eivät olisi toimineet Windowsissa. - VL

Q: Voiko Jypelillä tehtyjä pelejä kääntää Android-puhelimille mitenkään järkevästi?
A: Toivottavasti loppusyksyn aikana. Tästä on projekti menossa. - VL

Q: Voiko harkkatyönä tehdä Jypelillä vuoropohjaisen pelin?
A: Kyllä, erityisesti jos se on samassa koneessa, koneiden välinen tietoliikenne ei kuulu kurssin osaamistavoitteisiin. - VL

Q: Piirsin lumiukolle nenäksi kolmion, mutta huippu jäi osoittamaan ylöspäin, vaikka olisin halunnut sen toisinpäin. Miten siis onnistuisi piirtää kolmio, jonka huippu osoittaa alas?
A: PhysicsObject-olioilla on Angle-ominaisuus, joka kertoo, missä kulmassa olio on. Kun oliota (eli tässä tapauksessa nenää) pyörittää 180 astetta, se tulee oikeinpäin.
A: Lyhyesti: nena.Angle = Angle.FromDegrees(180); - VL

Q: Tarvitseeko peliä suunnitellessa ottaa jotain erityistä huomioon, jos sen haluaa myös toimivan puhelimella?
A: Periaatteessa Jypeliä käytettäessä ei kovinkaan paljon, peli on suhteellisen yksinkertaista siirtää kännykälle. Käytännössä tietenkin erilainen resoluutio, kontrollit, suorituskyky ja muistin määrä, virrankulutuksen vaatimukset jne jne pitää ottaa huomioon kun viilataan peliä viimeisen päälle kuntoon. Ensimmäinen tyypillinen haaste Jypeli-peleissä on, että peliin tehdään liikaa fysiikkaolioita, eikä puhelin jaksakaan pyörittää peliä/fysiikkalaskentaa kunnolla. Jonkinlaisena nyrkkisääntönä voi pitää, että pelissä saa olla enintään 100 fysiikkaoliota kerralla, mieluummin vähemmän. Tämän siis olen itse huomannut opiskelijoiden peleistä. -AJL

Q: Kuinka paljon jypeli yksinkertaistaa asioita, jos verrattaisiin esimerkiksi ilman jypelikirjastoa tehtyä lumiukkoa jypelikirjastolla tehtyyn lumiukkoon?
A: Ei me sitä oltaisi tehty jos se ei yksinkertaistaisi PALJON. Heti jos halutaan voimia tai kuunnella peliohjaimia tms., niin tuo on helpompaa kuin missään muussa järjestelmässä. Mutta jos on pelkkä ohjelma jossa on kolme palloa päällekkäin eikä mikään muutu, niin tuonhan saa toki piirrettyä vaikka Paintilla ja tekee ohjelman joka näyttää yhden kuvan (joka sekin on aika työlästä jos tyhjästä lähdetään). Tavoite on kuitenkin saada tuota liikettä ja kontrollia peliin. Lisäksi esim. Microsoftin esimerkit XNA:n suoraan käyttämiseen ovat hyvien ohjelmointitapojen vastaisia. Ja Jypelin tarkoitus on tukea hyviä ohjelmointitapoja. Mutta täytyy malliksi joskus tehdä ohjelma joka piirtää ne kolma palloa suoraan XNA:lla. Ja XNA on Microsoftin tarkoittama kirjasto, mutta tyypilliseen tapaan taso on jätetty liian alas. Ilman XNA:ta taas lisätään vaikeutta. Muistakaa että tällä kurssilla pääpainona ei ole peli, vaan ohjelmointi. Peli on motivaatio ja jotta kaikki aika ei mene pikkuasioiden kanssa tappeluun, vaan voidaan keskittyä itse työhön, tarvitaan joku helpottava väline. Meillä se on Jypeli. Toki jos pääpainona olisi peli, niin kirjastona olisi tällä hetkellä ehkä Unity. Mutta Unity taas ei opeta ohjelmoimaan samalla tavalla. Alice on parempi esimerkki sellaisesta, missä itse sen ohjelman näkee mukavammin. - VL

Q: Minkälaiset äänenkäsittelymahdollisuudet Jypelistä löytyvät?
A: Toistaiseksi sellaiset, että voidaan valita valmiista äänitetyistä tai muuten saaduista äänitiedostoista se mikä soitetaan. Vastaavalla Java kurssilla oli Music-kirjasto, jolla pystyi soittamaan yhtä helposti kuin "Hello World" tulostetaan (esim. Ukko-Noa: mp.play("CCCEDDDFEEDDC*");). Tätä ei valitettavasti kukaan ole ehtinyt "porttaamaan" Jypeliin. - VL

Q: Miten pelimoottori syntyy?
A: Yleensä niin, että tehdään yksi, kaksi, kolme,...,n peliä ja sitten huomataan että jokaisessa tuli tehtyä nippu samoja asioita. Sitten eristetään nuo samat asiat ja kirjoitetaan niistä oma kirjasto (eli "peli-moottori"). Hyvin monelle peliohjelmoijan ura on sitten hyytynytkin tuohon että moottorin tekeminen onkin tärkeämpää kuin itse pelit. Omaa moottoria on hyvin vaikea saada "kaupaksi" muille. Esim. vaikka Jypeli on monessa suhteessa ylivoimainen (käyttötarkoitukseensa), niin silti ei edes Suomessa muut oppilaitokset halua sitä käyttää. Aina pitää tehdä itse :-) - VL

Q: Mikä on hienoin peli, jonka kurssilla oleva on ohjelmoinut?
A: (Osa vastauksesta copy-pastetettu syksyn 2012 vastauksesta). Monia hienoja hienoja pelejä on syntynyt, esimerkiksi Simo Rinteen Turnajaiset (mm. verkkopeli), Visa Nummelinin Otusottelu (RTS, lukiolainen), Henrik Paanasen SupaXtriim (mm. omat valot). Näistä jokainen on toki laajempi kuin Ohj1-kurssilla vaadittu, mutta kertoo jotain Jypelin mahdollisuuksista ja toisaalta siitä, että hommaan uppoutuu helposti ja "pakollinen harkka" muuttuu yhtäkkiä kiinnostavaksi ja hauskaksi... Myös nuorten pelikursseilla (kesäkurssi yläkoululaisille ja lukiolaisille) on syntynyt paljon hienoja pelejä. Pari esimerkkiä: Denis Zhidkikh: CastleMaster (Video, huom. tämä tehty "puhtaasti" XNA:lla, ei Jypeliä mukana), Miska Kananen: My Warfare 2 (Video)-AJL

6. Yleistä ohjelmoinnista

Q: Kuinka iso urakka on uuden ohjelmointikielen opettelu, olettaen että nyt ohjelmoinnista näin geneerisesti jotain ymmärtäisi? Tähän kysymykseen kontekstina esim. se valtava erilaisten ohjelmointikielten ja niihin liittyvien muiden asioiden hallinta, joita alan työpaikkailmoitusten osaamisvaatimuksissa on tullut vastaan.
A: Urakan suuruus riippuu oleellisesti urakoitsijan lähtötasosta, motivaatiosta sekä yleisestä soveltuvuudesta ohjelmointialalle. Jos on oppinut ainakin yhden kielen hyvin (esim. suorittanut kurssin erinomaisin tiedoin), on jo osoittanut riittävän motivaation ja soveltuvuuden alalle ja lähtötasokin on kohtalainen uuden kielen oppimiselle. Ensimmäisen kielen oppiminen on siis melkoinen testi. Aikanaan oman maisterinkoulutukseni lopussa oli hallittava 17 ohjelmointikieltä, oli pystyttävä ottamaan kantaa kunkin kielen erityisominaisuuksiin ja tehtävänratkaisutapoihin, eikä kaikista kielistä oltu puhuttu luennoilla. Silloin kovin yleisesti käytössä olleet kielet Cobol ja Fortran olivat tällaisia (kursseitta opeteltavia) kieliä, jotka oli hallittava jokaisessa työpaikassa (jo ensimmäisen opiskelutalven jälkeenkin) ja myöskin tutkinnon lopun kypsyyskokeessa. Ohjelmointikurssejakin kuului tutkintoon aika monta: OhjI, OhjIB, OhjII, OhjIII, OhjIIIB, Ohj.IV ja Systeemiohjelmointi. Perustutkinnon jälkeenkin olen perehtynyt muutamaan ohjelmointikieleen. Mutta siihen maailmanaikaan (60-70-luku, toim.huom.) ei opiskelutovereistani juuri kenestäkään ohjelmoijaa tullut, sillä heidät riistettiin koulupenkeiltä lähinnä suunnittelupäälliköiksi, atk-päälliköiksi ja tietohallintojohtajiksi. Itsestäni tuli tietojärjestelmien suunnittelun opettaja. - VS
A: Tuossa vielä lisää tarinaa Savolaisen Vesalta:

  • Tosiaankin, vuonna 1967 ensimmäiset neljä ohjelmointikurssin harjoitustyötä tehtiin pehmeällä lyijykynällä mark sensing -reikäkorteille. Ne ajettiin ensin reprolla reikäkorteiksi.
  • Aika rattoisaa aikaa. Kun minulla 1967 viimeinen töiden palautuspäivä (siten että niistä hyväksyttyinä saattoi vielä saada hyvityspisteitä loppukokeeseen) iski päälle, niin pistin merkatut reikäkortit vain suoraan tarkastukseen, testaamatta. Kolme neljästä ohjelmasta toimikin heti ja hyväksyttiin ;) 
  • Vielähän sitä pelattiin reikäkorttien jälkeen muutama vuosi reikänauhoillakin 1970-luvulla eikä se oikeastaan sen helpompaa ollut. Päätesalit vain olivat kovin äänekkäitä reikänauhojen luku- ja lävistyslaitteiden räksytyksen vuoksi.
  • Myöskin ohjelmointi esimerkiksi Turingin koneella, Lispillä ja Algol 68:lla (ALGOL 68 features include include expression-based syntax, user-declared types and structures/tagged-unions, a reference model of variables and reference parameters, string, array and matrix slicing, and also concurrency) oli hauskaa ja harjoitustöiden vuoksi silloin haastavaakin.

A: Aika lailla vastaus riippuu myös opeteltavasta kielestä ja kuinka samankaltainen se on jo osattuihin nähden. Jos kielen toimintatapa on samankaltainen kuin aiempien kielten, ei opetteluun kamalasti aikaa eikä energiaa mene. Jotkin kielet puolestaan ovat niin erilaisia, että sitä joutuu oikeastaan oppimaan uuden tavan ajatella. Siinä voi kestää kauankin. - AJK

Q: Jääkö ohjelmointiin koukkuun?
A: Voi jäädä. Mutta niin voi jäädä lentämiseenkin... - VL

Q: Onko nykypäivän ohjelmoinnissa "trendejä" tai tapoja, joita ei ole esimerkiksi 5 vuotta sitten ollut yleisessä käytössä?
A: 5 vuotta on ehkä kuitenkin hieman liian lyhyt tarksteluaika. Agile on nostanut päätään (toistakymmentä vuotta), rinnakkaisohjelmointi on nousussa (ollut jo ainakin parikymmentä vuotta), testaamisen merkitystä korostetaan (tehty jo kauan) jne. - VL
A: Ehkäpä yksi muoti-ilmiö on "delegaatit", joskaan C#-kielen delegaatit eivät ole oikeastaan sama asia kuin delegaatit alunperin oli. Reaktiivinen ohjelmointi on nostamassa päätään, samoin DCI ja paluu ohjelmistoalustan määräämästä ohjelman rakenteesta sovellusalueen määräämään (Clean Architecture). Funktionaalinen ohjelmointi ja sen ideoiden siirtyminen valtavirtakieliin lienee kuitenkin yksi suurimmista "trendeistä" dynaamisten ohjelmointikielten nousun lisäksi. -ji

Q: Mikä on ohjelmoijan hyödyllisin taito?
A: Tähän ei ole oikeaa vastausta. Omasta mielestäni kärsivällisyys ja kyky jäsentää asioita. - VL

Q: Kuinka monta riviä koodia per juotu kahvikuppi on hyvä tahti?
A: Vaikea vastata kun en juo kahvia :-) - VL

Q: Kuinka paljon olisi hyvä olla pohjatietoa ja -taitoja, että ohjelmoiminen onnistuu kohtuudella ajankuluksi tarkoitettujen omien projektien parissa (esim. omat pikkupelit ilman Jypelin tukea)?
A: Aina tuntuu ettei riittävästi, mutta jostakin se on aloitettava. Miksi haluaisit koodata ilman Jypeliä? Tyhjän päälle ei ole järkevä tehdä (jos ei halua opetella pelimoottorin tekemistä). Lähes aina tehdään jonkin kirjaston päälle. - VL

Q: Mitkä ovat tärkeimmät ominaisuudet hyvässä ohjelmointikielessä ja toisaalta sen soveltamisessa?
A: Tämä toki mielipideasia, mutta: 1. Sopii käyttötarkoitukseensa. 2. Sille on hyvät työkalut. 3. Hyvä dokumentaatio (Löytyy esimerkkejä). 4. Hyvä kirjastotarjonta. -H-J

Q: Miksi tällä kurssilla opetellaan juuri tuota C#-kieltä? Entä missä voisin oppia Python- kielen?
A: Joku kieli on valittava ja C#-kielessä on paljon hyviä ominaisuuksia ja hyvä työkalutuki. Tämän ja Ohj1-kurssin jälkeen on kohtuullisen helppo opetella itse uusia ohjelmointikieliä. - VL

Q: Miten suuressa roolissa matematiikka on ohjelmoinnissa?
A: Taustalla se on aina (aivan kuten fysiikka siinä että liikutellaan elektroneja). Kuinka paljon sitä tarvitaan riippuukin sitten alasta mihin ohjelmointia sovelletaan. Grafiikka on aika matemaattista, jotkut WWW-hommat voivat olla kovinkin epämatemaattista. Tosin jo HTML-sivunkuvaskielen syntaksissa on tiettyä matemaattista notaatiota. - VL

Q: Mitä muita päteviä ohjelmointityökaluja on kuin Visual Studio ja perinteiset tekstieditorit?
A: Eclipse on Java-puolella käytetty IDE, joka tukee myös muita ohjelmointikieliä. CSharpin kirjoittamista Visual Studiolla helpottaa plugin nimeltään Reshaper. Tämä esimerkiksi haistelee koodin huonoja hajuja, ja auttaa refaktoroinnissa. Tätä ei kuitenkaan kannata ottaa käyttöön, ennen kun nuo korjaukset osaa tehdä ilmankin työkalua. -H-J

Q: Mistä löytyisi C# komennot ja käytöstä esimerkit helpoiten?
Q: Mistä lähteestä saa parhaiten selville, miten erilaisia käskyjä ja parametrejä ja mitä lie nämä ovatkaan C#:ssa, käytetään?
A: C#-kielelle yksi kattavista lähteistä on MSDN. -H-J
A: Jos ongelma koskee Jypeliä, niin sitten Jypelin ohjeista tai dokumentaatiosta. - VL

Q: Mikä on parasta ohjelmoinnissa?
A: Haasteet ja mielenkiintoisuus. Tietyssä mielessä ohjelmointi on kuin matematiikkaa pienoiskoossa. Ajatusmallissa on paljon samaa (ongelma jaetaan pieneen osiin, jotka voi käsittää). Ohjelmoinnissa tuloksen näkee konkreettisemmin. - VL

Q: Uskotko, että tältä kurssilta saaduilla tiedoilla/taidoilla pystyy tuottamaan esim. omaan käyttöön jotain hyödyllisiäkin pieniä ohjelmia (ei siis pelejä)?
A: Toki jotakin pientä voi aloittaa. Nykyisin ollaan tietyssä mielessä takaisin alkulähteillä, sillä kännyköihin tehdään pieniä yhden asian ohjelmia ja sellaisia voi pienen lisäopiskelun jälkeen tehdäkin (vähän enemmän kuin viimeisen luennon esimerkki, mutta siltä saa pohjaa ideoille). Sitten pitää toki muistaa, että valtava määrä tavallisen ihmisen "hyödyllisistä" asioista voidaan tehdä Excelillä ja jos sitä pitää automatisoida, niin sen voi tehdä. - VL

Q: Mikä tai mitkä ovat ne ohjelmoinnin kielet, joita oikeasti kannattaa hallita? Näin tulevaisuuden kannalta? Vai ovatko kaikki nyt opittu 5 vuoden päästä pelkästään historiaa.
A: Se logiikka mikä on Javassa, C#:issa yms tulee olemaan relevanttia vielä pitkään. Itse aloitin aikanaan Fortranilla (johon Savolaisen Vesa viittasi tuossa omassa vastauksessaan). Sen jälkeen en ole itse sitä tarvinnut (laskentaa harrastava porukka käyttää sitä edelleenkin hyvin ahkerasti). Seuraava minulle opiskelussa tullut kieli oli Pascal (Delphi, josta tuolla myöhemmin, on sen parannettu painos) joka edelleen on käytössä. Eli se tietämys on ollut aivan relevanttia jo yli 30 vuotta. WWW-ohjelmien myötä JavaScriptin merkitys on noussut voimakkaasti, joten se on (valitettavasti, mielipide) yksi työkalupakissa tarvittavista kielistä. Sitten on funktio-ohjelmointi, johon liittyy useita eri kieliä (mm. Haskell), joka rinnakkaisuuden myötä tulenee voimmakkaammin esille. Pyrin opettamaan sillä tavalla että korostan asioita, jotka ovat kestäneet vuosikymmenet, en hirveästi mitään päivän kuuminta hottia, jonka olemassaolosta todellakaan ei ole varmuutta muutaman vuoden päästä. Tärkeää on osata eri kieliä eri perheistä. Ja erityisesti ne periaatteet, jotka sitten periytyvät seuraaville kielille, jolloin se uuden opiskelu on helpompaa. - VL
A: Common Lisp. Parhaat vapaat toteutukset tuolle ovat SBCL ja Clozure CL, toki kaupallisiakin toteutuksia löytyy. Koko kielen kuvaus (kieli on standardoitu vuonna 1994) löytyy esimerkein esim. osoitteesta http://www.lispworks.com/documentation/HyperSpec/Front/index.htm. -ji

7. Henkilökohtaista

Q: Miten itse aloitit ohjelmoinnin?
A: Oikeastaan itse olen tullut tähän maailmaan sulautettujen järjestelmien kautta. Tosin ihan ensimmäiset ohjelmat olivat HP:n laskimen kuuhunlaskeutumispelin muokkaamista (peli kysyi kuinka pitkään poltetaan ja näytti paljonko vielä on vauhtia). Sitten oli omakin tuollainen vähän parempi (HP41) laskin. Kouluaikana harrastin autosuunnistusta ja siinä piti laskea miten ehditään juuri oikeassa ajassa tarkastusasemalle. Tähän rakentelin erilaisia vermeitä, ensimmäisenä sellaisen, joka pyörästä tuleva signaalin perusteella painoi nelilaskimen + -näppäintä jolloin sai "halvalla" trippimittarin. Tätä sitten laajentelin logiikkapiireillä toimivaksi joka osasi oikeasti kertoakin millä nopeudella pitää ajaa. Tietyssä mielessä tämän jatkona tuli 80-luvun alussa kattopeltien tekemistä ohjaava laite (siinäkin mitataan ja ollaan tekemisissä nopeuden kanssa). Toki oli välissä yliopiston kurssejakin, joista konekielen kurssista oli eniten hyötyä tuohon harrastukseeni. Laitteet muuttuivat lopulta prosessoripohjaisiksi joihin itse tehtiin käyttöjärjestelmä (veljeni kanssa). Lopulta tuosta tuli jopa pienimuotoinen sivubisnes. - VL

Q: Mikä on toiseksi paras ohjelmointisi AngryLegon jälkeen?
A: Parhauden mittaaminen on aina vaikea asia.

  • Korpin sisällä on tietysti joitakin paloja (ei puhuta käyttöliittymästä), jotka tyydyttivät silloin kun niitä tehtiin.
  • Harrastuksen kannalta Riippuliito-ohjelma on toki tuonut paljon. Siinä aikanaan piti opetella minkä muotoinen on maapallo (se ei ole pallo eikä pannukakku :-) ja miten sen pinnalla mitataan matkoja (elliptiset integraalit = ei voi laskea suljettuun analyyttiseen muotoon), miten piirretään karttoja näyttöön ja miten näytöstä klikatut pisteet saadaan kuvattua takaisin kartalle yms... Tuohon ohjelmaan on yhdistettynä paljon sitä tietämystä mitä on vuosien varrella tullut.
  • Pisin elinkaari on tietyssä mielessä tuossa edellä mainitussa kattopeltien mittaamisessa (nykyisin nimellä Kave 2000). Se alkoi sulautetuilla järjestelmillä silloin 80-luvun alussa. Ensimmäiset versiot olivat ihan logiikapiirejä (vrt TIEP114), joita langoilla (tuhansia) yhdistettiin toisiinsa. Siinä ei ole kyse ohjelmasta nykymittapuun mukaan, koska sen muuttaminen on hankalaa (johtoja pitäisi siirrellä).
  • Sitten tuosta tuli prosessoripohjainen versio (Intel 80186), jossa oli sama käyttöliittymä ja toiminnot, mutta paljon paljon enemmän säätömahdollisuuksia käyttäjälle. Noita toimitettiin useisiin maihin noin 50-70 kpl. Osa toimii vieläkin. Tuon kaikki koodi on kirjoitettu Assembly-kielellä ja siellä on kohtia, joihin olin todella tyytyväinen. Mm. kustomointi eri maihin ja parametrien hallinta.
  • Lopulta asiakkaiden toivelistat menivät niin vaikeiksi, että piti nostaa yksi taso ylöspäin, koska assymby kielellä esim. graafisen käyttöliittymän tekeminen ei ole herkkua. Koko systeemi vaihdettiin tietokonepohjaiseksi ja piti valita kieli yms millä ruvetaan tekemään. Ongelmanahan tuollaisessa on, että se ei saa olla mikään parin vuoden huuma, vaan kymmenien vuosien ylläpito. Borlandin Delphi tuli markkinoille 1996 ja kun kokeilin sitä ja vertaisin tuottavuuteeni C++ -kielellä, sain noin 4 kertaisen nopeuseron Delphin hyväksi. Javat olivat tulkattavuuden takia ulkona kuvioista koska suorituskykyvaatimukset ovat kuitenkin kovat (nykyisin Javakin pärjäisi). Jos olisin valinnut Microsoftin C++:n yms, niin kolme kertaa olisin joutunut vaihtamaan alustaa tähän päivään mennessä. Delphi-koodi kääntyy ihan pikkumuutoksia lukuun ottamatta edelleen ja toimii. 1997 taisi olla ensimmäinen tuollainen asennettuna ja nyt asennuskanta on nyt reilu 100 konetta ympäri maailmaa. Tuo on siis osa isoa tuotantojärjestelmää, ei mikään puhelimen 100 rivin appsi. Edelleen käyttöliittymä joltakin osin vastaa sitä alkuperäistä johdoilla toteutettua.
  • Mutta mikä oli tuon homman salaisuuden takana? Se että ensimmäistä vehjettä tehdessä menin pitkäksi aikaa (ilmaiseksi) töihin sinne missä noita kattopeltejä tehdään ja katsoin mitä ihmiset tekevät, miten toimintaa voi parantaa ja tehostaa jne. Eli opiskelin sen, mihin olen järjestelmää tekemässä. Sitä ei suoranaisesti tilattu minulta eikä tilaajaa ollut. Sitten kun 1. prototyyppi oli valmis, astelin erään tehtaan johtajan luokse ja näytin prototyyppiä (joka oli täysin toimiva ja menikin jonnekin käyttöön) ja sitten siitä tilaussopimusta tekemään. Eli tunne mitä olet tekemässä.
  • Ja toki Korpin kanssa on ollut sama asia: koko Korppi on alunperin tehty helpottamaan sitä kirjanpitoa (alunperin oli KurKi = KURssien KIrjanpito) joka on tämmöisissä massakursseissa, joissa on paljon pikkusälää (demoja, harjoitustöitä, paljon ohjaajia yms). Ja silloin olen toki itse tuon alan parhaita asiantuntijoita. Eli tunne mitä olet tekemässä. Korppia varsinaisesti koodanneet ovat olleet opiskelijoita, jolloin he taas tuntevat parhaiten tarpeet opiskelijoiden perspektiivistä. Ja väittäisin että noissa kahdessa asiassa (oppilas/opettaja) Korppi on Suomen, jollei jopa maailman paras. Pitkän historian takia käyttöliittymä ei toki monilta osin vastaa moderneimpia, mutta tämän kokoista järjestelmää ei ole varaa kirjoittaa uudelleen joka muodin muutoksen mukaan. Siinä sivussa Korpista tuli myös Suomen paras salinvarausjärjestelmä. Mammanpojat eivät vaan uskalla myydä sitä muille :-). - VL

Q: Kuinka paljon muistat C#-kielen komentoja ulkoa, vai joudutko hyvin usein lunttaamaan perusasioitakin?
A: Terminologia on vielä vähän hakusessa :-) Kieli koostuu sen syntaksista, avainsanoista ja vakiokirjastosta. Sitten on vielä päälle muut kirjastot. Perussyntaksi, eli miten sulkuja (),{},[] käytetään, on toki hallussa. Samoin se että lause (ei rivi) loppuu puolipisteeseen. Sitten on tukku avainsanoja (varattuja sanoja), joista toki muistan if, for, while, public, static, class ja ehkä muutaman muunkin. Sitten on kielen perustietotyyppejä joista nyt ainakin int, char ja double on mielessä. Se että onko totuusarvo bool vai boolean pitää aina tarkistaa erikseen. Loput asiat ovatkin kirjastoa ja siitä muistaa sen, mitä juuri sillä hetkellä käyttää. Esim. syksyisin en muista ulkoa, että miten se tulostus meni, koska esim. tänäkin kesänä kirjoitin kännykkäsoftaa (CycloLite), jossa ei tulosteta mitään. Eli tuommoiset joutuu aina erikseen dokumentaatiosta tai jostakin esimerkeistä katsomaan. Osasin joskus "pienenä" ulkoa kaikki MS-DOSin keskeytykset (käytännössä käyttöjärjestelmän kutsut), mutta sillä tiedolla ei nykyisin ole mitään käyttöä (muuta kuin yleistä ymmärrystä lisäävä perspektiivi). Eli sen jälkeen en ole vaivautunut mitään opettelemaan ulkoa. Pitää opetella LÖYTÄMÄÄN! Sen mitä juuri sen hetkisessä työssä paljon tarvitsee, oppii sille hetkelle ja sitten se taas unohtuu. - VL
A: En usko että näitä korkean tason ohjelmointikieltä on tarvis tai ylipäätään mahdollista kokonaan "oppia ulkoa". Käytännön elämässä yhtenä päivänä tekee jotain jollakin ohjelmointikielellä, toisena toisella, eikä sitä kolmantena päivänä enää muista että mitenkäs se for-silmukka tässä kielessä kirjoitettiinkaan. Hakukone esille, ja 10-15 sekunnin päästä asia on taas selvä. Eli oikeastaan tärkeämpää on osata oikeat hakusanat kuin tietyn kielen varatut sanat :-). -AJL

8. Lajittelemattomat vastatut

Q: Kuinka tärkeänä pidät Ohjelmointi 2-kurssin valitsemista Tietojärjestelmätieteen opiskelijana, jos hakeutuu esimerkiksi pankkialalle? Näetkö ohjelmoinnista olevan jotakin suurta hyötyä kaupallisen koulutuksen suhteen?
A: Jos menee "kassaneidiksi" niin tuskin hyötyä. Jos menee tehtävään jossa osana voi olla osallistua ohjelmointipohjaisiin projekteihin, niin välttämätöntä. Usein nykyisin joutuu mukaan projektiin jossa toteutetaan ohjelmia (vaikka tilaajana) ja mitä enemmän on ymmärrystä, sen vähemmän viilataan linssiin. - VL

Q: Kuinka paljon pelisuunnittelijan pitää tietää ohjelmoinnista tai osata sitä?
A: Ei välttämätöntä, mutta käytännössä erittäin hyödyllistä tuntea vähintään peruskäsitteet ja mielellään hyvä osata myös kirjoittaa ja ymmärtää koodia. Kaikki mitä pelisuunnittelija tietää ohjelmoinnista, on kuitenkin hyödyksi, sillä ohjelmointitaito auttaa ymmärtämään, mikä suunnitelma on mahdollista toteuttaa ja antaa mahdollisuuden arvioida, kuinka paljon resursseja toteutus vaatii. Vaikkei suunnittelija osallistuisi pelin ohjelmointiin lainkaan, voi hän tällöinkin itse luoda prototyyppejä, joiden kautta testata eri suunnitteluratkaisuja. Ohjelmointitaitoinen suunnittelija kykenee myös paremmin osallistumaan pelin hiomiseen, eli kun pelisovelluksen testiversiota pyritään tasapainottamaan usein hyvinkin hienovaraisten muutosten kautta. -JV

Q: Onko muita jypelin tapaisia kirjastoja joiden avulla voi helposti tehdä pelejä?
A: Pelinkehitykseen tarkoitettuja kirjastoja on laidasta laitaan ja eri alustoille. Klassinen esimerkki on SDL-kirjasto, joka on saatavilla useille eri ohjelmointikielille. Ääripäässä on esimerkiksi Unity, joka on kirjaston ja pelimoottorin lisäksi myös kehitysympäristö. Pelinkehityskirjastojen ja pelimoottoreiden kirjosta kertoo hyvin jo aihetta käsittelevän Wikipedia-artikkelin laajuus. -JV

Q: Tämä kysymys on lähinnä yleisesti pelialalle. Jos haluaa tehdä 3D-ohjelmointia esimerkiksi peleissä, niin täytyykö silloin olla jonkinlainen kuvataiteellinen koulutus, vai riittääkö jos osaa ohjelmoida?
A: Lyhyt vastaus: Ei tarvitse.
Pitempi vastaus: Riippuu tehtävistä. Pienemmissä peliprojekteissa roolit ovat usein päällekkäisiä, jolloin ohjelmoijakin saattaa olla tekemisissä myös luovan graafisen puolen kanssa. Toisaalta varsinkin suuremmissa pelituotannoissa taas on usein ohjelmoijia, jotka voivat keskittyä pelkästään matemaattiseen 3d-ohjelmointiin, ulkoasun jäädessä visuaalisten suunnittelijoiden ja graafikoiden huoleksi. -JV

Q: Kuinka hallita tietoa, mikä löytyy monesta eri paikasta, monen eri linkin takaa?
A: Ei mitenkään :-) Vihaan hypertekstejä (jollainen HTML-sivusto on). Niistä puuttuu aina selkeä johtolanka. Kirja on selkeä, lukee alusta loppuun, niin näkee yhden (tai ryhmän) henkilön mallin mukaisen kokonaisnäkemyksen. Noita sivustoja vaan pitää opetella käyttämään. - VL

Q: Onko Agoralla mitään sellaista puuttuvaa tai huonosti toimivaa asiaa, jonka korjaaminen helpottaisi oppimista/opetusta?
A: Noiden luetteleminen ei mahdu tähän :-) Mutta eihän täällä nyt huonointenkaan ole asiat. Muualla ei ole edes Agora Openia. - VL

Q: Tarvitaanko pelien tekemiseen aina jokin ohjelma, kuten Jypeli? Toisin sanoen eikö peliä voi vaan "luoda tyhjästä"?
A: On tavallaan ihan oikea periaate ajatella, että kun todella halutaan tuntea tietokoneen sielunelämää, lähdetään rakentamaan ohjelmaa aivan atomeista. Sitä tehdään kyllä meidän opinnoissa muilla kursseilla. Esimerkiksi Tietokoneen rakenne ja arkkitehtuuri -kurssilla käsitellään hyvinkin "alkeellisia" komentoja, eli niitä peruskäskyjä, joita prosessori suorittaa, ja mitä on taustalla kun sanotaan C#:ssa vaikkapa int luku = 1;. Ohjelmointi 1 -kurssilla atomeista liikkeelle lähteminen ei kuitenkaan ole tarkoituksenmukaista, koska tarkoituksena on saada kokonaiskuva siitä, mitä ohjelmoinnilla ylipäätään voidaan tehdä, ja millaisia ongelmia ohjelmoinnilla voidaan ratkaista. Jos nysvätään bittitasolla niin kokonaisuuden näkeminen voi olla hankalaa. -AJL

Q: Osaatko mainita muutaman henkilön, jotka ovat lähteneet ohjelmointipohjaiselle työuralle? Mihin yrityksiin he ovat päässeet ja mitä he tarkalleen ottaen tekevät?
A: Itse olen nykyään töissä opiskelujeni ohessa Protacon Solutionsilla, toimin ohjelmistosuunnittelijana. Meidän tapauksessa tämä tarkoittaa, että ohjelmoimme, testaamme, suunnittelemme mitä ohjelmoimme ja välillä myös keskustelemme asiakkaiden kanssa, mitä he ohjelmaltaan haluavat. Tällä nimikkeellä voi toki myös tehdä muitakin asioita, mutta tuossa nuo tärkeimmät. -H-J
A: Pikemminkin niin päin, että en tunne montakaan valmistunutta joka ei olisi mennyt alaa vähintää sivuaviin töihin. Yhtäkään työtäntä en tunne (josta olisin voinut opiskeluaikana sanoa etteä ei ole ihan täysi...) Eräskin meidän aikaisemman kurssin ohjaajista meni Roviolle töihin. Nimiä en tietenkään saa sanoa :-) Joka tapauksessa paljon sellaisia, joilla ei ole ollut mitään alan taustaa ennen opiskeluja - VL

Q: Kysymys: Mitenkä tekoäly tai oppivaohjelma käytännössä ohjelmoidaan?
A: Toki meillä pyörii tekoäly-kurssikin, jossa tähän kysymykseen vastataan. Suoraa vastausta on kuitenkin hankala antaa, sillä tekoäly on laaja ala. Ajatukset ihmisen kaltaisesta "tekoälystä" taitavat kylläkin olla tällä hetkellä vähemmän suosittuja tutkimuskohteita, ihmistä auttavat, automaattisesti päättelevät "tekoälyt" lienevät suosittuja. Kannattaa tutustua Russelin ja Norvigin kirjaan Artificial Intelligence: A Modern Approach. Ja jos tietokoneessasi on Emacs asennettuna, kokeile tohtoria: M-x doctor [ENTER], joka löytyy myös Help-valikosta kohdasta "Emacs Psychoterapist". Se on klassinen tekoälyohjelma, ja lähdekoodi tulee Emacsin mukana, joten sieltä voi ottaa mallia alkuun pääsemiseksi.

Myös monet nykyään algoritmeina pidetyt ratkaisut ovat ennen olleet tekoälyä, näitä opetetaan Algoritmit ja tietorakenteet -kurssilla. --ji

9. Historia

Q: Kysymys: Mistä tulee ainejärsestö Dumpin nimi?
A: Merkitys oli "memory dump" eli nykysuomeksi atk-sanakirjan mukaan "muistivedos". Siihen aikaan tietokoneet toimivat vain eräajoperiaatteella: syötteet annettiin reikäkorteilla tai -nauhalla ja tulokset saatiin joskus niillä samoilla tietovälineillä mutta enimmäkseen kirjoittimella. Jos symbolisella konekielellä ("assembler") kirjoitettu ohjelma kaatui, muistivedos oli ainoa apuväline, jonka kautta virheen syytä päästiin etsimään. Fortran-ohjelmista toki sai virheilmoituksia, mutta nekään eivät välttämättä olleet kovin informatiivisia.

Tietojenkäsittelyopin opetushan alkoi syksyllä 1967, ja alkuvuosina se oli tosiaankin hyvin teknistä. Ensimmäisen cum laude -seminaarin aihepiirinä lukuvuonna 1968 - 1969 oli IBM 360 -suurkoneperheen DOS-käyttöjärjestelmä. Esim. minä tutkin omaa esitelmääni varten käyttöjärjestelmän ytimen assemblerkoodia. Dumppi perustettiin jo vuonna 1968 eli parhaaseen nörttiaikaan; jotkut ensimmäisistä dumppilaisista olivat jo olleet alan töissäkin ja varmasti joutuneet paljon tekemisiin dumppien kanssa. Kyllä minäkin ainakin vielä 1970-luvulla tutkin töissäni varsin usein dumppeja. - MS
A: Tampereellahan tietojenkäsittelyopin opetus alkoi vuotta, paria aiemmin kuin 1967. Minä aloitin vuonna 1967 mutta minua ennen oli ainakin vuonna 1966 aloittaneiden, vanhempien opiskelijoiden sukupolvi.

Seuraavana kesänä 1968 olin kesätöissä Lappeenrannassa Kaukas Oyn atk-osastolla. Firma käytti tietokoneenaan Tietotehtaan suurehkoa IBM-konetta, joka sylkäisi aina muistista dumpin, kun se törmäsi ohjelmavirheeseen, vaaksanpaksuisen nipun A3-kokoista ketjulomaketta. Koodina tuossa muistintyhjennyksessä, johon miestä väkevämpiin taipuvaiset dumppilaiset yhdistyksen nimellään viittasivat, oli heksadesimaali. Oli veikeää, miten taitavia heksadesimaalisen dumpin lukijoita sillä atk-osastolla oli. Virheen löytäminen ei koskaan vienyt kovin kauan.

Oi niitä aikoja... - VS
A: Markulle: Jotta Dumpin lukeminen ei olisi ollut turhan helppoa, siitä näkyivät keskeisten muistirekistereiden sisällöt heksadesimaalisina (?). - ML
A:Alkoi 1965, ja tietämäni mukaan Reino Kurki-Suonio oli ainakin Pohjoismaiden tai jopa koko Euroopan ensimmäinen virkaan nimitetty tietojenkäsittelyopin professori. Helsingin yliopisto aloitti opetuksen samaan aikaan kuin JY.

Minä luin ylioppilaaksi tultuani, kesällä 1965 innokkaasti Sven R. Hedin kirjan "ATK - automaattinen tietojenkäsittely", joka suomennos oli kai silloin hiljakkoin ilmestynyt. Silloin syntyi toive, että pääsisin joskus noiden ihmeellisten ja jännittävien tietokoneiden kanssa tekemisiin. :-) Toive toteutui jo seuraavana kesänä, kun kesäyliopistossa pidettiin Fortran-ohjelmointikurssi ja sen yhteydessä päästiin kääntämään ja ajamaan omia ohjelmia Rautpohjan tehtaan reikänauhavetoisella IBM-koneella. Olikohan sen malli 630? - MS

10. Lajittelemattomat

Vastaamattomat

Vastauksia joihin ei ole kysymystä

Vanhoja kysymyksiä ja vastauksia