wiki:qa/2014
Last modified 4 years ago Last modified on 2014-02-21 13:51:46

Kysymys ja vastaus -palsta » 2014

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
  • JP: Jouni Potila (Ohj1-kurssin tuntiopettaja)
  • TS: Tuomo Sipola (jatko-opiskelija, tutkimusalana tiedonlouhinta)

(Järjestä kysymyksiä ryhmiin omatoimisesti.)

Kurssijärjestelyt ja työkalut

Q: Tehdäänkö harjoitustyö yksin vai parin kanssa? A: Kumpikin käy. -AJL

Q: Minkä tyyppisiä tentit ovat? A: Tuolla on vanhoja tenttejä mun kurssilta, ja täällä lisätietoa tentistä yleisesti. -AJL

Q: Vastasin alkukyselyyn. A: Kiitos :-). -AJL

Q: Mikä on ollut aikaisemmilla vuosina kurssin aloittaneiden läpipääsy prosentti? A: Tuolla tilastoja. -AJL

Q: Haluaisin kysyä, että miksi ihmeessä ohjelmointiin tarvitaan niin montaa erilaista työkalua? Nyt jo ladattuna Notepad++, VisualStudio, Jypeli, Tauno, Ville ja muutamia muita joiden nimiä en edes muista. Selviääkö näistä kursseista jos ei omaa pohjatonta mielenkiintoa tekniikkaan ja kompleksisuuteen?
A: Kieltämättä työkaluja on tällä kurssilla paljon, ja ne pitää asennella aluksi, mikä voi tuntua vaivalloiselta. Vaivalloisuus johtuu (ainakin Visual Studion osalta) siitä, että työkalu on "oikea" ammattilaisten työkalu. Mikä tappaa orastavan kitaransoittoharrastuksen tehokkaammin kuin se, että antaa aloittelijalle kouraan 50 euron kiinalaisen kopiokitaran, joka ei pysy vireessä sekuntiakaan, ritisee ja ratisee eikä toimi niin hyvin kuin "aikuisten oikeat" soittimet. Eikö nimenomaan aloittelija ole se, joka kipeimmin tarvitsee toimivan ja ammattimaisen työkalun, joka toimii silloin kun pitääkin? Vaikka tässä analogiassa onkin puutteensa, kuvastaa se ehkä sitä ajatusta, mikä tällä kurssilla on työkalujen osalta. -AJL

Q: Työssäkäyvänä onnistun osallistumaan ainoastaan ohjauksiin. Luennot pystyn katsomaan netistä tai ladattua koneelle. Tuleeko demoista jonkinlaista videota nettiin? Tai onko mahdollista osallistua Skypen tai jonkuun muun kautta demoihin/keskusteluun?
Q: Onko kevään kurssilla jonkinlaista etäpiskelijoiden demoryhmä (en löytänyt ainakaan ryhmää Korpista)? Saisiko tästä tiedon sähköpostilistalla?
A: Lisäsin "vain netti" -ryhmän, johon voivat ilmoittautua ne, jotka osallistuvat vain etänä. Se muistuttaa sopivasti (su klo 23:59) demojen palautusajankohdasta :-). Mitään "etätilaisuutta" ei valitettavasti etäopiskelijoille ole nyt tarjolla, vaan voitte katsoa demot videolta. Kiitos asiasta vinkanneille. -AJL

Q: Demojen palautus, jos käy niin että kone hajoaisi itseltäni ja sen takia demojen palautus/tekeminen olisi mahdotonta, onko tällöin mahdollista saada lisäaikaa palautuksiin?
A: Agoran tietokoneluokissa on aina koneita vapaana, ja luokat ovat myös viikonloppuisin auki. Oma kone ei ole välttämätön tällä kurssilla ja siksi se on myös vähän huono syy demojen myöhästymiseen. -AJL

Q: Kysymys luennoitsijalle: Mitä kirjoja suosittelet luettavaksi luentomonisteen ohella?
A: Kurssin etusivulla on suositeltavaa kirjallisuutta. Minulla on noista muutama eka huoneessa, niin voi käydä vilkasemassa jos kiinnostaa. -AJL

Q: Ilmeisesti syksyn ja kevään Ohjelmointi1 kurssit eroavat toisistaan jonkin verran. Mikä on suurin ero kurssien välillä? A: Eri opettaja, sama sisältö, eli eroa ei ole paljoa. - VL

Q: Miksi kurssilla ei voi käyttää Visual Studio 2013 -versiota?
A: Visual Studio 2013 vaatii käytännössä Windows 8:n, ja siihen (tai ehkä suoraan Windows 9:ään??) siirtyminen ottaa oman aikansa yliopiston byrokratiassa. Kurssin kannalta 2010 on parempi, koska Jypeli menee siihen nätimmin. -AJL

Q: Onko mahdollista saada kurssista numeroksi 5, tekemällä kaikki demot? Tällainen käytäntö kuulemma on joskus ollut.
A: Mennään niilä vaatimuksilla jotka on etukäteen (Korpissa) ilmoitettu, eli tuota mahdollisuutta ei ole tällä kertaa. -AJL

Q: Löytyykö jostain kattavaa opasta oikoteistä, eli näppäinyhdistelmistä, joita käytät usein ja joilla asiat nopeutuisivat?
A: Tuolla jotain yleisimpiä meidän keräämiä.

Oppiminen ja opiskelu

Q: Minkä asioiden opetteluun olisi hyvä panostaa eniten?
A: Työnteon ja -rytmin opetteluun, ja siihen että osaa aikatauluttaa omat tekemisensä. Kurssin sisältöpuolella muuttuja, aliohjelma, funktio, silmukat ja taulukot ovat ydinasiaa. Tarkempi osaamistavoitelista Korpissa. -AJL

Q: Kuinka guruksi Jyväskylän yliopistossa ohjelmointia voi opetella?
A: Ohjelmointikielten periaatteet -maisteriteemalla niin pitkälle kuin haluat. - VL

Q: Voiko ohjelmoinnin oppia vaikka minulla ei ole minkäänlaisia esitietoja?
A: Loistavasti jos asenne ja motivaatio on kohdallaan. Monesti sellainen onkin helpompi kouluttaa, jolla aikaisemmat (mahdolliset väärät) tavat eivät ole jarruttamassa kehitystä. -VL

Q: Kuinka kauan C#-kielen (perus)hallitsemiseen suurin piirtein menee?
A: Alkeet on selvillä nopeasti, pari sataa tuntia harjoiteltuaan osaa jo jotakin, ja loppuelämä menee opetellessa lisää -- ja jossain vaiheessa tajuaa, etten mää osaakkaan oikeastaan mitään. Vähän niinku lasten kasvatuksessa?? :-). -AJL

Q: Mikä vaikuttaisi olevan opiskelijoilla hankalin asia oppia ohjelmoinnissa?
A: Tämä on hyvä kysymys, johon ei ole helppoa vastausta. Lahtinen, Ala-Mutka ja Järvinen ovat kyselyn avulla selvittäneet, että hankalimpiin sisältöasioihin kuuluisivat viitteet, abstraktit tietotyypit, virheiden käsittely ja kirjastojen käyttö. Tuossa ei kuitenkaan mitattu oppimista vaan mielipiteitä. Oman kurssimme osalta sanoisin, että virheiden etsiminen omasta ohjelmasta on iso haaste. Toisaalta, jonkin "uuden" asian selvittäminen omatoimisesti ja itseohjautuvasti (tämä ei ole pelkästään ohjelmoinnin oppimiseen liittyvä juttu) on monelle myös tosi haastavaa ja uutta. Joillakin on se ajatus, että ohjelmointi on kokoelma kikkoja, joita ei voi sinänsä oppia tai opiskella ilman asiantuntija-apua, vaan että tämä kikka-tietous pitää siirtää (yksisuuntaisesti) opettajalta opiskelijalle, ja tällainen mielikuva ohjelmoinnista oppisisältönä voi rajoittaa hyvinkin paljon motivaatiota opiskelua kohtaan. -AJL

Q: Voiko jokainen oppia koodaamaan?
Q: Voiko kaikista tulla ohjelmisto koodaajia?
A: Kyllä ja ei. Jälkimmäistä vastausta on tutkinut esimerkiksi UK:ssa ja Australiassa Dehnadi et al., jonka mukaan osa erään ohjelmointikurssin opiskelijoista ei kyennyt muodostamaan mielessä ns. mentaalista mallia tietokoneohjelman suorituksesta, tai kyennyt omassa päättelyssään yhtenäisyyteen (consistency). Toinen osa porukasta taas kykeni em. kokeessa tällaisen mallin päähänsä muodostamaan, ja menestyi myös kurssikokeessa paremmin. Aiemmalla ohjelmointikokemuksella ei ollut merkitystä. Suurin piirtein samaa sanovat Bornat & Adams. Toisaalta, tämä kysymys on hyvin kompleksinen, ja pitää muistaa, että tietotekniikan ja matemaattisten aineiden opetuksessa on paljon kehittämisen varaa peruskoulussa. Mitä tapahtuisikaan, jos ohjelmointia osattaisiin opettaa innostavasti jo ekaluokkalaisille? Tutkaile esimerkiksi Alan Kayn töitä, Seymour Papertin ja monien muiden gurujen töitä, niin alat vakuuttua siitä, että jokainen ei pelkästään voi oppia ohjelmoimaan, vaan se pitäisi olla jokaisen etuoikeus! -AJL A: Lisättäköön tähän vielä, että näkisin, että motivaatiolla on iso merkitys. Jos asettaa itse itselleen tavoitteen oppia (ja myös päästä kurssista läpi), ja on valmis näkemään vaivaa sen eteen, niin en näe mitään syytä, miksei kaikki olisi mahdollista. -AJL
A: Annetaanpas toinen lainattu mielipide tähän, http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2014-01.html#e2014-01-24T14_18_26.htm Eugene Wallingfordin blogi on lukemisen arvoinen ohjelmoinnista kiinnostuneille. -ji

Q: Mikä on mielestäsi paras tapa opetella koodaamista ja onko olemassa mitään "must have" kirjallisuutta?
A: Tee ja kirjoita ohjelmia itse. Kokeile monia kieliä ja ympäristöjä. Opettele käyttämään Googlea - se on tärkein kirjallinen lähteesi. -AJL
A: Toki Googlessa kannattaa varoa, ettei erehdy pitämään NaapurinPojan? kirjoituksia täytenä totena. Suosittelen seuraavia kirjoja (haastavuusjärjestyksessä)

Jos saat viimeisen AoCP-kirjasarjan läpikäytyä, oletkin jo tiedoiltasi aika lähellä tohtoria ;-)

Ja mikä tärkeintä, ohjelmoi, ohjelmoi, ohjelmoi. Mieti ja kirjoita. Tee kaikesta mitä opiskelet ohjelma tai pari. Kasaa hyödylliset osat omiksi apukirjastoiksesi. Tutustu työkaluihin ja säädä ne sopiviksi itsellesi, laajenna niitä omiin tarpeisiisi. Ja muista ohjelmoida, mutta älä unohda elämää ympärillä. Paras opettaja on maailma ympärilläsi, kun vain pysähdyt havainnoimaan sitä ja miettimään hetkeksi. -ji

Q: Kuinka helppoa on käyttää tällä kurssilla ja Jypelillä opittuja taitoja tulevaisuudessa esimerkiksi pelien/ohjelmien luomiseen?
A: Tämän kurssin asiat ovat perusasiaa, mihin törmää lähes kaikessa ohjelmoinnissa. Jypeli on yksi kirjasto muiden joukossa, ja "oikeissa" projekteissa harvemmin mennään "puhtaalla" c#:lla (miten se sitten määritelläänkään), melkein aina käytetään jotakin kirjastoja joten siinä mielessä kirjastoja on hyvä oppia heti käyttämään. -AJL

Q: Kysymys luennoitsijalle: Voiko vanhakin oppia ohjelmointia? A: Voi. Ks 1, 2, 3. -AJL A: Mutta varaudu siihem että oppiminen on hitaampaa kuin kakskympisillä! - VL

Q: Onko välttämätöntä muistaa kaikki demotehtävissä opittu ulkoa seuraavia demoja varten?
A: Ulkoa ei tarvi paljoakaan muistaa, mutta aina kannattaa käydä ohjauksissa, jos yhtään tuntuu siltä, että jokin asia on jäänyt epäselväksi. -AJL

Q: How do I start "reading" other people's code? Is there any resources I can use? What can other people's code teach me?
A: Let me quote someone else here:

"...the best way to prepare is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and I fished out listings of their operating system."

-- Bill Gates Programmers at Work 1986

So, as you can learn both bad and good habits, you should try to find good code to read. -ji
A: A few entries, I hope others will add some more:

  • Source code of Emacs editor
  • Source code of Linux kernel
  • Old Lisp source on publications from 1960-1970
  • The Art of Computer Programming, Structure and Interpretation of Computer Programs, How to Design Programs (links above)
  • Patterns and Pattern languages (http://www.hillside.net/ especially the Pattern Languages of Programming conference's proceedings)

Alas, these are not part of the course literacy ;-) -ji

Oh, how could I forget it again? There's something called Literate Programming (valistava ohjelmointi suomenkielisille). It's a way of writing programmes as fractions interleaved with text that explains those code fragments. These literate programming source files can then be tangled to get the programme source, or weaved to get the literate, documented representation of the source. The tools have been traditionally called web something, so yes, even web is an overloaded term ;-) You can find more about Literate Programming at http://www.literateprogramming.com or from the father of literate programming, Donald Knuth, at http://www-cs-faculty.stanford.edu/~uno/lp.html (TeX is written in literate programming style using WEB tool). -ji (ajk made a minor correction)

Q: Ei mulla oikein ole vielä mitään kysyttävää, mutta mietin vain onkohan minusta enemmänkin tekemään ohjelmointia vai olenko tähän liian blondi?

A: Oletetaan, että olet nainen, vaikka blondeja löytyy toki miehistäkin. Minusta naiset ovat aina olleet synnynnäisiä ohjelmoijia, eivät he muuten tulisi toimeen meidän putkiaivoisten miesten kanssa. Myös maailman ensimmäisenä ohjelmoijana pidetään Ada Byronia, Lovelacen kreivitärtä. Alunperin sähköisiä tietokoneita myös ohjelmoivat naiset, jonka takia monet vieläkin käyttävät she-pronominia englannissa ohjelmoijasta puhuttaessa. Minä myös käytän, kunnianosoituksena noille ensimmäisille ohjelmoijille. -ji

Q: Onko kokemuksesi mukaan C#-kielen opettelun jäkeen helppo oppia myös muita ohjelmointikieliä (esim. Java) vai onko kielissä usein samankaltaisuuksia (esim. toisessa jokin komento tekee tuota ja toisessa puolestaan tätä)? A: Java on erinomaisen helppo, Ohj2 kurssilla käytetään Javaa ja parin viikon jälkeen tuskin kukaan huomaa että kieli onkin vaihtunut. Joskus todella on asioita, joissa toisessa kielessä saman niminen aliohjelmakutsu (tai metodi) voi tehdä hieman eri asiaa. Esimerkiksi c#:in jono.Substring(alku,pituus) on Javssa jono.substring(alku,loppuindeksi) jolloin huolimattomasti käytettynä voi taphtua virheitä. Erityisesti kun 0-paikasta aloitettuna molemmat toimivat samalla tavalla.

Q: Missä vaiheessa opetellaan koodaamaan muillakin kielillä, kuin C#:lla? A: Ohj2:ssa käytetään Javaa. Web-ohjelmointikursseilla esim Pythonia tms. Funktio-ohjelmointi -kursseilla Haskelia jne...

Q: Tällä kertaa jäi tekemättä Ville ja Alice tehtävät, ja tietty Guru, mutta kuinka paljon jäi nyt sitten oppimatta, kun ei nuihin perehtynyt?
A: Kurssin ydinasiat on aina niissä tehtävissä 1--6. Jos on aikaisempaa kokemusta tai jos haluaa lisähaastetta niin voi ja ilman muuta kannattaa katella bonus- ja gurutehtäviä. -AJL

Q: Kuinka pitkälle tällä kurssilla vielä edetään/mitä pitää osata kurssin lopussa? Voiko itseään alkaa kutsumaan nörtiksi kurssin jälkeen, jos on oppinut kaiken?
A: Nörttiys on vähän niinkuin SVR:n kunniamerkit. Sitä ei voi erityisesti ansaita, eikä sellaista titteliä voi itselleen ottaa tai omia, vaan vain joku muu voi myöntää sinulle sellaisen :-). Pidä sitä suurena kunnianosoituksena! -AJL

Pelit opetuksessa

Q: Tuntuu aika turhilta ottaa mukaan tässä vaiheessa jotain pelijuttuja, kun varmasti moni ei osaa edes perusasioita. Voiko keskittyä perusjuttuihin jatkossa?
A: Ei ole tarkoitus mitenkään skipata perusjuttuja, vaan saada ne tuntumaan mielekkäämmiltä. Asiasisältö ja vaatimukset ovat sinänsä pysyneet samoina, vaikka pelit ovatkin tulleet mukaan. -AJL

Q: Koetko, että pelinomainen oppiminen tulee (lähi)tulevaisuudessa osaksi peruskoulun ja/tai lukion opetusta?
A: Tuo on nyt niin kuumaa hottia, että varmaan se sanana tulee olemaan osa koulutusta kaikilla tasoilla. Hyvin laajasti ymmärrettynä pelinomainen oppiminen on minusta hyvä filosofia, missä opiskelija pyrkii omilla tietoisilla valinnoillaan ja ratkaisuillaan etenemään "pelissä" (eli opinnoissaan/oppimisessaan) ja kehittymään, ihan ninkuin peleissä kerätään expaa tai mitä ikinä. Ja harvoin pelataan yksin, eli yhteisöllisyys ja sosiaalisuus vahvemmin mukaan oppimiseen kuin mitä se nyt on. Miten opiskelijat saadaan tuohon "pelimoodiin", on lahjakkaan opettajan tehtävä, ja se ei ole muuttunut kovin paljon viimeisten vuosikymmenten aikana, ja siinä mielessä kuuluu jo nyt 100%:sti nykykouluun. -AJL

C# sekä muut kielet

Q: Onko C# helpoin ohjelmointikieli, vai minkä takia sillä aloitetaan?
A: Kieliä on paljon, niin myös mielipiteitä. C# tarjoaa kuitenkin mahdollisuuksia aika monen tyyliseen ohjelmointiin (puhutaan paradigmoista, kuten olioparadigma, funktionaalinen ohjelmointi, jne.), mikä on mielestäni sen vahvuus. Kieli on myös tällä hetkellä aika suosittu teollisuudessa, ja sille on paljon kirjastoja. Heikkouksista voisi mainita sen, että jonkin verran joutuu kirjoittamaan "outoja" sanoja, että saa ensimmäisen ohjelman tehtyä (varmaan huomasit Hello Worldia tehdessä.) -AJL

Q: Miksi tälle kurssille on valittu juuri C#? Miksi ei esim. Python tai Ruby, jotka ovat syntaxiltaan huomattavasti luettavimpia, ja helpommin ymmärrettävämpiä?
A: Varmaankin ainakin kaksi syytä. Ensimmäisenä historialliset syyt. Kurssi on aiemmin vedetty Javalla, C:llä jne. joten C# on aika luonnollinen jatko "samantapaisena" kielenä. Toinen syy on se, että mielestämme -- muista että nämä asiat ovat usein myös mielipidekysymyksiä --edelleen paras tämänhetkinen "indie-pelien" framework on XNA, jonka päälle Jypeli on rakennettu. Tämä yhdistettynä Visual Studioon (yksi parhaista IDEistä) takaa sen, että kurssilla opituista asioista on paitsi konkreettista hyötyä kurssin jälkeen, oppiminen voi olla hauskaa (ei vähiten pelien ansiosta). -AJL

Q: Onko C#:n hallitsemisesta apua muiden koodikielien opetteluun? A: On. Samaa voisi sanoa melkein kaikista kielistä. Paitsi ehkä Whitespacesta... -AJL
Äläs nyt, Whitespace on selkeästä (he, he) ulkoasustaan huolimatta ihan ymmärrettävä pinokieli, katsokaa vaikka Whitespacen tutoriaali. Mutta Malbolge, tuttu Holmes NY:stä, se vasta on tosiohjelmoijan kieli! Tarinan mukaan ensimmäisen "hello world" -ohjelman tekemiseen meni kaksi vuotta. -ji

Q: Mikä on paras ohjelmointikieli?
A: Lisp. -ji
A: Se (tai oikeassa elämässä todennäköisesti monikossa ne), joka tarjoaa sinulle sopivasti haastetta, opittavaa, hauskuutta ja mielellään leivän pöytään. (Tämäkin kysymys kuuluisi oikeastaan mielipide-osastolle.) -AJL
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: Kuinka helppoa/vaikeaa on oppia uusi kieli? Mitä kieliä kannattaisi oppia?
Q: Millä kielellä olet aloittanut ohjelmoinnin? Miksi? Koetko jonkun kielen olevan helpoin ohjelmoinnin aloittamiseen?
A: Ainahan uuden kielen opetteleminen on työlästä, ei sitä voi eikä kannata kieltää. Mutta onko se vaikeaa... Otetaan nyt esimerkkinä C#: siinä mielessä ko. kieli ei ole yhtä vaikea kuin C++ tai C, että C#:ssa on vähemmän yksityiskohtaisia pikku nippeleitä, jotka lähestulkoon aloittelijan on tiedettävä ja muistettava. Pitäisin siis C#:a helpompana kielenä kuin C++:aa. (Itselleni C++ oli ensimmäinen kieli, ja pakko myöntää, etten vielä silloin kovin tykästynyt aiheeseen.) Mitä kieliä kannattaisi oppia, ks. mielipidepalsta alempana. -AJL

Q:: Mitä eroa eri ohjelmointikielillä on?
Q:: Kuinka paljon eri ohjelmointikielet eroavat toisistaan, ja miten päätetään mitä niistä käytetään? Suositaanko jotain tiettyä kieltä tietyntyyppisten sovellusten tekemiseen?
A: Ohjelmointikielet eroavat toisistaan valtavasti, mutta periaatteessa kaikilla voi tehdä samat asiat. Toisilla jonkun asian tekeminen on vaikeampaa kuin toisilla. Valitettavan usein päätös kielen kätöstä tehdään heikoin tai olemattomin perustein, esim. sen mukaan, mikä kieli on muotia tai teollisuusstandardi sillä hetkellä. suosittelen opettelemaan useita erilaisia kieliä, jotta itse voi tehdä arvausta paremman päätöksen.

Esimekkinä valinnoista, numeeriseen, laskennalliseen ohjelmointiin on historiallisesti käytetty Fortrania, mutta nykyään monesti törmää Pythoniin, ja joskus esim. uutukaisiin Go ja Julia. Hajautettuun ohjelmointiin pidetään varmana vaihtoehtona Erlangia, mutta tuo Go toiminee siellä kohtuudella myös. Sulautettuja, pieniä tietokoneita on ohjelmoitu paitsi C:llä, myös tietysti konekielellä ja assemblerilla, mutta myös Forthilla. Nykyään jokapaikan kieliä teollisuudessa ovat C, C++, C# ja Java, mutta Python, Ruby, Scala, Objective-C, Clojure ja Haskell löytyvät monen firman sorsakoodista. Ja kaikkialta löytyy JavaScript. -ji

A: Ja jos haluaa päästä vain kokeilemaan eri ohjelmointikieliä, ei niitä tarvitse nykyään enää asentaa omalle tietokoneelleen. WWW:stä löytyy palveluita, joissa voi kokeilla ohjelmointikieliä pienille ohjelmille, esim.

ja lisää löytyy osoitteesta

Esimerkkejä ohjelmointikielistä voi hakea vaikka seuraavista

Rosetta Codessa on esimerkit 526 ohjelmointikielellä! Huh... -ji

Q: Minkä takia ohj1 ja ohj2 kurssi suoritetaan eri kielillä? Eikö olisi fiksuinta opetella yksi kieli paremmin? A: On hyödyllisempää oppia pärjäämään monella kielellä (ja oppia oppimaan kieliä tarvittaessa) kuin osata yksi täydellisesti. C# ja Java eivät kovin olennaisesti eroa toisistaan. Suosittelen tutustumaan myös radikaalisti erilaisiin kieliin, kuten Haskell (ks. Funktio-ohjelmoinnin kurssi), Lisp tai Prolog. - AJK

Q: Kuinka hyvin ASCII-koodi asiat täytyy osata kurssin lopussa? Mikä on nopein suoritus mitä demo 1 - tehtävä 2 on koskan ollut?
A: Se täytyy muistaa ja ymmärtää, että ASCII-koodi on sopimus siitä, miten 7-bittinen luku tulkitaan kirjoitusmerkiksi. Yksittäisiä merkkejä ei tarvitse eikä pidä opetella ulkoa, mutta kurssin oppimistavoitteisiin kuuluu tietää, että esimerkiksi kokonaisluku (int) 97 voidaan tulkita pikku a-kirjaimeksi, luku 101 e-kirjaimeksi, ja että noiden välillä olevat luvut voidaan tulkita b:ksi, c:ksi, ja d:ksi. -AJL

Q: Onko peliohjelmoijan qbasic- ja html-taustasta enemmän haittaa vai hyötyä C#:n oppimisen kannalta ja miten?
A: Pidä mieli avoimena, äläkä yritä tehdä kaikkea samalla tavalla kuin Qbasicilla teit, niin kyllä siitä varmasti hyötyä on. -AJL

Q: Onko kokemuksesi mukaan C#-kielen opettelun jälkeen helppo oppia myös muita ohjelmointikieliä? (esim. Java) vai onko kielissä usein hämääviä samankaltaisuuksia (esim. toisessa jokin komento tekee tuota ja toisessa puolestaan tätä..)?
A: Voi olla samoja metodeja, joka tekee pikkuisen eri asioita (esim. Substring), ja ne täytyy vain sitten sopivasti "unohtaa" kun siirryt kielestä toiseen. Mutta ehdottomasti kun on yhden kielen oppinut, niin samasta "kieliperheestä" tai paradigmasta on kyllä aika vaivatonta oppia toinen kieli ainakin jollakin tasolla. -AJL

Q: Mikä on mieleenpainuvin ohjelmointimuistosi esim. suuri onnistuminen tai oivallus, tai sitten kammottavin koodin kanssa kamppailu?
A: Toiseen ohjelmointiparadigmaan tutustuminen on ollut avartavaa ja tarjonnut monia oivalluksia. -AJL

Q: C# is my first serious attempt at learning a programming language. Which one would be easiest to learn next?
A: Should you stay in the Algol-family of programming languages, anyone suites. Try, for example, Python. But you'll gain galore, if you take a language from another language family. I'd suggest F#, as it's integrated into same programming tools that C# has. Other than that, try Racket (http://www.racket-lang.org/, available for Linux, OS X, Windows), which has an excellent IDE, and a splendid book for learning something more than basics of programming (How to Design Programs, available at http://www.htdp.org/). -ji

Muut käyttöjärjestelmät kuin Windows kurssilla

Q: Miksi Mac koneilla työskentely on tehty niin hankalaksi? Työkalut eivät ole yhteensopivia.
A: Kerro mikä tai miten, niin tilannetta pyritään parantamaan. Käytännössä Mac on Unix, kuten Linuxkin, joten hiljalleen käytettävyys paranee. Kovin moni kurssin ympärillä pyörivistä vastuuhenkilöistä ei kuitenkaan ole kokopäiväisia Mac- tai Linux-käyttäjiä, joten väistämättä nämä käyttöjärjestelmät ovat hieman sivummassa.

Toisaalta C# on tärkeä osa Microsoftin näkemystä, kuinka Windows-ohjelmia kehitetään. Linuxilla vastaavassa asemassa on useita kieliä, ehkä kuitenkin C ja C++ ovat tärkeimmät, OS X:llä taas Objective-C. Jokaisessa käyttöjärjestelmässä ja graafisessa käyttöliittymässä on kuitenkin oma tapansa tehdä ohjelmia, joka ei sovellu muihin käyttöjärjestelmiin. Siten otitpa noista minkä tahansa, aina on edessä "hankaluutta" toisessa käyttöjärjestelmässä, mutta ohjelmistokehitys omassa ekosysteemissä on jouhevaa. -ji

Q: Kun kerran jypelistä on olemassa jonkinlaiset versiot myös Linuxille ja Mac:ille, niin miksi ne on niin vaikea löytää?
A: Mac-versio on vielä työstön alla, mutta koetamme saada sen käyttöön mahdollisimman pian. -ji
A: Mac-versio on nyt testikäytössä, ja löytyvät wikistä. Kiitos, Tomi! -ji

Q: Olisiko mahdollista saada päivitetyt ohjeet ohjelmistojen asennukseen? Esim. Mac Mavericks + BootCamp ei toiminut niin kuin piti ja joutui melkoisen paljon tekemään "turhaa" säätöä että sai kaikki ohjelmat Macilla toimimaan.
A: Jos BootCampia? käytät, et ole enää juurikaan mitenkään tekemisissä Macin OS X Mavericksin kanssa, vaan käytät tietokonettasi Windows-koneena. Ainut ongelma minulla on ollut tuossa, tosin XP:n kanssa vanhemmalla BootCampilla?, ettei XP tykännyt siitä, että Mac-puolen tiedostot (OS X:n partitio) näkyi Windows-kamojen joukossa. Siitä selvisi jonkun DLL:n poistolla, mutten uskalla suositella tuota. Veijo Google auttaa tarvittaessa ;-) Mutta kerro toki ongelmistasi, niin koetamme löytää niihin ratkaisun ja selkeyttää ohjeita. -ji

Q: Mitä kieliä konsolipelien ohjelmoinnissa yleisesti käytetään? Jokaisella pelitalollahan tietysti on käytössä oma pelimoottorinsa, joka sanelee sitten aivan omat ehtonsa työskentelylle, mutta kai siellä kuitenkin joitakin universaaleja kieliä on taustalla?
A: Pikkuisen arvauksen puolelle menee, kun ei ole kokemusta mitä eniten käytetään, mutta samat C, C++, Java, C# ja Assembly sielläkin on käytössä, plus varmaan tukku muita oheiskieliä eri tarkoituksiin. -AJL

Yhteydet matematiikkaan

Q: Pureudutaanko kurssilla matemaattisiin ongelmiin?
A: Emme todista lauseita tai ohjelmia "oikeiksi", joten siinä mielessä emme lähesty asiaa matemaattisesta näkökulmasta, se on myöhempien kurssien tehtävä. -AJL

Q: Saako ohjelmoinnilla naista?
A: Lisäät soppaan hieman matematiikkaa, niin vastaus on kyllä: http://www.wired.com/wiredscience/2014/01/how-to-hack-okcupid/all/ -ji
A: Tai sitten ei. -AJL

Q: Viitaten tehtävään B2... Voiko numeroksi nähdä ko. tehtävässä myös kaksinumeroisen luvun? Eli oliko sallittua vaihtaa numeron 62 paikkaa? Ja tuleeko ohjelmoinnissa yleensäkin nähdä numerot ennemmin tunnuksina, kuin lukumäärää osoittavina lukuina?
A: No tuo on jo aika väljästi tulkittu :-). Yleensä numerolla tarkoitetaan merkkejä, joilla voidaan kirjoittaa lukuja, joten luku 62 koostuu kahdesta numerosta (1 Wikipedia]). Mutta tuon tehtävän pointti olikin laittaa ihmiset vähän kääntämään aivoja ylösalaisin, joten selkeästi sinunkin kohdallasi mission accomplished :-). -AJL

Mielipiteet ja suositukset

Q: Jos olisi pakko valita. Vim vai Emacs?
A: Emacs ehdottomasti! Vim on hyvä editori, Emacsissa niitä on useita, jopa kohtuuhyvä Vim-kloonikin (Evil). Emacs on enemmän ohjelmointiympäristö kuin Vim, ja kasvaa käyttäjänsä mukana tämän taitojen ja tietojen karttuessa. Molemmat kannattaa opetella edes kohtuullisesti. Ja Sub(lime)Text 2 vai mikäs se AJL:n suosikki olikaan ;-) -ji
A: Ed is the standard editor. Koodaukseen käytän itse Emacsia. - AJK

Q: Miten voin koodata Comic Sans:lla?
A: Hauskasti! Vakavasti, Comic Sans on suhteellinen kirjasin, eli kirjaimet ovat leveydeltään erilaiset, kun taas esim. Courierissa kaikkien kirjainten leveys on sama. Historiallisesti on käytetty samanlevyisiä kirjasimia koodille, mutta varsinkin paperilta luettaessa tämä näyttää minusta karsealta. Vaihtuvaleveyksisiä kirjasimia ei vain kovin hyvin editoreissa tueta, joten kannattaa pysyä tasalevyisissä. -ji

Q: Kysymys: DukeNukem? 3D vai Wolfenstein 3D?
A: Jet Force Gemini. -ji
A: Aivan ehdottomasti Wolfenstein 3D. No doubt about that. -AJL

Q: Lähitulevaisuudessa hyödyllisin ohjelmointikieli työelämässä?
A: Näin menee:

  • 0-5 v: JavaScript, Java, C#, C/C++, Objective-C, Python, Ruby
  • 5-10 v: JavaScript, Java, F#, C/C++, Python, Haskell
  • 10- v: Fortran (vitsi, sillä kukaan ei tiedä) -ji

Toisaalta nuo kaikki ovat aika hatusta temmattuja, työelämää on monenlaista, ja muotikielet vaihtuvat. Silti esim. vuosikymmeniä vanhat Cobol-, Pascal-, Fortran- ja Lisp-ohjelmat toimivat ja kääntyvät nykyisilläkin toteutuksillaan. -ji

Joten hyödyllisin on se, josta on sinulle eniten hyötyä. Esim. eräs Lisp-ohjelmoija teki Lispistä Javaan koodin muuntavan ohjelman, kun ei halunnut pomonsa Java-vaatimusta totella. -ji

Q: Kuinka kauan n. keskimäärin yhden "oikean" ohjelman tekeminen kestää, ja kuinka monta (tuhatta) riviä koodia pitää kirjoittaa?
A: Oikea ohjelma kaiketi tarkoittaa sellaista, jota joku oikeasti käyttää johonkin ja joka on valmiin näköinen. Mitä tahansa yhdestä päivästä ja 50 rivistä vuosikausiin, satojen ihmisten yhteistyöhön ja miljooniin riveihin. Riippuu kovasti ohjelmasta. Monet oikeat ohjelmat syntyvät yksinkertaisesta ratkaisusta tiettyyn ongelmaan, joka sitten ajan myötä kasvaa kun ohjelmaa käytetään ja sitä laajennetaan pärjäämään yhä erilaisemmissa tilanteissa. - AJK

Q: Mikä on lempikielesi ohjelmoinnissa?
Q: Mikä on oma suosikkisi koodauskielenä?
A: Itse tykkään C#:sta, mutta se johtuu paljolti siitä, että sitä olen eniten käyttänyt. Haskell on myös mielenkiintoinen ja täysin erilainen tuttavuus, jota en kuitenkaan kovin hyvin vielä osaa käyttää "oikeasti". -AJL

Q: Miksi eri ohjelmointikieli?on ja miten niiden käyttö eroaa toisistaan? Suosivatko tietyn tyyppiset ihmiset tiettyä kieltä?
A: Vastasit oikeastaan itse tähän kysymykseen. Mutta onhan kielissä paljon eroa (kuten yllä muissa vastauksissa on sanottu), ja tietysti tilanne voi olla se, ettei pääse itse valitsemaan kieltä, vaan on käytettävä asiakkaan tai projektin valitsemia työkalua. -AJL

Q: What programming languages would you recommend learning to someone wanting to do computing in science?
A: Depends on the science. You won't go much wrong, if you'll learn Python or Java, but you gain much, much more, and become greatly independent of the libraries of others, if you'll learn languages like Lisps or Haskell. Other scientists might have problems understanding you, well, musicians understand Lisp, but when they see your brilliance, they'll learn your favourite language too. -ji

Ohjelmointi, tieteet ja taiteet

Q: Minkälaisia genetiikan tutkimiseen kehitettyjä ohjelmia on olemassa?
A: Katso esim.

Eikä tuossa todellakaan ole kaikki. -ji

Q: Käsitelläänkö tällä tai jollain muulla Jyväskylän yliopiston ohjelmointikurssilla millään tasolla pelien äänimaailmaa?
A: Ei tällä kurssilla :-(. Tutkaile semmoista kurssia kuin HTKA112 Pelin lumo. Sitten tietysti ihan musiikin laitoksen omat kurssit voivat sopia tuohon, katsele heidän sivuainetarjontaa. -AJL

Q: Onko ohjelmointi loogista?
A: On, mutta kaikkea muuta kuin kaavamaista tai rutiinimaista. Omasta mielestäni hienoa ohjelmoinnista tekee se, että se on myös taidetta. Ohjelman (tai pelin, tai minkä ikinä) koodi voi olla kuin upea taideteos, jossa näkyy tekijän sormenjälki ja persoonallisuus. Tai sitten se voi olla nopeasti kyhätty ja kiireessä tehty häkkyräviritys, joka hajoaa hetkenä minä hyvänsä, ja sellaisesta tulee huono olo eikä sellaista tee mieli näyttää kenellekään, ihan niinkuin keskeneräistä maalaustakaan ei tee mieli näyttää kellekään. -AJL

Q: Is there many opportunities to work in natural and life sciences as a computer programmer?
A: I've long wanted to answer this, but haven't found the right words. Fortunately, I think, Eugen Wallingford did found the right words, though the question was a bit different: Why we need computer programs. Please, look at http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2014-01.html#e2014-01-26T15_05_37.htm
Another reason can be found here: http://dougengelbart.org -ji
A: Also, take a look at this Journal of Digital Humanities: http://journalofdigitalhumanities.org -ji

Työnäkymät

Q: Auttaako ohj1 saamaan kesätöitä alan hommista?
A: Kyllä, mutta ota myös muutama muu kurssi, niin mahdollisuutesi ovat paremmat. -AJL

Q: Ovatko suomalaiset kansainvälisesti tarkasteltuna hyviä ohjelmoinnissa? Johtuuko suomalaisten menestys pelialalla ohjelmointitaidoista?
A: Ovat, ja johtuu :-). Tottakai. Mutta kyllä kolikon toisella puolella on hyvää liike-elämän osaamista noiden menestysfirmojen osalta. Ja aivan takuuvarmasti siinä kolikossa on vielä useampiakin puolia. -AJL

Henkilökohtaisemmat

Q: Miksi hait opiskelemaan tietotekniikkaa ja mikä on omasta mielestäsi suurin saavutuksesi?
Q: Minkä ikäisestä asti olet ollut kiinnostunut tietotekniikasta ja mikä ajoi sinut sen pariin aikoinaan?
A: Oma "urani" lähti liikkeelle pelien kautta. Ensin pelkästään pelaamalla paljon (C64, Amiga 500, jne) --> kiinnostus tietokoneisiin yleensä. Sitten yläasteella viimein ohjelmointikurssi, joka taisi olla jonkin sortin peliohjelmointia Basicilla. Mitään järkevää ei muistaakseni saatu aikaiseksi mutta kyllä siitä kipinä jäi tietotekniikkaan ja ohjelmointiin. Suurin saavutus... Lasketaanko omat lapset? :-) No, ohjelmoinnin opettaminen noin 500 lapselle ja nuorelle kesäisin on ollut tosi antoisaa, sen voinee laskea saavutukseksi. -AJL

Q: Onko työsi kivaa?
A: ON :-). -AJL

Q: Mikä on vaikuttavin/vaikuttavimmat softat mitä olet ollut tekemässä?
Q: Mikä on siisteintä, mitä luennoitsija itse on ohjelmoinut?
Q: Mikä on mielenkiintoisin ohjelma, ohjelmisto tai ohjelmointiin liittyvä projekti, jossa olet ollut mukana?
A: En ole ollut mukana sellaisessa, mistä tässä voisi erityisesti mainita. Mutta pieniä projekteja on tullut tehtyä, joista on ollut itselle ja muillekin iloa. -AJL

Q: Harrastatko koodaamista vapaa-ajalla?
A: Toki, mutta pakko myöntää että perheenisänä aika on vaan kovin rajallinen. -AJL

Q: Haluaisin kysyä kuinka sanaa kirjoitat minuutissa?
A: En ole pitkään aikaan mitannut, mutta yläkoulussa 9. luokalla olin kouluni nopein kirjoittaja eräällä 10-sormijärjestelmän kurssilla. -AJL

Sekalaiset

Q: Miksi joillakin näppämistöillä ei voi painaa montaa nappia yhtäikaa?
A: http://www.microsoft.com/appliedsciences/antighostingexplained.mspx

Q: Haluaisin kysyä onko siitä tilastollista tutkimustietoa, että aiheuttaako ohjelmointi näön, ryhdin ja sosiaalisten taitojen heikentymistä? Vai onko se vain paikkansa pitämätön stereotypia?
A: Sosiaaliset taidot eivät näemmä heikkene:

http://www.computerworld.com/s/article/9245933/Computer_geeks_as_loners_Data_says_otherwise

Muut kysytyt kohdat tuskin heikkenee sen enempää kuin muullakaan käsityöalalla. -ji

Vastaamattomat

Miksei asioita voi selittää maallikon termein, että vähemmän kokeneet ymmärtää. Esim. Ei paljoa C# alkuperää, paradigmoja tai muuta selitelty.