2013-02-28 0:27

You may have seen this video, starring Mark Zuckerberg, Drew Houston (from Dropbox) and a couple of other tech stars. They promote the Code.org initiative, advocating that every school kid in the U.S. should have programming classes as part of their educational offer.

It’s a recent development, but the whole idea of promoting computer programming among broad audience is in the spotlight for quite some time now. Not only in the U.S., mind you. In Estonia, for example, children are to be offered coding classes starting from early elementary school.

The message seems to be pretty clear: everyone should learn to code, the earlier the better. In the future, it will be an obvious part of basic literacy, like reading and writing natural language. Everyone will get to do some really cool and useful things with their computers.

Sounds great, doesn’t it?…

So why I can’t help but to roll my eyes when I hear about this? Am I just an obnoxious, elitist jerk who doesn’t want others to experience the feeling of empowerment and satisfaction that creating your own computer programs can evoke every so often?… D’oh, I really hope not.

So maybe there are some actual problems with this idea. I would hesitate to say that it just doesn’t, ahem, compute, but I can certainly see a few issues, misconceptions and dubious assumptions.



LFM 1 mobile & 2 web developers

Common knowledge in IT says that there is a serious shortage of computer programmers and some other types of engineers who know their way around the code. It circulates for good few years know, happily defying any notion of economic crisis that permeates a vast majority of other industries. Some say it’s a bubble, some doubt the shortage is as bad as software companies wants us to believe.

But if even we assume the industry is indeed starved of quality engineers, it’s reasonable to ask whether initiatives like Code.org are actually a good way to solve that problem. In his unusually insightful blogpost, Jeff Atwood provides some outstanding arguments why it’s unlikely to work – and even be counterproductive. The point there is pretty simple: while more engineers generally result in more software, it doesn’t quite follow how this is a good thing. The opposite seems to be true, actually: when writing the source code of computer programs, less is almost always more.

Perks and benefits

Filling up the numerous job openings in IT is not the only objective of this whole “learn to code” movement, though. Even if you don’t become a professional developer, proponents say, you will still derive valuable skills from your programming curriculum.

The ability to break problems down into smaller, more manageable pieces.

Various ways to generalize existing solutions to address a broader range of problems.

A firm grasp on abstraction and mental instruments to reason about higher order concepts.

And finally, a valuable lessons about simplicity, applied to solving complex problems.

It sounds wonderful. In fact, it seems so great that almost every introductory book on programming topics has its author touch these issues at least briefly (and sometimes not so briefly). They try pretty hard to make their readers understand these crucial concepts and be able to use them as soon as possible.

The miserable results of those (admittedly noble) efforts are known all too well to anyone who’s got to clean up a few heaps of legacy code, written by beginners enamored with one of the latest achievements in software abstraction (typically functional or object-oriented programming). Those well-meaning novices might have had excellent knowledge and brilliant ideas, but their lack of experience prevented those qualities to translate into actual skills.

And if professionals typically take years of real world work to develop them, how we can expect to achieve even comparable results after just a few semesters in necessarily artificial, classroom-and-homework environment?…

Besides, we already have a course which is a part of general education, and is set up around the same premise of generating some desirable side effects through seemingly “useless” mental effort. It’s called math: the “boring” and “difficult” subject which only “nerds” like. Do we want computer programming at large to be associated with the same stigma?

iCode, YouCode

So it might not help the economy much and don’t result in personal growth until you dedicate few years to it… But what about the “literacy” argument? If computer programming is really the bread-and-butter skill of the future, it doesn’t matter how hard, mundane and time consuming it is – people will learn it anyway.

I may have believed it somewhat a few years ago, or a decade. One hard look at the overall direction where the IT is going now will leave you disillusioned that there is any non-negligible probability for this vision to actually materialize.

In fact, we’re heading at remarkable speed in the exactly opposite direction.

It’s pretty simple, really. Programming computers is about the power to create, improve and change. It needs an incentive, drive and passion to do so, as well as freedom to make great things possible. It has rough corners, too: where things may go wrong, existing solutions are early stage at best, and stuff might not be working as intended.

But the current zeitgeist in IT is to shield the users from all this. To make sure that everything “just works”, so they don’t worry and be (h)appy. To reduce options and choice, so they don’t hurt themselves by venturing too far. To polish all these sharp corners until they are comfortably Rounded™.

Paving the path

Considering this state of affairs, I actually like that Code.org video for one thing: it clearly shows the existing opportunity in a compelling, attractive way. Confessions of the two most recognizable tech CEOs (bar the late Steve Jobs) about how their first programs looked like are a great way to paint programming as fun and approachable endeavor.

We know there are in fact zero barriers to entry to the field of software engineering (at least in the first world countries), but it’s easy to forget how the thought of becoming a developer may not even occur to many young people. By employing popular celebrities, among other promotional efforts, Code.org is addressing this problem quite well.

An obvious next step would be to make the code.org website into a hub of useful links to introductory courses, tutorials and articles. It could also explain what programming really is, and what are the main domains of applications right now: desktop, web, mobile and game development; scientific research; hardware programming (Arduino etc.); tools and utility scripting; and so on.

As a whole, this would constitute a modern grassroots approach. It could be taken further by eager volunteers from various technology user groups who might be interested in spreading the knowledge. That sounds like an effort worth spearheading by the 21st century tech giants.

Because while it’s not at all true that everyone should learn to code, everyone should have an opportunity to do so.