Friday, March 28, 2014

Why So Many Programming Languages

A post I wrote some time ago bemoaning the lack of new operating systems has been the most frequently viewed post of all time on this blog. Today I’m posting some thoughts about the opposite issue. We have an abundance, perhaps an over abundance, of programming languages. It seems like there is a new one coming out all the time.

Look at just block or drag and drop programming languages (Programming With Blocks is the second most frequently read of my blog posts) for a sample. Go Gopher designed by Renee FrenchAlso some big companies have been working on other programming languages.

Google has been working on the Go programming language. (The Go Gopher logo is a cute one)

Facebook just announced the Hack imageprogramming language which they have apparently been using to develop Facebook’s web platform.

Of course there are also many languages that have been around for a while that are constantly being improved (or at least having features added) such as Java and C#. So what is going on?

Part of what is going on is that we are discovering/creating new sorts of programming. Programming for a smart phone (App Inventor, TouchDevelop) is different from programming for the web which is very different for creating old-fashioned batch programming on mainframes (anyone else remember COBOL?).

And there are new paradigms (or at least increased importance of those paradigms) such as parallel processing (which used to be almost exclusively FORTRAN with extensions and is now often functional programming languages like F#). Also computer scientists are coming up with new programming ideas such as anonymous classes. Often these things do not fit easily into existing languages. Other times they do but require big changes to the language. Some of us remember how much change came with Visual Basic .NET compared to the older Visual Basic 6.0.

With new power comes new complexity though. The languages that professional developers use become harder and harder to use for training beginner programmers. (I recommend Programming Languages Are the Most Powerful, and Least Usable and Learnable User Interfaces by Mark Guzdial on the Communications of the ACM blog on that issue.)

The languages built for beginners tend to be more usable and in fact that is a goal in creating them. What they gain in simplicity they give up in power and full modern functionality. The gap between beginner languages and professional languages is growing over time.

I was reminded recently that the BASIC programming language is fifty years old this year. A version of BASIC was the first language I taught myself. Knowing FORTRAN made it easy even though the two were very different. After graduation I used BASIC-PLUS to write professional software for business applications. I didn’t really have to pick up a lot more in the way of language features and functions because there were not many that I wasn’t able to easily learn as a beginner.

Today many people (teachers often more than students) find the professional development tools (IDEs like Visual Studio or Eclipse) so complex that even though they could probably learn small subsets of a language the IDE adds more to the learning curve. This in part drives the interest in easier to use tools (think BlueJ or Small Basic) or easier languages (block languages or increasingly Python) for teaching purposes. I return to the gap between those tools and languages and professional ones as a stumbling block that remains.

Companies have little incentive to create either beginner languages or a smooth path between beginner languages and professional ones. There are simple languages coming from companies (Small Basic and TouchDevelop are two that come to mind from Microsoft). Small Basic started as one developers side project and the company came to adopt it – mostly. TouchDevelop is a largely a research project. And research is why universities develop their beginner languages. Research is a good reason to develop a language or a tool. I worry what happens when/if the researchers move on to other projects, lose funding or retire.

Change is the big constant in computer science and computer science education though so I guess when things go away we’ll move on to new tools. But there are times I wish things would just stop changing for a while.


Garth said...

I think a big problem is the requirements for a teaching language and a professional language are so different. Small Basic will never be a professional language but it is an outstanding beginner teaching language. What the teacher needs and what the professional needs are are a long way apart. We also have to look at the skill level of the users. Most programming teachers seem to have learned programming on-the-fly while teaching other subjects as well. They try to know enough to survive in the classroom. The pro is making mortgage payments and hopefully this is their primary job. Usually there is some strong programming education background. Teaching languages and IDEs have to be simple. The average teacher rarely has time to learn anything fancy.

shoran said...

great post.. and Garth, you nailed it. I seem to race from learning mode to teaching mode, and constantly porting everything into a large model. The key for me is making sure it fits into what my kids can take in