Ohjelmointi-innostukset

Published on 01 March 2024
10 min read
Ohjelmointi
Oppiminen
Ohjelmointi-innostukset

Ohjelmointia ikä kaikki

Ohjelmointi kiinnostaa nyt, mutta jotenkin suhde siihen on ollut aina melko epämääräinen. Harrastuksena ja innostuneena tekeminen on usein ollut valtavan kivaa, mutta kun on alkanut käymään työstä, niin sitten ei olekaan enää kiinnostanut samanlailla. Sama haaste tietenkin minulle tuttu monen muunkin asian kanssa.

C-64 copy/paste

Ensimmäiset muistikuvat ja kosketukset ohjelmointiin ovat joistakin superyksinkertaisista peleistä, joiden valmista koodia kopioitiin ehkä Mikrobitin sivuilta Commodore 64:ään Basicilla. Luulen, että tallentamista me ei silloin osattu, joten kyseessä oli kertakäyttöpelit. Joku äidin ystävä kirjoitti tietokoneella (kirjoituskoneella?) töissään ja oli opetellut konekirjoitusta, joten hänet rekrytoitiin kahvipöydästä auttamaan. Ikää meillä on ollut ehkä kymmenisen vuotta. Jokin autopeli taisi jopa toimia.

PC

Seiskaluokalle mennessä meille tuli PC. Upea laite: 486sx 25MHz, 4Mb muistilla, 100Mb kovalevyllä ja SVGA-näytöllä. Se oli järjettömän hieno ja hyvä. Sillä pelattiin paljon. Se on muuten yhä toimiva kapistus, vaikka on viettänyt useita talvia kylmän tallin hyllyllä. Pari kesää sitten se otettiin esiin ja pelattiin AUTS:ia, Aakkoset-peliä, Mine Bombersia ja Lion Kingiä (sitä pystyy pelaamaan tuolla! 😳). Slicks’n’Slide mainittava myös.

Ohjelmointi jäi kuitenkin kovin vähään. Koulussa ATK:n tunneilla olen jotain peliohjelmointia aloittanut Turbo Pascalilla, mutta aikomuksia olivat enimmäkseen. Tänä päivänä kun katsoo config.sys ja autoexec.bat virityksiä muistin optimoimiseen peleille, niin vaivaa on kuitenkin nähty yllättävän paljon. Noihin aikoihin tuli yksi Petteri Järvisen DOS 6.22 -opus luettua kirjaimellisesti puhki ja riekaleiksi.

Sekalaista pientä altistumista ohjelmoinille on ollut nuoruudessa ja lukiossa, mutta mitään erityistä en kyllä muista. Pelaaminen ehkä ollut keskiössä. Batmudissa oli aika pitkälle vietyjä skriptejä kyllä. Enkäpä kyllä tiennyt, että Batmud on yhä olemassa ja saatavilla Steamistakin.

C++ ja olio-ohjelmointi

Opiskellessa päädyin ohjelmistotekniikan kursseille. Osin innostuneisuutta, osin vahingossa, ihan en tiedä itsekään. Ehkä Apsin vetämät ohjelmoinnin pakolliset peruskurssit olivat niin hyviä. Ehkä oikeasti isosti sitä 🤔

Muutamista ohjelmistotekniikan kursseista jäi erittäin hyvä maku. Kurssit olivat minun silmin keskimäärin työläämpiä kuin muut kurssit, mutta niissä oli sitten myös jotain palkitsevaa.

Olio-ohjelmoinnin kurssi ja jatkokurssi jäivät erityisesti mieleen. Niissä oli harjoitustyöt, joihin sai ihan tosissaan tehdä töitä. Etenkin teletappi-peli teki ison vaikutuksen. Sen vaatimusmäärittely oli supertarkka ja tehtävä yllättävän vaikea. Enää sitä ei googlettamalla löydy. On yritettävä löytää omista vanhoista tiedostoista jotain aiheesta, ehkä olen kopioinut jopa tehtävänannon talteen. Olisi kiva lukea se uudelleen läpi.

Olio-ohjelmoinnista meillä oli käytössä kirja, joka oli supermielenkiintoinen. Olio-ohjelmoinnin ongelmatiikka vaikkapa periytymisen ympärillä oli tosi mielenkiintoista ja kirja kirjoitettu hyvin. Luin sen uudestaankin vielä kymmenisen vuotta valmistumisen jälkeen. Ehkä olisi aika kaivaa se taas esiin varastosta ja lukea uudestaan…

Opiskellessa ohjelmoin ehdottomasti eniten C++ käyttäen. Reaaliaikaohjelmoinnin, komponenttiohjelmoinnin ja verkko-ohjelmoinnin kursseilla ainakin vastaan tuli muutakin, mutta ne eivät tuntuneet yhtä tutulta. Verkko-ohjelmoinnissa ja .NET ympäristön ympärillä tuntui aina siltä, että itse framework, riippuvuudet ja muiden keksimien asioiden ymmärtäminen vei suurimman osan ajasta itse ohjelmoimisen sijaan, eikä se koskaan sytyttänyt samalla tapaa. Parasta on ehkä aina ollut ongelmien ratkominen itse pohtien. Ja riittävän maalaisjärjellä ratkottavat, sopivan kokoiset haasteet. Emacs ruutukaappaus. Picture from Wikipedia: By OMPIRE - Screenshot, CC BY-SA 4.0, Linkki

Yliopistolla käytin kovin sujuvasti Emacsia. Siitä tekisi joskus mieli kirjoittaa kokonainen artikkeli. Vieläkin hämmentää, että olen sitä käyttänyt ja kevyesti pelottava ajatus tutustua uudestaan. Tuon ruutukaappauksen perusteella vaikea ymmärtää miten iso kokonaiuus voi tekstieditori olla. Jos päivittäin ohjelmoisin ja pysyisin kohtuu vahvasti komentorivillä, niin olisi varmaan aika siistiä, mutta minun on tapana sukeltaa sen miljoonaan eri ohjelmaan ja tietää vähän kaikesta. Emacsin oppimiskäyrän ehkä selättää kerran tai kahdesti, mutta sen useampaa kertaa ei kyllä houkuta.

Peliohjelmointi XNA:lla

Valmistumisen aikoihin, 2005ish, innostuin kokeilemaan peliohjelmointia silloin melko tuoreella Microsoftin XNA ympäristöllä. C# oli erityisen kivan tuntuinen ohjelmointikieli ja XNA silloin minun silmin ihan aarreaitta ilmaisena.

Triplane Turmoil jonkinlaisena esikuvana sain lentokoneen tottelemaan nuolia ja lentämään silmukoita. Yksinkertainen painovoima oli mallinnettuna kanssa.

Ilmatorjuntatykillä sai ammuttua koneita ja räjähdykset ja savu toimivat partikkeliefekteillä. Se oli mun mielestä aika hieno. Sitä tehdessä ehkä kaikista vahvimmin tullut pohdittua sitä miten jumalattoman vaikeaa pelien tekeminen on. No teletappi pelin yhteydessä myös. Ihan kahdessa ulottuvuudessa lentävien lentokoneiden suunnanmuutokset tai tykin piipun osoittaminen hiiren suuntaan vaatii yllättävän paljon trigonometriaa ja painovoiman saaminen toimimaan kivasti ei ollut ihan helppoa sekään.

3D-pelien vaatima matematiikan määrä on aina tuntunut jotenkin lannistavalta, vaikka pohjana on matikan opiskeluja ollut reilusti. Kunnioitus peliohjelmointia ja suuria pelejä kohtaan onkin aika korkealla. Se määrä muiden työtä ja omaa viihdykettä, mikä on ostettavissa uudessa pelissä vaikkapa 50€ hintaan on minun silmin täysin massiivinen. Valtavan hienoja asioita maailmassa rakennetaan.

Ensipeli

Joskus 2011-2012 tietämissä ohjelmoin Ensipelin. siinä oli tarkoituksena saada tietokone olohuoneessa sellaiseen tilaan, että näppäimistön ja hiiren ääreen voi jättää pienen taaperon ilman että mitään hajoaa.

Hiirellä pystyi piirtämään näytölle sateenkaariviivoja, näppäimistöltä kuului erilaisia naurun ääniä ja eri nappuloista sai näkyville erilaisia efektejä. Jollain nappasin Windowsin oletuspainikkeet haltuun, ettei Windows nappulaa painamalla tai Alt+Tab:illa päässyt pelistä vahingossa pois.

Sitäkin tehdessä käytin XNA:ta, jonka Microsoft sitten 2013 kuoppasikin pois. Unity nykyään käyttää samaa C#-kieltä, ehkä ei olisi valtava vaiva saada peliä pystyyn uudestaan sillä.

Visual Basic

Töiden ohessa tutustuin joskus Visual Basiciin Excelin makrojen jatkeena. Mitään erityisen laajoja toteutuksia en koskaan tehnyt, mutta jotain kuitenkin. Siinä jotenkin hauskaa oli kyky nauhoittaa makroja ja sitten nähdä niitä koodina jota voi suoraan muokata eteenpäin. Muiden kirjoittamia Visual Basic koodeja muistan myös melko paljon ihmetelleeni ja puukottaneeni, mutta en yhtään muista mitä kaikkea ja miksi.

Voimalaitosten informaatiojärjestelmät

Töissäni ohjelmoin jonkin verran voimalaitos- ja polttotekniikan kokonaisuuksia. Sielläkin käytössä oli C#, mutta enimmäkseen tekeminen oli kuitenkin itse asian kuin ohjelmoinnin ympärillä. Käytössä oleva ympäristö otti kantaa suureen osaan tietotekniikasta ja koodauksen polttopiste oli tunnusluvuissa, savukaasuissa ja termodynamiikassa.

Yhtenä opintojen suurempana seminaarityönä, johon sai aiheen valita itse, houkutteli tehdä kevyt komponenttipohjainen voimalaitossimulaattori.

Idea varmaan lähti siitä miten voimalaitostekniikan-kurssin harjoitustyönä oli voimalaitos prosessin ratkaiseminen, jonka silloin tein muiden tavoin kynällä ja paperilla laskemana. Assari tarkasti tehtävät valtavalla Excel-taulukolla, jonka oli siihen tarpeeseen toteuttanut. Sitä katsoessa jäi aika paljon harmittamaan, etten ollut itse ymmärtänyt ongelmaa lähteä ratkaisemaan samoin. Se olisi ollut mahtavan opettavainen ja hyödyllinen tapa. Sittemmin olen Exceliä käyttänyt valtavasti, eikä tärkeää sinänsä jäänyt pitkän päälle oppimatta. Mutta sen olisi voinut tehdä paremmin.

Mutta se voimalaitossimulaattori olisi vienyt ratkaisun askeleen pidemmälle. Olisin halunnut raahata ja tiputtaa voimalaitoksen osaset paikoilleen, kytkeä toisiinsa ja sen jälkeen saada ohjelman ratkaisemaan kokonaisuuden.

Tekee mieli kaivaa esiin vanha voimalaitostekniikan harjoitustyö, tutustua asiaan uudestaan ja toteuttaa jokin kaunis laskentamalli sen pohjalta.

Näiden töiden ohessa tutkiskelin myös geneettisiä algoritmeja ja koitin niillä ratkaista jotain optimointiongelmia. Sen opin, että Sudokun ratkaisemiseksi paikalliseen optimiin tyytyvät ratkaisut eivät ole erityisen hyviä, vaan koko ratkaisun pitäisi olla oikein. Sudokun päädyin ratkaisemaan rekursiivisellä brute-force lähestymisellä. Geneettisten algoritmien logiikka on silti yhä super kiinnostava.

Nettikehitys

Startup-kulttuurin, applikaatioiden ja webin seuraaminen yleisesti on muutaman kerran herättänyt innostuksen rakentamaan pieniä applikaatioita ja sivustoja. Ruby on Rails oli hetken aikaa ihmettelyssä ja NodeJS asioita testailin myös. Kovin pitkälle en missään koskaan päässyt. Muutamia teknisiä kokeiluja, paljon lukemista ja kuuntelemista. Yleensä paljon energiaa ja aikaa on kulunut oikean koodieditorin valintaan ja pohdintaan siitä voiko Windowsin päällä ylipäänsä kehittää… Sitten olen innostunut asentamaan virtuaalikoneeseen Linuxin ja lähtenyt seuraavasta mutkasta taas uuden tangentin suuntaan.

Netti- ja applikaatiokehitys on tuntunut aina vähän liian suurelta kentältä sukeltaa rajallisella ajalla ja osaamisella. Jos osaamisessa on reikiä joka tasolla: HTML, CSS; JavaScript, webbiserverit ja ympäristöt, ohjelmointikielet, tietokannat ja back-end toteutukset, niin aloittaminen on monesti pelottavaa. Olisi fiksua tehdä jotain, aloittaa pienestä ja laajentaa seuraavalla, mutta jotenkin se ei tahdo helposti itsellä onnistua. Kaikkea tekisi mieli kokeilla, kaikki tehdä itse ja kaikki pitäisi ymmärtää hyvin ennen tekemistä, jolloin aloittaminen muuttuu helposti aika vaikeaksi ja valmista ei juuri tule.

Onneksi harrastuneisuuttaan ei välttämättä tarvitse mitään valmistuakaan ja jos se harrastus on ennemminkin ihmettely ja tutkiminen, niin ajan saa iloisesti kulumaan mitään tekemättäkin.

Tämä blogi

Nyt se ohjelmointi-innostus kuitenkin nosti päätänsä taas, enkä ole ihan varma mistä se lähti. Osin tuli töiden puolesta nettisivujen toteutus päiviin mukaan ihan viranpuolesta, osin törmäsin YouTubessa mielenkiintoisiin videoihin.

Se helpotti että työkoneena on Mac joten jäi Linux virtuaalikoneen pystytys välistä. VS Code oli kanssa editorina minulle uutta ja mahtavuudessaan mahdollisti ensimmäisen kuukauden editorin valinnan skippaamisen kokonaan. Sillä energialla saikin blogin jo alustavasti pystyyn.

Tämän blogin päätarkoitus ei ehkä ollenkaan ole kirjoittaminen ja blogipostaukset. Tämä on minulle ennenkaikkea alusta kokeilla ja ihmetellä asioita. Ennen tätä tein samaa Wordpressissä Dreamhostin päällä, missä siinäkin oli kaikkea kivaa opittavaa.

Tällä olen tutustunut ennenkaikkea front-end osuuteen ja oppinut akselilla HTML/CSS/JS/Svelte(Kit) ja niiden lisäksi Git(hub) ja Netlify asioita. Kun blogitekstit on markdown tiedostoja, niin olen voinut tietokannat ja CMS:t jättää toistaiseksi ulkopuolelle, mikä on vähän rajoittanut uuden opeteltavan määrää. Tosi kiva kokemus ollut tämä toistaiseksi.

Iso peukku Matt Fantinelille, joka on avannut oman bloginsa taustalla olevan koodin vapaasti saatavilla olevaksi templaatiksi, josta oli helppo aloittaa.

Se ei ole ajatuksessa mihinkään muuttunut, että valtavan paljon työtä tarvitaan asioiden tekemiseen. Mitä enemmän perehdyn mihin tahansa sen enemmän osaan arvostaa työn määrää, joka asioiden taustalla on.

Coding Train - P5.js

YouTubessa törmäsin TheCodingTrain -kanavaan ja Dan Shiffmaniin sen takana joka opettaa ohjelmointia. Kovin koodikoulu henkistä asiaa, kovin mahtavalla energialla. Supervärikkäät on nettisivutkin, mutta hän avaa useita käsitteitä todella kivasti.

“Kurssit” välilehdelle tuolla kanavalla on kerätty aloittelijoille kursseja ja Nature of Code kurssiin törmäsin suositteluina muualtakin useampaan kertaan. Vähän sitä aloitin, mutta tukevasti kesken on yhä.

Esimerkin vuoksi yksi video, josta saa kiinni millaista sisältöä hänellä on:

Hänen kauttaa ehkä ensimmäistä kertaa koskaan törmäsin käsitteeseen Creative Coding ja se resonoi itsessä. Erityisen tarkkaan en määrittelyitä lukenut, mutta sellainen kevyt ihmettelevä tekeminen ilman suurempaa tavoitetta ja suuren painoarvon laittaminen visualisoinnille ja lopputulokselle hyödyllisyyden sijaan kiinnostaa.

Coding Train kanavan ensivaikutelma minulle vaikutti siltä, että hän ratkoi/tutki sopivan kokoisia pieniä ongelmia omaa innostuneisuuttaan ilman laskelmoitua tarkoitusta opettaa vahvasti. Nyt katsottuna kovin ammattimaista on toki hänen tekemisensäkin, mutta mukavan iloinen energia on kaikessa taustalla.

Coding Adventures - Unity

Coding Train nosti YouTuben virtaan muutakin mielenkiintoista. Viimeisen parin kuukauden paras löytö on Sebastian Lague ja Coding Adventures. Hänen videonsa ovat niin hienoja, että on vaikea edes käsittää.

Niitä olen katsonut varmaan yli kymmenen tunnin edestä. Ensimmäisenä ehkä katselin nestesimulaatioita, loppu päässä shakkialgoritmin toteutusta, mikä myöhemmissä videoissa eskaloitui valtavaksi shakkiturnaukseksi. Portaalit olivat myös suunnattoman mielenkiintoisia.

Jos yksi suurimman vaikutuksen tehnyt video pitäisi nostaa esiin, olisi se ehkä tämä reitinetsintä algoritmi muurahaisilla.

Ihan valtavan mielenkiintoista katsottavaa. Ja tuossa painottuu mahtavasti se visualisointi ja lopputulos: On ihan valtavan suuri panostus ohjelmoida tuo logiikka, ja siihen päälle hurja työ esittää lopputulos noin kauniisti. Häneltä täysipäiväisenä työnä nyt yksi video syntyy ilmeisesti noin kahdessa kuukaudessa. Todella nöyräksi vetää työnmäärä mikä tuon kaiken taustalla on.

Noiden videoiden katsominen houkuttelee ihan tosi paljon kokeilemaan Unitya ja ohjelmoimaan jotain kaunista. Hänellä on melko iso lahja siinä, miten osaa selittää asiat niin, että ne pysyvät ymmärrettävinä ja loogisina. Hän saa tekemisensä kuulostamaan helpolta, siltä että ihan melkein varmaan voisi itsekin osata. Vasta kun pysähtyy tarkemmin miettimään tai pohtimaan miten asiaa selittäisi, muistaa miten sopivan raapaisun asioista saa. Tai ei edes niin, hän selittää kovinkin perusteellisesti, mutta välillä vaikka pelkkä matematiikka asioissa on todella haastavaa.

Helppo ihailla hänen tekemisiään. 🤩

Creative Coding, Code Art, Bleuje

Coding Trainin Dan viittasi jossain videossaan Etienne Jacob nimiseen ranskalaiseen kaveriin, jolla on blogi Bleuje.

Hänen tekemisensä ovat nyt jossain siellä creative codingin ja ja koodatun taiteen välimaastossa. Hänen sivuiltaan löytyy tällaisia looppaavia animaatioita:

Tuo vasemman alanurkan animaation pohjalla on Hilbertin käyrä, jonka päällä pallerot kulkevat. Tuollaisen animaation luominen voisi olla yksi bucket list asia itselle, ihanan näköinen ongelma. 😀

Hänellä on blogissaan tutoriaaleja myös. Coding Train käyttää opetukseen P5.js kirjastoa, joka vaikuttaa juuri oikealta työkalulta tällaisten visualisointien tekemiseen. Aika monta askelta olisi helpompia asioita ensin kokeiltavana, mutta tuossa on hyvä tavoite joka tapauksessa.