This article is about the value of programming as a teaching tool not to teach programming, but rather as a medium that students use to illustrate their understanding of a concept. For example, if a student can program a computer to draw circles using basic trigonometric functions, then the student understands the concept of a circle at a very fundamental level. If a student develops a simulation that models the economic functions of a city, then that student has learned some important lessons about such an economy. I call this use of programing for teaching and learning "Learning by Interactive Programming" or L.I.P.
I originally proposed this approach to programming when I was co-director of the Computer Based Instructional Research Lab at McGill University in 1980. This message, I believe, has not lost its relevancy. Although it has not yet become a common application of computers in schools, the ubiquity of computing devices today does make it a viable educational modality.
The approach in L.I.P. is that the program that the student writes gives them immediate feedback about whether they understand a problem by virtue of whether the program functions as predicted or not.
Once a student has learned a programming language (and there are several choices today that can get a student started in a matter of hours) the main stumbling block in writing a program is the student's understanding of the concepts related to the problem at hand. After all, that is what computer science is about: solving problems with computers. The student learns by the research that they conduct to solve their programming problems. For example, to draw a circle they will have to ask themselves such fundamental questions as “What is the relationship between a point and a circle?”, “What is the center of a circle?”, “What is the relationship between the angle from the center to a point on the circumference and a point adjacent to that point?”
L.I.P. can be used to benefit any curriculum. To program a computer to draw a circle you need to understand circles. In order to program a computer to check for certain types of grammatical errors you need to know grammatical syntax. To write a program that simulates bridge truss designs, you need to understand how a truss distributes weight. For any problem the proof of the student's understanding is whether the program works.
L.I.P.’s greatest strength may be that it is highly motivating. Once students have the basics of programming and as long as the tasks assigned to them are within their skill level both in programming as well as in conceptual understanding, then programming is highly immersive. The combination of immediate feedback and satisfaction of seeing each programming component completed and problems solved is very engaging.
In addition, because of the object-oriented nature of today's languages, it is quite possible for students to collaborate on projects, thus building team skills that are essential in today's workplace. Not to mention that working as a team is also highly motivating - just ask any teenager who plays D&D or multiplayer video games!
Non-programmers usually see the learning of a programming language as the greatest challenge in L.I.P. But today there are a multitude of computer languages at varying levels of difficulty that make it pretty easy to start programming. One thing that non-programmers often do not realize is that programming languages are specialized for specific types of problems. Some computer languages use icon-based "commands" that you assemble like Lego blocks. Some are flow diagrams that you connect. Others are simple scripts that you write and the more familiar ones are complex languages that have their own special syntax.
Computer languages are specialized for certain types of problems. There are computer languages designed to automate your desktop, produce 3D graphics, solve mathematical problems, calculate statistics, render Web pages, or to deliver database queries to a Web page.
The specialized programming languages are easier to learn, but the generalized languages give students the greatest power. Selecting the computer language or languages to work with should be based on curricular goals (it might be to compose music, for example), the skills and commitment of the faculty, and the experience of the students. For example students in elementary school may learn to use Scratch but in middle school they may progress to Snap or Java.
By the time they enter middle school, every student should, have a basic foundation of programming concepts so that they can jump from one computer language to another with relative ease. These skills are generalizable across different computer languages. Just like human languages, learning a new computer language gets easier after the first one. Making computer programming a fundamental subject can be justified just like Latin once was.
It should be the goal of every school district to teach programming at a very early age and then to use that skill in every subject as often as possible. Teachers may never catch up with students’ abilities but that is how it should be. The teachers’ role is to set goals and to evaluate how well the students have accomplished their projects - which is plainly evident by a functioning computer program. Consultants and industry volunteers can help with the technical details of programming. Organizations such as code.org are now promoting coding for everyone and provide learning resources.
The tools are available. All schools need is the right leadership.
Originally published in ERIC (http://eric.ed.gov/?id=EJ240859)
copyright 2015 E. C. De Laurentiis