wiki:k2014/qa
Last modified 4 years ago Last modified on 2014-02-06 10:57:12

Ohjelmointi 2 kevät 2014 kysymyksiä ja vastauksia

Uusiakin kysymyksiä saa kirjoittaa. Sekä täydentää olemassa olevien vastauksia, kunhan ei lietso sotia.

Vastaajat:

  • vl = Vesa Lappalainen
  • ji = Jonne Itkonen
  • ajk = Antti-Juhani Kaijanaho

1. Työkaluista

Q: Onko Javalle olemassa samantapaista dokumentaatiosivua, kuin MSDN oli C#:lle?
A: Paina F1 jonkin kirjastofunktion tai luokan nimen päällä. - vl

Q: Löytyykö mistään hyvää Java librarya, jota kannattaisi käyttää? Vertaa msdn library c#, jota käytin ohjelmointi 1 kurssilla paljon.
A: Olethan lukenut kurssin kotisivun :-) http://docs.oracle.com/javase/7/docs/api/ -vl

Q: Toimiiko ComTest Windows 8:n Eclipsellä?
A: Sitähän minä käytän. -vl

Q: Miksi Tauno ei vieläkään toimi Firefoxilla?
A: Toimi mulla kun viimeksi kokeilin. -vl
A: Taunon toiminnasta tai toimimattomuudesta saa syyttää minua (Jonne). Kehitän ja testaan Taunoa win7,linux,osx,ie11,firefox,chrome,chromium,safari ympäristössä, mutta välillä joku kombinaatio jää kokeilematta, ja esim. win7+safari en ole koskaan kokeillutkaan. Selaimet muuttuu, viimeksi IE päätti lopettaa kertomasta olevansa IE ja alkoi esittää Firefoxia, joten iTauno alkoi toimia huonosti. Jaa, pitääpä tarkistaa, että Tauno toimii, iTaunon korjasin jo :-) -ji

Q: Miksi Ohj2 kurssilla käytetään WindowBuilderia graaffisen käyttöliittymän tekemiseen? eikö helpompia ja sujuvampia ohjelmia muka olisi?
A: No on tuokin minusta parempi kuin käsin kirjoittaa. Mutta ei se ole Delphin tai MS Blendin tasoa. Kaikissa on kuitenkin omat niksinsä ja opettelua muutkin vaativat. Javan Swing-kirjasto ei ehkä ole paras mahdollinen. Tutustu JavaFX:ään ja kokeile sitä. -vl

Q: Miten Eclipse ja Ohjelmointi 1 - kurssilla käytetty Visual Studio eroavat? Onko Eclipseä vaikeampi käyttää?
A: Hyvin samanlaiset, koska kopioivat kilpaa toisiltaan. Eri vuosina toinen on edellä. Nyt aika tasoissa. -vl

Q: Mikä on mielestäsi tämän hetken kehittynein Java-työkalu ja miksi? Onko kehittynein sama kuin paras?
A: Eclipse on ihan OK, jotkut vannovat NetBeanssin perään. Henkilökohtainen vaatimus on, että koodin täydennykset toimivat, virheilmoitukset tulevat heti, debuggeri on hyvä, mielellään laajennettava -vl

2. Ohjelmoinnista yleensä

Q: onko aina tärkeää käyttää aikaa ohjelman optimoimiseen tai koodin "puhdistukseen" jos ohjelma jo toimii?
A: Opiskeluvaiheessa KYLLÄ. Silloin oppii paremmin valmiiksi näkemään miten kannattaisi jatkossa tehdä. Työtä tehdessä periaatteista on pakko tinkiä :-( -vl

Q: Kumpi on mielestäsi ohjelmoijan ammattitaidossa tärkeämpää, osaamisen syvyys vai leveys?
A: Molempia tarvitaan, vaikea järjestää. Mutta minusta olisi tärkeätä osata jotakin muutakin kuin ohjelmointia. Ohjelmointi on vain tapa ilmaista asioita ja jos ei ole mitä haluaa ilmaista, niin turhaa touhua. Ei kirjailijaksikaan riitä se, että on hyvä kirjoittamaan, jos ei ole mitään sanottavaa. - vl

Q: Olisiko harjoitustyöhön helppo sisällyttää ominaisuus, joka hakee tiettyä tietoa internetistä valmiista tietokannasta? Esimerkkinä vaikka elokuvan arvosana IMDB.comista.
A: Periaatteessa kyllä, helppo on siinä ja siinä. -vl

Q: Miksi nykypäivän ohjelmien kehittäjät painottavat uusiin ominaisuuksiin sen sijaan, että keskityttäisiin ohjelmien yhteensopivuuteen ja toimivuuteen kaikilla tietokoneilla, sekä selkeämpään ja helpompaan käyttöönottoon? Liian monesti törmää ongelmiin, joiden ratkomiseen menee tuntikausia vain koska joku polku oli mennyt väärin ja asetukset ovat häkellyttävän epäselviä kokemattomalle käyttäjälle.
A: Osaat vastata sitten kun olet itse tekemässä :-) Nämä eivät ole helppoja asioita, käyttäjät eivät halua ymmärtää mitään, kaikki pitäisi onnistua yhtä nappia painamalla. - vl

Q: Oliko ohjelmoijan elämä aurinkoisempaa "ennen vanhaan"?
A: Siinä mielessä kyllä, että pienempikin ohjelma oli jonkin arvoinen. Tosin tällä hetkellä kauppapaikkojen ohjelmat voivat olla äärellisen kokoisia ja silti tuoda jollekin lisäarvoa.

Q: Paljonko ammattilainen voisi veloittaa harkkatyön tyyppisestä ohjelmasta jos se tehtäisiin esim jollekin järjestölle/urheiluseuralle?
A: Jos työkseen tekee, niin paljon kuin pystyy, jos harrastuksena, niin talkootyönä (kuten joku hullu...) - vl

3. Vesalle

Q: Opetteletko vieläkin koko ajan uutta ohjelmoinnista?
A: Kyllä, mutta ei ehdi tehdä tätä tarpeeksi. - vl

Q: Mikä on koulutustaustasi?
A: Tähtitiede A, Fysiikan CL, Matematiikka L, Sovellettu matematiikka L, Matematiika FT. - vl

Q: Miksei Vesku luennoi keväänkin Ohjelmointi1-kurssia?
A: Eiköhän AJ hoitele sen kevään kurssin ihan kunniakkaasti ja jopa paremminkin, ainakin tekee vähemmän kirjoitusvihreitä :-). - vl

Q: Onko tullut vastaan ongelmaa, mitä ei ole voinut ratkaista ohjelmoinnin keinoin?
A: Elämä. - vl

Q: Mikä on ollut mieleenpainuvin harkkatyö menneiltä ohj2-kursseilta?
A: Suoraan sanoen niitä on niin paljon, että massaan häviää :-( - vl

Q: Kun kerran tässä kyselyssä haluttiin tietää opiskelijoiden ohjelmointi taustasta, niin sittenhän on sopivaa kysyä myös luennoitsijoiden taustoista. Mikä sai teidät opisekelemaan ohjelmointia näinkin paljon ja mistä te siinä pidätte.
A: Opiskeluaikana tuli jo taskulaskimella koodattua esim. fysiikan töitä helpottavia asioita. Jopa Korpin edeltäjä Kurki tuli aikanaan koodattua HP:n Basic-pohjaiselle tietokoneelle. Myöhemmin esim. matematiikan väitöskirjaa kirjoittaessa jopa itse sitä matematiikan kirjoittamista tietokoneella (TeX ei silloin ihan vielä ollut optio). "Siviilissä" olen pyörittänyt pientä firmaan ja sen puitteissa "joutunut" koodaamaan, aluksi logiikkapiireillä, sitten mikroprosessorilla ja lopuksi tietokoneella. Karttojen kanssa on tullut puuhattua jonkin verran aina siitä, että paperikartalta digitoitu matkoja ja nyt näitä uudempia systeemejä kännykälle ja tabletille. Mutta varoitus: ei ole opiskellut ohjelmointia alkuunkaan tarpeeksi, en edes haluaisi ajatella erilaisten kaupallishallinnollisten järjestelmien tai terveysalan järjestelmien tekemistä - vl

Q: Millä kielellä koodaat mieluiten? Q: Luennolla ma 26.1. on ainakin Wikin mukaan puhetta ohjelmointikielistä. Mitkä ovat luennoitsijan top 3 ohjelmointikielet ja miksi? Q: Mikä on mielestäsi paras ohjelmointikieli? Q: Mikä ohjelmointikieli on luennoitsijan suosikki?
A: Kun tässä kysytään rehellisesti mielipidettä, niin C#, Delphi, Java, Assembler - vl Ai miksi: C#:issa on kivoja ominaisuuksia. Delphi-koodia mulla on niin paljon että sitä ei ole varaa vielä hylätä. Java on ollut enemmän opetuskieli, vaikka Korppi onkin sillä tehty. - vl

Q: Onko mitään sellaista, mikä vielä vuosienkin jälkeen toisinaan raastaa hermoja vai onko kaikki kuin vettä vaan? Ihan sen takia, että tiedän mitä ei kannata aliarvioida liian helpoksi.
A: Joskus tulee onnistumisen elämyksiä, useimmiten epäonnistumisen :-) Niiden kanssa on opittava elämään, silloin onnistumista arvostaa enemmän. - vl

Q: Kerro ohjelmoinnin merkityksestä sinulle itsellesi
A: Tapa automatisoida asioita. Tapa toteuttaa itseään. - vl

Q: Mikä on mielestäsi paras Java-työsi, jonka olet tehnyt?
A: Mitään oikeata en ole Javalle tehnyt. Korppia toki olin aikanaan tekemässä, lähinnä sinne "proof of concept" tyylisiä asioita. - vl

Q: Mikä on ollut haastavin koodi, jonka olet tuottanut?
A: Tietysti se mitä on viimeksi tekemässä :-) Mutta kyllähän assemblerilla tehdyt jutut, jossa kymmenet pikkupäätteet kommunikoivat esim. kassakoneelle, jossa ei ollut mitään liitäntää, vaan oma prosessori "paineli" kassakoneen näppäimiä, oli aika tunne onnistumisesta. -vl

Q: Voisko Vesku puhua vähän epätasaisemmin, jotta pysyy hereillä luennoilla?
A: Eikö töpksintä riitä välillä. Mutta on minullakin semilepsia (= rupeaa nukuttamaan ehti kun seminaari tms. alkaa). Siihen auttaa: 1) enemmän unta yöllä, 2) Luentomoniste nenän edessä ja siihen merkintöjä kynällä (olettehean nähneet sellaisen vehkeen?). 3) Heitän karkilla päähän. - vl

4. Sekalaista

Q: Onko ohjelmointitaitojen ja naisten saannin välinen korrelaatiokerroin positiivinen vai negatiivinen?
A: On. - vl

Q: Onko Paul Graham oikeassa?
A: Mitä tarkoittaa "olla oikeassa"? - vl
A: Viime aikoina hän on heitellyt sammakoita suustaan, mutta ennen vanhaan hän oli täysin oikeassa. -ji

Q: Joko pelataan pesäpalloa?
A: Riippuu tasosta. Hupipeli voisi joskus olla kivaakin? - vl

Q: Voisiko legoroboteilla järjestää kisan, jossa kaksi robottia kilpailee keskenään esim. radan läpäisemisessä?
A: Ehdottomasti, annan opintopisteitä kun tuollaisen kisan järjestätte. - vl

5. Ohjelmointi ja työpaikat

Q: Työllistyykö ohjelmointitaidoilla?
A: VARMASTI! . - vl

Q: Millaisissa työpaikoissa ohjelmointitaidosta on tulevaisuudessa hyötyä?
A: Vaikeata kuvitella että voisin olla työpaikassa, jossa siitä ei olisi hyötyä. - vl

Q: Kun kaikki ohjelmointityöt ovat karanneet Intiaan, miten suomalainen koodari voi sinun mielestäsi pysyä leivässä?
A: Helposti: Ei rupea tusinakoodariksi, vaan sellaiseksi joka osaa suoraan keskustella asiakkaan kanssa ja ymmärtää asiakasta. Ei heittäydy "mä oon vaan täällä töissä" asenteelle. Intialaiselle pitää kirjoittaa dokumenttia niin paljon, että samalla vaivalla hyvä koodari olisi jo tehnyt koko ohjelman. Kyllä tuo ulkoistaminen vielä tulee ampumaan itseään nilkkaan. Toki Intian kokoisesta maasta kaivettuna parhaat ovat parempia kuin pienestä maasta kaivetut. Mutta silti heiltä puuttuu helposti kohdealueen ymmärrys ja se pitää koodarilla olla. Muuten on turha koodata ja silloin se intialainenkin pärjää. - vl

Q: Kuinka kaukana tämän kurssin jälkeen tasomme on "oikeasta" ohjelmoinnista eli esim. jonkun kaupallisen sovelluksen tuottamisesta?
A: En minä ottaisi vielä töihin :-) Mutta kaupallista voi olla monta tasoa. Kauppapaikkaan tehtäviä mobiilisovelluksia joihin on oma intohimo, voi hyvinkin pystyä tekemään. Jotkut perustavat oman firmankin. Mutta kyllä paljon on vielä oppimista kokonaisuudesta, projektityöskentelystä, ylläpidosta, tietokannoista, tietoturvasta jne... - vl

Q: Kuinka pitkä matka on tämän kurssin asiat hyvin hallitsevasta henkilöstä työkelpoiseksi koodariksi?
A: Ks. edellä. Minun mielestä pitkä, monet opiskelijat menevät kuin kuumille kiville. - vl

Q: Minkälaiset valmiudet 'Ohjelmointi 2' antaa esimerkiksi mahdollista harjoittelijapaikkaa ajatellen?
A: Ei siitä haittaakaan ole :-) - vl

Q: Oletetaan, että Ohjelmointi 2 -kurssin keskimääräisellä tasolla suorittanut opiskelija on työhaastattelussa (tai vastaavassa tilanteessa). Mitä mieltä olet siitä, voiko opiskelija kurssin suoritettuaan jo sanoa osaavansa ohjelmoida/Javaa? Ja ylipäänsä: mille tasolle kurssin keskimääräinen suorittaja mielestäsi kurssin päätyttyä yltää?
A: Ei ole valmis, Javasta jää EE-puoli kokonaan käsittelemättä, ei kannata yliarvioida taitojaan, mutta voi silti olla valmis oppimaan tiimissä lisää. - vl

Q: Jos työilmoituksen vaatimuksissa lukee esim että osattava/hallittava/yms. jokin ohjelmointi kieli niin minkä verran osaamista vaatii että voi sanoa osaavansa vaikka javaa? Vai pitääkö olla ihan guru että voi tuollaista väittää?
A: Ensin pitää muistaa että kukaan ei hae töihin Java-kielen osaajaa, vaan ohjelmoinnin osaajaa. Jos joku hakee Java-kielen osaajaa, älkää menkö sinne, siellä ei tiedetä (ainakaan johtajatasolla) mitä ohjelmointi on. - vl

Q: Minkälaista ohjelmointi on käytännön työelämässä? Eli kuinka se esimerkiksi eroaa näistä meidän tavoista työskennellä/opiskella täällä yliopistossa ohjelmistojen ym. osalta?
A: Enpä ole koodannut muuta kuin itselleni ja omalle firmalleni, niin en osaa sanoa. Mutta kuten jossakin vastauksessa on, niin joistakin periaatteista on pakko tinkiä kun aikarajat tulevat vastaan... - vl

Q: Richard Stallmanin mukaan ohjelmointia oppii parhaitten ylläpitämällä jonkun toisen kirjoittamaa koodia. Kuinka vaikeaa on päästä kesäksi harjoitteluun johonkin yritykseen ohjelmoinnin puolelle jos ei opiskele tietotekniikkaa pääaineena vaan fysiikkaa ja ohjelmoinnin osaaminen ei ole vielä kovin korkea.
A: Ei kai tuolla varsinaisesti ole väliä mikä on pääaine jos homma sujuu. Niillä joilla on matemaattinen ajattelu kohdillaan, on helpompi (minusta) oppia lisää. - vl
A: Stallman kannattaa avointa koodia, ja avoimen koodin projekteja on tarjolla enemmän kuin ehtii ikinä läpikäydä. Valitse siis itsellesi sopiva avoimen koodin projekti, ja aloita tutustumalla siihen, sen työtapoihin, tee omia korjauskokeiluja ja vertaa niitä toisten tekemiin korjauksiin. Hiljalleen ala tarjota korjauksiasi projektille, ensin pyydettyjä, sitten vaikka omiakin. Projekteja löytyy GitHubista, SourceForgesta ja Google Codesta ja monesta muustakin paikasta. Aijoo, YouSourcesta :-) -ji
A: Stallman tosin kannattaa vapaita ohjelmia (free software), ei avointa koodia (open source software). Ero on useimpien näkökulmasta olematon, mutta Stallmanille itselleen se on iso periaatteen kysymys. Luulen, että Stallman ei myöskään suosittelisi GitHubia eikä Google Codea, koska ne eivät täytä Stallmanin kriteereitä riittävästä ohjelmistojen vapaudesta. Mutta Stallman onkin uniikkki persoona. Käytännössä asia menee juuri niin, kuin Jonne kirjoittaa. - ajk
A: Seison tarkennettuna, FLOSS mikä VALO. -ji

6. Jyväskylä ja ohjelmointi

Q: Mikä on ohjelmointi 2:n lopettamisprosentti eli kuinka moni ilmoittautuneista ei suorita kurssia loppuun?
A: Ilmoittautuneista ei ole järkevää laskea prosentteja. Lasken ne mieluummin niistä jotka tekivät edes yhden tehtävän demo 1:stä. Tämäkin on hieman väärin, sillä nyt jo n. 10 päätti että tämä vie liikaa aikaa. Mutta Demo 1:stä laskettuna n. 20% lopettaa (ja näistäkin moni turhaan). - vl

Q: Kuinka Jkylän ohjelmoinninopetus vertautuu kilpailijoihin ja valmistatteko rähmäkäpäliä?
A: Väittäisin että perusopetus on varsin hyvää, jatkokursseissakin on helmiä, mutta vähänhän meillä on Ohj-kursseja joihinkin paikkoihin verrattuna. Mutta mielestäni esim. testausta ei missään opeteta yhtä aikaisessa vaiheessa ja myöhemmin sen omaksuminen on hankalaa. Vähän sama kommentoinnin kanssa. Olen nähnyt harjoitustöitä muualta, joissa on sentin paksuinen työselkkari, mutta koodissa ei yhtään kommenttia ja koodia aivan kauheaa. Katsokaa muiden paikkojen opetusmateriaalia ja verratkaa itse. Rähämkäpäliä? Ne jotka saavat kursseista alle 3, eivät ehkä ole omalla alallaan :-) - vl

Q: Mitähän kannattaisi tehdä kun tuntuu, että ohj1-kurssin asioista ei muista enää oikein mitään? Vuoden tauko kaikesta ohjelmointiin liittyvästä on tehnyt tehtävänsä ja kaikki metodit ja muut on unohtuneet. Luentomonisteen luku ja Ville, onko muuta?
A: Tee demoja. Katso valmiiden demojen vastauksia. Kertaa Ohj1:n demoja ja niiden vastauksia. Lue Ohj1:n luentomoniste. -vl

Q: Voisiko demotehtävissä aina kirjoittaa selkeästi, pitääkö kyseisessä tehtävässä kirjoittaa jokin ohjelma vai ei? Esimerkiksi D2 t3 on epäselvä sen suhteen.
A: Noita yritetään avata tiistain luennoilla. Oletko katsonut videoita? Lisäksi alkukurssin tehtävät ovat ei-ohjelmia ja sitten painottuvat loppupäässä ohjelmiin. Sitten kannattaa katsoa mihinkä luentomonisteen kohtaan tehtävä liittyy ja miten syvällä siinä kohti ollaan itse koodin kirjoittamisessa. Kurssin tekeminen vain demmoja tekemällä, katsomatta luentoja ja/tai monistetta, voi olla vaiketata. - vl

Q: Onko mahdollista saada demoihin selkeämpiä ohjeita, vaikka vähän pidemmin selitettynä mitä pitää tehdä?
A: Ei osaa kirjoittaa paremmin, auttakaa! :-( - vl

Q: Ymmärsinkö oikein, että jos teen ekassa jaksossa demoja n. 60 kappaletta (tarkkaan ottaen vähintään 58,8) niin saan tuon tehtyä sillä tuon väh 105% vaatimuksen? Ja toisessa jaksossa tekemäni demot vaikuttavat sitten siihen saanko ykkösen vai vitosen kurssista?
A: Juuri näin :-) - vl

Q: Mikä olisi perusasioiden oppimisen jälkeen paras tapa oppia koodauskieltä kuten Javaa laajemmin? Täältähän ei kuitenkaan täydellisenä valmistuta ja olisi hyvä esimerkiksi itseopiskeluna jatkaa esimerkiksi Javan opiskelua kurssinkin jälkeen.
A: Tehdä ohjelmia! Johonkin joka itseä kiinnostaa, niin on motivaatiota. - vl

Q: Mikä on mielestäsi kaikkein vaativin asia ohjelmointi 2 -kurssilla?
A: Ajankäyttö ja hommien tekeminen etupainotteisesti. Jos noin tekee, niin luentojen asiat naksahtavat kohdalleen. Jos tekee jälkijunassa, niin kaikki asiat menevät yli hilseen kun niitä ei ole tarvinnut. - vl

Q: Mikä on tuottanut edellisinä vuosina eniten työtä opiskelijoille?
A: Liian myöhään aloitettu HT5 vaihe - vl

Q: Tulisiko tämän ohjelmointi 2 -kurssin takia karsia muita kursseja pois päiväjärjestyksestä? Onko tämä todella niin työläs kurssi?
A: Kyllä se 16 tuntia viikossa on keskimääräiselle opiskelijalle ihan oikea aikavaatimus. Hitaammille enemmän. Siitä pitää laskea montako muuta kurssia voi tehdä. Työkuorma kannattaa laittaa jonnekin 40-45 h/viikko tienoille ja myös harrastaa jotakin muuta. - vl

Q: Onko mitään tapaa hyvittää demokertaa, mistä ei saa pakollista kahta demopistettä? Entä onko mitään syytä, mistä saisi armahduksen/mahdollisuuden hyvittää vajaita demopisteitä? (Esim. Auto-onnettomuudesta toipuminen?)
A: Toki aina voi neuvotella ja hyvät syyt otetaan huomioon. Erityisesti jos on toipumassa :-) Laiskuus/en herännyt/kissa nielaisi USB tikun, eivät ole hyviä neuvotteluvaltteja. Ihannetilanteessa tulevista menoista sovitaan etukäteen. - vl

Q: Onkohan missä vaiheessa tulossa lisää demoja tuonne nettiin?
A: Viikko pari etukäteen. Jos on kiire, voi katsoa edellisen vuoden vastaavia demoja, 95% ne tulevat ohjelmaan samoja. Vaihtaa vain vuosilukua linkissä. Ja jos haluaa mua auttaa, niitä voi kopioida valmiiksi vuodelle 2014. - vl

Q: Miksei tällä kurssilla tehdä peliä kuten Ohj1?
A: Olioiden kannalta se olisi jopa järkevämpää, koska graafisissa hommissa oliot ovat ihan käteviä ja monia Ohj1-pelejä olisi voinut parantaa omatekoisilla olioilla. Kuitenkin silloin pitäisi etsiä työkaluja, joilla itse ohjelmointi jäisi vielä riittävästi näkyville eikä aika menisi jonkun varjostuksen säätämiseen. Ohj1 kurssilla oli aika vaikeat löytää käyttöä esim. taulukoille ja silmukoille ja niitä haluamme erityisesti tällä kurssilla opetella tekemään. Sinänsä pelin tekoa ei ole kielletty, jos sieltä nousee kuitenkin esiin oppimistavoitteiden mukaiset vaatimukset. - vl

Q: Tuleeko Ohjelmointi 2 -kurssille myös Pahasti pihalla -ryhmä?
A: Ei ole erikseen tehty, joihinkin ohjausryhmiin jää sen verran vähemmän väkeä, että siellä kyllä saa henkilökohtaista ohjausta. - vl

Q: Miten voi kehittää ohjelmoinnissa tarvittavaa päättelykykyä, muuten kuin ohjelmoimalla?
A: Tekemällä haastavia tehtäviä alalta kuin alalta. Ehkä jopa Sudokukin voi himpun auttaa, mutta siinä rajat tulevat äkkiä vastaan. Avarakatseisuus yleensäkin, kriittisyys omaa ja muiden tekemistä kohtaan (ei haukkuminen, vaan se miten asioista voisi tehdä vielä paremmin) - vl

Q: Mitä taitoja tulevaisuuden (esim. 2020-luvun) ohjelmoija tarvitsee sinun mielestäsi eniten? Mitä nykyisin tarvittavia taitoja tarvitaan yhä enemmän vai tarvitaanko jotain täysin nykyisestä poikkeavaa?
A: Uskallusta oppia uutta! Uskallusta luopua vanhasta! Mutta jos vertaan sitä, mitä meillä oli 80 luvun alussa, niin oikeasti ei ole tapahtunut niin paljoa kuin on kuviteltu. Verkko on tullut koko kansan tietoisuuteen, koneet ovat nopeampia, rinnakkaisuus on tulossa. Yleensä kun asiat monimutkaistuvat, niin niihin keksitäänkin yleispätevämpiä tapoja tehdä. Esim. GUI-ohjelmoinnille kävi näin 90-luvulla (pohjat olivat toki jo kaukaa 70-luvulta. mutta yleistyivät tuolloin erityisesti Visual Basicin ansiosta). Samaa odotan rinnakkaisohjelmoinnille. Se on nyt aika lapsen kengissä. Odotan myös että WWW-ohjelmointi helpottuu, nyt se on hirveää eri kielten kanssa räpeltämistä.

Q: Ohj2 -kurssi on vasta alussa mutta olisiko jo nyt mahdollista käsitellä luennolla jonkin esimerkki rinnakkaisuudesta?
A: Menee monelta niin ohi, että jätän tuon sinne JSP-jatkokurssille. - vl

Q: Minkä koet näin etukäteen olevan tärkein asia kurssilla? Asia, jonka haluat, että jokainen vähintäänkin osaa vaikka muuta ei kurssilta jäisi käteen
A: Oliot, testaus - vl

Q: Kuinka tämän kurssin C++ -lisäosa suoritetaan? Onko siihen erikseen joku tentti vai riittääkö että tekee paljon demotehtäviä
A: Javalla tehtyjen demojen "kääntäminen" C++:lle.

Q: Millainen on kurssin lopussa oleva C++ osuus?
A: Katsotaan pikaisesti, miten kurssilla opitut asiat tehtäisiin C/C++:lla. Ei yritetäkään noiden guruksi, vaan tiedetään himppu asioista, joita pitää varoa - vl

Q: Mitä ovat c++ ja jsp jatko-osat, ja miten niiden suoritus tapahtuu ??
A: Ks. edellä. JSP (Java Server Pages) katsotaan miten kurssin harjoitustyöstä tehtäisiin Weppi versio ja suoritus on muuttaa ohjelma WWW-versioksi. Työmäärä molemmissa on äärellinen ja jää plussan puolelle ja näin kokonaisuus voi mennä ihan budjettiin. - vl

Q: Olisiko kurssin alussa mahdollista jotenkin johdatella testaamiseen (comtest), kun tiedän, että jossain vaiheessa testit tulevat pakollisiksi (tai ei saa palauttaa täysillä pisteillä), mutta ainakin itse jätin Ohjelmointi 1 -kurssilla vielä testit tekemättä, tyhmä kun olin. Tästä kuitenkin seuraa se, että ainakin itselleni koko testaaminen on nyt muuttunut aikamoiseksi möröksi, kun yhtäkkiä pitäisikin osata tehdä ne jo.
A: Nyt luento 7 tulee käsittelemään asioita melkoisen perinpohjin. Aikaisemmat demot ovat hieman johdatelleet sinne. - vl

Q: Olisiko mahdollista saada ohjelmien asennuksista ohjevideot tai kuvia tekstin joukkoon, koska se olisi mielestäni selkeämpää kuin pelkän tekstin avulla asentaminen?
A: Joo, kuka tekee ja ylläpitää. Versiot vaihtuvat jatkuvasti ja silloin kuvat eivät ole ajan tasalla. Tekstiä on nopeampi muuttaa. Mulla vaan energia loppuu :-) - vl

Q: Miksi on niin paljon ihmeellisiä Tauno/Ville/kirjoita kävelyalgoritmi tekstitiedostoon -demotehtäviä, ja vain vähän varsinaisia ohjelmointitehtäviä? (Tarkoitan tällä Java -syntaksin mukaista ohjelmointia.) Kuulemani (ja "kokemukseni") mukaan ohjelmoimaan oppii vain ohjelmoimalla. Lisäksi demojen tekeminen olisi hauskaa, ja uskon että se näkyisi myös tehtyjen demojen määrässä.
A: Ensin pitää oppia ymmärtämään mitä on tekemässä. Muuten tekee sokkona asioita ymmärtämättä. Ohjelmointiin kuuluu AJATTELU. Ja te että vielä osaa ajatella ohjelmointikielellä. Lisäksi nämä Tauno- ja Ville-tehtävät ovat kertausta ja ihan tarpeen osalle porukkaa, eivät pakollisia nillle jokta uskovat (luulevat), ettei niistä ole heille hyötyä. Valinnan varaahan noissa tehtävissä on kun malttaa lukea kaikki. - vl

Q: Millä tavalla on Kerhon GUI:ssa toteutettu haku ominaisuus, eli kun kerhon jäsenen nimeä aletaan kirjoittaa, parsii käyttöliittymä näkyvää jäsentenlistaa jokaisen merkin jälkeen?
A: Samalla tavalla kuin luento 6.en mittakaavassa. Kun näppäin päästetään ylös, suoritetaan syntyneellä sanalla haku jäsenlistaan. - vl

Q: Mitkä olisivat hyödyllisimpiä taitoja ohjelmoinnista joihin kannattaa panostaa luonnontieteilijänä /ei ohjelmoijana?
A: Ajattelumalli. Algoritmit ja se että aina raaka voima ei ole paras. - vl

7. Ohjelmointikielistä

Q: Minkälaisia ohjelmointikieliä käytetään ympäristöissä, joissa bugisuus ja kaatuminen eivät ole vaihtoehtoja? Eli esimerkiksi lentokoneiden tai avaruussukkuloiden autopiloteissa, sukellusveneissä tai vaikkapa Mars-mönkijöissä?
A: Ihan samoja. Hommia pitää vaan tehdä huolellisemmin ja testata paremmin. Nykyisin kuitenkin esim. mars-mönkijänkin koodi voidaan vaihtaa. - vl
A: Koodin vaihto lennosta on ollut tuolla arkipäivää jo pitkään. Tästä linkistä voi lukea hieman Jet Propulsion Laboratoryn softahistoriaa. Nasan avaruuslentojen tietokoneista löytyy juttua ihan Wikipediasta, vaikkapa sukkulan tietokoneesta ja sen ohjelmointikielestä HAL/S, johon kannattaa tutustua jo sen syntaksin johdosta. Mars-mönkijöistä löytyy myös tietoa.-ji
A: Olennaista tosiaan ei ole käytetty ohjelmointikieli vaan millä prosessilla ohjelmaa suunnitellaan, toteutetaan ja testataan. Mutta joitakin kieliä on, joissa on tuki esimerkiksi ohjelmien oikeellisuustodistuksille. Esimerkiksi B-menetelmää, joka sisältää myös oman ohjelmointikielensä, käytettiin Pariisin metron linjan 14 automatisoinnissa. - ajk

Q: Mitkä ovat tällä hetkellä sellaiset ohjelmointikielet, jotka ovat erityisesti opettelemisen arvoisia?
A: Kannattaa opetella eri "paradigmoja" - Olio-ohjelmointi, funktio-ohjelmointi jne WWW-hommia varten nykyisin JavaScript - vl
A: JavaScript, Erlang, Haskell, Smalltalk, Prolog ja joku Lisp-kieliperheen kieli (Racket ohj2-tasolla suositeltavin, mutta muita esim. Emacs Lisp, Common Lisp, Clojure, Shen). -ji

Q: Kaikissa kielissä on paljon valmiiksi tehtyjä algoritmeja. Mika on helpoin konsti löytää juuri ongelmaan sopiva algoritmi ja miten sen toiminnan saa helpoiten selville?
A: Mistä löytää? Kerropa se minulle. Itsellä tämä on yksi vaikeimmista asioista. Kun jonkin löytää, niin sitten netistä ja kielen manuaaleista löytyykin jo apua. Sikäli olet jäljillä, että kirjastot ovat suurempi opettelun aihe kuin itse kieli. Ja se saattaa sitten nimenomaan sitouttaa tiettyyn kieleen, kun on jonkin kirjaston oppinut kohtuullisesti. - vl

Q: Miten työlästä Android sovellusten teko on Javaa osaavalle?
A: Siinä tulee Javan lisäksi paljon sitä, miten jonkin saa toimimaan kännykässä. En ole Androidiin koodannut, mutta C# ja WP olen ja suurin osa ajasta menee ihmetellessä että miksi tämäkään ei toimi kuten olin olettanut. - vl

Q: Miksi Java-kielen String-olio, jonka sanotaan olevan taulukko ja näyttää taulukolta ei käyttäydy kuten taulukko? Esim.

String sana = "esimerkki";
int kirjain = sana[1];

Tuo ei toimi, koska syntaksi ei tunnista String-oliota taulukoksi. Miksi se ei ole taulukko?
A: Se on Java tekijöiden valinta. C#:issakaan string ei ole taulukko, mutta silti siihen on tehty hakasulku operaattori, joka saa sen näyttämään taulukolta. Javassa kirjain otetaan:

int kirjain = sana.charAt(1);

eli tuo nyt on syntaktista sokeria, jonka kanssa ei kauhean kauan kannata murehtia.

Q: Miten uusia ohjelmointikieliä tehdään?
A: Tähän Antti-Juhani olisi paras vastaamaan kun asiaa tutkiikin :-) - vl Mutta aika evoluution tuloksiahan ne usein ovat. Aluksi on jonkinlaiset periaatteet mistä lähdetään, mutta sitten voivat muuttua matkalla paljonkin. - vl
A: Nykyaikana käytännössä kaikki uudet yleiskäyttöiset kielet syntyvät siten, että joku ottaa jonkin olemassaolevan kielen ja tekee siihen muutoksia. Täysin tyhjästä aloitettuja kieliä ilmaantuu nykyään erittäin harvoin. Yleiskäyttöisen kielen tekemiseen tarvitaan (a) näkemys siitä, millainen uudesta kielestä pitäisi tulla, (b) ohjelmointikielten periaatteiden ja kääntäjätekniikan tuntemusta, (c) vankka ohjelmointitaito sekä (d) älyttömästi aikaa ja energiaa. Jos kielestä haluaa suositun, pitää olla mukana myös (e) onnea ja (f) markkinointitaitoa. Hyvää lukemista aiheesta on History of Programming Languages (HOPL) -konferenssien julkaisuissa (HOPL I (1978), HOPL II (1993), HOPL III (2007)). Kielen tekeminen johonkin erityistarkoitukseen, jolloin puhutaan ns. sovellusaluekielestä (domain specific language, DSL), on paljon helpompaa. - ajk

Q: Javassa ja C#:ssa koodirivit erotetaan toisistaan puolipisteellä. Tällä kurssilla tehdään paljon juttuja, joissa käyttäjä antaa ohjelmalle erilaisia syötteitä. Miten ohjelma tai nykyaikaiset ohjelmointikielet yleensä osaavat käsitellä puolipisteet tai "koodipätkät" syötteessä? Ymmärtääkseni tällaiseen haavoittuvuuteen perustuu ns. SQL injection.
A: SQL injektio perustuu siihen, että käyttäjän annetaan syöttää merkkejä, jotka ovat alle jäävän "tulkittavan" kielen merkkejä. SQL-injektiossa pahoja merkkejä ovat puolipiste ja lainausmerkki. Mutta muuten nuo eivät ole pahoja merkkejä jos niitä vaan talletetaan ja sellaisenaan käyttäjälle tulostetaan. HTML:nä näytettävissä tekstissä HTML:än merkit ovat ongelmia, eivät Javan tai C#:in erikoismerkit. Kerho-ohjelmassa tolppa on paha merkki - vl
A: Ongelma SQL-injektiossa ei ole niinkään siinä, mitä käyttäjän annetaan syöttää, vaan siinä, että käyttäjän syötettä käytetään suoraan osana SQL-lausetta ilman asianmukaista tietotyypin muutosta. Tietotyyppiero tulee siitä, että tavallisessa merkkijonossa puolipiste tarkoittaa eri asiaa kuin SQL:ssä, joten merkityksen säilymiseksi on merkkijonoa muokattava; tämä on klassinen esimerkki tietotyyppimuunnoksesta. Ideaalitilanteessa syötteenä saatu merkkijono ei olisi tyyppiyhteensopiva SQL-kielisen merkkijonon kanssa, mutta valitettavasti liian harva kieli ja kirjasto käyttävät tällaista suojakeinoa hyväksi. - ajk

Q: Mitä hyötyä on rajapintaluokista muutoin kuin rajapintaluokan toteuttavan luokan vaatimusten määrittelyssä?
A: Se että näissä kielissä (esim Java ja C#), sen ansiosta voidaan toteuttaa polymorfismi (eli karkeasti toinen olio voi käyttäytyä eri tavalla kuin toinen olio, mutta käyttäjän ei tarvitse tätä tietää. Esim. JButton piirtää itsensä eri tavalla kuin JTextField). Perinnällä saa samaa asiaa aikaiseksi, mutta koska Javassa ja C#:issa ei ole moniperintää, niin tällöin ajaa itsensä äkkiä umpikujaan. Rajapinnoilla tuota voi hieman kiertää, mutta joutuu koodaamaan enemmän. Usein tehdään ensin rajapinta ja sitten sen toteuttava perusluokka, jota peritään. - vl

Q: Vaikka Javaa käytetäänkin paljon, eikö se ole jo vanhentunut ja täynnä reikiä ja olisi parempi käyttää jotain muuta en tarkoita c++:aa joka on muinaishirviä kanssa ja Microsoftin omaa c#, joka ei toimi muualla
A: Java ei ole vanhentunut, eikä siinä ole sen enempää reikiä kuin muissakaan. Javan "huono" maine on peräisin selaimiin tarkoitetuista appleteista, joihin oli jäänyt turvallisuusaukkoja. C#:ia voi kirjoittaa Mono-projektin työn ansiosta jopa useampaan paikkaan kuin Javaa. Kielet tulevat ja menevät, tällaisella kurssilla on niin paljon materiaalia, että kielen vaihtoa ei viitsi tehdä ihan pienen tuulenvireen takia. Tärkeintä on että on käytössä kieli, jolla on käyttöä. Sitten elämässä pitää itse opetella uusia kieliä sitä mukaa kuin niitä tehtävissään tarvitsee. - vl

Q: Missä tapauksissa ei saa käyttää muuttujien vertailuun yhtäsuuruusmerkkiä = tai == merkintää?
A: Javssa ei koskaan = -merkkiä :-) Ja olioiden kanssa ei == -merkkiä jos halutaan verrata sisältöä eikä viitteiden samuutta, vertaa luento 6 - vl

Q: Voisiko Wiki-sivuja vähän selkeyttää, tuntuu että tietoa pitää etsiä todella kauan, esim pääte 2:ssa olevaa harjoitustyön ohjetta joutui etsimään todella kauan. Jokin harjoitustyön ohjeet kokoava sivusto olisi mukava :)
A: Siellä yläpalkissahan aina möllöttää "Harjoitustyö", jonka alta tuo "sivusto" löytyy. En osaa paremmin :-( - vl

Q: Millaisia hyviä ominaisuuksia Javassa on C#:iin verrattuna?
Q: Ja mikä on suurin ero Javan ja C#:n välillä?
Q: Mitkä ovat Javan parhaimmat ominaisuudet ohjelmointikielenä?
A: Kauempaa katsoen molemmat ovat hvyin samanlaisia kieliä. MS on omassa pyrkinyt myös siihen, että sillä voi tehdä hieman helpommin asioita (delegaattit, lambda-lausekkeet, propertyt jne.), joten minusta C# on hieman edellä tällä hetkellä. Javan etu on laajempi (yleisesti hyväksytty) alustatuki. Javan suurimpia käyttökohteita tällä hetkellä on ehkä palvelinpuolen ohjelmointi. Jypeliä ei olsii voinut tehdä samanlaisena Javalla. - vl

Q: Mikä on paras ohjelmointikieli, jos niitä voi paremmuudessa vertailla?
A: Tämä on aina varmin kysymys saada riita aikaiseksi, totuutta ei ole - vl
A: Tähän kysymykseen ei ole tiedossa hyvää vastausta. Ensiksi pitäisi määritellä, mitä parhaalla tarkoitetaan. Helpoin oppia? Nopein koodata? Helpoin lukea? Jokin näiden yhdistelmä? Jokin muu? On todennäköistä, että kaikilla kriteereillä yhtä aikaa parasta kieltä ei ole olemassakaan. Lisäksi kunnolliset tutkimukset tästä aiheesta ovat aika harvassa, ja asia jää henkilökohtaisen mieltymyksen, mututuntuman ja muodin varaan. Oma tuntumani on, että joka kielellä on omat heikkoutensa, eikä parasta kieltä siksi ole olemassa. -ajk

Q: Ohjelmistokoulutus on menossa kokoajan enemmän korkeamman tason kielien opetukseen (Java, .NET). Miten tärkeänä näet alemman tason kielien ymmärryksen (C, C++), jotka kuitenkin toimivat kaiken pohjana ja ovat edelleen ainoita vaihtoehtoja embedded maailmassa?
A: Itse elän aika pitkälle sen varassa, että olen kirjoittanut paljon suoraan konekielellä (tarkemmin assembler-kielellä) ja siksi on kohtalainen käsitys siitä, mitä koneessa tapahtuu. Soisin tämän ymmärryksen muillekin, mutta nykyisin itse konekielellä koodaamiselle en näe hirveästi arvoa ja Java oli alunperin tarkoitettu nimenomaan embeeded kieleksi. Omat embedded systeemit on tehty Delphillä (Pascal). Nykyisin saa halvalla pieniä ”sulautettuja järjestelmiä” todella halvalla (TI MSP430 LaunchPad, Arduino, Raspberry Pi yms) Joita jokaisen vakavasti asiaan paneutuvan kannattaisi itselleen hankkia ja kokeilla. - vl (ji korjasi pikku-linuxin RasPiksi ja lisäsi TI MSP430:en.)
A: Itse en näe kovin isoa tasoeroa toisaalta C++:n ja toisaalta Javan tai C#:n välillä. C++:lla on toki mahdollista halutessaan koodata myös matalalla tasolla, mutta korkean tason koodauksessa nämä kielet ovat varsin tasaväkisiä. C on sitten asia erikseen, mutta se ei toimi kaiken pohjana, kuten kysyjä väittää, se on vain hyvin laajasti tuettu ja siksi paljon käytetty. Pohjalla ovat oikeasti konekielet. Hyväksi ohjelmoijaksi voi tulla ymmärtämättä konekieliä, mutta gurutason osaamiseen niiden tuntemus on käytännössä välttämätön. Oikeasti korkean tason kieliä ovat monet sovellusaluekielet (domain specific languages, DSL); niillä on mahdollista kirjoittaa todella korkealla tasolla, koska ne on suunniteltu juuri tietyn tyyppisten ongelmien ratkaisemiseen. - ajk

Q: Miten kirjastot toimivat javassa? WindowBuilder vaihetta tehdessäni huomasin että niitä ei ainakaan class tiedostossa erikseen kutsuta.
A: Kirjastot ovat yleensä .jar (Java ARchive) -tiedostoissa. Ja kyllä niitä sieltä .class-tiedostoista kutsutaan. - vl

Q: Dijkstra sanoi, että jos ihminen on koodannut jollain BASIC:lla, niin hän on tuhoon tuomittu ohjelmoijana: "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."[1] Mikä on oma näkemyksesi asiaan? t. BASIC:lla aloittanut http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD498.html
A: Moni on aloittanut Basicilla ja oppinut sen hyvät ja huonot puolet. Silloin osaa arvostaa toisten kielten hyviä puolia ja ihmetellä miten jotkut asiat vaan on saatua vaikeaksi joissakin kielissä. Perusajatus on kuitenkin sama. - vl
A: Kannattaa myös muistaa, että Dijkstran BASIC oli 1960- ja -70-luvun BASIC, jossa ei ollut aliohjelmia, funktiot olivat enemmän kuin yläasteella (= matemaattisen yksinkertaisen lauseen lyhennyksiä) ja for-silmukan lisäksi muut silmukat tehtiin if-lauseella ja gotolla sinne tänne hyppien. Oma oppini on tuolta lähtöisin, ja olen tosi surullinen, etten jaksanut sitä Forth-ympäristöäni enemmän opetella, kun käyttämäni BASIC oli lähinnä huono makro-assembleri. Esim. se, ettei tietokoneohjelman tarvitse olla jaksoitettu käskykokoelma, vaan se voi olla myös ongelman ja ratkaisun rakenteen kuvaus, josta kääntäjä tekee sopivan jaksoitetun käskykokoelmaklimpin, jäi minulta oppimatta vuosikymmenesi liikaa :-( -ji

Q: Miksi on olemassa niin monta erilaista ohjelmointi kieltä?

  • Miten ne poikkeavat toisistaan?
  • Onko jollain kielillä mahdollista tehdä asioita/ohjelmia, jotka eivät ole mahdollista toteuttaa jollain toisella kielellä?


A: Joku haluaa aina tehdä paremman kuin toinen. Ja silloin halutaan aloittaa alusta (jostakin syystä eikä parantaa olemassa olevaa). Kaikilla kielillä voi tehdä samat asiat. Toisilla toiset asiat ovat helpompia, toisilla toiset. - vl
A: Kielet jakautuvat sen mukaan, mitä yksittäistä tai useampaa ohjelmointiparadigmaa ne tukevat. Ohjelmointi paradigma taas tarkoittaa yksinkertaistetusti sitä, millä tavalla paradigman käyttäjä havainnoi maailmaa. Esimerkiksi puusepälle maailma näyttäytyy erilaisena kuin vaatesuunnittelijalle, samoin olio-ohjelmoijalle eri tavoin kuin funktio-ohjelmoijalle.
Ohjelmointikielet tukevat enemmän tai vähemmän omaa tai omia paradigmojaan. Näin ollen kieliä tehdään jokaisen omasta näkökulmasta tukemaan hänen (tai yleensä heidän) näkemystä siitä, miten ohjelmia pitäisi tehdä. Tätä varmaankin Dijkstrakin ajoi takaa, sillä paradigmasta toiseen siirtyminen on vaikeaa, koska se vaatii kokonaan uuden ajattelutavan oppimisen. -ji

Q: Mitä ohjelmointikieliä kannattaisi osata pelisuunnittelualalla? Miksi juuri näiden kielten osaaminen on tärkeää?
A: Kuten muuallakin, kielet tulevat ja menevät. Vielä tänä päivänä arvostetaan C:tä, mutta esim. Unityyn kirjoitetaan myös C#:illa. Monissa pelimoottoreissa on oma kieli. Mutta ajattelutapa samanlainen. - vl

Q: Mistä löytyisi Objektive-C:n opiskeluun hyvää materiaalia ja opetetaanko jossain objektive C:tä?
A: Valitettavasti meillä ei opeteta Objective-C:tä, vaikka se onkin C+oliot paremmin tehtynä kuin C++, C# tai Java. Ai niin, ei saanut sotia... sori. Applen OS X ja iOS opetusmatskut ovat turhan niukka- ja suorasanaisia, mutta esimerkkikoodista oppii paljon. Samoin esim. Stanfordin yliopistosta löytyy iOS-ohjelmointikurssi, jossa väistämättä oppii myös Objective-C:tä. Kielenä se on niin vanha, että kirjastostammekin löytyy Objective-C:tä käsitteleviä kirjoja. Ja vielä kannattaa tutustua Smalltalk-ohjelmointikieleen Pharon tai Squeakin kanssa, esim. Pharo by Example kirjan avulla. Objective-C näet on paljolti ottanut ajatusmaailmansa Smalltalkista. -ji

Q: Käytetäänkö analogisia tietokoneita nykyisellään mihinkään vai ovatko ne pelkkää harrastustoimintaa?
A: Pari linkkiä:

Joten vastaus on: kyllä. -ji