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

Similar Posts:

Similar Posts

922 Comments

  1. Hey! This is kind of off topic but I need some advice from an established blog.
    Is it tough to set up your own blog? I’m not very techincal but I can figure
    things out pretty quick. I’m thinking about making my own but I’m not sure where to start.

    Do you have any points or suggestions? Cheers

  2. We absolutely love your blog and find many of your post’s
    to be just what I’m looking for. Would you offer guest writers to write content for you?
    I wouldn’t mind writing a post or elaborating on a few of the subjects you write regarding here.
    Again, awesome website!

  3. After looking at a number of the blog articles on your site, I truly like your way of writing a blog.
    I book marked it to my bookmark webpage list and will be checking back in the near future.

    Please visit my website too and tell me what you think.

  4. Ahaa, its pleasant dialogue concerning this piece of writing here at this website, I have read all that, so at this time
    me also commenting here.

  5. Undeniably believe that which you said. Your favorite reason appeared
    to be on the net the simplest thing to be aware of. I say to you,
    I certainly get annoyed while people consider worries that they just do not know about.
    You managed to hit the nail upon the top and also defined out the whole thing without having side-effects , people could take a signal.
    Will likely be back to get more. Thanks

  6. Hi there would you mind sharing which blog platform you’re using?
    I’m looking to start my own blog soon but I’m having a tough time deciding between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your layout seems different then most blogs and I’m
    looking for something completely unique.
    P.S Apologies for getting off-topic but I had to ask!

  7. Hey! Would you mind if I share your blog with my
    myspace group? There’s a lot of folks that I think would
    really appreciate your content. Please let me know.
    Cheers

  8. naturally like your website however you need to check the spelling on quite a few of your
    posts. Many of them are rife with spelling issues
    and I to find it very troublesome to inform
    the reality then again I’ll definitely come back again.

  9. I blog often and I really thank you for your information. The article
    has really peaked my interest. I’m going to bookmark your site and
    keep checking for new details about once per week.
    I opted in for your Feed as well.

  10. Please let me know if you’re looking for a author for your blog.

    You have some really good articles and I think I would be
    a good asset. If you ever want to take some of the load off,
    I’d absolutely love to write some articles for
    your blog in exchange for a link back to mine. Please send me an email if interested.
    Kudos!

  11. It’s a pity you don’t have a donate button! I’d without a doubt donate
    to this superb blog! I guess for now i’ll settle for bookmarking and adding your RSS feed to my Google account.
    I look forward to brand new updates and will talk about this blog with my Facebook
    group. Talk soon!

  12. I’m not that much of a online reader to be honest but your blogs really
    nice, keep it up! I’ll go ahead and bookmark your
    website to come back later on. Cheers

  13. Hi there! This blog post couldn’t be written any better!

    Going through this post reminds me of my previous roommate!

    He always kept preaching about this. I’ll forward this article to
    him. Pretty sure he’ll have a good read. Many thanks for sharing!

  14. Pretty nice post. I just stumbled upon your weblog and wanted
    to say that I’ve truly enjoyed surfing around your blog posts.

    In any case I will be subscribing to your rss feed and I hope you write
    again very soon!

  15. It is actually a nice and helpful piece of info.
    I’m happy that you shared this useful info with us. Please stay us informed like this.

    Thank you for sharing.

  16. Its like you read my mind! You appear to know a
    lot about this, like you wrote the book in it or something.
    I think that you can do with a few pics to drive the message home a little bit,
    but instead of that, this is magnificent blog.
    A great read. I’ll definitely be back.

  17. Hello there! This is kind of off topic but I need
    some advice from an established blog. Is it hard to set up your own blog?
    I’m not very techincal but I can figure things out pretty quick.
    I’m thinking about setting up my own but I’m not sure where to
    start. Do you have any ideas or suggestions? With thanks

  18. I do believe all of the ideas you’ve introduced in your post.
    They’re very convincing and can definitely work.
    Still, the posts are very quick for novices.
    May just you please prolong them a little from subsequent time?
    Thank you for the post.

  19. I loved as much as you’ll receive carried out right here.
    The sketch is attractive, your authored material
    stylish. nonetheless, you command get bought an edginess over that you wish
    be delivering the following. unwell unquestionably come more formerly again as exactly the same nearly very often inside case you
    shield this hike.

  20. Ahaa, its good discussion concerning this paragraph
    at this place at this webpage, I have read all that, so
    at this time me also commenting at this place.

  21. Magnificent items from you, man. I have take note your stuff previous to and you are simply extremely great.
    I really like what you have obtained here, really like what you’re stating and the best way wherein you assert it.
    You are making it entertaining and you still care for to stay
    it smart. I can’t wait to learn far more from you.
    That is really a tremendous web site.

  22. Hi, i read your blog occasionally and i own a similar one and i was
    just curious if you get a lot of spam feedback?
    If so how do you stop it, any plugin or anything you can recommend?
    I get so much lately it’s driving me crazy so any
    assistance is very much appreciated.

  23. Hey I am so grateful I found your web site, I really found you by
    mistake, while I was looking on Google for something else, Nonetheless I am here
    now and would just like to say cheers for a remarkable post
    and a all round interesting blog (I also love the theme/design), I don’t have time to go through it all at
    the minute but I have book-marked it and also added in your RSS feeds, so when I
    have time I will be back to read a lot more,
    Please do keep up the superb job.

  24. you are truly a good webmaster. The website loading pace is amazing.
    It seems that you are doing any distinctive
    trick. In addition, The contents are masterpiece.

    you’ve performed a wonderful task on this topic!

  25. Very nice post. I simply stumbled upon your blog and wished to say that I’ve truly enjoyed browsing your blog posts.
    In any case I will be subscribing on your feed and I am hoping you write
    once more very soon!

  26. Howdy just wanted to give you a quick heads up. The words in your article seem to be running off the
    screen in Firefox. I’m not sure if this is a formatting issue or something to do with web browser compatibility but I thought I’d post to let you know.

    The design and style look great though! Hope you get the problem fixed
    soon. Thanks

  27. I loved as much as you’ll receive carried out right here.
    The sketch is tasteful, your authored material stylish.
    nonetheless, you command get bought an shakiness over that
    you wish be delivering the following. unwell unquestionably come more formerly again as exactly the same nearly a lot often inside case you shield this hike.

  28. Hey there! This is my first visit to your blog!
    We are a team of volunteers and starting a new initiative in a community in the same niche.
    Your blog provided us valuable information to work on. You
    have done a wonderful job!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.