Getting Johnny to Code (response to "Why Can't Johnny Code?")
Today's guest blogger is Coding Cat, Matthew Parets:
Coding Cat is Matthew Parets, a Computer Science teacher, one that I would have loved to have had. You probably would too, after you read this blog post. Here is a brief bio about Matthew in his words:
I have been working with the PC since its inception in the early 80's. I was a professional developer / programmer-analyst / software engineer -- choose your favorite title -- for twelve years. During that time I worked for a wide variety of companies, on wide variety of topics in a wide variety of languages. My focus was always on low level system and language design. During the industry flame out following the burst of the dot-com bubble, when innovation stalled and things were boring, I returned to school to earn a masters in computer science and began teaching. As it turns out, influencing the nerds of the future is just as entertaining as being one yourself.
Do you want that bright and creative kid to try out programming?
Give them a goal to reach. If you make the goal interesting and attainable the kid will claw their way to the finish line and then beg for more.
The topic of this article is of course a take on the famous white paper "Why can't Johnny code?" by David Brin. In the article David discussed how the first wave of computers nerds were seeded because of the ubiquitous nature of the programming language BASIC on all of the early micro computers. And, the fact that we are not seeing another wave of energetic computer nerds is because of this loss of universality of easy to write code.
Small Basic was born of that spirit, with its driving goal to make BASIC ubiquitous, easy and fun again. While it has fallen short of the lofty goal of being on the desktop of every Windows machine, it has succeeded beautifully in making programming easy, approachable and fun.
But it takes more than great tools to spark a fire in a potential computer nerd.
It also takes drive.
Drive, because programming can be incredibly frustrating for a beginner. Even in an environment as friendly and fun as Small Basic, writing your first programs can push you easily into insanity. I have seen this happen repeatedly. A curious and bright young student sits down at the computer wanting to know how a computer program works, and how they can get the machine to do their bidding. Half an hour later they are pulling their hair out because they have encountered one syntax error after another. At the end of their first hour they have given it up because they haven't managed to build their first person shooter.
Without drive to push past the frustration nothing is sparked.
As a Computer Science teacher I teach programming at a lot of different levels and I have discovered an interesting truism: Nothing is more important than how you teach your Introduction to Programming course. I keep it simple. We stick the four basic operations of the computer: Move, Add, Compare and Jump. Move - using tools and variables. Add - the basic math operations. Compare - conditional operations (if). Jump - Looping and subroutines (goto, for, while and sub). While I do spend a small amount of time lecturing, and give the students a small amount of background reading to do, the lion share of the time in the classroom is spent building that drive.
Each section is started with a goal to reach. To reach that goal they need to make use of the tool or technique we are focusing on that day. Sure, I act silly; talk about pirates and fighting space aliens; but at the end of the day that attainable goal is all the magic I really need. When the kids reach that goal, they feel the same jazz that courses through them as when they are killing zombies in a video game.
At first the goals are simple, and I walk them through the process. By the middle of the semester the goals are becoming complex, requiring multiple steps, and there is the real kicker… the kids are driving the discussion. They want to know what it takes to reach the goal. They want to know how to conquer the system.
The drive towards a goal is all the motivation they need to push past the initial frustration and become true programmers. If you also manage to make it fun, you will also find that you are growing a crop of computer nerds; and as a Computer Science professional, nothing is more rewarding.
The goal of any Computer Science educator has to be fueling that drive. Teachers need to fuel the drive if they hope to keep their classrooms full. Corporations need to fuel the drive if they hope to keep climbing the ladder of competition. Parents need to fuel the drive if they hope to raise a child full of intellectual curiosity. With that drive students themselves have the drive to push through the frustration and see results for their efforts.