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.
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.
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?
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™.
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.
I think almost everybody skipped what’s best advantage of (even basic) programming skill for non-programmers: ability to automate boring, daily task without support from IT team. Not everybody with some coding skills will be programmer, but they can easily skip repeating, time-consuming tasks by scripting them away. If it was up to me how to teach programming basics to everyone, it’ll go into scripting, system (bash/powershell) shell usage and core concept of algorithms.
And still, if somebody knows how to write code, they can far easier understand IT jargon and even be able to understand why they consider something impossible or hard to implement. Hell, they’ll understand what “implement” is. ;)
In short: for me, every way to shift software developers from solving simple problems to facing real challenges is good enough to at least give it a try.
To reply to:
‘And still, if somebody knows how to write code, they can far easier understand IT jargon and even be able to understand why they consider something impossible or hard to implement. Hell, they’ll understand what “implement” is. ;)’
There is downside of this too. If one of people who now know what is ‘implement’ and how to write some scripts, will jump into a role of your client, it could lead to really frustrating situtions. Many people think that, when they can write if statements and for loops, it’s all about programming – they will start asking why something is taking so much time/money or (that’s even more scary) they would like to see code :)
I think that what is written here is really esential: that in whole that movement, there is not enough emphasis on how different writing ‘Hello world’ is from creating business apps or website, where ‘all sharp edges are polished’
@up: Right. Like in this old saying, the first 80% of work takes 80% of the time, and then the last 20% takes another 80% of the time :)
@up~1: Automation suffers from poor discoverability which IMHO is quite a shame. I could imagine e.g. Explorer/Finder noticing when you do something silly – like renaming 100 files by hand using in predictable pattern – and recommending a more automated approach.
Sadly, there doesn’t seem to be any incentive for software vendors to go into that direction.