Facebook
Edutopia on Facebook
Twitter
Edutopia on Twitter
Google+
Edutopia on Google+
Pinterest
Edutopia on Pinterest Follow Me on Pinterest
WHAT WORKS IN EDUCATION The George Lucas Educational Foundation
Subscribe to RSS

Five Principles to Radically Transform How We Teach Computer Programming

Today, there is a grassroots movement for teaching programming languages to kids.

Some of the factors driving this movement include new devices like the Raspberry Pi1, initiatives like Khan Academy2, and a greater global emphasis on math and science education. For policy makers, the stakes are high because computing skills are now seen as an indicator for a nation's economic competitiveness.

But yet, as I will discuss below, we need a fundamental rethink about how we teach kids programming languages to prepare them for the next wave of computing.

From an education standpoint, here are seven goals we pursue when teaching programming. Many of these are not being addressed by current education techniques widely used in this field:

  1. To achieve a rapid, dramatic change in learning programming
  2. To be inclusive -- especially in the introduction of women to computing
  3. To achieve a smooth on-ramp for learning, e.g. maintaining interest for longer so as to reduce early drop-off
  4. To encourage hacking, or modification of existing software (and hardware) to foster innovation
  5. To understand the concept of "mastery" in a discipline, recognizing that even if mastery is not achieved, there is still value in learning programming
  6. To co-relate programming with other math and science disciplines at an early stage, e.g. not teaching programming in isolation
  7. To encourage systems thinking, the ability to see connections between the parts that interact to form a whole

Based on our work in trials with schools and educational institutions for the feynlabs methodology, here are the first five of our ten principles for transforming how to teach programming languages to kids.

1. Co-Relate the Teaching of Programming Languages to Real-Life Examples in Other Scientific Domains

Mathematician and technologist Conrad Wolfram has an insightful TED talk3 about teaching mathematics to kids in which he says that math as taught in schools looks very different from math as used in practice. In the real world, math is not necessarily done by mathematicians, but rather by other scientists like geologists, etc. The same ideas apply to the teaching of programming. Programming also does not exist in isolation but rather should be seen in the context of other scientific domains. Today, with kids who are aware of scientific developments through the Web, Wikipedia and many other sources, it is easier to co-relate programming to other scientific domains as we teach it.

Radioactive Fluorescent DNA Sequence

Credit: Wikimedia Commons

For example, consider a type of algorithm called a "pattern matching algorithm." As the name implies, the objective is to find a pattern within a larger pool. This basic technique can be used in many domains such as spam filters. The same ideas of pattern matching algorithms are used in DNA sequencing4, since that process also requires us to find a specific pattern in a larger pool. This is because DNA is made up of four nucleic acid bases ACGT (Adenine, Cytosine, Guanine and Thymine)5. Just like in a text search, DNA sequencing algorithms involve finding patterns based on ACGT nucleic acids within the human genome, which contains about three billion base pairs.

This example of DNA sequencing, although complex for kids, is a good way to make the teaching of algorithms more real. The ability to explore complex topics like these on the Web should be encouraged, especially when kids are new to the idea.

2. Prepare Kids for the Next Wave of Computing

Every decade, computing paradigms change radically. Cloud computing and big data are emphasized today with the "Internet of Things" becoming more common in the near future. These ideas are not too hard to grasp, and one could argue that they are actually very interesting to kids (especially big data principles). In addition, there is a fundamental shift in computing itself. Value will shift to a unique combination of open source hardware, open source software, proprietary software, algorithms and IPR. Making kids aware of these real-life changes in computing cycles helps them to think of becoming computing entrepreneurs.

3. Clarify for Kids the Economic Value of Learning Programming

We want kids to learn programming. But we all see that the best-paid jobs are in investment banking. Add to this the practices of offshoring and outsourcing, many employers' emphasis on very narrow technical skillsets, companies' lack of desire to invest in training, the choice of management as a preferred career path (as opposed to technology skills), ageism and discrimination against women in IT -- and suddenly the economic value of learning programming is less clear.

It is thus even more important to outline the raison d'être for learning programming and to discuss the many counter-arguments that provide a reason why young people should learn programming. For instance, computing will be an integral part of everything from manufacturing (3D printing) and medicine (genomics) to the arts. Almost all interesting jobs will involve computing skills, and many will often be in technology start-ups involving some form of computing at their core. In other words, kids will be the digital cathedral-builders of the future.

4. Delay Coding

Here, I am being a bit controversial. I believe that we place too much emphasis on coding at an early stage. This gives a false sense of achievement. For example, merely running simple programs is good, but it is only a first step which does not involve much thinking. Placing too much early emphasis on coding simple programs and environment setup also mixes the activities of thought and action. For example, the need to download software, compile code, perform initial setup and so forth breaks up the thinking process. Finally, these activities can often lead to an early drop-off in interest – for instance, if the setup is too complex or if the examples are too easy.

5. Discuss the Big Picture and Introduce Systems Thinking

In "Learning to Connect the Dots: Developing Children's Systems Literacy"6, Linda Booth Sweeney emphasises the value of systems thinking, which is broadly the ability to see the connections between the parts that interact to form a whole. This ability makes a big difference to all learning but is not applied much in the learning of programming languages. For instance, Arrays7 and Linked lists8 perform conceptually the same task, but when they are taught, the connections between them are not discussed.

In my next post, I will cover five more strategies for teaching programming which we are using in our trials. Our goal is not to teach a specific programming language. Rather, our goal is to abstract the common elements of programming languages and to create interest such that the participants can go on to master any programming language. I would welcome your comments and feedback if you are using similar tactics in your teaching. Are you using any of the tactics above? Please share your experience.

Notes

1http://www.raspberrypi.org/
2https://www.khanacademy.org/
3http://www.ted.com/talks/conrad_wolfram_teaching_kids_real_math_with_computers.html
4http://en.wikipedia.org/wiki/Sequence_alignment
5http://en.wikipedia.org/wiki/ACGT
6http://www.dailygood.org/view.php?sid=365
7http://en.wikipedia.org/wiki/Array
8http://en.wikipedia.org/wiki/Linked_list

10 Best Practices for Teaching Computer Programming
Ten best practices for teaching computer programming.

Comments (6)Sign in or register to postSubscribe to comments via RSS

Ajit Jaokar's picture
Ajit Jaokar
co-founder of feynlabs
Blogger 2014

many thanks for this post and welcome comments. The second part will also give the full picture ie the post is split into 2 parts.

Tom Sej's picture
Tom Sej
High School Computer Science teacher from Kitchener, Ontario, Canada

I agree with all but the Investment Banking. If you don't know how your systems work there are people just waiting to pull the wool over your eyes. I do tell my students that they may not choose to be a programmer - many do not. However, they are at risk if they believe everything I/S is telling them.
Isolation - in our school board and in much of Ontario, usually, even in schools with 2000+ students, there is usually only ONE programming teacher and in many cases teachers teach it and want to get rid of it. Try to explain these principles to your principal when they don't align with board policy... In the end, then, we seek to find others in our position, and hence this post. We on the other hand do have the freedom to implement - but there is fear as the demands of the job leave us with little bandwidth at times.
Thanks for sharing - I've made notes in my planner and need to make some of these happen next semester...

Bon Crowder's picture
Bon Crowder
Math Mom & Education Advocate

"To encourage hacking, or modification of existing software (and hardware) to foster innovation"

If students would understand that hacking is the best way to takle just about anything, our educational system would be doing so much better!

Thanks for your list - I'm looking forward to the next five!

Tim Haysom's picture
Tim Haysom
Parent, technologist, runner - lover of learning

At school, I was pre-computing and so discovered computing and coding at university as a complete newbie. What was most pleasing for me was the way in which computing helped me to visualise things much more easily. As an example, I found signal processing and the concepts of Transformation (e.g. Fourier) and correlation fascinating in its mathematics. But computing allowed me to bring it to life by allowing me to visualise the algorithms that I had previously only had a theoretical knowledge of. The ability to "see" music in its waveform and also in its frequency patterns is a good example of this. Comparing the sounds of percussion, brass etc. instruments as well as guitars ...

A problem with teaching coding from scratch is that you need to use very simple and sometimes uninteresting programming examples and children can become disinterested before they have really achieved very much.

I very much support the principal of using real world examples to demonstrate things that children are and can be interested in. This draws them in and allows new concepts both of algorithms and coding principles to be introduced at a rate which matches ability.

Tim Haysom's picture
Tim Haysom
Parent, technologist, runner - lover of learning

I'm unsure about the DNA sequencing and this brings in another element.

For me, DNA sequencing is not that fascinating. Sure, it's good to know that we share 98% of our DNA with Orangotans or 60% with chickens (courtesy of Brian Cox last night) but for me its just too esoteric in terms of combinations of letters to be very interesting. For me, music and sound and the processing of real time signals is far more interesting.

The point is, I suppose, that you need a widespread variety of different real world examples to make sure that you can appeal to children with very different non-computing interests.

I'm very much in favour of your approach!

Sign in and Join the Discussion! Not a member? Register to join the discussion.