Hacker News new | ask | show | jobs
by Kednicma 2073 days ago
Some of these have aged so perfectly that I only need substitute a few letters:

> Python —"the infantile disorder"—, by now nearly 30 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use.

> It is practically impossible to teach good programming to students that have had a prior exposure to JS: as potential programmers they are mentally mutilated beyond hope of regeneration.

> The use of Java cripples the mind; its teaching should, therefore, be regarded as a criminal offence.

The quotes about languages were always controversial, weren't they? But it's clear now in retrospect what Dijkstra was complaining about. He found FORTRAN to trick people into thinking that programming was merely about specifying arithmetic operations in a certain order, considered BASIC to require mental models which rendered folks memetically blind to actual machine behaviors, and thought COBOL tried to be legible to management but ended up being confusing to everybody.

> Many companies that have made themselves dependent on AWS-equipment (and in doing so have sold their soul to the devil) will collapse under the sheer weight of the unmastered complexity of their data processing systems.

Yep.

> In the good old days physicists repeated each other's experiments, just to be sure. Today they stick to Python, so that they can share each other's programs, bugs included.

Reproducibility is a real problem, and sharing code is just the first step. It's an embarrassment to physics and mathematics that we don't have a single holistic repository of algorithms, but have to rebuild everything from scratch every time. (Perlis would tell Dijkstra that this is an inevitable facet of computing, and Dijkstra would reply that Perlis is too accepting of humanity's tendency to avoid effort.)

> You would rather that I had not disturbed you by sending you this.

Heh, yeah, let's see what the comment section is like.

4 comments

What a great comment. I'm sure it'll get flagged into oblivion, though - thus directly proving Dijkstra's point.
What's with the hate for python. I've noticed some hate this irl and it's strange. Python is one of the best languages out there right now in terms of ease of use and future maintainability (with types).
First let me state that I do not hate Python, but I would suppose 2 items are on the top of the list for people that do. The first and the one that makes me dislike Python (not hate) is that Python enshrined into the language syntax that whitespace and structure count towards correctness. If it is not properly spaced according to the spec it does not work. Some people see this as an arbitrary constraint put on a developer and do not like it. Now I will give you others see it as a way to keep code readable, both arguments have their merits. Pretty much anything beyond noting how the two camps see it devolves into a holy war. Personally being a person that sees the beauty of LISP derived languages lack of syntax, I fall into the first camp and don't see the value of it for me.

I think the second issue, is it is fairly safe to say that the path from Python 2 to 3 was not well thought out and has been a disaster. A lot of people where burned by it, and it left a bad taste in a lot of peoples mouths.

That being said, Python enjoys a huge userbase so I would not worry about the hate, it's just not the language of choice for some people and that is fine.

I disagree with a lot of this. I feel these are minor minor complaints. You hear this kind of stuff for lisp too. For example, keeping track of parens is just as annoying as keeping track of indentation.

Also the migration from python 2 to 3 is actually the best migration ever. Breaking changes on a code that has a massive library around it. All code is migrated along with the libraries. I haven't heard of any migration done as successfully as python. It required movement of the language and the entire community to make it happen.

Most migrations refrain from breaking changes and instead they take the less risky route and make the language backwards compatible at the cost of being more bloated. See C++ 17 and C++ 20.

But despite this, yeah these are complaints that I've heard, but this is totally unrelated to the hate I see. Like parentheses in lisp is something to complain about but not something to hate lisp for.

The hate I believe is more egotistical than anything. One interviewer told me I could code in any language other than python because python makes things too simple. The hate is because they believe python programmers are stupider than normal programmers.

That being said my favorite language is not python. It's my least favorite language out of all the languages I know well but not a language I hate.

I've written Python for over a decade. There are two problems with Python.

First, the excellent readability leads directly into hard-to-read code structures. This might seem paradoxical but Dijkstra insisted that the same thing happened in FORTRAN, and I'm willing to defer to his instinct that there's something about the "shut up and calculate" approach that physicists have which causes a predilection for both FORTRAN and Python.

Second, Python 2 to Python 3 was horrible, and created political problems which hadn't existed before. Now, at the end of the transition, we can see how badly it was managed; Python 2 could have been retrofitted with nearly every breaking change and it would have been lower-friction. Instead, there's now millions of lines of rotting Python 2 code which will never be updated again. Curiously, this happened in the FORTRAN world too; I wasn't around for it, but FORTRAN 77 was so popular compared to future revisions and standardizations that it fractured the FORTRAN community.

>Second, Python 2 to Python 3 was horrible, and created political problems which hadn't existed before. Now, at the end of the transition, we can see how badly it was managed; Python 2 could have been retrofitted with nearly every breaking change and it would have been lower-friction.

This doesn't make any logical sense. Your saying take the breaking changes in python 3 and put it into python 2? That's just a version number. You can call it version 2.999999.8 and do all the changes in there and the outcome is identical.

No. Every breaking change must have a downstream change in every library that uses that breaking change. That's the reality of breaking changes. No way around it.

Tell me of such a migration as huge as python 2->3 that was as successful. For sure there were huge problems along the way and it took forever. However I have heard of very very few migrations in the open source world that ended up with an outcome as successful as python.

>First, the excellent readability leads directly into hard-to-read code structures.

I don't agree with this either. You refer to fortran but most programmers here haven't used it so you'll have to provide an example for readers to see your point.

I'm not going to argue Python politics with you, but suffice it to say that only a few communities have had such a bad major version upgrade experience. Here are some off the top of my head for comparison, from roughest to smoothest:

* Perl 5 to Perl 6: So disastrous that they rolled back and Perl 6 is now known as Raku

* PHP5 to PHP7: Burn my eyes out, please! But of course PHP has unique user pressures, and a monoculture helps a lot

* Python 2.4 to Python 2.7: Done in several stages, including deprecation of syntax, rolling out of new keywords, introduction of backwards-compatible objects and classes, and improvements to various semantic corner cases

* Haskell 98 to Haskell 2010: GHC dominated the ecosystem and now Haskell 98 is only known for being associated with Hugs, which knows nothing newer

* C++03 and earlier to C++11: Failed to deprecate enough stuff, but did successfully establish a permanent 3yr release cadence

* C99 to C11: Aside from the whole Microsoft deal, this was perfect; unfortunately Microsoft's platforms are common in the wild

Now consider how many Python 3 features ended up backported to Python 2 [0] and how divisive the upgrade needed to be in the end.

On readability, you'll just have to trust me that when Python gets to millions of lines of code per application, the organization of modules into packages becomes obligatory; the module-to-module barrier isn't expressive enough to support all of the readable syntax that people want to use for composing objects. If you want a FORTRAN example, look at Cephes [1], a C library partially ported from FORTRAN. The readability is terrible, the factoring is terrible, and it cannot be improved because FORTRAN lacked the abstractive power necessary for higher-order factoring, and so does C. Compare and contrast with Numpy [2], a popular numeric library for Python which is implemented in (punchline!) FORTRAN and C.

[0] https://docs.python.org/2/whatsnew/2.7.html#python-3-1-featu...

[1] https://github.com/jeremybarnes/cephes

[2] https://github.com/numpy/numpy

"Failed to deprecate enough stuff"

Did you by any chance observe any of the folks involved officially saying that deprecating things was one of the goals? I thought keeping working code working has always been of the C++'s official goals.

I love this quote: "There are only two kinds of languages: the ones people complain about and the ones nobody uses". Bjarne Stroustrup.
There's a lot to complain about for python. But I see genuine hate. People, groups and companies who literally refuse to use it.

I had an interviewer tell me that I couldn't code up the solution in python. I think it might be because python is so easy that people look down on it.

There's a certain cultural subset which tries to bolster their self-assessed superiority by rejecting things which are popular. This is especially common for people coming of a certain academic bent who are constantly playing one-upmanship games desperately trying to be the smartest person in the room.

Python annoys those people because it's both relatively easy to get started with and far, far more successful than whatever their current favorite language is, and this is portrayed as people not getting it rather than having a more insightful discussion about whether other people might reasonably make decisions based on different needs, background, and resources rather than stupidity.

Your comment rings true as I'm one of those people who reject things which are popular. Thanks for pointing it out!
What modern language would Dijkstra approve of?
This is a very difficult question. We know somewhat his preferences, because he worked on implementing ALGOL 60 [0][1], but unfortunately we are blocked by a bit of incommensurability; in that time, garbage collection was not something that could be taken for granted. As a result, what he might have built in our era is hard to imagine.

That said, he did have relatively nice things to say about Haskell [2] and preferred Haskell to Java:

> Finally, in the specific comparison of Haskell versus Java, Haskell, though not perfect, is of a quality that is several orders of magnitude higher than Java, which is a mess (and needed an extensive advertizing campaign and aggressive salesmanship for its commercial acceptance).

I imagine that he would have liked something structured, equational, declarative, and modular; he would have wanted to treat programs as mathematical objects, as he says in [2]. Beyond that, though, we'll never know. He left some predictions like [3] but they are vague.

[0] https://en.wikipedia.org/wiki/ALGOL_60

[1] https://www.cs.utexas.edu/users/EWD/MCReps/MR35.PDF

[2] https://www.cs.utexas.edu/users/EWD/transcriptions/OtherDocs...

[3] https://www.cs.utexas.edu/users/EWD/transcriptions/EWD12xx/E...

He would probably form a completely different opinion, the world is nothing like what could be anticipated 30 years go.

The first languages and their compilers were strongly driven by hardware constraints, a kilobyte of memory costing an arm and a leg.

Imagine storing function names in memory to compile the program, it doesn't fit in 1 kB. Imagine storing the whole source code in memory for processing, it doesn't work when there is less than a 1 MB of memory available.

It's ridiculous today but it's real reasons why things were made global back then or why C/pascal split the code between a header and a source file.

There are so many languages available today that I'm sure there are plenty he would have approved of. For example, I think he might have appreciated Zig. If you read his work it's pretty easy to see his top priority is managing complexity and limiting surprise.
> his top priority is managing complexity and limiting surprise

Zig doesn't do either of those things. There are a fair amount of criticisms of the mental model of the author that I've seen voiced - some including security.

What's worse, the community surrounding Zig (in particular, the Discord community) operates more like a cult - any negative questioning gets you shunned.

I was personally a huge fan of Zig until a number of questionable design decisions and dismissed bug reports lead me to believe it will forever remain a toy language. I can't imagine Dijkstra approving.

That’s too bad. I was judging based on the overview of Zig that was recently posted here. I gladly defer to your more informed opinion on the subject, but I’ll maintain Dijkstra would have liked the design goal of executing the procedure as written absent fancy obfuscated control structures.

The cult-like attitude that many programmers have about languages certainly supports Dijkstra’s claims about the immaturity of the field.

I suspect, none of them. If he did approve of one, it would probably be Haskell.

And, for all his complaining, I don't know of any language that he authored. He's sure good at telling everyone that they're doing it wrong, though...

His rant-y EWDs seem to be the only ones people know. But his others go into much more detail about what he thinks and why. And while he didn't (to the best of my knowledge) directly create any language, he did implement an Algol 60 compiler and was involved in language design efforts throughout his life.

He helped create the ideas of Structured Programming, which most of us now take for granted, since pretty much every language in popular use these days are based on these ideas.

Dijkstra co-created a rather influential language called Algol 60[1]. It and its immediate descendants are still used in scholarly CS work because it's so good for clearly describing algorithms. Past that, the influence of Algol 60 on virtually all modern programming languages is hard to overstate.

[1] https://en.wikipedia.org/wiki/ALGOL_60

Well, he co-authored a compiler. From what your link says, he wasn't part of the committee that created the language.
StandardML
Whichever one grandparent commenter likes best.
Your flame-bait revision is a perfect demonstration of what's wrong with the original post.