C-kielen opettamisen haasteet

(Kirjoittajat: Olli Savolainen ja Daniel Schildt)

Olli: Ohjelmoinnin perusteiden opetuksessa on minusta tärkeää pidättäytyä oleelliseen: Sen oppimiseen, minkä avulla pääsee liikkeelle nopeasti ja toteuttamaan omia ideoita.

Erityisesti C- ja C++-kielissä tämä on erityisen haastavaa. Kun kieli on kolme-neljäkymmentä vuotta vanha, voi olla varma siitä että siinä on rakenteita ja käytäntöjä, joiden opettelusta ei monissa uusissa sovelluksissa ole enää kovinkaan paljoa hyötyä. Käytännössä ne on kuitenkin usein opittava, jos aikoo ymmärtää muiden koodia.

Internetin myötä ohjelmistokehityksen maailman kehitystahti näyttää räjähtäneen entistä nopeammaksi. JavaScriptiä pidettiin ennen vain skriptikielenä, jollaisena sitä mainostetaan edelleen myös löytämässäni Metropolian tutkinnossa.

Näyttää kuitenkin siltä, että tulevaisuudessa aina vain suurempaa jalansijaa saavat web-ohjelmistokehykset rakentuvat enemmän ja enemmän JavaScriptin päälle. Siihen ei enää suhtauduta pelkkänä skriptausalustana, vaan täysimittaisena ohjelmointikielenä, jonka päälle rakennetaan alustoja kuten Node.js ja sen ympärille rakentunut ekosysteemi.

Nettiselain lähestyy universaalin ohjelmistoalustan asemaa, sillä koodataan tulevaisuudessa myös kovempaa suorituskykyä vaativaa koodia. Toisaalta tämä kaikki on vielä suhteellisen uutta – haasteena on osata kiinnittää huomiota oleelliseen. Ei vanhenneeseen, mutta ei toisaalta myöskään ohimenevään muotivillitykseen.

Rajapinnoista ja uudelleenkäytettävyydestä

Daniel: Rajapinnat ovat sekä menneisyyttä että tulevaisuutta. Tietyllä tasolla ne luovat (toivottavasti myös dokumentoidun) mahdollisuuden uusien työvälineiden käyttöönottoon. Samalla uusia rajapintoja ei aivan joka tilanteessa välttämättä tarvitsekaan itse rakentaa aikaisempiin taustajärjestelmiin, ja esimerkiksi mobiilisovellusten rakentaminen helpottuu merkittävästi – jos rajapinta vain on riittävän nopea suurille käyttömäärille.

Olli: Aloittelevan ohjelmoijan yksi tärkeimmistä oppitunneista on se, ettei kaikkea kannata tehdä itse. Tai edes useimpia asioita.

Daniel: Jotta huomisen sovelluskehittäjät oppivat käytännössä tekemään sovelluksia, jotka toimivat muuttuvissa käyttöympäristöissä, myös opetus kannattaa modernisoida tämän päivän työkalujen tasolle. Myös sulautetut järjestelmät uudistuvat, vaikka monet aikaisemmista rajoitteista ovat edelleen tärkeitä ottaa huomioon. Erilaiset apuvälineet kuitenkin auttavat, ja tekevät aikaisemmin hitaista prosesseista entistä helpommin opittavia.1

Esimerkki: printf()

Olli: Yksi rajatapaus siinä, mitä nykyään on enää oleellista opettaa, on Viopenkin opettama printf()-funktio. Sen opettamista edelleen voidaan perustella sillä, että se on useammassa kielessä käytössä. Erikoinen syntaksi muuttujien arvojen tulostamiseen voi olla puolustettavissa myös sillä, että esimerkiksi SQL:n prepared statements käyttää samankaltaista syntaksia: Ensin määritellään merkkijono, jossa on mukana placeholder-merkkiyhdistelmiä kuten %d, ja sen jälkeen määritellään mitä arvoja merkkeihin sidotaan.

Senkin tietäminen voi vielä olla tarpeen, että kahden desimaalin tarkkuudella tulostamiseen tarvittava placeholder on %.2f. Mutta onko opiskelijalle nykypäivänä esimerkiksi enää mitään hyötyä tietää, että koko muoto on %[flags][width][.precision][length]specifier ?

Käyttäisinkö printf:ää merkkijonojen tulostamiseen todellisessa tilanteessa? Harvemmin. Toki komentorivisovellusten luominen on hyödyllistä, jos kohderyhmänä ovat muut koodarit tai ylläpitäjät. Enemmän ja enemmän sovelluksiin tehdään kuitenkin enää vain graafisia käyttöliittymiä.

Komentorivisovellusten hyöty oppimisessa

Daniel: Perinteisistä komentorivillä pyörivistä sovelluksista voidaan kuitenkin oppia paljon. Vaikka harvempi loppukäyttäjä niitä suoraan käyttäisikään, on Unix-pohjaisten työkalujen käytön ymmärryksestä huomattavaa hyötyä ohjelmoinnin konseptien ymmärtämiseen. Datan putkittaminen sovelluksesta toiseen onnistuu näppärästi komentorivillä ja samaa ketteryyttä kannattaa hyödyntää myös suuremmissa sovelluksissa. Jakamalla sovellus pienempiin kokonaisuuksiin (jotka kommunikoivat rajapintojen kautta keskenään) mahdollistetaan yksittäisten palasien uudelleenkirjoittaminen ilman suurempia muutoksia muuhun järjestelmään.

Ohjelmoinnissa on edelleen tilaa C–kielelle, mutta sen käyttötavat tulevat uudistumaan vuosi vuodelta nopeammin. Moni uusi kehitysalusta ja ohjelmointikieli on rakennettu sitä käyttäen, joten kieli itsessään ei ole minnekään katoamassa. Kysymys on enemmänkin siitä mitä sen päälle rakennetaan ja miten uudet työkalut tulevat ohjelmoinnin pelikenttää laajentamaan.

Oppimista on paljon ja kouluilla paljon uutta opetettavaa. Osaajille on tarvetta. Tervetuloa mukaan.

  1. Automaation merkitys ohjelmoinnin opetuksessa tulee kasvamaan entisestään. Vaikka teknisten yksityiskohtien ja ohjelmoinnin teorian ymmärtäminen on tärkeää, joutuu moni oppilaitos toteamaan ettei ’kaikkea’ ehdi tai kannata opettaa. Kokonaisuuden kannalta tärkeintä on että uuden oppijat löytävät tehokkaimmat apuvälineet uusien asioiden tekemiseen. Tarvetta on sekä syväosaamiselle että laaja-alaiselle kokonaiskäsitykselle erilaisten tekniikoiden yhdistämisestä. Kokonaisuuksien hahmottamisen kyky tulee entistä tärkeämmäksi, laitteiden ja välineiden laajentuessa uusiin paikkoihin ja käyttötarkoituksiin.

Jätä kommentti