On the “Learn to Code” Movement and Its Lies

A hobbyist’s take on the fallacies of the coding hysteria

The fixation on learning to code has become an international phenomenon, as of recent. All the large news publications are posting articles espousing the merits of computer programming literacy and its pivotal role in the future, where those who write code will be the ones writing the future.

The latter is not entirely wrong, but the movement that seeks to supposedly educate children on matters of programming and prepare them for the digital future, is very flawed. I will go in detail on this.

Non-profit organizations like Code.org, backed by large corporations and small firms alike, are rallying for “computer science” to become a core subject, alongside the archetypal staples of the liberal arts. The Chicago school district recently announced that they would be adding “computer science” as part of the core curriculum. U.S. representative Tony Cárdenas proposed a new piece of legislation, entitled the “America Can Code Act” (or, quite laughably the 416d65726963612043616e20436f646520 Act of 2013, complete with the awkward trailing whitespace at the end and lack of a specified character encoding, though ostensibly ASCII).

The examples are numerous, and the hysteria all happened at quite an alarming rate. Going from complete apathy, the public was suddenly swooning from the need for this generation to learn computer programming. With the imminence of a completely computerized society, programming languages would become more important than natural languages, and we can’t let the compulsory schooling system to leave these kids unwashed and illiterate! Vendors even started creating idealized electronic toys to cash in on the sentiments.

No further exposition is required. Let’s tackle what’s actually going on. On the face of it, the idea couldn’t be more well-intentioned, seemingly. Why would anyone decry teaching children computer programming? A scrooge, a technophobe and perhaps a hopelessly cynical COBOL programmer out of the times who’s off his rocker and nearing the grave, either way.

In reality I am a member of this generation and my opposition to the movement is not out of ignorance of technology, elitism or obscurantism. I merely want to voice my concerns and point out that the initiative is not as altruistic as it may appear. It is plagued with misconceptions, inanity and quite contrary to altruism: bitter pragmatism under a rainbow cloak of education and youth preparedness.

To begin with, right off the bat, the movement rarely mentions “programming”, but code. Code. “Learn to code.” “Anybody can learn to code.” “Coding is ${X}, coding is ${Y).”

The reality is that coding is only a small part in the grand scheme of computer science and computation, with the movement claiming to teach the former. This is deceiving at best and a devaluation at worst. There is already a widespread misconception as to the nature of computer science, with most people being unaware that it is a vast field which overlaps with many aspects of science and engineering, including in large part discrete mathematics. Type theory, automata theory, data structures, complexity theory, algorithms… that is computer science. Writing lines of Java is not.

The movement and the educators jumping on aboard will only serve to perpetuate this. But, this is just semantics, you might say. Why get so uptight over a triviality like that?

Well, in comparison to my other arguments which will follow later, yes. It is a triviality. But really, is it? You’re basically spreading an outright fallacy down to the institutional level. The same institution that is supposed to educate. There is nothing wrong with children writing code, but calling it “computer science” is dishonest and gives them false notions.

In any event, this can be brushed off to an extent. The second concern involves the same point: the campaign’s maniacal infatuation with “code”. All of their advertisements and materials focus on describing and worshiping this mystic and powerful essence known as “code”, as if it contains some secret of the universe. They sugar coat all the time and adulate it as something so grandiose.

Long ago, Alan Turing discovered that any algorithm can be expressed computationally with only five basic instructions. Any language that supports these instructions is Turing complete, and thus it can be used to perform every single computation that is theoretically possible.

The theory of computation is indeed a fascinating one, although Code.org’s enchantment fits the profile of a juvenile, more than a thinker.

Yet, Turing machines are not the only theoretical device to express algorithmic principles. Herein lies the fallacy: the media campaign presented by this movement assumes that all languages are procedural and ALGOL-like, as is evident in the previously linked video.

This actually leads me to a central question: Just what does “learning to code” mean, anyway?

Nothing. It’s an ambiguous and nonsensical statement. It makes about as much sense as “learning a [natural] language”. What language? Human languages are different. So are programming languages.

Japanese is not English. Python is not Forth.

The inherent bias to programming languages in the typical imperative idioms of ALGOL and FORTRAN is misleading, and also again dishonest with the supposed focus on teaching “computer science”. But more importantly, “learning to code” means nil.

This is Java (taken from here):



public class PrimeSieve {

public static void main(String[] args) {

int N = Integer.parseInt(args[0]);



// initially assume all integers are prime

boolean[] isPrime = new boolean[N + 1];

for (int i = 2; i <= N; i++) {

isPrime[i] = true;

}



// mark non-primes <= N using Sieve of Eratosthenes

for (int i = 2; i*i <= N; i++) {



// if i is prime, then mark multiples of i as nonprime

// suffices to consider mutiples i, i+1, ..., N/i

if (isPrime[i]) {

for (int j = i; i*j <= N; j++) {

isPrime[i*j] = false;

}

}

}



// count primes

int primes = 0;

for (int i = 2; i <= N; i++) {

if (isPrime[i]) primes++;

}

System.out.println("The number of primes <= " + N + " is " + primes);

}

}

This is Erlang (taken from here):

-module(primes).

-export([sieve/1]).

-include_lib("eunit/include/eunit.hrl").



sieve([]) ->

[];

sieve([H|T]) ->

List = lists:filter(fun(N) -> N rem H /= 0 end, T),

[H|sieve(List)];

sieve(N) ->

sieve(lists:seq(2,N)).

This is APL (taken from here):

(~R∊R∘.×R)/R←1↓ιR

These programs all implement the Sieve of Eratosthenes for finding prime numbers up to a given limit. Java is a famous object-oriented programming language (based on Kristen Nygaard’s definition of OOP). Erlang is a primarily functional programming language with a high focus on fault tolerance and concurrency. APL is an array-based/vector programming language.

The point is to illustrate the many different paradigms, nuances and constructs of different programming languages and that they’re not all alike. Learning to code entails far much more than typing instructions.

But speaking of typing instructions, it is apparent that the “learn to code” initiative is largely focused not on understanding and education, but like any other subject taught in a run-of-the-mill public school, on rote memorization. They rarely mention “programming”, as I already noted. It’s all about the code. About the procedures and symbols you blindly learn and type on a screen. The movement envisions to produce 9-to-5 code monkeys who can write loops and conditionals, but who do not have any passion or true understanding of their craft. Even within programming, which is only a subset of computer science, coding is not the only activity. Methodology, work environment, language theory, design patterns and logic play a large part as well. Giving kids a brief tour of a procedural language does not give them much insight into anything, with real-world software being much more complex than the lines of code. There’s build systems, version control, frameworks, libraries and many other components behind just the software development part.

In this regard, after building a workforce of automatons, the movement’s backers will have cheap and easily disposable labor at their hands. You could always retract that companies need skilled laborers to raise the bar and innovate. This is true, yet as computing grows more ubiquitous, there will also be a large need for basic workers who do what basically amounts to oil changing in the software world. The ones who innovative will largely be guided by their passion and desire to autodidact, rather than school. These people would have gotten into computer science in the first place, regardless of whether formal education explicitly teaches it or not.

Let us divulge from the technical details for a moment. When Code.org first began, it maintained an extensive page of testimonials about the importance of learning to code, in an effort to motivate and persuade. They are still available at this location.

What strikes out is how laughable the entire mosaic really is. You have politicians, athletes, musicians and business moguls all having blurbs about coding and computer science under their names. But where are the actual computer scientists and programmers? Out of about 100 quotes, I could only find 3 by legitimate computer scientists (Peter Denning, Mehran Sahami and Ed Lazowska). The amount of programmers is harder to gauge, as there are a lot of entrepreneurs who might have (or had) enough foundational knowledge to hack prototypes, but not necessarily to be serious programmers. Nonetheless, they are still a painfully small minority.

The main counterargument is that most average folk would want to see regular people do the pitching and that their message describing the beauty of computer science would reach a wider audience. To which I respond that I don’t know how much politicians and big entrepreneurs can be considered “average folk”, but that also who else could describe the beauty of computation and computer science (which it really is beautiful, I don’t deny that) better than… you know… actual computer scientists?

In fact, having celebrities actually seems to help reinforce the opposite sentiment. Computer scientists, programmers and other technologists are already stereotyped to a degree as being awkward and socially inept. By isolating them even in a campaign where their word is most relevant, you’re hardly helping with that.

So, let’s recap the optimistic dream of everyone learning to code (whatever that might entail).

Then realize that, as you would expect, most of the initiative’s partners are large proprietary software vendors. But what’s wrong with this? After all, it’s a given and it should be good to see that the big businesses care.

Not until it registers that in fact, proprietary software is completely antithetical to education. By definition. This is something RMS and others have been talking about for ages. Coding is great and all, but what use is there when the only platform available to you is a completely locked down, DRM-packed device? None. Whatever software you build is essentially under the mercy and control of the vendor. Yet this is exactly how it works in the age of smartphones and app stores.

The issue of software freedom, is likely more important than coding. Many people will accuse you of being a crackpot for this and are rather hostile towards views promoting free software, but they are more relevant now than ever in the age of mass surveillance, vendor lock-in and cloud computing. Our entire lives are heading for digitization, which means that whoever controls our computing controls our lives.

Some will object that free software is irrelevant if you’re not a programmer. This is untrue. Free software guarantees essential freedoms that ensure openness, redistribution and positive benefit to the community. Even if the user cannot program, they can make use of and support modified copies made by developers. By eschewing proprietary software, the user is taking an ethical and social stand. One first needs a good environment to code in. Relying on closed standards signifies dependence, gives power to the vendor and is morally wrong.

RMS, in his speeches, has frequently raised a scenario along these lines: Imagine a classroom where children are being taught fundamentals of computer science and imperative programming. The teacher is demonstrating a feature in a text editor program and is trying to explain it in the context of software engineering. A student raises their hand and asks “How exactly does this feature work? What does it look like, internally?”, to which the teacher has no choice to respond, but “I’m sorry, we’re not authorized to know this. The developers use a proprietary license and do not allow the source code to be examined.”

Proprietary software offers no educational value, besides reverse engineering exercises. Yet since the movement is backed by the top vendors and companies, it is probably a given that they will force their products in classes. Much like how Microsoft forced their then freshly new Java clone called C# on the University of Waterloo in 2002.

It’s probably a safe bet to assume these kids won’t be taught about the tyrannical power proprietary software holds over their lives, about GNU, the *BSD projects and other initiatives which aim to fight this.

Indeed, their tutorial resources seem to hint at this. Quite humorously, they also recommend W3Schools for learning HTML.

The movement also has a rather pronounced social justice slant. You could write it off as just them trying to empower female and minority students, but it appears they are fond of affirmative action. Disparity between the sexes is a well known issue in computing, though the movement’s take on it will probably cause more problems in the long run than it solves.

Finally, worth mentioning is that it is dubious how effective coding as a core subject will be on students in public schools. As with lots of other subjects, schoolteachers are not necessarily of high calibre, and often are most certainly not academics. They serve basic roles of merely transcribing lessons to their student audience, following a strict routine, and then preparing them for standardized testing. The compulsory schooling system is not known for providing engagement, but for being abominably dull and bureaucratic.

One could retort that it all depends on the individual teacher. To a certain degree, yes. However in large part, they must follow whatever routine is prescribed to them while minimizing deviation. Aptitude is another story. In the same way a math teacher is not necessarily a mathematician, a “computer science” teacher is not necessarily a computer scientist (or even a programmer, for that matter). Following a curriculum is hopeless, and the skills inherited from rote memorization of state-approved material will likely be mediocre.

But how could something as exciting as programming ever be dull, boring and not engaging? Surely, programming is the ultimate art. You see your code come to life right before your eyes. Except, one should not underestimate how adept compulsory schooling is sucking the life and joy out of learning. When the entire system is focused on bureaucracy and grading, it’s hard to believe that they will handle coding as idealistically as portrayed in the “learn to code” movement’s media campaign.

But, even more damagingly: what leads one to believe that children will be properly taught and be able to comprehend coding, if they lack even basic reading and writing skills? Unsurprisingly, Code.org gives large attention to the job market. But just what worth does a code monkey who cannot read natural language on a proficient level have?

It appears as though U.S. politicians and educators have been overtaken by hysteria. Failing and abysmal results in core subjects are very prevalent throughout the whole country, and it seems they’re trying to patch over their mistakes by focusing on an ever growing market: computer programmers and software developers. This is a final act of desperation. To deflect from their failures, they try to prematurely shove a new, very extensive (and admittedly popular) subject with the hopes of providing an illusory perception of advancement in the public education system.

It should come as no surprise, then, that none other than the city of Chicago, are among the first to introduce “computer science” into their curriculum. The same Chicago, the school district of which, is well known as having quite less than stellar performance. Indeed, it looks as if they’re trying to take a sprint before they can even walk.

Knowing the capacity of public schooling’s incompetence, one might not be off in thinking that coding will become the next reviled subject, up there with mathematics. Even if it isn’t reviled, it might still be considered as something elite, difficult to approach or even undesirable. Students will grow to despise or be apathetic towards coding. First impressions play a large role and frankly, if my first introduction to coding was anything remotely similar to Visual Studio and C#, I’d be driven away, too.

In the end, programming is something that is best learned through autodidacticism, or self-education. Like all great crafts, if you try to force it upon people, you only end up diluting it and its culture along with that. The software ecosystem is very well developed and fact of the matter is, anything an average user needs a solution for, there almost certainly exists a solution. In case one needs something more niche, then they will naturally stumble upon it and pick up programming, regardless of outside intervention. Programming truly does involve self-discovery.

At most, the common user might find benefit in simple things like task automation, but once again these things are trivial to pick up, especially with the abundance of simple and abstracted frameworks, on top of already high-level and dynamic programming languages.

Churning out arbitrary lines of code does not offer much insight into the software development process, as I already mentioned previously. Serious programming often turns out to be a general exercise in computing knowledge. In fact, as Jeff Atwood pointed out, it is a fallacy to assume that coding is the be-all-end-all, as the movement’s propaganda seems to insist. Code is a means to an end, but there is much more than that in getting things done, and exalting to such a high degree is deceiving.

This is not to say you can’t learn something about computer science and programming from formal education. Of course you can. But once again, what is being offered here is mere coding. Given the way the entire movement has presented themselves and the general naivete of the school districts and politicians adopting coding in the core curriculum, I am very skeptical that anything noteworthy will accomplished.

Face it. Programmers throughout the ages have owed most of their skills on being self-taught. This is unlikely to change. It’s simply how programming works. In general, laymen might find much more practical benefit from system administration (which also involves shell scripting, primarily used as a form of task automation) than plain coding.

Learning to code really isn’t an emergency, I’m afraid. There are bigger priorities, and if coding for you is one of them, you’ll know and you’ll take action. Don’t dilute this fine craft. If you are going to support compulsory programming education, then at least be aware of the caveats and don’t present things as a crisis in need of a magical rainbow solution.

How Chomsky was right.