Taxonomy of programming environments for novices

Материал из Энциклопедия вычислительного мышлении
Перейти к навигации Перейти к поиску

Статья Программирование/Языки - перечень языков программирования (перечень языков для обучения навыкам программирования и кодирования)

Different types of Taxonmy:

  1. Five levels
  2. What makes programming hard?
  3. Clusters


Five levels

Initial Learning Environments


Level 0
Age range 2-7 years. Drag-and-Drop or simpler. Teaches planning (sequence) only. Requires no abstraction. Contains no significant use of: functions, variables, iteration, indexed data structures, conditional execution.
Examples: Daisy the Dinosaur, LightbotJR, ScratchJR, Pictomir
Level 1
Age range 5-10 years. Drag-and-Drop. Requires no abstraction (or small amounts). Contains none or few of: functions, variables, iteration, indexed data structures, conditional execution.
Examples: ScratchJR, Pictomir, Lightbot, Kodu, Blockly, Hopscotch, Scratch, Tynker
Level 2
Age range 8-14 years. Drag-and-Drop or textbased. Includes some abstraction. Contains some or most of: functions, variables, iteration, indexed data structures, conditional execution.
Examples: Kodu, Blockly, Hopscotch, Scratch, Tynker, NetLogo, Alice, AppInventor, Looking Glass, Snap!
Level 3
Ages 12 years and up. Drag-and-Drop or textbased. Includes abstraction. Contains all of: functions, variables, iteration, indexed data structures, conditional execution.
Examples: Scratch, Tynker, NetLogo, StarLogo Nova, Snap!, Alice, AppInventor, Looking Glass, StarLogo Nova, BlueJ, KidsRuby
Level 4
Ages 14 years and up. Teaches an industry-level. Turing-complete programming language. Advanced, with extensions available. Contains all of: functions, variables, iteration, indexed data structures, conditional execution.
Examples: Squeak, Codecademy

What makes programming hard?

Mark Guzdial believes that each novice programming environment (or family of environments) is attempting to answer the question, "What makes programming hard?". In his article "Programming Environments for Novices" Guzdial focuses on three families that have been particularly influential in the development of modern environments:

  1. The Logo family of programming environments, that began as an off-shoot of the AI-programming language Lisp
  2. The rule-based family of programming environments, that drew from both Logo and Smalltalk-72, but even more directly, Prolog.
  3. The traditional programming language family of novice programming environments, which tried not to change the language, but instead provide new student-centered supports for existing programming languages.

Logo family

The answer to the question of "What makes programming hard?" for the Logo developers was another question. When Logo was first being developed, people didn't know that programming was going to be so hard for so many. Programming was still a curiosity, an activity practiced only by the few who had access to the still-rare machines. The Logo developers asked instead "Why should students program?"


<graphviz> digraph GL0 { // node[fontsize="10", nodesep=2, shape="none", style=""] ;

node [fontsize="14", fontname="times", nodesep=2, shape="none", style=""] ;

rankdir=LR ;

node [URL="/index.php?title=\N"] ; Lisp -> Logo ;

Logo -> LogoWriter ; Logo -> Boxer ; Logo -> "Smalltalk-72" ; LogoWriter -> StarLogo ; LogoWriter -> "Moose Crossing" ;

// "Smalltalk-72" -> Squeak ; // StarLogo -> NetLogo ; // StarLogo -> "StarLogo TNG" ; // "StarLogo TNG" -> "Starlogo Nova" ; } </graphviz>

The Logo family of novice programming environments

The rule-based family of programming environments

Another set of answers to the question "What makes programming hard?" includes "The interface" (as diSessa said) but also "The kind of programming" (as Kay said).

<graphviz> digraph GL1 {

node [fontsize="14", fontname="times", nodesep=2, shape="none", style=""] ;

rankdir=LR ;

node [URL="/index.php?title=\N"] ;


Prolog -> AgentSheets ; Prolog -> Cocoa ; Cocoa -> KidSim ; Cocoa -> "Stagecast Creator" ; Prolog -> ToonTalk ;


} </graphviz>

The rule-based family of programming environments

The traditional programming language family

<graphviz> digraph GL1 {

node [fontsize="14", fontname="times", nodesep=2, shape="none", style=""] ;

rankdir=LR ;

node [URL="/index.php?title=\N"] ;

Pascal -> Genie ; Pascal -> GPCeditor ; GPCeditor -> Emile ; Emile -> "ModelIT!"

} </graphviz>

Family of novice programming environments based on supporting traditional programming languages

Why novices need to program? Novice Programming Systems and Languages Taxonomy

Lowering the Barriers to Programming
a survey of programming environments and languages for novice programmers
Caitlin Kelleher and Randy Pausch, 2005

<graphviz> digraph L1 {

node [nodesep=2, shape="none", style=""] ; edge [arrowhead=normal, arrowsize=0.4, len=1];

//size ="12,12" ;

rankdir=LR ;


"Teaching Systems" -> {"Mechanics of Programming", "Social Learning", "Providing Reasons to Program" } ;


"Mechanics of Programming" -> "Expressing Programs" ; "Mechanics of Programming" -> "Structuring Programs" ; "Mechanics of Programming" -> "Understanding Program Execution" ;

"Social Learning" -> "Side by Side"; "Social Learning" -> "Networked Interaction";

// "Expressing Programs" -> "Simplify Typing Code"; // "Expressing Programs" -> "Find Alternatives to Typing Programs" ;

// "Structuring Programs" -> "New Programming Models" ; // "Structuring Programs" -> "Making New Models Accessible" ;

// "Understanding Program Execution" -> "Tracking Program Execution"; // "Understanding Program Execution" -> "Make Programming Concrete"; //"Understanding Program Execution" -> "Models of Program Execution";


"Providing Reasons to Program" -> "Solve Problems by Positioning Objects" ; "Providing Reasons to Program" -> "Solve Problems Using Code" ;

// "Simplify Typing Code" -> "Simplify the Language"; // "Simplify Typing Code" -> "Prevent Syntax Errors";

// "Find Alternatives to Typing Programs" -> "Construct Programs Using Objects" ; // "Find Alternatives to Typing Programs" -> "Create Programs Using Interface Actions" ; // "Find Alternatives to Typing Programs" -> "Provide Multiple Methods for Creating Programs" ;

}

</graphviz>


<graphviz> digraph L11 {

node [nodesep=2, shape="none", style=""] ;

edge [arrowhead=normal, arrowsize=0.4, len=1.2];

node [fontname="times", nodesep=2, shape="none", style=""] ;

rankdir=LR ;

node [URL="/index.php?title=\N"] ;

// size ="12,12" ;

rankdir=LR ;


// "Empowering Systems" -> Mechanics ; "Empowering Systems" -> "Enhabced activities" ;

Mechanics -> "CodeIsTooDifficult"; "CodeIsTooDifficult" -> "Demonstrate Actions in the Interface" ; "Demonstrate Actions in the Interface";


"CodeIsTooDifficult" -> "Demonstrate Conditions and Actions" ; "CodeIsTooDifficult" -> "Specify Actions" ;

Mechanics -> "ImprooveProgrammingLanuages";

"Enhabced activities" -> Entertainment ; "Enhabced activities" -> "Education" ; }

</graphviz>


Next step

<graphviz> digraph L11 {

node [nodesep=2, shape="none", style=""] ; edge [arrowhead=normal, arrowsize=0.4, len=1.2];

size ="12,12" ;

rankdir=LR ;


"Teaching Systems" -> {"Mechanics of Programming", "Social Learning", "Providing Reasons to Program" } ;


"Mechanics of Programming" -> "Expressing Programs" ; "Mechanics of Programming" -> "Structuring Programs" ; "Mechanics of Programming" -> "Understanding Program Execution" ;

"Social Learning" -> "Side by Side"; "Social Learning" -> "Networked Interaction";

"Expressing Programs" -> "Simplify Typing Code"; "Expressing Programs" -> "Find Alternatives to Typing Programs" ;

"Structuring Programs" -> "New Programming Models" ; "Structuring Programs" -> "Making New Models Accessible" ;

"Understanding Program Execution" -> "Tracking Program Execution"; "Understanding Program Execution" -> "Make Programming Concrete"; "Understanding Program Execution" -> "Models of Program Execution";


"Providing Reasons to Program" -> "Solve Problems by Positioning Objects" ; "Providing Reasons to Program" -> "Solve Problems Using Code" ;

"Simplify Typing Code" -> "Simplify the Language"; "Simplify Typing Code" -> "Prevent Syntax Errors";

"Find Alternatives to Typing Programs" -> "Construct Programs Using Objects" ; "Find Alternatives to Typing Programs" -> "Create Programs Using Interface Actions" ; "Find Alternatives to Typing Programs" -> "Provide Multiple Methods for Creating Programs" ;

}

</graphviz>


ILes Part I

ILEs

<graphviz> digraph L110 {

node [nodesep=2, shape="none", style=""] ; edge [arrowhead=normal, arrowsize=0.4, len=1.2];

size ="12,12" ;

rankdir=LR ;

BASIC [shape="box"], AlgoBlock [shape="box"], "Tangible Programming Bricks" [shape="box"], "Moose Crossing" [shape="box"], Blue [shape="box"], GNOME [shape="box"], MacGnome [shape="box"], LogoBlocks[shape="box"], Alice [shape="box"], "Magic Forest" [shape="box"], LegoSheets [shape="box"], Curlybot [shape="box"], Leogo[shape="box"], Pascal [shape="box"], Smalltalk [shape="box"], "Karel J Robot"[shape="box"], "Karel++"[shape="box"],"Atari 2600 BASIC" [shape="box"], Karel [shape="box"],Josef [shape="box"], Turingal [shape="box"], "Robot Odyssey" [shape="box"], "The Incredible Machines" [shape="box"], AlgoArena [shape="box"], Robocode [shape="box"], "Toon Talk" [shape="box"];

"Teaching Systems" -> {"Mechanics of Programming", "Social Learning", "Providing Reasons to Program" } ;


"Mechanics of Programming" -> "Expressing Programs" ;


"Mechanics of Programming" -> "Structuring Programs" ; "Mechanics of Programming" -> "Understanding Program Execution" ;

"Social Learning" -> "Side by Side"; "Side by Side" -> AlgoBlock ; "Side by Side" -> "Tangible Programming Bricks" ;

"Social Learning" -> "Networked Interaction"; "Networked Interaction" -> "Moose Crossing";

"Expressing Programs" -> "Simplify Typing Code";


"Expressing Programs" -> "Find Alternatives to Typing Programs" ;

"Structuring Programs" -> "New Programming Models" ; "New Programming Models" -> Pascal ; "New Programming Models" -> Smalltalk;

"Structuring Programs" -> "Making New Models Accessible" ; "Making New Models Accessible" -> "Karel J Robot" ; "Making New Models Accessible" -> "Karel++" ;

"Understanding Program Execution" -> "Tracking Program Execution"; "Tracking Program Execution" -> "Atari 2600 BASIC";


"Understanding Program Execution" -> "Make Programming Concrete"; "Make Programming Concrete" -> "Karel" ; "Make Programming Concrete" -> "Josef" ; "Make Programming Concrete" -> "Turingal" ;

"Understanding Program Execution" -> "Models of Program Execution"; "Models of Program Execution" -> "Toon Talk" ;

"Providing Reasons to Program" -> "Solve Problems by Positioning Objects" ; "Solve Problems by Positioning Objects" -> "Robot Odyssey"; "Solve Problems by Positioning Objects" -> "The Incredible Machines";


"Providing Reasons to Program" -> "Solve Problems Using Code" ; "Solve Problems Using Code" -> "AlgoArena"; "Solve Problems Using Code" -> "Robocode";

"Simplify Typing Code" -> "Simplify the Language"; "Simplify the Language" -> BASIC ; "Simplify the Language" -> Blue ;

"Simplify Typing Code" -> "Prevent Syntax Errors";

"Prevent Syntax Errors" -> GNOME ; "Prevent Syntax Errors" -> MacGnome;

"Find Alternatives to Typing Programs" -> "Construct Programs Using Objects" ; "Construct Programs Using Objects" -> LogoBlocks ; "Construct Programs Using Objects" -> Alice ; "Construct Programs Using Objects" -> "Magic Forest" ;

"Find Alternatives to Typing Programs" -> "Create Programs Using Interface Actions" ; "Create Programs Using Interface Actions" -> LegoSheets ; "Create Programs Using Interface Actions" -> Curlybot ;

"Find Alternatives to Typing Programs" -> "Provide Multiple Methods for Creating Programs" ; "Provide Multiple Methods for Creating Programs" -> Leogo ;

}

</graphviz>

ILEs Part II

<graphviz> digraph L111 {

node [nodesep=2, shape="none", style=""] ;

edge [arrowhead=normal, arrowsize=0.4, len=1.2];

node [fontname="times", nodesep=2, shape="none", style=""] ;

rankdir=LR ;

node [URL="/index.php?title=\N"] ;

size ="12,12" ;

rankdir=LR ;

AgentSheets [shape="box"], Pygmalion [shape="box"], Mondrain [shape="box"], ChemTrains [shape="box"], "Pinball Construction Set" [shape="box"], "Alternate Reality Kit" [shape="box"], COBOL [shape="box"], Logo [shape="box"], Alice98 [shape="box"], Etoys [shape="box"], Fabrik [shape="box"], Boxer [shape="box"], Hypercard [shape="box"], Bongo [shape="box"], Mindrover [shape="box"], StarLogo [shape="box"], Hank [shape="box"],

// "Empowering Systems" -> Mechanics ; "Empowering Systems" -> "Enhabced activities" ;


Mechanics -> "CodeIsTooDifficult"; "CodeIsTooDifficult" -> "Demonstrate Actions in the Interface" ;

"Demonstrate Actions in the Interface" -> Pygmalion;

"Demonstrate Actions in the Interface" -> Mondrain ;

"CodeIsTooDifficult" -> "Demonstrate Conditions and Actions" ;

"Demonstrate Conditions and Actions" -> AgentSheets  ;
"Demonstrate Conditions and Actions" ->  ChemTrains ;

"CodeIsTooDifficult" -> "Specify Actions" ; "Specify Actions" -> "Pinball Construction Set" ; "Specify Actions" -> "Alternate Reality Kit";


Mechanics -> "ImproveProgrammingLanuages";

"ImproveProgrammingLanuages" -> "Make the Language More Understandable" ;

"Make the Language More Understandable" -> COBOL ; "Make the Language More Understandable" -> Logo; "Make the Language More Understandable" -> Alice98 ;

"ImproveProgrammingLanuages" -> "Improve Intereaction with Language" ; "Improve Intereaction with Language" -> Etoys; "Improve Intereaction with Language" -> Fabrik ;


"ImproveProgrammingLanuages" -> "Integration with Environment" ; "Integration with Environment" -> Boxer; "Integration with Environment" -> Hypercard;

"Enhabced activities" -> Entertainment ; Entertainment -> Bongo; Entertainment -> Mindrover;


"Enhabced activities" -> "Education" ;

"Education" -> StarLogo ;
"Education" -> Hank ;

}

</graphviz>

Full taxonomy

<graphviz> digraph IL

{

node [nodesep=2, shape="none", style=""] ; edge [arrowhead=normal, arrowsize=0.4, len=1.2];

size ="14,14" ;

rankdir=LR ;

ILEs -> "Teaching Systems" ; ILEs -> "Empowering Systems" ;

BASIC [shape="box"], AlgoBlock [shape="box"], "Tangible Programming Bricks" [shape="box"], "Moose Crossing" [shape="box"], Blue [shape="box"], GNOME [shape="box"], MacGnome [shape="box"], LogoBlocks[shape="box"], Alice [shape="box"], "Magic Forest" [shape="box"], LegoSheets [shape="box"], Curlybot [shape="box"], Leogo[shape="box"], Pascal [shape="box"], Smalltalk [shape="box"], "Karel J Robot"[shape="box"], "Karel++"[shape="box"],"Atari 2600 BASIC" [shape="box"], Karel [shape="box"],Josef [shape="box"], Turingal [shape="box"], "Robot Odyssey" [shape="box"], "The Incredible Machines" [shape="box"], AlgoArena [shape="box"], Robocode [shape="box"], "Toon Talk" [shape="box"], AgentSheets [shape="box"], Pygmalion [shape="box"], Mondrain [shape="box"], ChemTrains [shape="box"], "Pinball Construction Set" [shape="box"], "Alternate Reality Kit" [shape="box"], COBOL [shape="box"], Logo [shape="box"], Alice98 [shape="box"], Etoys [shape="box"], Fabrik [shape="box"], Boxer [shape="box"], Hypercard [shape="box"], Bongo [shape="box"], Mindrover [shape="box"], StarLogo [shape="box"], Hank [shape="box"], "The Incredible Machines" [shape="box"];

"Teaching Systems" -> {"Mechanics of Programming", "Social Learning", "Providing Reasons to Program" } ;


"Mechanics of Programming" -> "Expressing Programs" ;


"Mechanics of Programming" -> "Structuring Programs" ; "Mechanics of Programming" -> "Understanding Program Execution" ;

"Social Learning" -> "Side by Side"; "Side by Side" -> AlgoBlock ; "Side by Side" -> "Tangible Programming Bricks" ;

"Social Learning" -> "Networked Interaction"; "Networked Interaction" -> "Moose Crossing";

"Expressing Programs" -> "Simplify Typing Code";


"Expressing Programs" -> "Find Alternatives to Typing Programs" ;

"Structuring Programs" -> "New Programming Models" ; "New Programming Models" -> Pascal ; "New Programming Models" -> Smalltalk;

"Structuring Programs" -> "Making New Models Accessible" ; "Making New Models Accessible" -> "Karel J Robot" ; "Making New Models Accessible" -> "Karel++" ;

"Understanding Program Execution" -> "Tracking Program Execution"; "Tracking Program Execution" -> "Atari 2600 BASIC";


"Understanding Program Execution" -> "Make Programming Concrete"; "Make Programming Concrete" -> "Karel" ; "Make Programming Concrete" -> "Josef" ; "Make Programming Concrete" -> "Turingal" ;

"Understanding Program Execution" -> "Models of Program Execution"; "Models of Program Execution" -> "Toon Talk" ;

"Providing Reasons to Program" -> "Solve Problems by Positioning Objects" ; "Solve Problems by Positioning Objects" -> "Robot Odyssey"; "Solve Problems by Positioning Objects" -> "The Incredible Machines";


"Providing Reasons to Program" -> "Solve Problems Using Code" ; "Solve Problems Using Code" -> "AlgoArena"; "Solve Problems Using Code" -> "Robocode";

"Simplify Typing Code" -> "Simplify the Language"; "Simplify the Language" -> BASIC ; "Simplify the Language" -> Blue ;

"Simplify Typing Code" -> "Prevent Syntax Errors";

"Prevent Syntax Errors" -> GNOME ; "Prevent Syntax Errors" -> MacGnome;

"Find Alternatives to Typing Programs" -> "Construct Programs Using Objects" ; "Construct Programs Using Objects" -> LogoBlocks ; "Construct Programs Using Objects" -> Alice ; "Construct Programs Using Objects" -> "Magic Forest" ;

"Find Alternatives to Typing Programs" -> "Create Programs Using Interface Actions" ; "Create Programs Using Interface Actions" -> LegoSheets ; "Create Programs Using Interface Actions" -> Curlybot ;

"Find Alternatives to Typing Programs" -> "Provide Multiple Methods for Creating Programs" ; "Provide Multiple Methods for Creating Programs" -> Leogo ;

"Empowering Systems" -> Mechanics ; "Empowering Systems" -> "Enhabced activities" ;


Mechanics -> "CodeIsTooDifficult"; "CodeIsTooDifficult" -> "Demonstrate Actions in the Interface" ;

"Demonstrate Actions in the Interface" -> Pygmalion;

"Demonstrate Actions in the Interface" -> Mondrain ;

"CodeIsTooDifficult" -> "Demonstrate Conditions and Actions" ;

"Demonstrate Conditions and Actions" -> AgentSheets  ;
"Demonstrate Conditions and Actions" ->  ChemTrains ;

"CodeIsTooDifficult" -> "Specify Actions" ; "Specify Actions" -> "Pinball Construction Set" ; "Specify Actions" -> "Alternate Reality Kit";


Mechanics -> "ImproveProgrammingLanuages";

"ImproveProgrammingLanuages" -> "Make the Language More Understandable" ;

"Make the Language More Understandable" -> COBOL ; "Make the Language More Understandable" -> Logo; "Make the Language More Understandable" -> Alice98 ;

"ImproveProgrammingLanuages" -> "Improve Intereaction with Language" ; "Improve Intereaction with Language" -> Etoys; "Improve Intereaction with Language" -> Fabrik ;


"ImproveProgrammingLanuages" -> "Integration with Environment" ; "Integration with Environment" -> Boxer; "Integration with Environment" -> Hypercard;

"Enhabced activities" -> Entertainment ; Entertainment -> Bongo; Entertainment -> Mindrover;


"Enhabced activities" -> "Education" ;

"Education" -> StarLogo ;
"Education" -> Hank ;

}

</graphviz>

TACCC 3

Template for a resource review

García-Peñalvo, F.J., 2016. Template for TACCLE 3 resources reviewing. DOI= http://dx.doi.org/https://dx.doi.org/10.6084/m9.figshare.3545033.v1.

Title: The resource title
Description: A short, but significant resource description
Link: Link to the resource if it is available
License: What kind of licensing system the resource has, if available (e.g. if videos are considered rather than software)
Languages: In which languages the resource is available
Target groups: Which are the main target groups of this resource
Known uses: Examples of the use of the resource, it they exist (including videos, text based descriptions, links, etc.)
Pedagogical level: Resource pedagogical level
TACCLE Classification: The classification of the resource taking into account TACCLE ontology (Algorithms, Using logic, Controlling things, Creating and Debugging)
Quality: Perceived quality of the resource [scale 1-5]
Open comments: Reviewer’s comments
Date: Date of the review

Examples

  • Title: Minetest
  • Description: Minetest is a near-infinite-world block sandbox game and a game engine, inspired by InfiniMiner, Minecraft, and the like.
  • Link: http://www.minetest.net/
  • License: LGPL
  • Languages: English
  • Target groups: pre-university and university students
  • Known uses: use as a game, use to solve and understand problems related to programming. Examples of its use in education: http://wiki.minetest.net/Mods:Learning; http://wiki.mcrcoderdojo.org.uk/index.php/MineTest
  • Pedagogical level: Primary and Secondary students.
  • TACCLE Classification: Using logic; Creating and Debugging
  • Quality: 5
  • Open comments: An open solution to use in education the potential of Minecraft.
  • Date: August 6th, 2016


A Framework for Categorizing Block-based Affordances (Weintrop & Wilensky)

Through analyzing novices playing a program-to-play constructionist video game, we identify four distinct usages of the programming language: (

  1. 1) serving as a means for expressing ideas to the computer,
  2. (2) providing a record of previously articulated intentions,
  3. (3) acting as a source of ideas for construction, and
  4. (4) mediating the meaning-making process.


In formulating our framework for categorizing the ways that novices use block-based languages, we looked to the literature and found two distinct dimensions along which mediational roles differ that could lead to a productive classification that fit our emerging findings.

Programming in block-based programming environments takes the form of dragging blocks into a composition area and snapping them together to form scripts.

We categorize this difference as internal (cognitive) vs. <--> external (communicative); these categories provide the first dimension of our framework. The second dimension along which programming representations can differ comes from the computer science education literature, where a distinction is made between the act of generating a program and <--> that of comprehending one [25].

Table

Table 1. The 2x2 matrix situating the four roles Block-based programming language primitives play in supporting novices.
Generative Interpretive
External

(Communicative)

Means for expression

Serving as a means for expressing ideas to the computer

Record of previously
expressed intentions
Internal

(Cognitive)

Source of Ideas for constructions Resource used in

meaning-making

We see this ontology as productive in that each dimension suggests a pattern of use for novices and provides a lens for studying the ways the representational system is being appropriated by the learner. Further, the application of this framework can be used to inform the evaluation and design of programming languages. This framework is not meant to be definitive, but instead is one possible way to categorize novice interactions with programming environments.

The four quadrants of this framework delineate the four roles we identify in our analysis. The

External-Generative role
- an expressive medium with which to encode ideas in a computationally executable form.
External-Interpretive role
captures asynchronous human-to-human communication in the form of one user reading the instructions previous written by others.
Internal-Generative role
is not mediating the expression of an idea, but instead, the language itself acts as a resource the user can leverage to form new ideas.
Internal-Interpretive role
manifests itself as novices using the language as a cognitive resource to make sense of observed behaviors.
In this role, the author uses the programming commands as a mechanism to help decipher and interpret observed behaviors of the program, serving as objects-to-think-with in facilitating the meaning-making process.

Further, the application of this framework can be used to inform the evaluation and design of programming languages. This framework is not meant to be definitive, but instead is one possible way to categorize novice interactions with programming environments.


Ontology as a framework

We see this ontology as productive in that each dimension suggests a pattern of use for novices and provides a lens for studying the ways the representational system is being appropriated by the learner. Further, the application of this framework can be used to inform the evaluation and design of programming languages. This framework is not meant to be definitive, but instead is one possible way to categorize novice interactions with programming environments.


Though the movement leverages many of the newest technologies and practices, it also mirrors some of the earliest modern theories of education and human activity.

Theorists like Dewey, Froebel, Montessori, and Papert argued that learning should be physical, playful, self-directed, and reflective of everyday practices. Maker Spaces foster sociocultural learning that emphasizes collaborating, sharing tools and ideas, helping and providing feedback to peers, and communicating openly about projects [31], [33], [34].

Computational Making emerged from the Constructionist approach to learning and design.