The following post is written because people voted that they wanted to read it. Please try to avoid standards "you are wrong because X". If you want to debate, explain instead what's so great about a language that it makes it worth it for me to use it anyway.

Programming languages I have a problem with for various reasons:

Python: I don't like this one because it's rather poorly designed, and its implementation isn't great (I had to work on its code base some number of years ago, and I was surprised how poor the code was). It's also very slow. Add to this the significant whitespace, which deserves a post of its own, and we have a language which truly is the Visual Basic of this century.

C++: Overengineered. Individual features on their own sound very nice when described, but here we have a language which is truly worse than the sum of its parts. I believe that C++ is never the best choice of language when starting a project.

Swift: NIH project by Apple. This language has single-handedly convinced a generation of developers that reference counting is somehow better than garbage collection.

PHP: Well, it's just terrible. There is not that much need to bash it though, because people seem to be moving away from it.

Rust: I actually don't think the language is bad. But a lot of their fans leave something to be desired.

Go: The "trust us, we know better than you" attitude of the language design is enough to be put off by it. Forced code reformatting? Static linking only? No generics because the designers feel that pepole can't handle it?

Kotlin: I actually like Kotlin quite a bit. I used to do a lot of Java, and Kotlin has some really nice features. However, it could be so much more if the designers wasn't so stuck in the notion that it has to be a natural feature for the JVM (making, for example, multimethods difficult). They have also raised the same reasons as the Go designers when advanced features are suggested. Now it's mainly just a Java with better syntax.

Lua: Uses 1-based arrays.

C#: I haven't looked at it for a very long time. Back when I did, coming from Java, I really didn't like the fact that its syntax was the Microsoft code style applied to Java. But beyond the code style, applications written in it really only feels at home on Windows, and since I don't use Windows when doing personal development, there is not much reason for me to look at this further, even though I have heard it's improved a lot.

@shapr I don't actually have that much experience with either, but the little I have had has been mostly positive actually. I think the reason for this is that I haven't simply used them enough to discover in what ways they are bad.

Note, however, that my positive impression of Haskell is on the theoretical level. I find the idea of doubling down on the pure-ness of a functional language to be interesting in the same way I find Unlambda very interesing. It's a great way to understand the ideas behind functional programming.

As a practical language however, I'm not so rigid in my views on functional programming that I'm not willing to sacrifice some mutability here and there in order to be able to write real code.

And yes, I believe monads are, despite their solid theoretical underpinnings, just a hack. It's similar to my idea that I can make C into a pure functional language as long as I pass a state object to every function call (where the state object represents the state of the entire memory of the machine).

@shapr The astute reader may have noticed that I never mentioned Javascript. Surely, you may ask, you don't actually like Javascript, do you?

You'll be happy to know that no, I do not like Javascript. However, Javascript isn't just a bad language (as a language it is bad, but things like PHP are worse). It's also fostered an entire ecosystem of badness on all levels.

On the language side, it has the usual problems of a quick hack that has evolved new features to compensate for core features that were not very well thought through. At its core, is a fundamentally functional language that implements things like closures mostly right (let's ignore the bad scoping of variables for now). That's at least something it managed better than Python. This is not surprising given that the language was originally Scheme, but was given a new syntax similar to Java in order to ride on Java's popularity at the time.

Enough has been written about Javascript's inconsistencies that there is no need to rehash those arguments here.

However, the absolute torrent of badness Javascript has brought on us is like nothing else. It all started with Node.js, which at the time looked like a bad joke. "Surely no one in their right mind is actually going to build applications like that?". Well, they did, and with it came NPM. We all know what a terrible thing that is. Need I mention left-pad?

But it didn't end there. The rise of Javascript as the emperor of atrociousness went hand-in-hand with the advancement of webapps. The merging of Javascript, HTML and CSS for building UI's is so bad that it overtakes the original Windows API's in the chase for the top spot of the worst UI frameworks. In fact, the Windows API's looks almost acceptable in comparison to webapps. This is a topic for a different post though.

All of these things put together gave birth to Electron. It's what you get when you have layers of badness, and large groups of developers who know nothing else, building desktop applications in the only way they know.

It's the proverbial "if all you have is a hammer everything looks like a nail". It helps if you know what the other tools look like before you decide to build something new. The problems that the Javascript world solved badly had already been solved better in the decades before. Things like build systems and packaging.


@loke @shapr About Javascript, I wonder what would have happened if different languages were maintained for scripting webpages instead of just one.

In a way, Javascript is currently the best language to learn first as you don't have to install anything to make and run programs. Just make a webpage with the text editor provided by the OS and display it with the web browser provided by the OS.

Using different languages for describing, theming, and coding the logic of a UI is somewhat better than mixing everything into a single language. Reusing the rendering engine of a web browser to draw the UI is not a bad idea.
Using node.js as the backend is more questionnable though, as you could have achieved something similar by extending or changing the web browser bindings for local pages.

Sign in to participate in the conversation
Functional Café

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!