Friday, March 07, 2014

Any Monkey Can Learn To Code

One never knows where something is going to go on Twitter. I recently tweeted a link to a post by Garth Flint titled Teaching programming is not getting easier and had an interesting response on Twitter. 

doctorMonkeyIs programming on a par with brain surgery? Or it is more like one boss I had said “programming is easy and I could teach any money to program.” Hal, who worked for the same boss at one time, pointed out that that company went out of business not long after that was said. So there is that. My old boss is not alone in thinking coding is easy though. A political appointee in the UK caused a stir when she claimed that teachers could learn how to educate students in computer programming “in a day.” Well that is crazy but is the other end, brain surgery, any less crazy? Quite a range there.  I think the truth is somewhere on the continuum between those extremes. A lot of people on the “we need more people learning computer science” movement like to say that everyone can learn to code. But is that true? And even if it is can we make everyone an expert? Probably not anymore than we can teach everyone to write well enough to create the next Great American Novel.

I think we can teach most people some coding. I don’t think we can bring everyone to the level of professional coding though. Not as software development is practiced today. Forty years ago a lot of programmers were basic coders who were taking highly detailed specifications that often came close to pseudo code and translating them to working programs. It was quite a bit different and easier than what we do today.

Some of that is because we have gotten away from that style of development and some of that is because we can create programs today that are much more complicated and involved then we could back then. The tools are better but more complicated. Today we demand a lot more creativity and imagination from software developers than we did from the rooms of low paid rote coders we used to have.

The hard part of coding (as I wrote recently) is not the syntax. The hard part is taking the commands available and figuring out how to build useful applications from them. That is a different way of thinking than many people can adapt to. How many can? I don’t think we know. Could more “get it” if we taught better? Perhaps but then again how many people can learn to do brain surgery? Where does programming fit in that line? And while we can’t teach brain surgery to the masses we do make a lot of kids at least study some biology in high school or college.

Creating useful software is the hard part. We do see young people create very interesting things using block languages like Alice, Scratch and Kodu. Mostly they are creating games and telling stories. While those activities have value I’m not sure they lead to “real” programming as often as we’d all like to believe they do. The block languages we have are domain specific to a large extent. How does one move from a Kodu game to an Accounts Receivable application for example? The path is neither clear nor smooth.

I see there being several levels of programming expertise. Sort of analogous to sports. Everyone can play pickup basketball, some will make the HS team, some HS players make a college team where there are also levels. And then there are those very few who make the NBA. Big jumps with large drop offs at each level.

I like to think I made it to Division 1 as a software developer. My friend Hal, quoted above, jumped from HS to NBA all-star. Most people will never get above pickup games (think playing around with block languages or maybe some Excel macros). Our goal cannot be, and should not be, to make everyone an all-star software developer. But if we have more at the pickup game level the whole pool gets bigger and we are more likely to get more stars as well.

Not everyone has the talent or perhaps the special way of thinking that makes an all-star level software developer. But that is ok. We can at least expose enough students to the field so that the people who have the talent discover that fact and figure out that they can make a difference in the world by using it. Most people need an experience to help them be aware of the possibilities and of the talent they may have.

Michael Jordan was famously cut from his HS basketball team. But he grew in size and ability and later became a star. I think that this would never have happened though if he hadn’t developed a love of the game and had some good coaching first. That is why I feel that if I get a student interested while I have them as a student and help them see the potential it may make a difference later when their talents grow and change.

So programming – easy enough for everyone or on a par with brain surgery?

Related Posts:

3 comments:

Garth said...

I could teach a monkey syntax. It takes significantly more work to teach someone what to do with it. Take a simple "add the odd integers in a list" program. For those of us that teach programming or those that work as a programmer the problem seems trivial. But then we understand the idea of breaking the problem down into simpler parts, we understand mod arithmetic, we understand x=x+a works in programming even though it makes absolutely no sense mathematically, we understand that Boolean stuff, and a few more details needed to make this 6 line (Python) program. For a kid who still has a brain that is not fully wired this little exercise is up there with brain surgery.

George said...

I really enjoyed this post, I'm one of the cofounders over at CodeCombat and agree completely with the basketball metaphor. Much of the reasoning surrounding things like the hour of code and mandatory CS education harken back to that mentality of exposure at an early age, even if the speaker isn't as eloquent. I know that in my own educational experience, I wasn't exposed to computer science until sophomore year of college and only then through a terrifically dry course on Java. When I started my first web startup 3 years later, I literally had this epiphany that coding could be used to build practical things like webpages not just stupid rabbit simulators in a stupid desktop sandbox. From what I've learned since, I don't believe for a minute that learning to program is equivalent in skill to brain surgery, but neither can you pick it up in a day. As you said, there is a skill continuum. I imagine making significant contributions to the linux kernel might require an extreme level of skill, but putting together a Rails app to display today's dinner recipe isn't that hard.

Anyways, excellent article.

xota said...

The rules of chess are more easily taught than how to play the game successfully. Indeed the hard part of coding is not mastering the syntax. The hard part is translating your excellent ideas in something that works. In my opinion that's equally true for building a game in Scratch as it is for building an Account Receivables Application. In fact you could use Scratch to build a rough version ... have a look at http://scratch.mit.edu/projects/17144807/

The reason to teach everyone coding is not to make them good coders, we don't need that many and it's impossible anyway. The reason is that tinkering with code is an excellent way to learn computational thinking.