doktorska disertacija
Povzetek
Znanje računalniškega programiranja je eno od temeljnih znanj na področju računalništva. Učencem omogoča razvijanje veščin za reševanje problemov, algoritmično, analitično in abstraktno razmišljanje ter logično sklepanje. S tem jim daje pomembno prednost v sodobnem tehnološkem svetu. Izkušnje kažejo, da imajo začetniki pri usvajanju tega znanja pogosto težave, ki so posledica pomanjkljivega strateškega znanja. Običajni načini poučevanja programiranja se namreč osredotočajo na sintaktično in semantično znanje, ki pa za začetnike ni najbolj težavno. Največji izziv jim namreč predstavlja proces zasnove rešitve, ko morajo funkcionalnosti posameznih programerskih konstruktov povezati v pravilno rešitev. Eksperti so pri tem zelo učinkoviti, saj uporabljajo širok nabor programskih vzorcev, ki so jih izgradili v dolgotrajnem procesu učenja. Programski vzorci so abstraktne predstavitve rešitev za ponavljajoče algoritmične probleme, ki se pojavljajo pri programiranju in omogočajo pristopanje k reševanju problemov na konceptualni ravni. Njihovo vključevanje v učni proces pripomore pri usvajanju splošnih strategij reševanja problemov, omogoči uporabo abstrahiranih konceptov, pomaga pri pridobivanju splošnega razumevanja o tem, kaj je bistveno pri programiranju, in omogoča pisanje oz. razumevanje kompleksnih programov s sestavljanjem manjših medsebojno povezanih delov. Začetniki najbolj učinkovito usvojijo znanje, ki je vključeno v vzorcih, kadar jih poučujemo eksplicitno, to pa zahteva njihovo formalno predstavitev. Slednja omogoča bolj poglobljen vpogled v procese algoritmičnega reševanja problemov. Kljub naraščajoči količini literature o programskih vzorcih pa je opazno pomanjkanje pristopov za njihovo formalizacijo.
V okviru doktorske disertacije smo razvili od programskega jezika neodvisno formalizacijo programskih vzorcev, ki omogoča njihovo deklarativno predstavitev na različnih ravneh abstrakcije. Deklarativna predstavitev programskega vzorca opisuje njegovo strukturo preko elementov in relacij med njimi. Izbrana raven abstrakcije pa nam omogoča poljubno podrobno predstavitev delov programskega vzorca.
Obstoječe formalizacije programskih vzorcev, kot npr. blok diagrami in abstraktna sintaktična drevesa, temeljijo na proceduralnih značilnostih algoritmov. To pomeni, da se fokusirajo na opisovanje zaporedja izvajanja ukazov in na implementacijske posebnosti v konkretnem programskem jeziku, na ta način pa zakrivajo strukturo programskega vzorca in posledično ne omogočajo deklarativnega vpogleda v bistvene vidike načrtovanja rešitve. Predlagana formalizacija neposredno naslavlja izpostavljene pomanjkljivosti obstoječih pristopov, saj omogoča ekspliciten vpogled v strukturo vzorca, s tem pa predstavlja način za preučevanje in študij procesa zasnove rešitve. Deklarativni način predstavitve vzorca prav tako predstavlja temelj za realizacijo modularnega pristopa k sestavljanju programskih vzorcev, od elementarnih do kompleksnih. Vpogled v to, iz katerih elementov je vzorec sestavljen in na kakšen način se ti med seboj povezujejo, omogoča natančnejše spremljanje procesa grajenja vzorca, nudi podporo pri sestavljanju kompleksnih vzorcev in olajša uporabo znanja, vključenega v programskih vzorcih, pri novih problemih.
Temeljna premisa pri izdelavi formalizacije je dojemanje algoritma kot prepleta podatkovnih operacij z operacijami, ki nadzirajo tok izvajanja ukazov, na osnovi katere smo določili elemente formalizacije: elementarne vzorce, kompozitne vzorce, module in relacije. Elementarni vzorci predstavljajo osnovne gradnike formalizacije in ponazarjajo osnovne programske konstrukte (začetek/konec, pogojni stavek, zanka) in/ali osnovne operacije nad podatki (poizvedba/spreminjanje vrednosti in prečenje preko podatkovne strukture). Kompozitni vzorec predstavlja deklarativno predstavitev programskega vzorca in izraža njegovo strukturo. Kompozitni vzorec dobimo tako, da elementarne vzorce povežemo z relacijami, ki določajo, v kakšen odnosu so. Modul je kompozitni vzorec, predstavljen kot ena enota, ki ga lahko glede na definiran vmesnik vključimo v drug kompozitni vzorec. Uporaba modulov nam omogoča predstavitev kompleksnejših vzorcev na različnih nivojih abstrakcije.
Veljavnost oz. uporabnost izdelane formalizacije smo prikazali v okviru eksperimenta, ki smo ga izvedli na Pedagoški fakulteti Univerze v Ljubljani s študenti programa Dvopredmetni učitelj, smer računalništvo z vezavami, ki so uspešno zaključili predmet iz uvodnega programiranja. Analizirali smo njihove rešitve in ugotovili, da so različno implementirane pravilne rešitve, ki niso vključevale odvečne kode, ustrezale istemu vzorcu, zapisanemu v formalizaciji. Pri pravilnih rešitvah, ki so vključevale odvečno kodo, je formalizacija omogočila jasen vpogled, kje v rešitvi je bila dodana odvečna koda. Primerjava vzorcev napačnih rešitev s pravilno pa je razkrila, v kateri fazi zasnove rešitve je učenec naredil napako. To so pomembni rezultati, ki dokazujejo uporabnost formalizacije pri didaktiki programiranja.
Naslednji pomemben rezultat doktorske disertacije pa je ontologija programskih vzorcev, ki smo jo izdelali na osnovi predstavljene formalizacije. Predstavitev domene znanja o programskih vzorcih s pomočjo ontologije namreč omogoča razvoj učinkovitih načinov za vrednotenje rešitev, odkrivanje pomanjkljivosti v znanju na konceptualnem nivoju, iskanje pogostih napačnih razumevanj, določanje posamezniku prilagojenih učnih poti, strukturiranje učnih gradiv in uporabo v tutorskih sistemih. Izdelana ontologija ponazarja konceptualni premik na področju predstavitve programskih vzorcev, saj z njo dobimo vpogled v strukturo programskih rešitev programerjev oz. v njihove načine razmišljanja. Ravno ta lastnost formalne predstavitve strateškega znanja, ki je vključena v programskih vzorcih, predstavlja osnovo za didaktične pristope, s katerimi lahko naslavljamo problem pomanjkljivega strateškega znanja pri začetnikih. Prav tako pa ponuja mnoge priložnosti za nadaljnje raziskovanje, iskanje inovativnih načinov uporabe in nadaljnjega razvoja ontologije za potrebe didaktike programiranja.
Ključne besede
uvodno programiranje;programski vzorci;od programskega jezika neodvisna formalizacija;deklarativna predstavitev;ontologija;didaktika programiranja;
Podatki
Jezik: |
Slovenski jezik |
Leto izida: |
2022 |
Tipologija: |
2.08 - Doktorska disertacija |
Organizacija: |
UL PEF - Pedagoška fakulteta |
Založnik: |
[M. Zapušek] |
UDK: |
004.42(043.3) |
COBISS: |
105995779
|
Št. ogledov: |
1 |
Št. prenosov: |
1 |
Ocena: |
0 (0 glasov) |
Metapodatki: |
|
Ostali podatki
Sekundarni jezik: |
Angleški jezik |
Sekundarni naslov: |
Domain ontology of programming patterns in introductory programming courses |
Sekundarni povzetek: |
Computer programming is one of the fundamental skills in computer science. It enables students to develop problem solving skills, algorithmic, analytical as well as abstract thinking and logical reasoning. This gives them an important advantage in today's technological world. Experience shows that beginners often find it difficult to acquire this knowledge because they lack strategic knowledge. This is because the traditional way of teaching programming emphasizes syntactic and semantic knowledge, which is not the biggest problem for beginners. The most difficult challenge for beginners is the process of developing a solution when they have to combine the functionalities of different programming constructs into a correct solution.
Experts are very effective at this because they use a wide range of programming patterns that they have acquired through a long learning process. Programming patterns are abstract representations of solutions to recurring algorithmic problems encountered in programming and allow problem solving to be approached at a conceptual level. Incorporating these patterns into the learning process helps in learning general problem-solving strategies, enables the use of abstract concepts, helps in gaining a general understanding of the fundamentals of programming, and enables the writing or understanding of complex programs by assembling smaller, interconnected parts. Beginners learn most effectively from knowledge embedded in patterns when they are taught explicitly. This requires their formal representation. The latter provides a deeper insight into the processes of algorithmic problem solving. Despite the growing body of literature on programming patterns, there is a conspicuous lack of approaches to formalizing them.
In this dissertation, we have developed a programming language-independent formalization of programming patterns that allows their declarative representation at different levels of abstraction. The declarative representation of a programming pattern describes its structure through its elements and the relations between them. The chosen level of abstraction, in turn, allows us to represent the parts of a programming pattern in arbitrary detail.
Existing formalizations of programming patterns, such as block diagrams and abstract syntax trees, are based on procedural features of algorithms. This means that they focus on describing the execution order of instructions and implementation peculiarities in a concrete programming language, thus obscuring the structure of the programming pattern and consequently not providing declarative insight into the essential aspects of the design of the solution. The proposed formalization directly addresses the highlighted shortcomings of existing approaches by providing explicit insight into the structure of the pattern, thus providing a means to study and investigate the solution design process. The declarative nature of the representation of a pattern also provides the basis for realizing a modular approach to the composition of programming patterns from elementary to complex. Insight into the elements that make up a pattern and how they relate to each other allows the process of pattern construction to be followed more closely, supports the construction of complex patterns, and facilitates the application of knowledge embedded in programming patterns to new problems.
The basic premise of formalization is the perception of the algorithm as an interplay of data operations with operations that control the flow of instruction execution. On this basis, we have defined the elements of formalization: elementary patterns, composite patterns, modules, and relations. Elementary patterns represent the basic building blocks of formalization and illustrate basic programming constructs (start/end, conditional statement, loop) and/or basic operations on data (query/set value and traversals over the data structure). A composite pattern is a declarative representation of a programming pattern and expresses its structure. A composite pattern is created by linking elementary patterns with relations that define the relationship between them. A module is a composite pattern that is represented as a single unit and can be included in another composite pattern depending on the defined interface. The use of modules allows us to represent more complex patterns at different levels of abstraction.
The validity or usefulness of the formalization was demonstrated in an experiment with students enrolled in the Two-Subject Teacher undergraduate program at the Faculty of Education, University of Ljubljana, who had successfully completed the introductory course in programming. We analyzed their solutions and found that the correct solutions, which were implemented in different ways and did not contain redundant code, corresponded to the same pattern written in the formalization. For the correct solutions that contained redundant code, the formalization gave a clear indication of where the redundant code was added to the solution. Comparing the representation of the patterns of the incorrect solutions with the correct solutions showed at which stage of the solution design the learner had made a mistake. These are important results that demonstrate the usefulness of formalization in programming didactics.
Another important result of the dissertation is the ontology of programming patterns that we developed based on the presented formalization. Representing the knowledge domain of programming patterns using the ontology allows us to develop efficient methods for evaluating solutions, identify knowledge deficits at the conceptual level, find common misconceptions, define personalized learning paths, structure learning materials and use them in tutoring systems. The developed ontology illustrates a conceptual shift in the representation of programming patterns by providing insights into the structure of programming solutions or ways of thinking of programmers. It is this feature of formal representation of strategic knowledge embedded in programming patterns that provides the basis for didactic approaches that can address the problem of lack of strategic knowledge among novices. It also provides many opportunities for further research to find innovative ways to use and develop ontology for the purposes of programming didactics. |
Sekundarne ključne besede: |
Računalniško programiranje;Univerzitetna in visokošolska dela; |
Vrsta datoteke: |
application/pdf |
Vrsta dela (COBISS): |
Doktorska disertacija |
Komentar na gradivo: |
Univ. v Ljubljani, Pedagoška fak. |
Strani: |
268 str. |
ID: |
15208722 |