Saako opiskelijaa itkettää?

Me kaikki assarit kohtaamme tilanteita, kun eteemme tulee purkkapallo. Epämääräinen viritys-säätö, joka melkein toimii. Vaihtoehtoja voisi olla koko ratkaisustrategian uudelleenpohdinta yhdessä opiskelijan kanssa tai pyrkiä setvimään ja selvittämään, miksi koodi ei toimi. Molemmissa näissä on etunsa ja haittansa, luonnollisesti.

Mutta, miten tämä liittyy itkemiseen? Ei, en ole siirtynyt iltapäivälehtimaiseen otsikointiin, vaan taustalla on tarina, jonka olen kuullut.

Ohjelmointikurssilla oli opiskelija, joka oli useamman tunnin vääntänyt omaa koodiaan toimintakuntoiseksi. Laskareissa assari kohteliaasti suositteli, että ohjelman voisi aloittaa koodaamaan tyhjästä, uudella paremmalla ratkaisualgoritmilla. Tästä seurauksena oli itkureaktio, olihan siihen omaan koodiin käytetty runsaasti aikaa ja vaivaa — nyt se oli arvotonta.

Seuraavana aamuna sama opiskelija ilmestyi laskareihin. Hän tuli kiittämään assaria tästä voimakkaasta kehoituksesta.

Ja, kukapa ei ymmärtäisi opiskelijan näkökantaa tässä: kaikki valvotut tunnit ja työ onkin mennyt hukkaan. Mutta, ymmärrän myös ohjaajaa — epämääräisen purkkapallon debugaaminen ei ole helppoa eikä kivaa.

Mielellään sitä auttaisi ongelman ratkaisussa tavalla, jonka opiskelija on ihan itse keksinyt, mutta aina se ei ole niin helppoa. Ihmiset ampuvat itseään jalkaan tai tekevät muita jännyyksiä. Seuraava esimerkki varmaankin valaisee, mitä tarkoitan (erään kurssilaisen suoritus, luvan kanssa täällä):

if self.is_open():
   i = 0
   for i in range(len(self.buyers)):
     if amount >= self.buyers[i].get_limit():
       if i == len(self.buyers) - 1:
         if amount == self.buyers[i].get_limit():
           self.price = amount
           return False
         x = 0
         for x in range(len(self.buyers)):
           highest_limit = self.buyers[0].get_limit()
           if highest_limit highest_limit = self.buyers[x].get_limit()
             x += 1
             self.price = highest_limit + 1
       else:
         i += 1
    elif amount < self.buyers[i].get_limit():
      return False
  self.buyer = bidder
  self.buyers.append(Bid(bidder, amount))
  return True
else:
  return False

Vaikka kovasti yritin ymmärtää, mitä tämä koodi tekee, se jäi minulle nopealla katsauksella epäselväksi. Onneksi tarkistusjärjestelmämme antoi tuosta täydet pisteet, muuten olisi pitänyt kaivaa tuostakin selvyys esille — luultavasti aidossa ohjaustilanteessa olisin lähtenyt muokkaamaan tuota koodia lähemmäksi malliratkaisun tyyliä.

Niin, jopa siinä tilanteessa, että tämä tuote on opiskelijan itsensä tekemää ja pohtimaa, niin pitäisi arvokkaana sitä, että istuisimme hetken aikaa alas ja miettisimme erilaisia ratkaisutapoja tähän ongelmaan ja niiden eroja toteutustavoissa. Toisaalta, joskus opiskelijat kehittävät hyvin luovia ratkaisuja ongelmiinsa, joista näkee sisäisen logiikan hyvin selvästi. Toisen kurssilaisen toteutus (jälleen luvan kanssa) ongelmaan oli seuraava.

if self.is_open() and self.get_minimum_bid_amount() <= amount:
  self.bid_list.sort()
  self.highest_bid = self.bid_list[-1]
    if len(self.bid_list) == 1:
      self.bid_list.append(amount)
      self.highest_bidder = bidder
      return True
    else:
      self.bid_list.append(amount)
      self.highest_bidder = bidder
      return True
else:
  return False

Tuossa on piilossa yksi virhe, minkä takia se ei toimi kuten oletettua. Jätettäköön tarkempi virheen etsiminen harjoitukseksi. Kuitenkin, tässä kohtaa olisin luultavasti erottanut tämän virheen erikseen ja selostanut, mistä se johtuu ja sitten olisimme ratkaisseet vain tämän yksittäisen ongelman.

Mikä sitten erottaa nämä kaksi tapausta toisistaan? Ensimmäisen opiskelijan kohdalla minun on vaikea seurata ratkaisua, siellä on myös mukana ohjelmointikikkoja, joita ei normaalisti haluaisi nähdä. Toisen opiskelijan ratkaisu taas on melko suoraviivainen ja sen logiikan ymmärtää heti.

Ideaalissa maailmassa molempia tapauksia olisi tietenkin autettaisiin samalla tavalla, koska on aina hyvä rakentaa opiskelijan oman ajattelun ja ongelmanratkaisun päälle asioita. Käytännössä, opiskelijan omat ratkaisut voivat olla ongelman luonteeseen sopimattomia tai hyvin vaikeita toteuttaa, jolloin on helpompi vääntää ratkaisua oikeanlaiseen suuntaan. Erityisesti, jos opiskelijan koodi aiheuttaa mielenkiintoisia (lue: vaikeita) erikoistilanteita, joiden hallinta sitten muuttuu suoksi.

Opiskelijoiden itkettäminen ei välttämättä ole paha asia. Erilaiset ratkaisutavat toivottavasti myös laajentavat opiskelijan kykyä ratkaista ongelmia tulevaisuudessa, varsinkin jos pystyy kriittisesti arvioimaan omaa ratkaisuaan. Ainakin minulle kriittinen arviointi ja vaihtoehtojen puntarointi on keskeinen osa ammattiosaamista. Ehkäpä The Daily WTF tulisi ottaa pakolliseksi lukemistoksi kurssille…

Mainokset

2 responses to “Saako opiskelijaa itkettää?”

  1. Janne says :

    Näin softaihmisiä työllistävänä henkilönä pidän tärkeänä sitä, että ihmisille koulutetaan selkeyttä ja hyviä koodaustapoja jo alusta lähtien. Samaten niitä pitää myös oppia vaatimaan niiden, jotka päätyy johtaviin asemiin.

    • Matti says :

      Olen samaa mieltä: spagettikoodi on spagettia, eikä lohduta ketään, vaikka tehtävästä tulisi täydet pisteet.

      Toisaalta, ohjelmoinnin peruskurssilla tärkeä asia on ongelman ratkaisussa ja perusrakenteiden ja käsitteiden hallinnassa. Samaan aikaan, minkä nuorena oppii, sen vanhana taitaa, eli jo tässä vaiheessa on hyödyllistä piinata tästä.

      Meillä käytössä oleva fuksipaimennus mahdollistaa jonkun verran koodaustyyliin puuttumista, esimerkiksi ilmentymämuuttujien ja paikallisten muuttujien eron korostamista tai sitten pienemmällä tasolla if-lauseiden jäsentelyä kauniisti.

      Valitettavasti koodin laadulla ei tällä kurssilla ole pisteiden kannalta väliä, eikä meillä ole mahdollisuutta pakottaa kurssilaisia kirjoittamaan koodia uudestaan, jos se on hirveää. Olisi kyllä kiinnostavaa nähdä, miten tuollainen vaikuttaisi siisteys- ja kauneustekijöihin.

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s

%d bloggers like this: