Is learning how to program like learning a foreign language? Well, it’s a definite “yes and no” from me. I think many people oversimplify this. And then they say that their programmer friends think the same way to ‘prove the point’. Mostly I bite back the question of how many ‘real languages’ the programmer friends have learned or even learned to a native-like level. Because I think that there are some quite important differences.
Since I just read this brilliant article The Ancient Case Against Programming “Languages”
by Patrick J. Burns on Eidolon (Apr 24, 2017), I thought I could contribute some of my thoughts on the topic as well. They stem less from the interest in not losing funding for second language education, but rather from some of my own experiences in “second language programming education” or whatever one might call it – the act of learning programming (in your 20ies at earliest) after having learned multiple natural languages as a Humanist.
Elegant code reads like a human language
Of course, some elements in programming are like learning a real language. For instance, good code should ‘read’ like spoken language. If it sounds too ‘unnatural’, something’s wrong with your code. Or, at least, it’s not very elegant. Elegant code reads like a human language. Ok. But this is only at the surface. To a human. Not to the machine beneath it. After all, in the end the thing about programming is that it’s not a natural language. The ‘natural language looking part’ is only the face your code shows to you as a human. And it is a common opinion amongst programmers that you can’t write good code without understanding the machine. Well, maybe in web programming you can get away with it. But for anything and everything else, you don’t actually.
“It’s like learning a natural language in the way that you need to use it.”
Some people say “It’s like learning a natural language in the way that you need to use it. You can’t learn it theoretically.” Ok, agreed. In that respect, yes. You need a good reason for wanting to communicate and use the language (and actually end up doing it), if you ever want to get good. But this is true of any skill. Of course, you need practice. So is this really a criterion valid for the comparison between learning programming and learning a natural language? They’re both skills. And I think in this case, it’s more about both being a skill to be learned than the ‘language part’ which is their commonality.
A human language requires skills a computer language doesn’t and the other way round
In this discussion, it often happens that people mix up the general skill of programming and the programming language. Like I have mentioned multiple times before.
But the point is that, in my opinion, it’s the ‘algorithmic thinking’ and the specific skill in programming which is difficult with learning to program. The complexity doesn’t come from the language. After all, compared to a human language, computer languages are blatantly simplicistic. The difficult part is understanding algorithmic thinking, algorithms, data structures, having a genereal knowledge of how things work behind the scenes. This skill is not required in human language, I think. You can master you mother tongue (and a foreign language too, by the way) without ever looking up the grammar. You get a feeling for it. When have you ever mastered a (sufficiently complex) function from a library without looking up its arguments?!
No listening or spoken part about programming – communication functions differently
You only read programming languages. There is no spoken or listening part. This makes for a huge difference since this is the part lots of people have difficulty with, especially in attaining native-like level. Getting rid of accents is a never-ending endeavour. What does this compare to in programming?
You never stop learning a living language
Also, with a human language, you can never fully master it. Which is possible for a programming language, I would say. Of course, there always is room for improvement in general problem solving skills. But, for example, John Sonmez mentions in his book The Complete Software Developer’s Career Guide that after a solid amount of time of being a good full-time programmer, you do reach a ‘glass ceiling’ where he says that, essentially, all who have reached this point are virtually at the same skill level. This suggests to me that a natural language is more complex than programming even with the whole other skill set involved (other than the language itself which is quite obviously less complex). But of course in programming, you can get into many surrounding fields or topics which make sure it doesn’t get boring. Yet here, I really can’t see how natural languages and computer langauges are very much alike.
They are similar, however, in the way that they constantly evolve and you need to learn the new stuff regularly if you want to keep up. This development is maybe even a little bit faster and more challenging with programming languages.
It’s both easier and harder
In programming, you (can) get away with very little vocabulary and grammar. Bad style still compiles most times whereas in real-world situations, really bad style might cause you to not be understood by fellow humans. While it’s noted, of course, that humans usually try to interpret your utterings in a way to understand you when a compiler will just stop and complain something’s wrong. Hopefully with a helpful error message attached.
When judging people’s skills, always take into account (and don’t underestimate) the amount of hours they’ve invested getting to their current level
I feel that it’s quite common when talking about skills that we want to identify some people as geniuses. While I don’t say that there are no geniuses, my experience shows that you need to break down the information very carefully before you judge someone a genius. There are a lot less geniuses around than people want to make you think, especially in the land of Academica where everybody like to think of themselves as a genius. A genius is someone who gets very good at multiple (!) very different skills with hardly any effort. This is, as far as I remember, a common (scientific) definition of highly intelligent people. Yet in everyday talk, we often assume high IQs in people who are extremly good in their field. But acutally, your general intelligence only gets proven by the ability of easily reaching this level of competence, very fast, in practically any given field (or at least multiple). Often, people hide the fact that they actually put in a lot of effort.
If somebody has spent 10x the hours you spent to learn something and is a bit better than you, is this really a sign for a genius? For perseverence and discipline maybe, but putting in more time and thus ending up being better is not a sign of extraordinary talent. By which I don’t want to minimize anything, I just think we should abstain from jumping to conclusions and generate an inflation of geniuses along the way. Because this actually destrocys what ‘excellence’ means: It’s the one who stands out from the crowd. Yes, the one. There can only be one best at anything. Excellence initiatives therefore really are quite a ridiculous concept, operating on the assumption you could have armies of excellent people. Not in the strict sense of the word, you can’t. Rant over.
What has this got to do with the subject of this blog?
Well, it appears to me that nowadays, we often think people with good programming skills are geniuses. And maybe they are. I’m not saying they can’t be. But I think that especially us in the Humanities should pay very careful attention that we don’t over-value programming skills and under-value our own. But saying programming languages and real languages are the same skill can easily end up in “real languages are inferior” or “skills in living languages are inferior to programming skills”. So I think it’s important to keep the distinction. After all, to a real programmer who understands the machine, it will be quite clear that, in fact, a programming language is really not like a natural language at all.
While this may appear to be simply splitting hairs over the word “language,” I would point out that the stakes over this distinction in educational policy are high. These policies, founded on the false equivalency that “(natural) language = (programming) language,” could result in reduced funding for secondary language programs and further chipping away at their already tenuous curricular footholds. Under this specious rhetoric of substitution, coding courses would be built on time, money, and students siphoned from traditional language programs. This is exactly against the spirit of the trivium. Grammar and logic are not mutually exclusive, but mutually beneficial. (Burns on Eidolon)
Another problem this lack of distinction might entail is, as Burns stresses, the potential loss of funding for language education, with argumentations along the lines of “learning programming and learning natural languages teach the same skill” which is absolutely not true. But in our tech-loving world today, I think there is a real danger of something like this happening in the future.
The term has clear roots in the the formal languages of mathematically minded logicians from Leibniz to Frege. Yet, in the earliest stages of what we would now call computer science, these instructions were referred to by a matrix of words such as calculus, system, assembly, scheme, plan, formula, and, sure enough, code. “Machine language” appears early, but widespread adoption of the word would take time. Certainly, by 1959, the development of COBOL, or Common Business-oriented Language by the Committee on Data Systems Languages (note the plural) suggests that this was the default term. The exact process of its popularization is difficult to trace. Noam Chomsky’s algorithmic “descriptions of language” clearly exerted influence, but it may also have been spurred on by Grace Hopper’s introduction of English keywords and syntax to computer programming as she sought to replace math-heavy commands. Hopper’s instincts were correct and coding has moved increasingly towards human-readable “languages.” ALGOL, SNOBOL, SQL, Tcl, HTML, and perhaps Perl— they all hide the victory of “language” in their acronymic ells, and it is this victory that has given policymakers license to exploit semantic slippage for their own curricular ends. (Burns on Eidolon)
Humanists’ special talent for living languages?
Another thing I’ve come to observe when teaching which is maybe a relief to Humanists trying to learn programming even though it’s a slow process for them. My friend the Noob always calls it ‘an adventure’. Which is a better way of putting it, I think. Learning something new is beautiful. Even when it hurts at times. So back to the argument:
Sometimes in my DH classes, I teach those brilliant programmers who are in their very early semesters and I’m awestruck. Until I hear them speak English that is. Then I’m awestruck too, but in a bad way. I often see this with people who went to Austrian HTL (Höhere Technische Lehranstalt). They leave this institution with an impressive knowledge in technology; if they were good students. So good, in fact, that I’m usually quite blown away as a self-taught programming Humanist.
But then I observe that the Humanist students who seemed quite untalented with programming are really good at English. And then I remember that learning a living language to a certain level of mastery just takes years. These are years they did not invest in learning how to program. But the programmer did. Yet they often aren’t as good with living language in general (punctuation, grammar, spelling, etc – let alone foreign languages). Many have difficulty expressing themselves in ways which serve to communicate with humans. Of course, there are exceptions. But the rule fits quite well for most. And this suggests to me, very strongly so, that programming and natural languages are in fact very different.
Also, another comforting thought for Humanists. Yes, I know it’s hard to acquire programming skills if you’ve never done anything of the like before you were 20 (or even older). And doing so beside your real work in the form of life-long learning. It’s just not the same thing as having all the time in the world to intensively learn a new skill at school. Learning completely new skills just gets more difficult with age. But you can learn new skills. Whereas it becomes less and less likely you’ll master a foreign (natural) language if you haven’t acquired one to a high level before you’re 20 where ‘language-learning window’ is still open. So this might be a consoling thought to end with 😉
So really, my point is that we should avoid subconsciously shifting our view of what ‘intelligence’ is to a completely digital and non-Humanist perspective. We should also avoid getting sucked into the idea that all programmers are geniuses or intellectually superior (thanks to popculture for that). Not at all to begrudge them the success but because #HumanitiesMatter too 😉 And also, if you’re feeling bad about yourself compared to a programmer, be sure to check if they still look as genius-y as they would like when you go check for certain flaws. So if you’re a Humanist and can’t program – don’t let people tell you you don’t have valuable skills.
I would be happy to hear your opinion on this matter,
John Sonmez, The Complete Software Developer’s Career Guide, 2017.
Buy me coffee!
If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!