Why We Need to Think More Like Programmers

Computer programming is hot again. Not like in the 80s, when Seymour Papert’s Logo programming became popular for several years and then declined when the education world failed to see the evolving technological revolution that was taking place in daily life. This time the movement to teach kids to code carries with it a sense of urgency. Around the world, students of all levels of education are getting acquainted with the basics of coding. Estonia is teaching first graders to create their own computer games. In England, all students are exposed to a revamped computing curriculum focusing on new programming skills starting at age 5. In the United States,Code.org has persuaded 28 million people to try programming in its “An Hour of Code” program. The reasons mentioned most are practical in nature, such as students’ future career prospects or finding qualified workers for the technology industry, as well as big reasons, such as the country’s economic competitiveness. However, one of the most important reasons for learning programming relates to improving problem-solving skills and enhancing creativity–skills that are in great demand these days. As Steve Jobs once said “Everybody in this country should learn to program a computer…because it teaches you how to think.” Yet, this is the least-mentioned, studied, or understood reason.

The digital revolution is changing the nature of jobs and the skills needed to address them. According to Levy and Murnane, being educated in the 21st century means the ability to “carry out the kinds of expert thinking and complex communication that are at the heart of the new economy.” The need to hire employees who can solve problems, think critically, communicate, collaborate, and innovate, is leading to a greater focus on the development of these skills which are so important for meeting the challenges of everyday life. So far, no clear trend can be traced as to the development of strategies or heuristics for thinking critically or creatively. Probably, the best promise lies in following work practices of programmers because many methods used by programmers such as, schemas, automation of skill with practice, working memory, semantic networks, and mental models, can be found in many cognitive theories.

Literature covering the study of programming tells us that there are two types of programmers:the novice and the expert. Novices, according to research, are limited to surface and superficially organized knowledge, lack detailed mental models, fail to apply relevant knowledge, and approach programming “line by line” rather than using meaningful program “chunks” or structures. In contrast, expert programmers have efficiently organized and rich knowledge schemas, strategies and rules applicable to solving problems, remember larger “chunks” of information than novices and are able to build detailed “mental models” of what the computer will do when a program runs. Although, many of the characteristics of expert programmers are also characteristics of experts in general (such as recognizing, using and adapting patterns or schemas),research found no evidence that learning programming fosters an improvement in general problem solving skills.

In a study focused on the influence of computer programming on perception and application on mathematical skills (Rich, Bly, &Leatham, 2014),a group of programmers were surveyed and interviewed regarding the influence programming had had on their learning. The results were intriguing because the programmers clearly indicated that they applied their programming skills to solve problems they encountered in their daily life. One programmer said that breaking down complex problems into smaller chunks of subtasks influenced his general problem solving habits. Another programmer said that “I definitely take a divide and conquer approach in most everything I do… I would say leaked over into the rest of my life, and I started doing other things that way as well.” They also reported that programming made them more systematic, and possibly more creative, understanding that there’s more than one way to solve a problem or to do different things. Their interpretation of problem solving is not as the means to solve specific problems, but rather as the means to encourage the interiorization and reorganization of the involved schemes as a result of the activity.”

Surprisingly, this last discovery is also a reflection of what developmental theorists, such as Piaget, Inhelder, Werner, and Vygotsky think about developmental processes with profound implications for the roles of technologies in education. Pea and Kurland, who summarize these views say that “cognitive development consists not of an accumulation of facts, but of a series of progressive reorganizations of knowledge driven by the child’s active engagements with physical and social environments” (Pea &Kurland,1984). Although these programmer reports are not enough to provide a body of evidence for the power of programming to affect general problem solving skills, it clearly casts some doubt on the conclusion that it doesn’t. One reason for this situation is the fact that not enough research exists to show the developmental process by which programmers develop proficiency and the cognitive consequences it leads to.

As it turns out, there are situations in which transfer from programming to other domains was established. If the programming activity is a necessary part for carrying out some other meaningful and goal-directed activity, it may “promote learning to program and support the transfer of what is learned in programming to problem solving activities in other domains” (Pea &Kurland,1984). This conclusion is interesting because goal directed activities, such as creating projects that are authentic and meaningful for students, seems to be a major driver for student success and improved comprehension. In “The Mind’s Best Work,” David Perkins tell us that the essence of invention isn’t process but purpose and that purpose is the driver that organizes the diverse means of the mind to creative ends. What turns a mere maker into an innovator are four things:planning, abstracting, undoing, and making means into ends. Innovators are planning their work instead of producing the work directly. They abstract new ideas from the particulars of the work instead of working from general intent to particulars. Instead of getting everything right the first time, they undo and redo parts of the work. They often address a means as an end instead of always being preoccupied with the final product.

This is also the process that programmers use when doing their job. A programming expert starts a project with a plan. Programs are usually written for a purpose –with respect to some task, problem, or specification. They are abstracting new ideas from the particulars of the work in progress. The process is iterative –they constantly do and redo code to fix problems and improve efficiency. As mentioned above, breaking down a problem into parts and focusing on each part when programming, is a method they frequently use. Thus, the intersection between programming skills and general problem solving skills is purpose, which is also the only case where transfer from programming to problem solving occurred.

It sounds like all we need to do to become innovators and better problem solvers is to think more like programmers. Not the type of programming that focuses on the study of computing for its own sake, but rather a curriculum that includes programming as an integral part of a goal-directed project. Projects like the ones offered by the Raspberry Pi Foundation as part of Britain’s newly revamped computing curriculum–setting up a camera by a bird feeder and programming it to post photos online or sending a camera into near space–are just few of the projects that can turn us into innovators and better thinkers.


Perkins, David N. The Mind’s Best Work. Cambridge,MA:Harvard UP,1981. Print.
Rich,P.J.,Bly, N. &Leatham, K.R. (2014). Beyond Cognitive Increase:Investigating the Influence of Computer Programming on Perception and Application of Mathematical skills. Journal of Computers in Mathematics and Science Teaching. 33 (1),pp. 103-128. Chesapeake,VA:Association for the Advancement of Computing in Education (AACE).
Robins,Anthony,Janet Rountree, and Nathan Rountree. “Learning and Teaching Programming:A Review and Discussion.”Computer Science Education 13.2 (2003):137-72. Web.
Levy, Frank, and Richard J. Murnane. The New Division of Labor. Princeton and Oxfors: Princeton UP,2004. Print. p. 213