A Taxonomy of Programming Environments and Languages for Novice Programmers
Total Page:16
File Type:pdf, Size:1020Kb
Lowering the Barriers to Programming: A Taxonomy of Programming Environments and Languages for Novice Programmers Caitlin Kelleher and Randy Pausch Carnegie Mellon University Since the early 1960’s, researchers have built a number of programming languages and environments with the intention of making programming accessible to a larger number of people. This article presents a taxonomy of languages and environments designed to make programming more accessible to novice programmers of all ages. The systems are organized by their primary goal, either to teach programming or to use programming to empower their users, and then, by each system’s authors’ approach, to making learning to program easier for novice programmers. The article explains all categories in the taxonomy, provides a brief description of the systems in each category, and suggests some avenues for future work in novice programming environments and languages. Categories and Subject Descriptors: H.5.2 [Information Interfaces and Presentation]: User Interfaces—User-centered design; Interaction styles; Theory and methods; K.3 [Computing Milieux]: Computers and Education General Terms: Design, Languages, Human Factors Additional Key Words and Phrases: Human-computer interaction, computer Science education, literacy, learning, problem solving 1. INTRODUCTION programmers. Since the early 1960’s, re- searchers have built a number of program- Learning to program can be very difficult ming languages and environments with for beginners of all ages. In addition to the intention of making programming ac- the challenges of learning to form struc- cessible to a larger number of people. This tured solutions to problems and under- article presents a taxonomy of these lan- standing how programs are executed, be- guages and environments and discusses ginning programmers also have to learn a the challenges they address. rigid syntax and rigid commands that may For the purposes of this article, we de- have seemingly arbitrary or perhaps con- fine programming as the act of assem- fusing names. Tackling all of these chal- bling a set of symbols representing com- lenges simultaneously can be overwhelm- putational actions. Using these symbols, ing and often discouraging for beginning users can express their intentions to the This work was supported by a National Science Foundation graduate fellowship and grants from DARPA, NSF, NASA, and ONR. Authors’ address: Department of Computer Science, Carnegie Mellon University, 5000 Forbes Ave., Pittsburgh, PA 15213; email: [email protected]. Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or direct commercial advantage and that copies show this notice on the first page or initial screen of a display along with the full citation. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, to republish, to post on servers, to redistribute to lists, or to use any component of this work in other works requires prior specific permission and/or a fee. Permissions may be requested from Publications Dept., ACM, Inc., 1515 Broadway, New York, NY 10036 USA, fax: +1 (212) 869-0481, or [email protected]. c 2005 ACM 0360-0300/05/0600-0083 $5.00 ACM Computing Surveys, Vol. 37, No. 2, June 2005, pp. 83–137. 84 C. Kelleher and R. Pausch computer and, given a set of symbols, a ond, by the primary aspect of program- user who understands the symbols can ming that the system attempts to simplify. predict the behavior of the computer. This Each system appears in the taxonomy only definition excludes many of the “Program- once. However, many of the systems in the ming by Demonstration” systems [Cypher taxonomy have built on the ideas of earlier 1993] where the computer observes the systems. Consequently, a system that was user’s actions and uses internal heuris- influenced by natural language program- tics to generate a program for the user. In ming may not be classified with other nat- these systems, the user cannot accurately ural language systems if supporting nat- predict what program will be produced. ural language programming was not the In this article, we describe the high-level systems’ primary contribution. organization of our taxonomy, present the taxonomy, and briefly describe all of the 3. TEACHING SYSTEMS categories and systems within those cat- egories. We then present two additional These systems were designed with the tables: a table of the most influential goal of helping people learn to program. systems and a system comparison table. Most of the systems in this category are (or The system comparison table compares include) simple programming tools that all systems in our taxonomy based on provide novice programmers with expo- 1) what programming constructs they sup- sure to some of the fundamental aspects port, and 2) their approaches to making of the programming process. After gain- programming more accessible to novice ing experience with a teaching system, programmers. Finally, we summarize the students are expected to move to more approaches and discuss some possible general-purpose, commercially available avenues for future work in this area. languages. A few systems attempt to pro- Appendix A contains a complete list of the vide support in learning a more general systems included in the taxonomy,their lo- language from the start. Because students cations within the taxonomy, and pointers interacting with teaching systems are ex- to associated Web pages. pected to transition to general-purpose languages, many teaching systems are in- tentionally similar to general-purpose lan- 2. TAXONOMY guages. For example, knowing that a stu- In creating a programming environment dent will eventually have to do “for loops” for novices, one of the first questions in a Java-style, the designers of teach- that must be answered is why novices ing languages are less likely to intro- need to program. There are a variety of duce a different style of looping. Because possible motivations for learning to pro- general-purpose languages are not always gram: to pursue programming as a ca- designed with beginners in mind, the sys- reer path, to learn how to solve problems tems in this category are juggling two pos- in a structured and logical way, to build sibly conflicting goals: making it easier software customized for personal use, to for beginners to get started programming, explore ideas in other subject areas, and and giving students a background that so on. The systems in this taxonomy (see makes it easy for them to transition from Figure 1) fall into two large groups: sys- the teaching system to a general-purpose tems that attempt to teach programming language. for its own sake and those that attempt to The teaching systems focus on several support the use of programming in pursuit areas that can be difficult for novice pro- of another goal such as teaching cognitive grammers. The majority of the systems modeling to psychology students. Because in this category address the mechanics these two goals place very different con- of programming: both expressing inten- straints on systems, the taxonomy is or- tions to the computer and understand- ganized first by the system goals, either ing the actions of the computer [Norman teaching or using programming, and, sec- 1986]. Other systems attempt to place ACM Computing Surveys, Vol. 37, No. 2, June 2005. Lowering the Barriers to Programming 85 Fig. 1. Novice programming systems and languages taxonomy. ACM Computing Surveys, Vol. 37, No. 2, June 2005. 86 C. Kelleher and R. Pausch Fig. 1.(Continued ). programming in a context that is acces- structions to the computer (e.g., syntax), sible and motivating to a wider audi- how to organize these instructions (e.g., ence of people either by providing concrete programming style), and how the com- reasons for programming or by support- puter executes these statements. Systems ing novice programmers working together in this category attempt to make it easier and learning from one another. for beginners to learn one of these three skills. 3.1. Mechanics of Programming The systems in this category are designed 3.1.1. Expressing Programs. In most around the hypothesis that the primary general-purpose languages, users create barrier in learning to program lies in the programs by typing sentences into a text mechanics of writing programs. To suc- editor. Beginning programmers often cessfully write a program, users must un- have trouble translating their intentions derstand several topics: how to express in- into syntactically correct statements that ACM Computing Surveys, Vol. 37, No. 2, June 2005. Lowering the Barriers to Programming 87 the computer can understand. The sys- tems in this category explore two possible avenues for making this process easier for beginning programmers: improve the language so that beginners can more Fig. 2.Afor loop to compute the sum of the numbers easily learn it or find alternate ways from 1 to 10 written in Fortran and Basic. for beginners to communicate their instructions to the computer. BASIC: DARTMOUTH COLLEGE, 1963 [Kurtz 1981]. Basic was designed to Simplify Entering Code. Many teach Dartmouth’s non-science students general-purpose languages have been in- about computing through programming. fluenced by the need for sufficient power to Fortran and Algol, the commonly used tackle arbitrary programming tasks and a languages at the time, were both large desire to make the programming language and complex. Kemeny and Kurtz believed easier to implement, making the result- that the students would “balk at the ing languages unnecessarily difficult for seemingly pointless detail” [Kurtz 1981]. beginning programmers. The systems in After considering using subsets of Fortran this category examine three approaches to or Algol, Kemeny and Kurtz agreed they making languages more approachable for would have to create their own lan- beginning programmers: 1) simplifying guage.