Should everyone know how to write code?
January 21st 2013
For some time I have been thinking about the future of software engineering and where all this frantic coding is heading to. (Some of the links in this post are in Finnish, sorry.) Let's face it, we need more software. Everyone has some great idea how to change the world and implementation usually includes software. Small and large organizations need new software and updates to their old applications. Apps are coming into cars, soon every object will have an IP address, and software will be everywhere. As Marc Andreessen put it "software is eating the world". A few days ago, I read a good article by Esko Kilpi about the future of ICT. In his post, he writes:
I have met many people who think that programming is a kind of a modern version of a working-class skill. It can well be outsourced to some far-away, poor nation while we here do higher value things. Nothing could be further from the truth, more wrong, and more dangerous for us. The code is today the main domain of creativity and innovations. It is a new language. Writing code is the number one high leverage activity in a creative, digital society.
I very much agree with this. All the time I encounter a situation where someone needs something coded for them. They all can tell what the application should do (when they see it, they know that it wasn't exactly what they wanted after all). Requirements, kanban boards, and backlogs. All full of features waiting for coding. Almost all ICT companies and start-ups I know are hiring good developers. So the question is this: Who is going to write all this code in the future?
Also, check what startups are desperately seeking. Most of the roles contain programming in some form. Some are hybrid roles where only part of the work includes writing code. US Bureau of labor statistics predict that job outlook for software developers will grow much faster than average for all occupations between 2010-2020.
Same thing is for market research analyst, expected growth 41%. Even though this is not quite the same as "marketer", but check this post about useful skills for a marketer. There are quite a lot of posts about how everyone should learn to code on Venturebeat, TedX, Arctic Startup, Forbes, Time, and Wall Street journal. Estonia is making everyone learn coding. There is Codeacademy and Coursera. The list goes on and on.
Not all people think that everyone should be taught to program. Check the answer by Linus Torvalds to this question (from 0:52:20), this article, and this. Fine. But then we really have to deal with "why on earth are we doing so many projects that deliver such marginal value?". If everyone is not coding, then we need better ways to get right stuff built. Agile methodologies help us to tune the development process but unfortunately cannot help if we are building wrong features in the first place.
I think that some critics view programming too narrowly. Even if you are not a "real" software engineer you can still do beneficial things in code. There is a good thread on hackernews about this. Also, if we look at basic web applications all features are not created equal. There are lots of features that are really not that critical nor that complex, and these features could be built by a less experienced person. You need a new column to a report? Great, code it! Let more experienced engineers develop APIs and use modern web frameworks to integrate APIs inside your organization by yourself. Of course this might be much harder in practice. Martin Fowler talks about internal reprogrammability:
If internal reprogrammability is rare for tools aimed at programmers, it's even rarer for tools aimed at non-programmers. I've often wondered if that ought to change. What would come from making more tools exhibit this quality? Would this encourage more people to learn about programming, the better to control the environment that they spend so much time in? This was certainly part of Alan Kay's vision of the dynabook. He saw children not as passive consumers of media, but actively programming their environment.
One option to the developer scarcity is, of course, self programming seed artificial intelligence. Ah, the self-improving machine. "Machine, go create me a Facebook. Chop chop." That might take some years. Dammit. How long will programming be in high value? And in addition, how long are people able to program? Some say that after 40 it's game over. Move to management and let younger people take over. Wait it gets worse. According to Eleonora Guglielman:
The acquiring of new knowledge and skills becomes therefore more and more difficult, and the execution of complex tasks requires more effort than the younger learners. This problem has been addressed both under the neurological and the educational side by the OECD, which in 2001 held in Tokyo the Forum for Learning Science and Brain Research project to discuss issues related to the nature of brain ageing and cognitive function in old age. Data gathered by OECD demonstrate that many cognitive abilities decline between the ages of 20 and 80; this reduction has effect especially on tasks like reading, recognizing letters and words, and generically on memory. The decay begins around age 30 and accelerates after age 50; it is characterized by memory lapses, delays in reasoning, communication difficulties, Freudian slips (OECD, 2002).
Last time I checked, I was over 30 and coding consisted, at least partly, of reading and recognizing letters. "What was that character again? Oh yes, it was 's'." Luckily I don't yet have problems with Freudian slips and it also gets better:
The current research shows that substantial changes occur in cortical areas and that learning, thought and action deeply transform functional anatomical structures of the brain. The brain ageing is reversible, as neuroplasticity is bidirectional: it can cause the deterioration of the brain or its improvement. The physical, chemical and functional brain decline is caused by changes that give rise to a process of negative plasticity, causing a vicious circle of deterioration that includes four components...
Go figure. Should software engineers stop or continue what they like to do? And if we want to get really cynical, we can ask should we be doing this in the first place? I think this is somewhat a question on amateur professionalism and what that means in software. Are people only consuming or also writing useful code for themselves? Imagine this. How about if programming was something that everyone could do? Basically like the English language for Finnish people. That cannot be possible, right? Nowadays if you need an English article, chances are that you write it by yourself. It seems that in Finland 82% of people know at least some English. It's not that everyone has to be a hard core server engineer but we cannot outsource all coding to Asia either. In my opinion, we should be making coding sexy. Luckily there are great projects like Rails Girls.