11.4.2007 Ohjelmointikoulutuksen tehostaminen kognitiivisilla menetelmillä Prof. Jorma Sajaniemi Joensuun yliopisto, Tietojenkäsittelytiede Jorma.Sajaniemi@Joensuu.Fi www.cs.joensuu.fi/~saja
Taustaa Sisältö kognitiivinen psykologia ja ohjelmointi Eksperttiys ja skeemat muuttujien roolit Ohjelmoinnin oppimisesta oliometaforat Yhteenveto
Taustaa
Ohjelmoinnin osapuolet ja niiden rajoitukset Ohjelmoija Kognitio Työväline Nykytekniikka Tuote Edelliset
Kognition rajoituksia Muisti: työmuistin koko, muistijäljen vahvuus (tunnistus, palautus, häirintä) Prosessointi: tarkkaavaisuuden määrä Tiedon oppiminen: mielekkyysvaatimus Taidon oppiminen: automatisoitumisen hitaus, siirto-efektit Eksperttiys: skeemat ja strategiat
Selityskehyksiä Aistit Muistin koko Muistin sisältö Tunteet Persoonallisuus Ryhmäsuhteet (Saariluoma, 2004)
Ohjelmoinnin psykologian tavoitteita Ohjelmistotyön tehostaminen nykyisten kielten tehokkaampi hyväksikäyttö kielten parantaminen ja uusien laatiminen apuvälineiden hyväksikäyttö ja kehittäminen menetelmien hyväksikäyttö ja kehittäminen Ohjelmoinnin oppimisen tehostaminen Ihmisen kognition ymmärtäminen
Eksperttiys ja skeemat
Skeemat Skeema: ihmisen muistissa oleva tietokokonaisuus, joka koodaa jonkin stereotypian/ilmentymän (käsite, toimintasarja, OO-suunnittelumalli,...) Muodostuvat attribuuteista ja niiden arvoista; muodostavat hierarkian (vrt. luokkakäsite ja luokkahierarkia)
Skeemat ohjelmoinnissa Skeeman puuttuminen johtaa epäoptimaaliseen toimintaan ja virheisiin Esim: Aloittelijalla ei ole kokonaissumman laskennalle skeemaa: +rain rainfall= sum rainsum = rainsum + rain; rainsum = 0; int rainsum; int rainsum;... rainsum = 0;... rainsum = rainsum + rain; (Rist, 1989)
Muuttujien roolit Laskuri yleistyy askeltajaksi Kokonaissumma yleistyy kokoojaksi Muita: kiintoarvo, seuraaja, sopivimman säilyttäjä,... Noviisitason ohjelmissa riittää 11 roolia Soveltuu hyvin myös olio-ohjelmointiin Tehostaa ohjelmoinnin opettamista Automatisoituna auttaa ohjelmien ylläpidossa (Sajaniemi, 2002; Sajaniemi & al., 2006)
Opetuskokeilun tuloksia (Byckling & Sajaniemi, 2006)
Tarvittavat roolit Kiintoarvo Askeltaja Tuoreimman säilyttäjä Sopivimman säilyttäjä Kokooja Seuraaja Yksisuuntainen lippu Tilapäissäilö Järjestelijä Säiliö Kulkija maxlength i data largest sum prev errorsfound tmp sortarray pointlist curr
Rooli skeemana Rooli on muuttujan stereotyyppinen käyttötapa; esim. kokooja: kerää kokonaistuloksen jostain sarjasta koodi: esittely, alustus, päivitys, käyttö esimerkkejä: kokonaissumma, pankkitilin saldo, lukuarvon kokoaminen yksittäisistä numeroista Rooli kokoaa syntaktisen tiedon muruista (millainen on sijoituslause) mielekkään kokonaisuuden ohjelmointitietoa Ekspertin hiljaista tietämystä, joka voidaan opettaa Käytön onnistumiseen vaikuttavat myös työmuistin kokorajoitukset
Roolit UML-kaavioissa (Byckling & al., 2006)
Ohjelmoinnin oppimisesta
Oppimisen edellytyksiä Uuden tiedon kohtuullinen määrä Uuden tiedon mielekkyys Uuden tiedon liittyminen olemassaolevaan Uuden tiedon mielekäs syventäminen Taidon automatisoituminen (deklaratiivinen tieto proseduraalinen tieto) Aiemmin opitun aiheuttama häirinnän välttäminen
Ohjelmoinnin alkeiden oppiminen Syntaksi on melko helppoa oppia Kaikki muu on vaikeaa muuttujan käsite kontrollirakenteiden yhdistely parametrien välitys... read(a); read(a); read(b); print(a,a,b); (Robins & al., 2003)
Oliot ensin ja Java Minimaalinen Java-ohjelma: määrä? mielekkyys? liittyminen olemassaolevaan? (Radenski, 2006)
Mitä tehdä? Aloita yksinkertaisemmilla asioilla Sido oliokäsitteet tuttuihin asioihin UML, kutsupinot yms. eivät ole tuttuja Metaforat ovat tuttuja yhteneväisyydet ja eroavuudet edistävät aktiivista oppimista (Carroll & Mack, 1999)
Oliometaforat Olio: valvomo Attribuutti: monitori Metodin kutsu: työpaja Luokka: piirustuslehtiön sivu... Demo (Sajaniemi & al., 2006)
Yhteenveto
Kognitio ja ohjelmointi Ihmisen ajattelun rajoitukset vaikeuttavat suunnittelua, ohjelmointia, testaamista, oppimista,... Ajattelun rajoitusten vaikutuksia voidaan vähentää sopivilla menetelmillä ja apuvälineillä Menetelmien ja apuvälineiden suunnittelu vaatii ajattelun rajoitusten ja mentaalisten representaatioiden sisällön tutkimista Joitakin apuvälineitä on jo tehty tällä tavalla
Lähteitä Byckling P., Gerdt P., Kuzniarz L., Sajaniemi J. (2006) Increasing Comprehensibility of Object Models: Making the Roles of Attributes Explicit in UML Diagrams. Nordic Journal of Computing 13(3), 149-161. Byckling P., Sajaniemi J. (2006) Roles of Variables and Programming Skills Improvement. Proc. of the 37th SIGCSE Technical Symp. on Computer Science Education (SIGCSE 2006), ACM, 413-417. Carroll J. R., Mack M. L. (1999) Metaphor, Computing Systems, and Active Learning. Int. J. Human-Computer Studies 51, 385-403. Radenski A. (2006) Python First : A Lab-based Digital Introduction to Computer Science. Proc. 11th Ann. SIGCSE Conf. on Innovation and Technology in Computer Science Education, Assoc. for Computing Machinery, 197-201. Rist R.S. (1989) Schema Creation in Programming. Cognitive Science 13, 389-414. Robins A., Rountree J., Rountree N. (2003) Learning and Teaching Programming: A Review and Discussion. Computer Science Education 13, 137-172. Saariluoma P. (2004): Käyttäjäpsykologia. WSOY. Sajaniemi J. (2002) An Empirical Analysis of Roles of Variables in Novice-Level Procedural Programs. Proc. of IEEE 2002 Symposia on Human Centric Computing Languages and Environments (HCC'02). IEEE, 37-39. Sajaniemi J., Ben-Ari M., Byckling P., Gerdt P., Kulikova Y. (2006) Roles of Variables in Three Programming Paradigms. Computer Science Education 16(4), 261-279. Sajaniemi J., Byckling P., Gerdt P. (2006) Metaphpor-Based Animation of OO Programs. Proc. SOFTVIS 06 ACM Symp. on Software Visualization, ACM, 173-174. Ohjelmoinnin psykologia: www.cs.joensuu.fi/pages/saja/ohj_emp.html Muuttujien roolit: www.cs.joensuu.fi/~saja/var_roles