5 More Principles to Radically Transform How We Teach Computer Programming
Your content has been saved!
Go to My Saved Content.Following the previous post about teaching programming languages to kids, here are five more strategies which we are using in our trials at feynlabs. Our goal is to maintain young people's interest in learning programming so that the participants will acquire enough depth to take independent steps beyond what they learn. As usual, I welcome comments and feedback
6. Use Hacking as a Fundamental Teaching Tool
We often start teaching new students about code by writing new programs. However, we don't emphasize modifying existing programs. Yet, in many real-life instances, we often spend large amounts of time modifying existing programs. The ability to make small, incremental changes to an existing program is a valuable tool to learn programming, especially because it provides a quicker payoff. It is a softer way to start programming and to focus the mind on specific changes.
Here is an example. I used a program on the Web called w3schools9 to introduce my then eight-year-old to JavaScript. When he saw code for a simple alert box for the first time, he quickly made it into a prank by changing the message text to a shutdown alert (an error message). In other words, he did not write the program but instinctively understood what it could do and saw the value of modifying it to create another function. Modifying programs instead of writing them from the start could thus be a simple and effective learning tool.
7. Start with One Programming Language But Don’t Limit Yourself
To teach programming, you have to start with a specific programming language -- but you need not confine yourself to only one programming language. The popularity of programming languages is based on various factors which are often commercial. Thus, in the '80s, if you started learning programming, you used Basic/Pascal. In the '90s, you may have used Java or JavaScript, and so on. Today, as computing continues to evolve, there are many programming languages which are popular. Teaching only one gives a limited perspective. Also, thanks to the Web, it is now possible to look at more than one language. This idea lays the foundation of our work in teaching concepts of programming languages to kids.
8. Use Multimedia for Learning and for Content Creation
Most people would agree that multimedia plays a major part in education today. On almost any given topic, you can find some great video on the Web for free (on YouTube, for example). However, multimedia -- and especially video -- can be used as a content creation tool. We are using this approach in a trial where we create video with ScreenChomp10. The advantage here is that in creating video, participants learn programming concepts and techniques in a much more dynamic way. This reduces drop-off rates.
9. Separate the Exceptions from the Rules
Programming is taught linearly, topic by topic. But it could be easier to teach in two passes or stages -- first the core idea and then the exceptions. This makes it easier to get the basic idea first and then build upon it subsequently. For example, explaining passing parameters by reference vs. by value11 to a function can quickly get complex. Hence, it is easier to first explain parameters and functions and then come back to more complex topics like passing parameters by reference.
10. Discuss Learning About Learning
Finally, in all learning it is important to understand "learning about learning." There are three phases of learning. First is the aptitude/interest stage, when the educator either recognizes the student's inborn aptitude in a subject or fosters the student's interest in it. Essentially, all the work we are doing at feynlabs is in this stage.
The second stage is the apprenticeship stage, where the apprentice engages in extensive training under an expert. In Star Wars, the apprentice is the "padawan," and this three-stage process is enshrined in Jedi training.
The third stage is the mastery stage, where the participant is able to see the complete picture and recognize interconnections between components such that she can extend her existing body of knowledge. For example, Charles Darwin embarked on a voyage to South America. In doing so, he collected so many specimens that a theory began to form in his mind where he was able to see connections between specimens which others could not see. This is the "mastery" stage.
In teaching computing and programming, here are some observations:
- Not everyone will want to master programming. Many will want to take their interest to the next level. This would be useful, considering that computing will be a central element to many jobs.
- The ability to "hack" or change many physical objects in future will require the ability to understand some programming. In that sense, knowledge of programming will be useful even if mastery in programming is not attained.
- The Internet allows us to accelerate the path towards mastery. Howard Rheingold, in his book NetSmart12, sees the ability to engage with cyberculture as a core skill, much like driving a car for the current generation. This ability will be an asset to acquiring mastery.
The Key to Future Innovation
To conclude, why should we rethink and accelerate the way programming is taught?
Programming as a skill will be critical to the economic prosperity of future economies. There is a fundamental shift towards "knowledge-based creative activities,"13 which will be driven by computing and programming skills, since programming allows you to think, hack objects and create. Hence, it is a fundamental skill to future innovation.
I welcome comments and feedback below or at Ajit.jaokar@futuretext.com.
Notes
9 http://www.w3schools.com/
10 https://itunes.apple.com/gb/app/screenchomp/id442415881?mt=8
11 http://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value
12 http://rheingold.com/netsmart/
13 http://www.forbes.com/sites/elainepofeldt/2012/12/28/want-to-recession-proof-yourself-join-the-creative-class/