Razvijanje konceptualnega programerskega znanja pri študentih pedagoških smeri računalništva: vloga programskih vzorcev
Povzetek
V raziskavi preučujemo, kako študentje študijskega programa Dvopredmetni učitelj, smer računalništvo in matematika, na Pedagoški fakulteti Univerze v Ljubljani razvijajo konceptualno programersko znanje skozi implementacijo, prepoznavanje in razlago programskih vzorcev. Na podlagi več kot 500 programskih rešitev študentov prvega in drugega letnika se osredinjamo na štiri temeljne programske vzorce: linearno iskanje, zaščiteno linearno iskanje, štetje in iskanje ekstremnih vrednosti. V raziskavi je sodelovalo 70 študentov; 17 smo jih spremljali longitudinalno (od tri do štiri leta) ter analizirali njihovo zmožnost prepoznavanja in razlage logike delovanja izbranih programskih vzorcev ter oblikovanja nalog, ki pri reševanju zahtevajo njihovo uporabo. Izsledki kažejo, da so študentje postopoma izboljševali uporabo programskih vzorcev: v začetnih fazah so pogosto reševali naloge z odvečnimi deli kode ali napačnimi rešitvami, s časom pa so prehajali k pravilnim implementacijam. Napredek je bil neenakomeren med različnimi programskimi vzorci in uporabljenimi programerskimi konstrukti. Naloge, ki so vključevale uporabo zanke »while« pri zaščitenem linearnem iskanju, so se izkazale za zahtevnejše, saj so v zgodnjih fazah pogosteje vodile v napačne rešitve ali odvečne dele kode. Kljub izboljšavam pri implementaciji se je pri vseh skupinah študentov pokazal razkorak med tem, kar znajo implementirati s programsko kodo, in tem, kar znajo konceptualno razložiti. To kaže, da pravilna uporaba programskega konstrukta, na primer zanke »for«, še ne zagotavlja razumevanja ideje koncepta programskega vzorca, kar je še zlasti očitno pri zahtevnejših vzorcih, kot sta zaščiteno linearno iskanje in iskanje ekstremnih vrednosti. Zavedanje obstoja tega razkoraka je pri bodočih učiteljih še posebej pomembno. Poleg tega se je pokazalo, da ima sposobnost razlage delovanja programskega vzorca močen vpliv na kakovost oblikovanih nalog. To potrjuje, da konceptualno razumevanje neposredno podpira razvoj pedagoških kompetenc. Rezultati raziskave kažejo, da bi bilo v izobraževanju učiteljev računalništva smiselno bolj eksplicitno vključiti poučevanje programskih vzorcev. S tem bi prispevali k njihovi pravilni implementaciji, prav tako pa bi spodbujali globlje konceptualno razumevanje in s tem povezanih pedagoških kompetenc. Umeščanje programskih vzorcev kot konceptualnih orodij v programe pedagoških smeri računalništva lahko bodočim učiteljem omogoči natančnejšo analizo kode, boljše predvidevanje pogostih učnih težav in oblikovanje učinkovitih, na vzorcih temelječih programerskih nalog.
Prenosi
Literatura
Abesadze, S., & Nozadze, D. (2020). Make 21st century education: The importance of teaching programming in schools. International Journal of Learning and Teaching, 158–163. https://doi.org/10.18178/ijlt.6.3.158-163
Astrachan, O., Berry, G., Cox, L., & Mitchener, G. (1998). Design patterns: An essential component of CS curricula. In J. Lewis, J. Prey, D. Joyce, & J. Impagliazzo (Eds.), SIGCSE ’98: Proceedings of the Twenty-Ninth SIGCSE Technical Symposium on Computer Science Education (pp. 153–160). Association for Computing Machinery. https://doi.org/https://doi.org/10.1145/273133.273182
Astrachan, O., & Wallingford, E. (1998, August). Loop patterns. Users.cs.duke.edu. http://www.cs.duke.edu/~ola/patterns/plopd/loops.html
Bonar, J., & Soloway, E. (1983). Uncovering principles of novice programming. In J. R. White, L. Landweber, A. Demers, & T. Teitelbaum (Eds.), Proceedings of the 10th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages - POPL ’83 (pp. 10–13). Association for Computing Machinery. https://doi.org/10.1145/567067.567069
Bosco, A., Santiveri, N., & Tesconi, S. (2019). Digital making in educational projects. Center for Educational Policy Studies Journal, 9(3), 51–73. https://doi.org/10.26529/cepsj.629
Fisler, K. (2014). The recurring rainfall problem. In Q. Cutts, B. Simon, & B. Dorn (Eds.), Proceedings of the Tenth Annual Conference on International Computing Education Research (pp. 35–42). Association for Computing Machinery. https://doi.org/10.1145/2632320.2632346
Fuller, U., Johnson, C. G., Ahoniemi, T., Cukierman, D., Hernán-Losada, I., Jackova, J., Lahtinen, E., Lewis, T. L., Thompson, D. M., Riedesel, C., & Thompson, E. (2007). Developing a computer sciencespecific learning taxonomy. ACM SIGCSE Bulletin, 39(4), 152–170. https://doi.org/10.1145/1345375.1345438
Ikotun, A. M., Ezugwu, A. E., Abualigah, L., Abuhaija, B., & Heming, J. (2023). K-means clustering algorithms: A comprehensive review, variants analysis, and advances in the era of big data. Information Sciences, 622, 178–210. https://doi.org/10.1016/j.ins.2022.11.139
Kiesler, N. (2022). Reviewing constructivist theories to help foster creativity in programming education. In 2022 IEEE Frontiers in Education Conference (FIE) (pp. 1–5). IEEE. https://doi.org/10.1109/FIE56618.2022.9962699
Kodinariya, T. M., & Makwana, P. R. (2013). Review on determining number of cluster in K-means clustering. International Journal of Advance Research in Computer Science and Management Studies, 1(6), 90–95. http://ijarcsms.com/docs/paper/volume1/issue6/V1I6-0015.pdf
Lahtinen, E., Ala-Mutka, K., & Järvinen, H.-M. (2005). A study of the difficulties of novice programmers. ACM SIGCSE Bulletin, 37(3), 14–18. https://doi.org/10.1145/1151954.1067453
Lister, R., Adams, E. S., Fitzgerald, S., Fone, W., Hamer, J., Lindholm, M., McCartney, R., Moström, J. E., Sanders, K., Seppälä, O., Simon, B., & Thomas, L. (2004). A multi-national study of reading and tracing skills in novice programmers. ACM SIGCSE Bulletin, 36(4), 119–150. https://doi.org/10.1145/1041624.1041673
Lister, R., Simon, B., Thompson, E., Whalley, J. L., & Prasad, C. (2006). Not seeing the forest for the trees. In R. Davoli, M. Goldweber, & P. Salomoni (Eds.), Proceedings of the 11th Annual SIGCSE Conference on Innovation and Technology in Computer Science Education (pp. 118–122). Association for Computing Machinery. https://doi.org/10.1145/1140124.1140157
Nurollahian, S., Keuning, H., & Wiese, E. (2025, February 16). Teaching well-structured code: A literature review of instructional approaches [Unpublished paper]. Accepted to the 2025 IEEE/ACM 37th International Conference on Software Engineering Education and Training (CSEE&T).
Nurollahian, S., Rafferty, A. N., Brown, N., & Wiese, E. (2024). Growth in knowledge of programming patterns: A comparison study of CS1 vs. CS2 students. In B. Stephenson, J. A. Stone, L. Battestilli, S. A. Rebelsky, & L. Shoop (Eds.), Proceedings of the 55th ACM Technical Symposium on Computer Science Education V. 1 (pp. 979–985). Association for Computing Machinery. https://doi.org/10.1145/3626252.3630865
Nurollahian, S., Rafferty, A. N., & Wiese, E. (2023). Improving assessment of programming pattern knowledge through code editing and revision. In 2023 IEEE/ACM 45th International Conference on Software Engineering: Software Engineering Education and Training (ICSE-SEET) (pp. 58–69). IEEE. https://doi.org/10.1109/ICSE-SEET58685.2023.00012
Omar, T., Alzahrani, A., & Zohdy, M. (2020). Clustering approach for analyzing the student’s efficiency and performance based on data. Journal of Data Analysis and Information Processing, 08(03), 171–182. https://doi.org/10.4236/jdaip.2020.83010
Proulx, V. K. (2000). Programming patterns and design patterns in the introductory computer science course. In S. Haller (Ed.), Proceedings of the Thirty-First SIGCSE Technical Symposium on Computer Science Education (pp. 80–84). Association for Computing Machinery. https://doi.org/10.1145/330908.331819
Robins, A., Rountree, J., & Rountree, N. (2003). Learning and teaching programming: A review and discussion. Computer Science Education, 13(2), 137–172. https://doi.org/10.1076/csed.13.2.137.14200
Robins, A. V. (2019). Novice programmers and introductory programming. In S. Fincher, & A. V. Robins (Eds.), The Cambridge handbook of computing education research (pp. 327–376). Cambridge University Press. https://doi.org/10.1017/9781108654555.013
Simon, & Snowdon, S. (2011). Explaining program code. In K. Sanders, M. E. Caspersen, & A. Clear (Eds.), Proceedings of the Seventh International Workshop on Computing Education Research (pp. 93–100). Association for Computing Machinery. https://doi.org/10.1145/2016911.2016931
Soloway, E. (1986). Learning to program = learning to construct mechanisms and explanations. Communications of the ACM, 29(9), 850–858. https://doi.org/10.1145/6592.6594
Venables, A., Tan, G., & Lister, R. (2009). A closer look at tracing, explaining and code writing skills in the novice programmer. In M. Clancy, M. Caspersen, & R. Lister (Eds.), Proceedings of the Fifth International Workshop on Computing Education Research Workshop (pp. 117–128). Association for Computing Machinery. https://doi.org/10.1145/1584322.1584336
Vivitsou, M. (2019). Digitalisation in education, allusions and references. Center for Educational Policy Studies Journal, 9(3), 117–136. https://doi.org/10.26529/cepsj.706
Webb, M., Davis, N., Bell, T., Katz, Y. J., Reynolds, N., Chambers, D. P., & Sysło, M. M. (2017). Computer science in K-12 school curricula of the 2lst century: Why, what and when? Education and Information Technologies, 22(2), 445–468. https://doi.org/10.1007/s10639-016-9493-x
Weinman, N., Fox, A., & Hearst, M. A. (2021). Improving instruction of programming patterns with Faded Parsons Problems. In Y. Kitamura, A. Quigley, K. Isbister, T. Igarashi, L. Bjørn, & S. Drucker (Eds.), Proceedings of the 2021 CHI Conference on Human Factors in Computing Systems (pp. 1–4). Association for Computing Machinery. https://doi.org/10.1145/3411764.3445228
Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33–35. https://doi.org/10.1145/1118178.1118215
Xie, B., Loksa, D., Nelson, G. L., Davidson, M. J., Dong, D., Kwik, H., Tan, A. H., Hwa, L., Li, M., & Ko, A. J. (2019). A theory of instruction for introductory programming skills. Computer Science Education, 29(2–3), 205–253. https://doi.org/10.1080/08993408.2019.1565235
Yadav, A., Good, J., Voogt, J., & Fisser, P. (2017). Computational thinking as an emerging competence domain. In M. Mulder (Ed.), Competence-based Vocational and Professional Education. Technical and Vocational Education and Training: Issues, Concerns and Prospects, vol 23 (pp. 1051–1067). Springer. https://doi.org/10.1007/978-3-319-41713-4_49
Zapušek, M. (2022). Domenska ontologija programskih vzorcev pri uvodnem programiranju [Domain ontology of programming patterns in introductory programming][Doctoral dissertation, University of Ljubljana]. RUL. https://repozitorij.uni-lj.si/IzpisGradiva.php?id=136467
Zeng, Y., Yang, W., & Bautista, A. (2023). Teaching programming and computational thinking in early childhood education: A case study of content knowledge and pedagogical knowledge. Frontiers in Psychology, 14. https://doi.org/10.3389/fpsyg.2023.1252718
Authors who publish with this journal agree to the following terms:
- Authors are confirming that they are the authors of the submitted article, which will be published online in the Center for Educational Policy Studies Journal (for short: CEPS Journal) by University of Ljubljana Press (University of Ljubljana, Faculty of Education, Kardeljeva ploščad 16, 1000 Ljubljana, Slovenia). The Author’s/Authors’ name(s) will be evident in the article in the journal. All decisions regarding layout and distribution of the work are in the hands of the publisher.
- The Authors guarantee that the work is their own original creation and does not infringe any statutory or common-law copyright or any proprietary right of any third party. In case of claims by third parties, authors commit themselves to defend the interests of the publisher, and shall cover any potential costs.
- Authors retain copyright and grant the journal right of first publication with the work simultaneously licensed under https://creativecommons.org/licenses/by/4.0/deed.en that allows others to share the work with an acknowledgement of the work's authorship and initial publication in this journal.
- Authors are able to enter into separate, additional contractual arrangements for the non-exclusive distribution of the journal's published version of the work (e.g., post it to an institutional repository or publish it in a book), with an acknowledgement of its initial publication in this journal.
- Authors are permitted and encouraged to post their work online (e.g., in institutional repositories or on their website) prior to and during the submission process, as it can lead to productive exchanges, as well as earlier and greater citation of published work.

