One can argue that there’s no such thing as an inherently shitty language. All languages have their frustrations and they all have their proper domains, which are sometimes more general than others. In other words, every language is a shitty language given the right context.
It’s also been said that there are two kinds of programming languages: ones that people hate and the ones that no one uses. The really, truly bad languages don’t get properly loathed because really, truly bad languages are left to rust like the broken tools they are.
Videos by VICE
That said, some programming languages see much more hate than others.
Perl
Perl is sometimes semi-jokingly referred to as a “write-only” language. That is, its syntax is so bizarre that code written in Perl is essentially unreadable by other programmers and thus not editable by other programmers. This sort of code is sometimes referred to as “line noise.”
Perl is a fairly old language with roots tracing back to 1987. It was designed to be a supercharged Unix scripting language, e.g. a language meant to string together Unix commands and pre-built software components into useful new pseudo-programs called scripts. A scripting language is often thought of as a glue useful for connecting different programs together or an automation tool. (You can read more about scripting vs. programming here.)
Perl has been referred to as the “duct tape of the internet” because of its role in interfacing between web servers and web applications.
Here’s how Tim O’Reilly puts it in “The Importance of Perl”:
A good scripting language is a high-level software development language that allows for quick and easy development of trivial tools while having the process flow and data organization necessary to also develop complex applications. It must be fast while executing. It must be efficient when calling system resources such as file operations, interprocess communications, and process control. A great scripting language runs on every popular operating system, is tuned for information processing (free form text) and yet is excellent at data processing (numbers and raw, binary data). It is embeddable, and extensible. Perl fits all of these criteria.
So, yay Perl after all?
Most people that actually use Perl like Perl. It has a steep learning curve as there are lots and lots and lots of different ways of doing things—things which may mean other things in different contexts—and it comes with some seriously anxiety-inducing syntactical idiosyncrasies. This partially has to do with the language’s enthusiasm for what are known as sigils, which are just various symbols (like $, @, %, etc.) used to indicate a variable’s data type or scope (what its meaning is within a certain context).
What can make Perl really look like noise is its usage of regular expressions. This is a whole other huge topic, but a regular expression is basically a way of identifying a pattern in some text or a string of text. It’s a deep, weird topic and it might just result in code that looks like this:
… which looks a lot like Brainfuck code.
C++
Somewhere back in my computer science education I had a real goofball of a professor, a climate change “skeptic” and a hater of the C++ programming language. This was early enough that I didn’t even know C++ had such haters. I thought it was a great language, which, in retrospect, had a lot to do with my not knowing any other languages. I still think it’s a great language, but I have a much better handle on what makes it so.
Said professor had a popular joke posted on his website, and I’m fairly sure he didn’t realize or believe that it was a joke (he wouldn’t be the only one). It consists of a fake interview with C++ founder Bjarne Stroustrup in which Stroustrup admits that the existence of C++ is really just a big conspiracy-joke-thing, a means to create high-paying jobs for programmers.
“Well, one day, when I was sitting in my office, I thought of this little scheme, which would redress the balance a little,” Stroustrup allegedly said. “I thought ‘I wonder what would happen, if there were a language so complicated, so difficult to learn, that nobody would ever be able to swamp the market with programmers.”
While the interview is a hoax, it touches on real complaints about C++. Many of those have to do with its divergences from C, including an abandonment of the system calls that nicely bind together C and the Unix operating system; the offspring language’s more abstracted approach to system memory; and many things to do with C++’s handling of the programming abstractions known as objects. In the eyes of its detractors, C++ is needlessly complex, a nightmare to debug and even just read.
And yet it also remains a very, very powerful language and one that still enjoys wide use. It’s a relatively high-performance, efficient language which has made it a de facto language for everything from space probes to implementing other programming languages. C++ is biased toward system software, e.g. software the provides services to other software rather than directly to a user, and, as the Internet of Things continues to unfurl and populate the world with a superabundance of small computers of very limited resources, the C++ future is about as assured as anything else in computer science.
Java
My introduction to Java occurred via the same professor as above. While he hated Java too, I was perfectly capable of disliking it on my own.
Java feels cheap from the second you start downloading its software development kit (SDK) from Oracle, the language’s corporate parent since 2010. During this process, Oracle will try to sneak in downloads of the Ask.com toolbar and the Ask.com shopping toolbar, which have nothing to do with Java or software development nor are they anything you would ever willingly download as a software developer or just a regular consumer. They’re just run of the mill foistware.
And then there’s Java itself. One of the most common complains is its verbosity. It’s the opposite of elegant, a Ford Expedition to Python’s Tesla.
Java:
Python:
To many, the verbosity of Java translates to code readability, which is fair enough, but it really depends on how it’s being used. Java’s syntactical bloat would have more place in a software mega-project, where many people are working on one thing together for an extended amount of time, than a quick script.
Read more: The Slow-Flickering Star Death of Java
There is also the Java Virtual Machine. Java code isn’t compiled directly to machine instructions like C or C++, but is instead compiled into bytecode that is then fed into a freestanding program that then interacts with the machine. The relationship is a bit like how code runs in a web browser and it represents an thick additional layer of abstraction and, thus, computational overhead. The advantage, however, is cross-platform compatibility. Java will run more or less the same on the same virtual machine, whether it’s running on OSX or Windows 10.
Visual Basic .NET
Visual Basic is one of the two core languages (the other being C#) behind Microsoft’s .NET framework, an originally Windows-specific runtime environment allowing potentially many different languages to run on a single virtual machine (the Common Language Runtime or CLR) in a way similar to how Java runs on the Java Virtual Machine. VB .NET was originally intended to be a successor to Visual Basic, an earlier now-legacy Microsoft language that allowed programmers to create GUIs via drag and drop tools without having to worry about syntax/actual code.
VB .NET offers completely bonkers syntax while being essentially the same under the hood as C#, which is so far a much more sane (and C-like, obviously) entrypoint into the CLR universe. Microsoft open-sourced .NET in 2014, including the VB and C# compilers, which means that both languages can now be developed cross-platform. This was a major limiting factor for VB, so we’ll have to see how things evolve from here.
PHP
PHP is a scripting language meant to run on servers. It’s responsible for a huge portion of what we now understand the web to be, which is a great big place of interactive web-resident applications. A place of data manipulation. Website interactivity now comes via a number of different languages and mechanisms, but PHP was there at just the right time to light the way.
From a recent Know Your Language on PHP:
It’s not hard to find literature about “why PHP sucks,” but one of the key issues is inconsistency, both internally and with respect to other languages. It’s unpredictable and inelegant. It’s like slang, but without a formal, “proper” language underneath. Ora toolbox filled with esoteric and half-broken tools that will still be able to fix most things, but only in the most difficult and-or unpredictable manner possible.
PHP is also incredibly insecure.
PHP has done so much, but it would seem that it can only take us so far.
Python
I hated Python before I finally gave in and really liked it. Why? Two reasons. The first is that it ditches the curly braces employed in almost every other C-like programming language to group statements together. In C++ or Java (etc.), if you were to make it so that some stuff happens if some condition is true, you put all of that stuff inside of some curly braces after the condition to be evaluated. This makes sense.
Python ditches the curly braces, and instead does the same thing with indentation. The stuff that’s supposed to happen if the condition is true is all just indented after the conditional (if, while, for, etc). No braces, just spaces. This also makes sense.
Python has a lot of these sorts of twists, all of which exist to make code cleaner and more intuitive. It took some convincing, but, yeah, Python rules.
There are rants about absolutely every programming language in existence out there, but these are the most common. Some will probably stick around on this list for many years to com, but as sure as new programming languages will be created, there will be more languages to hate.