I’ve recently had a silly discussion with a classmate, on the merits of Java. That didn’t go too in-depth, as his main argument against absolutely everything else appeared to be “Java is a real programming language”. Huh? C++ was admitted to that group, but little else. So what does that make just about every other programming language in existence? Wikipedia lists over 500 programming languages, so how many of those are any less deserving of the “programming language” title than Java or C++ or another mainstream language?
We could probably start out with an assumption that besides Java, C is also as “real” of a language as one is going to get. Why? Simply because that was repeated over and again for a long time:
For 20 years almost, people are still saying nothing serious is made with “not C ” language.
The other extreme will be HTML, but that’s not even a programming language at all. It’s here because a lot of kids are very confused. This leaves us with a very wide range for everything else.
There’s one easy target up for elimination – pseudo-code. As the name implies, it means false code, and some make a distinction that it is in fact, not real:
I find writing in a real programming language, rather than using wordy pseudo-code, to be easier.
Others have similarly tried to distinguish some languages from others, based on the linguistic cues. A popular one is casting off
anything that is a “scripting” language:
a “compiled” language gave it the distinction of being a “real programming” language instead of a “scripting” language
JavaScript gets hit a lot for having the term “script” so obviously displayed in its name, but the logic is flawed. Java’s compiled bytecode is, in fact, interpreted for execution. Scripting languages could be compiled as well – think IronRuby. JavaScript itself has been employed as a server-side programming language since 1996. It’s not just for web browsers.
Foobar2000’s blog promotes scripting with Scheme into the realm of “real”:
- - It is a real programming language with things like conditionals and loops.
- - Because it is a real programming language, I can add ways to script foobar2000 actions.
Though I think James Stroud takes the cake, while making Scheme “real” for simply being Scheme:
Look, a “real” programming language is scheme, not something trivial to understand like (the basics of) python. Scheme is hard to understand and takes a long time to get used to, so its perfect as a learning tool–to make the professors look smarter.
Weiqi Gao humorously suggests that a language is not “real” until a bunch of generically sounding books have been published. Though that doesn’t really seem applicable, if the entire language was designed for the sole purpose of a parody.
We could look at individual languages, such as LOLCODE, and determine that it was not designed for the purpose of solving problems or perform computational work – and in such a sense it will be deemed “not real” as a programming language, even if the language itself is Turing Complete.
Though any generalization seems futile. We have the languages that we do, because they are used to instruct computers to solve problems. Who is to say that the problem of slow shadows in a video game is any more real than the problem of generating web pages with dynamic content, or any more important than the problem of accurately solving complicated math equations? Each of the three is perhaps best approached by a programming language of a completely different paradigm, and yet they all remain equally real in the sense that there is a specific problem that could be solved with a properly instructed computer. Any programming language that is used to solve a real problem is, itself, very much real.
Totally agree, there’s so many factors that go into choosing a language from problem, to legacy, to in-house expertise, to external integration that ruling out whole languages on principle is just silly. Java is no more a real language than perl, ruby or cobolscript. Each has it’s pros and cons.
Reply to comment
Well, C is the mother of all languages? I think C has to have this recognition.
Reply to comment
Fortran is a real programming language. I’m not sure why… I just feel it in my gut.
Reply to comment
@TheAnand – well before C, we’ve had Assembly and B. C does seem to take most of the credit, and maybe rightfully so. Though recognition, by putting everything else below the baseline, is one in relativity.
@Patrick – reddit developers would agree
Reply to comment
If nothing else, Lisp, Fortran and Pascal all predate C.
Reply to comment
@ TheAnand
C is definitely not the mother of all languages. Here’s the History of the C language. As you can see there are a few ancestors of the C language.
If any language could really be considered the father of all languages it would be Fortran. Fortran and its variants basically spawned all major programming languages (except for Cobol and Lisp).
Wikipedia states “A programming language is an artificial language that can be used to control the behavior of a machine, particularly a computer.” In that form even LOLCode is a programming language (even though I totally disagree).
Reply to comment
Wikipedia’s definition is quite loose – an expression of a language is interpreted as data which either compiles into an application, or interpreted as instructions. A more extreme example of it would be the control of machine’s behaviour via a scanned barcode. In a large enough system, it could be possible to encode a clever hack to be scanned, though really that would be just a side-effect of the data processing.
I still think that the control of the behaviour must be with a valid purpose.
Confusing a scanner with a crafted barcode – clever hack, not a programming language.
LOLapps – funny, but not a programming language.
Getting JavaScript to organize email for you (gmail) – very much a programming language.
Reply to comment
Heh… By rights, LISP would be the ultimate, and therefore, God, of all programming languages. Just by the simple fact that it can be made into any other language, have any functionality, have any structure, edit itself, etc… Its also fast(beating C in some ways, being C’s equal in most), interpreted and compiled, and is half a century old.
But, that’d be really short sighted… But, the whole concept of a fake language confuses me… Since it was created, is it not real? Perhaps, “industrial” is the proper word? Main stream languages are ones commonly used in industry, and would make a lot more sense in the stead of “real”.
Before you know it, they’ll be calling “real” programming languages obsolete, prefering “imaginary” programming languages combined with “real” programming languages to make “complex” programming languages.
… Wow, math jokes are lame.
Reply to comment
XKCD’s List Cycles
The concept of fake programming language, as I understand it, is a “programming language” for the purposes other than programming. Such as pseudo-code — it’s code for the purpose of explaining a concept, in theory. LOLcode – it’s code, for the purpose of humour.
Reply to comment
Well, .. I am not trained programmer, but I just stick to VB.Net.. interesting insight though …
Reply to comment
Heh, I might consider arguing that VB.net is not a real programming language. It was a corporate decision to keep VB developers from complaining. C# that’s hidden behind the VB.net layer is the one solving problems
Reply to comment
Your programming language of choice does not have to be for the best programming language, but for the language that best meets your skills, needs, and BUDGET as well. I started loving Java, I was impressed by the GUI functions it provides. I was unaware how .Net makes Java GUI looks like rocket science back then. But would I choose VB .Net? It is a programming language, but it is
1- Costly
2- Platform dependent.
If I am only working for windows apps, then yes maybe. If I can’t risk paying license, then no. Java from my experience is not the best for heavy GUI apps either, and it changes a lot than my two primary java college projects now compile with no errors and run with no output! I was thinking of applying Java for the sites I’m going to build. I got into Java more and more in professional career that I realized, Java is too heavy to be used on small and sometimes medium level sites. For Large enterprises, it also requires lots of processing power and technical skills, and it’s not easy for on going daily updates as some simple changes require that you redeploy the whole application.
Some non-popular languages exist for certain tasks, and live until today and is very effective. LISP is one good example as you noted. Javascript also, as noted, now is becoming critical part of most web apps so you can’t rule that out either. Ruby have grown in adaptation that I heard Sun announced they will stop support for Java in their JVM and replace it with JRuby. So extension of Ruby is replacing a real programming language here. Happy Tony? .
Reply to comment
It’s a bit off topic, but hey — there’s Ruby mentioned! Thx Bashar.
Reply to comment
I dunno. There’s probably an very wise, comprehensive definition of a programming language out there, one that could exclude scripting and other controversial languages but don’t people still call themselves programmers for those ones? I think any language that requires a fair amount of logic is a programming language. Because that is what programming requires at the heart of it all. Yes, LOLCode included.
Reply to comment
@ia — that seems kind of contradictory. Scripting languages require a fair amount of logic just the same, so why do people keep on trying to exclude them out of the definition?
Reply to comment
One could argue that a “real” programming language is one that can standalone (i.e. doesn’t require any type of interpretation to run). In a sense, the only languages would be the ones that could be used to create an actual operating system. But then, what defines the operating system? Does that make the firmware on the computer the only real language as everything else is “interpreted” by it in the end? Hmmm, to ponder life’s great questions.
Reply to comment
I prefer to believe that the real languages are those, like said above that will solve a problem. It doesn’t matter what kind of problem as long as it can.
HTML isn’t really a programming language because it doesn’t solve anything. It’s more like making a picture with words. While PHP is processing data and solving problems in the background. Javascript is iffy, I’ve personally only used it for simple AJAX and other simple things, but I’m pretty sure it can be classed as a real langauge, just not a very versatile one.
C can’t do everything, actual C can’t run my website. It can run the interpreter that runs my website, but it isn’t actually the code that was coded specifically for that website. (I’m just assuming that the PHP compiler was done in C-plus-plus, personally I don’t know)
Reply to comment
JavaScript is very versatile. Case in point — Super Mario in 14kB Javascript. And C can very well run websites. What do you suppose was serving dynamic content before 1995?
Reply to comment
Actually, as a prototype-based object-oriented language, rather than a class-based OO language like Java or C-plus-plus, JavaScript is actually more versatile than Java or C-plus-plus. The reason no-one (as in 99% of people who use JS everyday) actually considers it to be real is because a) as mentioned above, it has ’script’ in it’s name, waaay lowering it’s street cred, and b) like Clintonio said, people mainly use it to patch up HTML’s complete unsuitability for modern web-apps, i.e. people rarely use it to write proper algorithms, instead using it for little gimmicks and relying on server-side PHP, JSP, C-plus-plus et cetera for the “real” programming.
So, Tony, where does AppML (Application Markup Language) fall in here? It’s like HTML, RTF, or another “fake” programming language, except it’s used to make “real” applications. So is it a real programming language or not?
FYI you do realize that the textbook answer is that HTML is a programming language, right? Technically it’s a declarative programming language, whereas JS, Java, C, C-plus-plus, Pascal, BASIC, Lisp, Self, PHP, FORTRAN, Brainf*ck et cetera are imperative programming languages. So AppML is a declarative programming language used to make “real” applications like you would with C or JavaScript.
Reply to comment
Interesting, I never knew. I’m rather new to this stuff, only within a couple of years. But I definately still believe that JS and interpreted languages are real languages, they’re just executed differently, they often still act exactly like a real language.
Reply to comment
@Han — I guess a better known example of AppML would be ColdFusion. It’s kind of like a programming language in disguise — it looks like markup on the outside, but there’s actual logic flow inside those tags.
Despite what some “textbook” might say, I don’t think HTML is a declarative programming language. It does not “describes a problem”; it describes the text document.
Reply to comment
Actually, I think it does describe a problem. HTML markup describes the problem of how to structure a document. Note that it’s up to the browsers written in an imperative programming language, though, to figure out how to represent the structure of the document so that it is meaningful to the user, either visually, vocally, or telepathically.
CSS and JavaScript, then serve as companions to HTML: CSS describes more specifically how to represent the document, such as how to render the document if it is represented visually, and JavaScript serves as a backup imperative language in case HTML and CSS are inadequate to fully describe the dynamics of the web page.
Reply to comment
That’s one way to look at it. Also, I suppose that HTML documents, and more specifically hyperlink tags, could be used to describe a finite state machine; which is turn opens the possibility of a logic flow. Though I think that’s quite a bit of a stretch. If we gonna play the “well actually…” game, then a Turing machine can be constructed out of (a lot of) rail tracks and a train.
It seems that we now need to establish just what kind of problems are valid (that is, a Roomba is not a programming language, even though it solves the problem of floors being occupied by dust).
Reply to comment
Um, as a declarative language, I don’t think Turing-completeness even applies to HTML. That’s for imperative languages, to the best of my knowledge.
Also, although I don’t actually know, I would be very surprised if Roomba wasn’t programmed in an imperative programming language, probably C though it could easily be Self or something.
Reply to comment
You are correct, though my point was to stretch the limitations for the purposes of this discussion.
Roomba’s hardware is obviously instructed by an imperative language. If it’s anything like iRobot Create Kit, then the original is also likely to have been made in C or C-plus-plus. Though I was referring to the robot itself, as a unit, not counting as a programming language of its own. It solves a problem (the programming language inside solves the problem of moving the hardware), but I feel that is an entirely different domain.
Reply to comment
I understand what you’re saying, and you’re right, of course, but I didn’t understand how that relates to my perspective on HTML as a declarative language. To the best of my understanding declarative programming does not involve logic flow like in an algorithm, but is instead about logical relationships like in a mathematical (or scientific, for that matter) theory.
OK, HTML documents in general are a tad difficult to compare with mathematical theories, although I can definitely think of quite a few exceptions right off the top of my head. But they both use a very specific, very precise, syntactically watertight, computer-comprehensible language to describe what they are, without giving any at all specific or precise algorithm for implementation.
As for what problem theories describe, well apart from how to give students headaches, which they are quite adept at, theories describe the problem of how relationships between various axioms (in math) or fundamental laws of nature (in science) give rise to a certain mathematical results (math) or observable phenomenon (science). It’s typically up to the computer or very confused student to figure out how to represent it so that it makes sense to itself, where “making sense” means being able to analyze and draw conclusions from the theory (the computer of course would require very sophisticated imperative programming in order to do so, and the student doesn’t stand a chance anyway).
“well actually” Round 3: Han’s turn
Well actually, Roomba’s mechanical parts can be seen as just a set of physical I/O API’s for whatever imperative programming is built-in to the circuitry.
Reply to comment
FYI (off topic): Your website’s commenting system has a bug in the JavaScript (well I mean, it could be CSS, but anyways it’s not a server-side problem). You know where it says “Welcome back (Change)” just above the comment box if you’ve commented before? Well in Opera 9.27 (Mac OS X 10.4.11, but that shouldn’t make a difference), if you click on Change there’s a nice smooth animation of the comment box sliding away and the user info textboxes fading in (Scriptaculous, huh? Nice), and then the comment box snaps back to it’s original position and the textboxes are displayed overlaid above the comment box and text inside. Quite unsightly.
BTW, if it turns out it isn’t your fault, it’s Scriptaculous’s problem, do consider jQuery.
Reply to comment
This may seem like a ridiculous question, but why the need for so many programming languages in the first place. I am learning php and if that became obsolete I would be pretty preturbed! LOL
Reply to comment
@Han — I think this calls for a new post to be written. It’s in my todo list.
Also thx for spotting that bug. I’ve been pretty frustrated with this theme, and Wordpress in general lately. My summer project will be to write my own blogging engine.
@Antonio — because at some point COBOL and Fortran were dominating the industry. I can almost guarantee that PHP will become obsolete in our lifetime.
Reply to comment
My feeling would be that it’s not a programming language if it’s not designed to let a programmer solve a problem. By that definition, everything from Asm, B, C( ), Java, Fortran and so on to HTML, JS, and XML are “programming languages”, even if some are declarative data-storage while others are procedural (functional? logical?).
I think we can probably all agree that Befunge isn’t a real programming language.
Reply to comment
When I start looking at what a real language is I find the example of malbolge (http://en.wikipedia.org/wiki/Malbolge) somewhat interesting.
It’s a programming language designed for utter incomprehensibility. The best way to some up how crazy it is? after it was introduced it was *two years* before anyone got a working hello world program. They didn’t actually write it. It was generated using a beam search.
Eventually, Malbolge was “solved” (some details are on the wikipedia page mentioned above)
What Malbolge gave me was a bit of an extremely wide view of a programming language. despite how absolutely messed up Malbolge is/was, it is a system of rules for turning input into output. “My” definition of a programming language turned into “a fixed system of rules that given input, produces output, regardless of our understanding of the intermediate steps”.
It’s a pretty loose definition.
it means that I dont consider HTML, XML, or Latex to be “programming languages”
it does however mean that I would consider a system of pipes and valves to be a programming language, or, to stretch the point a bit, “gravity” as it takes an input (initial positions) and produces output (final positions) according to it’s own system of rules.
at least that’s my stock answer to what is a “programming language”
of course, I define “useful programming language” quite differently. (and purposely leave a few off of that list just to irritate the language zealots)
Reply to comment
Personally, I consider anything that passes instructions to the computer a programming language. Once you bring semantics into the argument things get a little convoluted.
Reply to comment
[...] there are no calculations or logic flow, just unchanging (thus “hard”) output. This shouldn’t count as programming. And even though hard code is appropriate sometimes (such as stubs in test suites), it is most [...]