I am disappointed with many of the newer languages which I earlier thought showed great promise of making programming easier, quicker, and more robust. And it boils down to one thing. Simplicity in learning. Having gone through substantial amounts of programming in C, C++, Java and Python, my quest for the “next” programming language remains unfulfilled.
Why ?
Programming should be simple. And it should be accessible. And when I mean accessible I mean people with IQ of approximately 100 should be able to write programs. I am disappointed that many of the trends seem to raise either the minimum IQ or the training time required to gain competency. And while that helps a community of the super brilliant, it does not make a substantial difference to programming in general. It remains esoteric and does not stoop to touch everybody.
What ?
So what are the features of my preferred programming language :
- JRE support: Should run on the JRE with Java interop. Thats the dominant well engineered platform that runs across all classes of desktops, servers and devices. Additional support for CLR is a bonus but not mandatory.
- Simplicity: Should be fairly simple to read, learn and understand. Python is a good example. PHP is a great example (at a simpler class of problems). C++ and Scala not good examples.
- Multi paradigm : Should support both OO and FP constructs. eg. Scala and Python. Half hearted support to functional programming as with python discouraged. Ditto with passionate support for objects with second class treatment for functions as in Java/Ruby.
- Multi core compatible : Should have good constructs for leveraging multiple cores eg. erlang, scala, clojure and many others.
- Type inferencing : (and I am a python programmer
). Good type inferencing coupled with on the fly non intrusive/disruptive compilations as with say the eclipse on the fly compiler or play framework. Three cheers for Scala. One reason I prefer type inferencing to dynamic typing is the much superior performance even while maintaining brevity and removing boilerplate. - Constructs that are natural to humans not mathematics : This is actually a sub point to Simplicity. The constructs should be consistent with the normal average non mathematically trained brains. 2 + 3 is much simpler to understand than (+ 2 3). Python rocks. Lisp / Clojure or for that matter brainfuck dont.
- Closures and code blocks : Love ruby for this.
Is this a pipe dream ?
For the moment seems so. Do you know of a language which helps meet these requirements ?
And to be very clear (because there is a substantial risk of the same) – this is no flame bait or an opportunity to trigger language wars. It is meant to highlight two things
- There is no ideal language out there, and
- When designing languages – make them simple to learn and use. ie. for a given problem statement a good language is one which requires the minimum talent or training to solve the problem
No related posts.


Perhaps the hardest of your criteria to meet would be maintaining Simplicity and supporting multi paradigms, concurrently. There are arguably ‘simple’ implementations of each of OO and FP, but drawing the two together invariably leaves the developer with some pretty big, if powerful choices. Unless it is somehow very obvious when to use the elements of each (OO, FP) then the choices will I think always overwhelm the fledgling programmer. I really like Scala, but I feel this is its greatest obstacle to adoption.
Ross,
Actually python does a pretty decent job of maintaining simplicity and multiple paradigms. Granted it supports FP constructs only partially (eg. no immutability). And while I find some of the elements quirky I haven’t ever perceived it as anywhere close to overwhelming.
Having said that there is no type inferencing or JRE support – which in my mind are minor irritants but the GIL and its resultant constraints make it harder to work for multi core at least in the current CPython implementation.
Take a look at Fanstom: http://fantom.org/
The idea behind Jython in Python on the JVM, which would meet many of your criteria?
If by “natural” you mean “instinctive,” there’s nothing natural about ordering symbols according to certain rules to represent abstract concepts and operations. Syntactical details such as the placement of operators or parentheses only seem “natural” to you because that’s what you’re used to. As the authors of The Joy of Clojure put it:
By natural I mean what people are used to. As an analogy people have attempted to put in place better keyboard layouts, allegedly far superior to the traditional QWERTY. These layouts probably have been far better – but QWERTY still rules. Changing habits is hard. And if you have to change habits over a large number of people, not every one of them deeply inspired to want to change them – its so much harder.
This is no reflection on the quality of the new keyboard layouts. Just a reflection on the fact that a large number of existing people are habitually used to supposedly flawed QWERTY layout, something thats just hard to wish away.
Would love to see what your opinion of Perl?
JavaScript will fit more and more of your points.