The Wasteful Legacy of Programming as Language
A few years ago I visited a friend who is a graduate student in linguistics. After some time he asked me if I was aware of the work by Chomsky on formal languages. I told him that yes, Chomsky work was a basis for much of the developments in theoretical computer science. More than that, I was glad to learn that there was something technical that I could share and discuss with other people in linguistics.
At the time I found this was just a great coincidence. It was only recently, though, that I started to think seriously about the implications of the idea that much of our understanding of computer programming stated with the study of human languages.
Language and Computers

One of the early ambitions in computer science was to understand, or at least be able to parse, human language. In order to do this, computer scientists explored models of how language worked in general. Based on these models, researchers figured out that we could classify languages in terms of complexity. Moreover, many computer languages could be entirely contained in some of the lower levels of this hierarchy, which is called the Chomsky hierarchy.
This was an incredible discovery for scientists working on compilers and interpreters, because its developments resulted in the necessary tools to efficiently parse languages. After that, instead of creating ad hoc parsers, which was the norm in the early period, one could apply a rigorous method to find a parser for a particular programming language.
The insidious side of this success, however, is that it completely changed the perceptions computer scientists have of how to give instructions to computers. We now have a frame of mind in which the important thing in the process of instructing a computer is to define a suitable language – and the more powerful the language the better.
The problem of this line of reasoning is that it creates a number of hurdles that are completely artificial, as we will soon discuss. For example, it makes us believe that there is something fundamentally different between programming languages, when in fact it doesn’t.
Computer Languages versus Human Languages
When we look at human languages, it does make sense that different languages exist. After all, language is a cultural concept. For example, as a speaker of two languages, it is very clear to me that speaking in English conveys different meaning and context, compared to things spoken in my mother language. There are a set of ideas that are better expressed in English, as well as there is a huge subset of thoughts that I wouldn’t be able to express well in anything other than my primary language.
As human beings, we want language to be inexact and able to convey several meanings. Contrary to the popular belief among mathematicians and engineers, this is a good feature of human languages, because it mimics the way we think. The truth about the study of language is that we are dealing with the whole culture of a community, not just with a stream of tokens that convey meaning.
The opposite, however, is true for computer languages. While we might strongly favor the use of human-like language, computers don’t really care if we use a bracket of a “begin” symbol to start a block of commands. Which means that we are, by introducing the subtleties of human language, complicating the task of how to instruct computers. Instead, we could just avoid the subtle differences in programming language and use a simple, uniform representation.
Unnecessary Work
The other problem with using current programming languages is that they create a lot of unnecessary work. Computer scientists have throughout the years devised baroque languages such as C++ and Java in an effort to provide programming instructions in a powerful way. It turns out, however, that the whole steps of writing a sequence of tokens, parsing that stream, and checking the syntax is unnecessary.
Everything in a computer program can be interpreted as a tree of expressions. If you’re encoding that tree in a block generated by a bracketed expression or a for loop it is not important for the computer. There is no reason why we cannot manipulate the syntax tree directly, for example, using a tree model on the screen, instead of parsing tokens used to recreate the tree every single time.
As a result, the use of a language is unnecessary in both sides: computers don’t care where the stream of bits is coming from. It could be coming from a direct binary representation or from a Java program with all variables in German.
Human beings, on the other hand, don’t necessarily need to use the language either. Although it may look like a useful feature, the existence of a language implies the manual labor of keeping a textual representation, as well as the algorithmic work of translating that representation back into a tree of expressions. The point is that, for all we care, we could just as well be moving boxes around the screen to represent variables — there is no necessity to create a textual document representing a program.
Divide and Conquer
Still, the other issue with programming languages is that it tends to divide programmers into artificial categories, one for each language or even flavor of a language. For example the only difference between a Java programmer and a C# programmer is that they use somewhat different keywords and have to program against a different run time library. The only reason C# and Java programmers think of themselves as different is that they use the concept of language to define themselves.
Being more polemic, the only difference between a C programmer and a Lisp programmer is in what their languages force them to do. A C programmer is forced by its language to write pointer-related code. While a Lisp programmer is forced to think in terms of lists of expressions (even when they’re using other data structures).
A language-less programming system, on the other hand, would avoid this kind of issue altogether by providing only the means to do work, without forcing programmers to use a pre-defined way of thinking. Whatever the form used to interact with the program, a language-less system doesn’t care if parts of the program are shaped as s-expressions or C blocks: it just combine them as needed to create a program.
In a program written in this way, using garbage collection is just a matter of plugging the right run time support, which you could get along with the system or you could buy from a third party. Instead, we erroneously consider garbage collection as a fundamental attribute of the language in use. As another example, in a language agnostic system we would would be able to create and call closures by just adding a simple module to the system, not by devising yet another language that supports closures as a first class citizen.
But the advantages don’t stop there. Without the need for a language, it also disappears the need for a compiler. Everything is such a system is already parsed and ready to use. When we combine pieces of code they already know how to glue themselves to each other, so there is no need for a linker either.
A system would regenerate a new executable in a fraction of a second, instead of going through the painful and wasteful process of language interpretation, code generation, linking. For example, what exactly is the need to recompile an entire file when we change only a single character? In a traditional language, that is entirely necessary, because you could be modifying the token “blass” to “class”, which changes entirely the meaning of the whole file. In a language-less system, this could never happen, because each transformation is related to the existing syntax tree, which is already stored in the system. Therefore, a single change like this can only have local effect in the program.
Why Such a System Doesn’t Exist?
There are several reasons, but the least important of them is technology. We have graphical capabilities in any modern desktop computer that are beyond what is necessary to implement the visualization features for such a programming environment. The main difficulty separating us from that goal is the experience we already have as programmers.
Each one of us have been trained to use textual languages as the main way of interact with computers. We have learned to use associated tools, such as grep and make, that are imperfect but that give good results if you are disciplined.
Moreover, it is satisfying to use the huge amount of code available with the existing technologies. Everyone of us have been conditioned for many years to look at what has been done in our programming language, and even reuse the code if needed.
I think that this is the main reason why visual languages have had such a hard time to establish themselves. After using such a language for a few minutes, you immediately feel that it is so much easier to go back and write yet another program in C or Java or Python. Of course, it will always be much more productive to use a tool that you’re used to.
However, we have never been able to really improve a language-less system enough to see their advantages as compared to traditional language-based systems. I believe that there will be a big jump in programming quality the day a group of people decide to develop a true language-agnostic programming system. And when programmers in general learn that they don’t need a language to create valid code they will think that we were just crazy for using, for such a long time, a concept as wasteful as that of programming language.
Photo credit: commons.wikimedia.com
First of all I would like to say superb blog! I had a quick question in which I’d like to ask if you don’t mind.
I was interested to know how you center yourself and clear
your mind prior to writing. I have had a tough time clearing my thoughts in getting my ideas
out there. I do take pleasure in writing however it just seems like the first 10 to 15 minutes tend to be
wasted simply just trying to figure out how to begin.
Any ideas or tips? Kudos!
It’s really a great and useful piece of information. I’m happy that you
simply shared this helpful info with us. Please keep us up to date like this.
Thank you for sharing.
Excellent way of explaining, and pleasant
paragraph to obtain information concerning my presentation subject matter, which i am
going to convey in university.
I was excited to find this page. I need to to thank you
for ones time just for this wonderful read!!
I definitely loved every part of it and i also have you saved as a favorite to see new things in your website.
Great blog here! Also your site loads up fast! What web host
are you using? Can I get your affiliate link to your host?
I wish my site loaded up as fast as yours lol
Fantastic post but I was wondering if you could write a litte more on this subject?
I’d be very thankful if you could elaborate a little bit further.
Thank you!
My relatives every time say that I am killing my time here at net, except I
know I am getting know-how everyday by reading such
good posts.
Hello there! This is my first comment here so I just wanted to give a quick
shout out and tell you I genuinely enjoy reading through your articles.
Can you recommend any other blogs/websites/forums that cover the same subjects?
Thanks a lot!
Helpful information. Fortunate me I discovered
your web site unintentionally, and I’m stunned why this coincidence did not came about in advance!
I bookmarked it.
I just could not go away your website before suggesting that I really loved
the usual info a person supply on your visitors? Is gonna be again ceaselessly to check out new posts
We are a group of volunteers and starting a new scheme in our community.
Your website offered us with helpful info to work on. You’ve done a formidable job
and our entire community will be grateful to you.
I am really loving the theme/design of your site.
Do you ever run into any browser compatibility problems? A couple of my blog readers have complained about my website not working correctly in Explorer
but looks great in Opera. Do you have any solutions to help fix
this issue?
It’s actually a nice and useful piece of info. I am happy that you just shared
this helpful information with us. Please stay us up to date like this.
Thank you for sharing.
Hi there, just became alert to your blog through Google, and found
that it’s really informative. I am gonna
watch out for brussels. I will be grateful if you continue this in future.
Many people will be benefited from your writing. Cheers!
I love what you guys are usually up too. Such clever work and coverage!
Keep up the good works guys I’ve added you guys to my personal blogroll.
Thanks for another informative blog. Where else may I get that type of info written in such a perfect manner?
I’ve a challenge that I am just now running on, and I have been at the look out
for such info.
I’ve been browsing online more than 4 hours today, yet I never found any interesting article like yours.
It’s pretty worth enough for me. In my opinion, if all website owners and
bloggers made good content as you did, the internet will be much more useful than ever before.
Hello every one, here every person is sharing these
kinds of familiarity, thus it’s fastidious to read this webpage, and I used to pay a quick visit this website all the time.
I’m very happy to discover this web site. I wanted to thank you for your time for this particularly wonderful read!!
I definitely loved every part of it and i also have you saved to fav to look at
new things on your site.
I always spent my half an hour to read this web site’s
articles or reviews everyday along with a mug of coffee.
Hello my friend! I want to say that this post is awesome, nice written and come with
approximately all vital infos. I’d like to see more posts like this .
Hi there colleagues, how is all, and what you desire to say regarding this
article, in my view its genuinely amazing for me.
It is perfect time to make a few plans for the longer term and it is time to be happy.
I’ve read this publish and if I may I desire to suggest you some interesting
things or advice. Perhaps you could write next articles
regarding this article. I desire to read more things approximately
it!
Howdy! This blog post couldn’t be written much better!
Looking through this post reminds me of my previous roommate!
He constantly kept preaching about this. I most certainly will forward this article to him.
Fairly certain he’ll have a good read. Thanks for sharing!
I am truly delighted to glance at this blog posts which carries tons of useful facts, thanks for
providing these information.
Hey would you mind letting me know which web host you’re working
with? I’ve loaded your blog in 3 different
web browsers and I must say this blog loads a lot quicker then most.
Can you suggest a good hosting provider at a fair price? Thank you, I appreciate it!
I am really grateful to the owner of this website
who has shared this fantastic paragraph at here.
I think the admin of this site is really
working hard for his site, for the reason that here every data
is quality based material.
Hi there, just became aware of your blog through Google, and found that it is really informative.
I’m gonna watch out for brussels. I’ll be grateful if you continue this in future.
Many people will be benefited from your writing. Cheers!
May I just say what a comfort to uncover somebody that genuinely understands what they are talking about over the internet.
You actually understand how to bring a problem to light and make it important.
More and more people must look at this and understand
this side of your story. I was surprised that you are not more popular given that you
most certainly have the gift.
My brother recommended I might like this website. He was totally right.
This post actually made my day. You cann’t imagine
just how much time I had spent for this information!
Thanks!
Thanks for sharing your thoughts about fornoconti.co l?a ??o công an vi?t nam
c?nh báo truy quét c?m g?p. Regards
Wonderful beat ! I would like to apprentice while you amend your website,
how can i subscribe for a blog site? The account aided
me a acceptable deal. I had been a little bit acquainted of this your broadcast provided bright clear idea
You made some decent points there. I looked on the internet
for additional information about the issue and found most people will go along with your views on this site.
Good day! I know this is kinda off topic nevertheless I’d
figured I’d ask. Would you be interested in exchanging links or maybe guest writing a blog post or vice-versa?
My site discusses a lot of the same topics as yours and I feel we could greatly benefit from
each other. If you are interested feel free to shoot me an email.
I look forward to hearing from you! Fantastic blog by the way!
At this time it looks like Drupal is the
preferred blogging platform available right now.
(from what I’ve read) Is that what you’re using on your blog?
Marvelous, what a webpage it is! This website presents helpful data to us, keep it up.
I do not even know the way I ended up right here,
but I believed this post was once good. I do not realize who you’re but definitely you’re going to a well-known blogger for
those who are not already. Cheers!
Touche. Solid arguments. Keep up the amazing
effort.
What i don’t realize is actually how you are not actually a
lot more neatly-liked than you might be right now. You’re very intelligent.
You realize therefore significantly when it comes to this subject, produced me for my part believe it from numerous numerous angles.
Its like men and women are not fascinated except it is one thing to accomplish with Lady gaga!
Your personal stuffs excellent. Always handle it up!
You actually suggested it adequately.
Thanks, Excellent information.
You have made your point very effectively.!
What’s Going down i am new to this, I stumbled upon this I
have discovered It absolutely helpful and it has aided me out loads.
I’m hoping to contribute & help different users like its
aided me. Good job.
Amazing info, Many thanks.
Cheers. Numerous tips.
Thanks a lot, A good amount of facts.
You’ve made the point.
Kudos! I appreciate it!
Regards. Quite a lot of tips!