# The Best Programming Language Ever

**URL:** <https://boards.straightdope.com/t/the-best-programming-language-ever/514212>\
**Category:** In My Humble Opinion\
**Created:** [October 18, 2009, 11:16am UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212 "2009-10-18T11:16:41Z")\
**Posts on this page:** 20\
**Page:** 4

<div class="post-metadata">

**Author:** ![Indistinguishable](https://avatars.discourse-cdn.com/v4/letter/i/90ced4/32.png) [@Indistinguishable](https://boards.straightdope.com/u/Indistinguishable)\
**Post date:** [October 19, 2009, 5:43pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/61 "2009-10-19T17:43:36Z")

</div>

> [@UncleRojelio](#):
>
> I would have said Haskell too if, after dicking with it for 20 years now, I could do anything more than “Hello World” with it.

Well, if you’ve managed to do “Hello World”, you’ve at least made it past the usual “How’s this input/output system work?” stumbling block. 🙂

(Near) 20 years is impressive; you’ve been playing with the language since it was first developed? At any rate, my usual response to people’s initial difficulties with Haskell is to blame the way things are taught, rather than the language itself. But then, of course I would say that, rarely putting myself to the test of actually attempting to teach it myself…

---

<div class="post-metadata">

**Author:** ![Indistinguishable](https://avatars.discourse-cdn.com/v4/letter/i/90ced4/32.png) [@Indistinguishable](https://boards.straightdope.com/u/Indistinguishable)\
**Post date:** [October 19, 2009, 5:46pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/62 "2009-10-19T17:46:15Z")

</div>

> [@Napier](#):
>
> The whole thing is written in goddam parentheses, which I hear good Scheme programmers learn to ignore.

It’s worth noting that C, Java, and indeed the vast majority of mainstream languages, all use parentheses for the exact same thing as Scheme does: function application [though with very slightly different syntax; in C, one writes f(x, y, z), where in Scheme one writes (f x y z)]. The only real difference is that Scheme programming typically involves a lot more nested function applications. But, this is not fundamentally a _syntactic_ issue.

> [@Napier](#):
>
> The language was originally created for generating Fibonacci sequences, and since they use this problem as a teaching example in every single book, the language is essentially fully used and exhausted by the time you finish learning it.

Just as C, and a whole class of similar programming languages, is essentially fully used and exhausted by the time you finish learning the standard teaching example of printing “Hello world!” to the screen…

---

<div class="post-metadata">

**Author:** ![Derleth](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@Derleth](https://boards.straightdope.com/u/Derleth)\
**Post date:** [October 19, 2009, 6:05pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/63 "2009-10-19T18:05:45Z")

</div>

> [@Alex\_Dubinsky](#):
>
> Well, the point is that when you invoke the command in the shell the structured data is automatically rendered human-readable.

Same as in Unix, except in Unix the data was born human-readable and doesn’t have to be converted.

> [@](#):
>
> And when you pipe that data to a different command, the program doesn’t have to be designed to understand it. (Eg, the ‘sort’ command can work with all kinds of inputs.)

So, it’s really no different from Unix, then.

---

<div class="post-metadata">

**Author:** ![Tim\_T-Bonham.net](https://avatars.discourse-cdn.com/v4/letter/t/46a35a/32.png) [@Tim\_T-Bonham.net](https://boards.straightdope.com/u/Tim_T-Bonham.net)\
**Post date:** [October 19, 2009, 9:19pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/64 "2009-10-19T21:19:14Z")

</div>

> [@rbroome](#):
>
> DNA: too hard to read! 🙂

But it’s a lot more enjoyable reproducing a DNA program than any other computer language!

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [October 19, 2009, 9:20pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/65 "2009-10-19T21:20:12Z")

</div>

> [@Derleth](#):
>
> Same as in Unix, except in Unix the data was born human-readable and doesn’t have to be converted.
> 
> So, it’s really no different from Unix, then.

It’s completely different from Unix, because constantly having to extract data from a user-formatted representation of it is a stupid task.

> [@Indistinguishable](#):
>
> It’s worth noting that C, Java, and indeed the vast majority of mainstream languages, all use parentheses for the exact same thing as Scheme does: function application [though with very slightly different syntax; in C, one writes f(x, y, z), where in Scheme one writes (f x y z).

It’s a subtle change, but f(x,y) is a lot more readable than (f x y). I don’t understand why all the greatness of Scheme can’t be kept but the syntax completely redone.

---

<div class="post-metadata">

**Author:** ![Ruminator](https://avatars.discourse-cdn.com/v4/letter/r/b9bd4f/32.png) [@Ruminator](https://boards.straightdope.com/u/Ruminator)\
**Post date:** [October 19, 2009, 9:26pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/66 "2009-10-19T21:26:04Z")

</div>

> [@t-bonham@scc.net](#):
>
> But it’s a lot more enjoyable reproducing a DNA program than any other computer language!

You mean replicating DNA …or… splitting+recombining DNA?

The first happens without involving another person.

The second requires a lab technician to get a frozen sperm sample and implant it into an egg in a dish. Looks more tedious rather than enjoyable work even with today’s fancy microscopes.

---

<div class="post-metadata">

**Author:** ![Tim\_T-Bonham.net](https://avatars.discourse-cdn.com/v4/letter/t/46a35a/32.png) [@Tim\_T-Bonham.net](https://boards.straightdope.com/u/Tim_T-Bonham.net)\
**Post date:** [October 19, 2009, 9:36pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/67 "2009-10-19T21:36:31Z")

</div>

> [@Ruminator](#):
>
> The second requires a lab technician to get a frozen sperm sample and implant it into an egg in a dish. Looks more tedious rather than enjoyable work even with today’s fancy microscopes.

I’ve always felt the old-fashioned, manual way works fine (one man, one woman, dark room, candles, background music, etc.).

---

<div class="post-metadata">

**Author:** ![Sunspace](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/sunspace/32/1250_2.png) [@Sunspace](https://boards.straightdope.com/u/Sunspace)\
**Post date:** [October 19, 2009, 9:44pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/68 "2009-10-19T21:44:13Z")

</div>

The best time I ever had programming was in Labview. The Labview language, G, was easy to understand for me; I drew my progams and they matched the way I think. Then I made control panels fopr input and output.

Such a pity that the Labview system was extremely proprietary to National Instruments, and therefore very expensive. Labview didn’t accrete an ecosystem of independent users and developeers and extenders around it: there was the expense of acquiring it, and there was no real way to save ‘source code’ so that a free workalike could be constructed, so it never really made its way out of the niche of instrumentation programmimg.

---

<div class="post-metadata">

**Author:** ![Rysto](https://avatars.discourse-cdn.com/v4/letter/r/ecccb3/32.png) [@Rysto](https://boards.straightdope.com/u/Rysto)\
**Post date:** [October 19, 2009, 9:49pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/69 "2009-10-19T21:49:11Z")

</div>

> [@Nancarrow](#):
>
> Well it’s certainly powerful, but it relies too much on spaghetti code, and mixes up different levels of abstraction haphazardly. And they (soon to become we) _still_ haven’t brought out the definitive specification yet. No facility for comments either, unless you consider “ATATATATATATATATATATAT” repeated a few hundred times to be a comment.

DNA is self-documenting; it just takes a couple billion years to finish.

---

<div class="post-metadata">

**Author:** ![Mangetout](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/mangetout/32/19_2.png) [@Mangetout](https://boards.straightdope.com/u/Mangetout)\
**Post date:** [October 19, 2009, 9:57pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/70 "2009-10-19T21:57:01Z")

</div>

> [@Mr.Excellent](#):
>
> Pascal is, I think, far and away the best language for anyone _learning_ to program. Extremely clean syntax, strongly encourages good programming practices, and Borland’s old DOS-based IDEs and compilers are available for free.
> 
> I haven’t done any serious programming since high school, but I always found it far easier to pick up new concepts in Pascal than C/C++. Once I learned it in Pascal, I could do it in C.
> 
> That said, I’m sure a well-designed curriculum and a good teacher can teach introductory programming skills in any language. Still, though - Pascal will always be the one for me. 🙂
> 
> (Probably just as well I ended up going to law school, eh?)

I’m inclined to agree - Pascal has the language features that make BASIC popular (i.e. being readable like English), but structural features in common with many serious languages (explicit types, code blocks, ignored whitespace, etc)

---

<div class="post-metadata">

**Author:** ![Indistinguishable](https://avatars.discourse-cdn.com/v4/letter/i/90ced4/32.png) [@Indistinguishable](https://boards.straightdope.com/u/Indistinguishable)\
**Post date:** [October 19, 2009, 10:01pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/71 "2009-10-19T22:01:13Z")

</div>

> [@Alex\_Dubinsky](#):
>
> It’s a subtle change, but f(x,y) is a lot more readable than (f x y). I don’t understand why all the greatness of Scheme can’t be kept but the syntax completely redone.

_shrugs_. It could be, I suppose [indeed, it’s a trivial front-end you can manually place on any existing Scheme interpreter], but people grow accustomed to one syntax or another and see no need to change. Indeed, I see no need to change; I find (f x y) just as readable as f(x, y), or even moreso, in some contexts [one might just as well complain about commas as about parentheses, though, in every which case, it’s such a trifling thing to take issue with]. Of all the issues to judge a language on, this particular one is way, way down there, I think.

[Though my truest love is for a syntax in which mere juxtaposition is function application, with parentheses only necessary for explicit tupling. You can guess which language does this…]

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [October 19, 2009, 10:14pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/72 "2009-10-19T22:14:13Z")

</div>

> [@Indistinguishable](#):
>
> Of all the issues to judge a language on, this particular one is way, way down there, I think.

Absolutely not. Syntax is extremely important. User interface is extremely important. GUIs are extremely important. There’s a certain subset of people, often from academia, who completely fail to see the inherent truth of this. Those people cause all the evil in the world.

Yes, even dead kittens.

---

<div class="post-metadata">

**Author:** ![Derleth](https://avatars.discourse-cdn.com/v4/letter/d/b9e5f3/32.png) [@Derleth](https://boards.straightdope.com/u/Derleth)\
**Post date:** [October 19, 2009, 10:55pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/73 "2009-10-19T22:55:26Z")

</div>

> [@Alex\_Dubinsky](#):
>
> It’s completely different from Unix, because constantly having to extract data from a user-formatted representation of it is a stupid task.

There’s a difference between user-formatted and human-readable. However, the primary advantage of the Unix method is that binary blobs can’t be debugged: If something is going wrong upstream, text wins out because you can, _in extremis_, dump it into a text file and use a known-good editor (as opposed to a possibly-broken special-purpose inspector) to see what’s going on.

> [@](#):
>
> It’s a subtle change, but f(x,y) is a lot more readable than (f x y).

To you, maybe. I find it’s easier to edit code that is syntactically homogeneous: My editor always knows how to indent things and can prevent me from making nearly any syntax error.

> [@](#):
>
> I don’t understand why all the greatness of Scheme can’t be kept but the syntax completely redone.

Because then macros would be a lot harder. You really can’t understand any Lisp (Scheme included) without understanding the power of being able to modify code in arbitrary ways using Lisp functions and the whole Lisp toolkit. Things like C++ templates and AspectJ are, at best, a workable imitation of some subset of what can be accomplished easily with Lisp macros.

Macros make code readable by folding both common boilerplate and complex but tedious transformations into simpler syntactic forms.

For example, it’s possible to implement your own object system without any help from the language. People do it in C every so often. However, when you have macros you can do all the tedious stuff (method dispatch, polymorphism, inheritance, etc.) once and reuse that code anywhere it’s needed.

Macros allow you to name and abstract away code that can’t be named and abstracted away into a function. Macros do to code what functions do to values.

(Oh, and they tried to do what you said. They called the result Dylan, which is a nice enough language but doesn’t have the great macro system all Lisps do.)

> [@](#):
>
> Syntax is extremely important.

I agree fully. That’s why I love Common Lisp and its macro system. (Scheme’s macro system is nice, and just as powerful in its own fashion, but it doesn’t mesh with my brain as well.)

---

<div class="post-metadata">

**Author:** ![Superfluous\_Parentheses](https://avatars.discourse-cdn.com/v4/letter/s/8edcca/32.png) [@Superfluous\_Parentheses](https://boards.straightdope.com/u/Superfluous_Parentheses)\
**Post date:** [October 19, 2009, 11:01pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/74 "2009-10-19T23:01:39Z")

</div>

> [@Alex\_Dubinsky](#):
>
> It’s a subtle change, but f(x,y) is a lot more readable than (f x y). I don’t understand why all the greatness of Scheme can’t be kept but the syntax completely redone.

It’s been done. More than a few times. People hate it.

Lisp takes some getting used to, but for me it had the exact opposite effect: I can’t stand languages that have stupid unnecessary syntax for no good reason. I’m looking at you -\> Erland end.

---

<div class="post-metadata">

**Author:** ![Indistinguishable](https://avatars.discourse-cdn.com/v4/letter/i/90ced4/32.png) [@Indistinguishable](https://boards.straightdope.com/u/Indistinguishable)\
**Post date:** [October 19, 2009, 11:21pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/75 "2009-10-19T23:21:38Z")

</div>

> [@Alex\_Dubinsky](#):
>
> Absolutely not. Syntax is extremely important. User interface is extremely important. GUIs are extremely important. There’s a certain subset of people, often from academia, who completely fail to see the inherent truth of this. Those people cause all the evil in the world.

_shrugs again_. I’m not saying syntax in general cannot be important. I’m not opposed to, or unappreciative of, syntactic sugar. I’m not even wedded down to the overwhelmingly dominant paradigm of having syntax be text-based [one could easily imagine something else being more appropriate for many purposes, as you perhaps hint at].

My position isn’t “This issue is unimportant because it’s mere syntax”. My position is that this particular syntactic issue happens to be of negligible importance, regardless of the value of other interface issues.

Perhaps code should be stored merely as some encoding of its abstract syntax tree, and then particular editors could render it in whichever fashion one prefers. [Perhaps Scheme code already is essentially such an encoding, and if you’d like to manipulate it in some syntax beyond the default, one could easily slap on a front-end to do so, just as with any other customizable component of an IDE…]. Then we could put this sort of argument to rest and spend time concentrating on the differences between programming paradigms which involve conflicts more fundamental than superficial window dressing [again, not all syntactic issues are matters I would dismiss as superficial window dressing, but this particular pair of contrasts is].

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [October 20, 2009, 7:10am UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/76 "2009-10-20T07:10:29Z")

</div>

> [@Indistinguishable](#):
>
> _shrugs again_. I’m not saying syntax in general cannot be important. I’m not opposed to, or unappreciative of, syntactic sugar. I’m not even wedded down to the overwhelmingly dominant paradigm of having syntax be text-based [one could easily imagine something else being more appropriate for many purposes, as you perhaps hint at].
> 
> My position isn’t “This issue is unimportant because it’s mere syntax”. My position is that this particular syntactic issue happens to be of negligible importance, regardless of the value of other interface issues.
> 
> Perhaps code should be stored merely as some encoding of its abstract syntax tree, and then particular editors could render it in whichever fashion one prefers. [Perhaps Scheme code already is essentially such an encoding, and if you’d like to manipulate it in some syntax beyond the default, one could easily slap on a front-end to do so, just as with any other customizable component of an IDE…]. Then we could put this sort of argument to rest and spend time concentrating on the differences between programming paradigms which involve conflicts more fundamental than superficial window dressing [again, not all syntactic issues are matters I would dismiss as superficial window dressing, but this particular pair of contrasts is].

You read my mind exactly.

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [October 20, 2009, 7:21am UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/77 "2009-10-20T07:21:00Z")

</div>

> [@Derleth](#):
>
> Because then macros would be a lot harder. You really can’t understand any Lisp (Scheme included) without understanding the power of being able to modify code in arbitrary ways using Lisp functions and the whole Lisp toolkit. Things like C++ templates and AspectJ are, at best, a workable imitation of some subset of what can be accomplished easily with Lisp macros.
> 
> Macros make code readable by folding both common boilerplate and complex but tedious transformations into simpler syntactic forms.

Boo does very advanced macros, and it doesn’t need to nest parentheses maddeningly. Imagine Python with all the capabilities you’re talking about. Perhaps there’s more rules to writing a macro than with Lisp, but you get a better result.

> [@](#):
>
> However, the primary advantage of the Unix method is that binary blobs can’t be debugged: If something is going wrong upstream, text wins out because you can, in extremis, dump it into a text file and use a known-good editor (as opposed to a possibly-broken special-purpose inspector) to see what’s going on.

CTS objects are not binary blobs. You can examine them fully (in the debugger or programatically). Debugging powershell is easier, not harder. And because it’s statically-typed, etc., throughout, you make fewer mistakes in total. For many various, obvious reasons, text-based interchange is downright primitive.

---

<div class="post-metadata">

**Author:** ![Reno\_Nevada](https://avatars.discourse-cdn.com/v4/letter/r/6f9a4e/32.png) [@Reno\_Nevada](https://boards.straightdope.com/u/Reno_Nevada)\
**Post date:** [October 20, 2009, 2:44pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/78 "2009-10-20T14:44:12Z")

</div>

> [@Sage\_Rat](#):
>
> Personally, I vote for D for all the reasons that everyone else likes C++ but minus all the reasons that people don’t like C++. You have full access to all C libraries ever written, you can do systems programming, it doesn’t block you from doing anything at all–for instance it has nearly full support for everything you could do with a preprocessor but built in to the language in a clean way–it compiles out fast (to a straight EXE), has full garbage collection, and it has the best exception handling of any language I’ve seen plus all the features you could ever want for defensive coding.

Anybody care to give me a link to information about D?

My choice, btw, is Java. I have coded in C, C++, AWK, Perl, Prolog, CLIPS, Metropolitan English Language (MEL) and who knows what all, but Java is the language where my program is most likely to work with relatively little debugging, and still be maintainable a year later.

---

<div class="post-metadata">

**Author:** ![Khadaji](https://avatars.discourse-cdn.com/v4/letter/k/9e8a1a/32.png) [@Khadaji](https://boards.straightdope.com/u/Khadaji)\
**Post date:** [October 20, 2009, 3:20pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/79 "2009-10-20T15:20:55Z")

</div>

[D programming language](http://www.digitalmars.com/d/)

---

<div class="post-metadata">

**Author:** ![Napier](https://avatars.discourse-cdn.com/v4/letter/n/ce73a5/32.png) [@Napier](https://boards.straightdope.com/u/Napier)\
**Post date:** [October 20, 2009, 4:43pm UTC](https://boards.straightdope.com/t/the-best-programming-language-ever/514212/80 "2009-10-20T16:43:03Z")

</div>

> [@Sunspace](#):
>
> The best time I ever had programming was in Labview. The Labview language, G, was easy to understand for me; I drew my progams and they matched the way I think. Then I made control panels fopr input and output.

I wondered if LabVIEW was going to come up. I didn’t list it in my comparisons because, while using it does amount to programming, I am still undecided on that debate about whether or not it is a language.

But I did spend much of the last couple years programming with that glistening turd of a hack job, and still awaken sobbing at night because of all those hours I will never get back.

It’s buggy as hell. The development environment keeps crashing while just editing code. It keeps spontaneously rearranging “clusters” (its version of structs) and breaking the code, which has been a known issue and has had various CAR numbers for the last two major versions. It has the most daffy idea of variables I have ever handled (numeric variables, for example, have a font). It is designed for data acquisition, but uses one gigantic half gigabyte driver, which doesn’t support some modes depending on the communications bus in the background. Some subroutines you write will work fine by themselves and the first time you use them, but if you use them in a second location, it will break the behavior of the first instance (due to their odd defaults and documentation for reentrant code). Moving assemblies with feedback nodes in them often breaks the wiring inside the assembly (like scrambling the identities of variables when you cut and paste text code referencing them). And the minor version releases come out several times a year, introducing new little glitches and quirks every time, so we keep having to jump between versions depending which glitch is more troublesome in which way.

LabVIEW’s success may be due to its low starting threshold - you can learn to write some simple working programs in a few minutes. In fact, without any instructions, you might guess how to write a “Hello world” program just by staring at the IDE. But this is a double edged knife, and as things get more complicated, it is very inefficient, with much too much mouse fiddling. Flow charts were intended to clarify things, but if you try to draw a flow chart representing every single program detail, you’ll get the idea (not that LV “programs” equal flow charts, but there are similarities). Or its success may be due to NI’s habit of buying competitors and smacking them with a giant hammer. But, I hear the LabVIEW shop contains many programmers unhappy with the low standards for stability and the overeager schedules that push buggy software out the door way more often than anybody needs. Programmers probably always wish for more time to debug, but I don’t know any other programming environments this troubled.

So, anyway, I hope this doesn’t tread on anybody’s feelings, but if another thread about “The Worst…”, at least I’m ahead of schedule.

[Previous page](https://boards.straightdope.com/t/the-best-programming-language-ever/514212.md?page=3)

[Next page](https://boards.straightdope.com/t/the-best-programming-language-ever/514212.md?page=5)
