There are lots of awesome programming tutorials out there to get you started with coding. But before you dive into them, you’ll have to answer a very difficult question: Which programming language should I learn?

In this article, we’ll approach it from the opposite end: Which programming languages should you avoid?

1. Esoteric as %^&*!

Let’s start with an easy one. Esoteric programming languages (or esolang for short) are designed to push programming to its limits of simplicity. In doing so they succeed in making it incredibly complicated.

While this seems like a contradiction in terms, a quick look at the unfortunately named Brainf&*k language:

This monstrosity is functional, Turing-complete code. The function of this program? It prints Hello World! to the screen. Simple, isn’t it?

The language consists of eight characters, which move the data pointer within the program array, and modify or output the data held in each position. This all adds up to a simple language which is an absolute mind destroyer to use. Hence the unfortunate name. By the way, Brainf£$k is not the only esoteric language with a “colorful” name, so be curious at your own risk!

Brainf^&k is one of the better known esoteric programming languages, though many more can be found. Perhaps you want to build a program using the one-liners of Arnold Schwarzenegger? Chef is particularly notable as the code you write ends up reading like a recipe.

Esoteric languages are designed more like a fun challenge to programmers than for everyday use. As a general rule, these languages are Turing Tarpits and will cause more frustration than anything else if used for actual programming tasks. In the same way that going over Niagara Falls in a barrel isn’t necessary, I’m sure some of you will program in esoteric languages regardless!

2. PHP

This is where things may get contentious. PHP is a server-side language designed for web development. Originally released in 1997, PHP quickly took over the web. You’d be hard pushed to find any large web entity that doesn’t use PHP. PHP introduced the concept of Dynamic Websites, allowing users to query databases in real time rather than loading static pages on each interaction.

A recent Stack Overflow survey shows PHP as the ninth most popular language, and there is still a considerable demand for PHP developers. So far so good. Widely used, in demand, long-standing, what isn’t there to like?

Well, depending on who you ask, quite a lot!

Inconsistency

PHP wasn’t meant to be a language and grew piece by piece rather than with a general structure. This makes learning PHP a frustrating experience.

An example of this provided by aptly named phpsadness is PHP’s get function:

gettype()
get_class()

These little inconsistencies in the naming of in-built functions are part of a much larger problem. Small differences in syntax and semantics make PHP difficult to learn when coming from another language.

In an age of programming language polyglots, these issues might not be a big deal to you, but it is enough to make some developers run for the hills.

One more thing before we move away from these types of inconsistencies. In PHP, function and class names are not case sensitive, but variables are.

Wait, what?

The Ternary Operator

Whether it is a product of PHP’s ad-hoc structure or the mad whim of one of its creators, the ternary operator in PHP is baffling. Consider this:

As you can see in the above example, PHP does strange things with ternary operators. In almost all other languages you would expect this code to output eleven. PHP disagrees.

This strange behavior comes from PHP using a left associative ternary operator. This somewhat mind-bending behavior is utterly unintuitive to many programmers, and even after reading a detailed explanation of how it works, it’s still baffling.

PHP is still used widely, and many people claim it has improved hugely over its 20-year tenure.

The real question is: with so many other languages out there, and the rise of other frameworks like node.js and Ruby on Rails, do you really want to?

3. JavaScript

Can you hear that? It’s the sound of a thousand developers cracking their knuckles, ready to defend JavaScript’s honor in the comment section!

JavaScript is the language of the internet. There is no disguising its dominance. If you are using a browser, the page you are looking it will almost certainly be using JavaScript. When you watch Netflix or use PayPal, you are using servers running node.js, JavaScript’s server-side runtime. A quick skim of any job board for programmers shows demand for JavaScript developers.

Why does it belong on this list? Well, the darling of front-end has a few quirks.

Automatic Semicolon Insertion

If you are familiar with Java or any of the C family programming languages, you’ll know that semicolons are used to denote the termination of a statement. The interpreter sees the semicolon and knows to move on.

In JavaScript things are a little different. Semicolons are optional. While that might seem impossible, many people want to drop semicolons from JavaScript altogether.

While this is a nice idea, it is not without its problems. Self-confessed semicolon denier and YouTuber Kyle Robinson Young makes a good case for why they should be used by beginners.

The issues raised in this video point to a wider problem. JavaScript works fine without semicolons most of the time. This is because the semicolons aren’t gone at all, they are just automatically inserted where the interpreter thinks they should go.

While the cases when the interpreter gets it wrong are seen as “edge cases” by more experienced coders, they are all things beginners are likely to run into, thereby making the experience of using JavaScript unwelcoming.

A short search on the subject of semicolons in JavaScript will lead you down a rabbit hole of opinion and speculation with almost no end. When a language requires a full page of reading just to understand where you should use a semicolon, only to conclude that you should make up your own mind, it’s forgivable to think that something is wrong!

An Array of Weirdness

Anyone who has taken a beginner coding class will be familiar with arrays. They are a simple way to collect lots of data of the same type and order them to easily get it back later.

This is a fundamental of programming, so they should be pretty simple to understand right? Actually no, not right. The first example in James Mickins’ hilarious talk on JavaScript sums it up nicely:

These are just a few small examples of why JavaScript could be seen as a terrible language to learn and to use. For every case here, and the thousands of others all over the web, there is an army of people ready to defend these behaviors. One thing is for sure, JavaScript isn’t going anywhere, and neither are the endless online arguments about it.

For a final bit of fun, which harks back to esoteric languages discussed earlier: open up a JavaScript console in your web browser and paste in this monster:

A World of Programming Languages

Can you hear the sabers rattling? The angry devs ready to strike down every point made in this article? In truth, they would not be wrong. There are thousands of other cases in almost every language out there I could have used.

With the exception of the esoteric languages, each programming language has its good and bad points. As with all tools, a feature which makes one user’s blood boil is a cherished functionality to another. Semicolons may be one person’s kryptonite, whereas whitespace might keep others up at night.

Well this was dumb... yet I feel like I just fell into a trap. Future programmers, avoid reading articles like this one. There's no perfect language. They are just tools that get a job done. PHP is a perfectly okay language to learn to build websites with. JavaScript is also perfectly okay. Learn esoteric if you like sudokus.

Sadly, all languages have problems and sometimes it's a matter of preference.
Even my all time favorite language Delphi/FPC has problems. You learn to automatically avoid traps/inconsistencies. That's why programmers are bad testers.

There are a few aspects more important than the language itself:
1. Readability: you read code more, so it must be simple and relatively easy to understand. Go tries hard to improve this aspect. I think Node is decent at this.
Many OOP languages refuse to accept that the OOP model with classes/objects is flawed. You see more discussions about apparently philosophical things, Design Patterns, SOLID, Spring, composition vs inheritance. Most of them just hide the real problem, that OOP can easily become hard to maintain even in relatively simple programs given enough time. Data and it's interface/functions/methods should be separate concepts. The IDE/complier can automatically "link"(data.func) even the simplest function just by looking at the first param.
2. How easy it is to learn: as a beginner vs experienced programmer.
TypeScript might be the interface necessary for Java, C#, C++ and Delphi programmers to even get near JS. Sadly it loses some of the advantages.
3. Memory/thread safety: many classic languages such as C/C++ allow and even encourage a lot of dangerous practices that lead to hidden holes/bugs, only to be exploited later. One of the reasons Rust even exist. JS and others have no such problems.
4. Efficiency/scalability: While JS is certainly not as efficient as C/C++/Rust or even Go, it's good enough, and compensates by teaching good event-based async practices that were proven to work by the NGINX web-server.

There are many other aspects such as cost, community size, documentation, how obvious the common coding practices are, cross-platform compatibility, commercial vs open, evolution speed.

The brain-damaged/lobotomized language wasn't created to write serious apps, some people have too much free time and no idea how to use it :)

PHP has shown a lot of problems over time, but the weird/inconsistent syntax is certainly not the biggest, there are simply too many vulnerable platforms, too many designers doing PHP, causing so many bugs/security holes.

JS is still a bit hard to quickly understand, creating classes with functions or JSon may seem weird to people coming from static languages.
Most of JS's weirdness goes away if you follow some simple rules:
- 'use strict' at the top of all JS files.
- Use modules(the way Node does it).
- All globals are banned, state is "like kicking babies", pass state where you need it.
- Learn what "this" means in JS, don't map it to self/this from other languages.
- Learn functions vs arrow functions, context, bind/call/apply.
- Use async/await where performance is not extremely important, name functions where it is, to avoid nested callback pyramid.
- Use "classes" with familiar syntax if you must.
- Use an IDE such as VS Code with ESLint and many other nice settings/extensions.
- If everything else fails go the TypeScript way.

JS is not going away soon, WebAssembly dreamers deny the existence of ASM.js/Emscripten, TypeScript and many other cross-compilers.
Like some of the other folks coming from Java and other languages I found JS/Node challenging, but also interesting and overall liberating.

I think the time of language wars is over, just use what you feel comfortable/productive and try not to create more security holes. There is no perfect language that pleases everyone.
Pick a few and be really good at them, it's unlikely that you will become an expert in a dozen of very different languages, but they may look good in your CV :)

This article is weird because of the inclusion of esolangs. Esolangs were never intended to be practical programming languages. They were never meant to be used in industry. They were created for amusement, or curiosity, or experimentation in perversion.

Good article, and as was stated, all the defenders of these useless languages are out en masse gnashing their teeth and screaming bloody murder...it's actually hilarious and wonderfully entertaining to read their inane rantings and ravings.

And some others were correct also...anything 'VB' should have been in this article too.

I'm going to challenge the notion that esoteric languages absolutely shouldn't, under any circumstances, be among your first languages, even though I, personally, haven't tried to learn one yet.

Seriously? First, these are obviously toy languages. Writing programs in Shakespearean or Schwartzenager one-liners is clearly meant to be funny; if this is your first intro to programming, I wouldn't expect the use of the language to be extensive, but I'd expect it to be memorable, and with lots of laughs.

And this is going to be true with *any* esoteric language, even br**nfudge, INTERCAL, or One-Instruction-Set Assembler (sub-and-jump-if-neg). Heck, it might even be true for esoteric languages like C++, JavaScript, Perl or PHP (even if some people mistakenly take those languages seriously as well!).

Oh, and someone in the comments pointed out the consistency of suggesting that NodeJS is better than PHP, but one shouldn't learn JavaScript. It just occurred to me that this isn't an inconsistency at all. PHP is just that bad....

(And having used both professionally, I'm not in a position to disagree...)

I'm a professional JavaScript programmer at Amazon. In a way, I agree with your assessment. JavaScript is hard, and probably should not be a beginners first language. That description of arrays is accurate, and if your don't understand what that means, then you should probably first learn a simpler language.

A language like C++, for example, can also be hard, but it's easier in a way because everything is explicitly defined. Part of the difficulty of JavaScript is that many things are implicit. You have to know whether you function arguments are passed by value or passed by reference, with different implications for both. You have to know when your asynchronous callbacks are getting called, and what the scope of your variables are when they do get called. So beginners should stay away from JavaScript because it's too hard, and let us professionals handle the work. :)

I agree with what you're saying here Patrick, but the problem is that Javascript was never designed to be such a versatile language, rather it evolved into one through a history of modifications to meet new challenges and the feeling many people have is that this evolution has over-extended it's foundation. It's turned into a stove-pipe language full of facades and illusions. Imagine if you could reinvest your time and effort, trying to keep track of smoke and mirrors into a language with a more straight forward and capable foundation. This is why we are seeing a lot of efforts being made these days to build a better alternatives to Javascript, especially for "professionals" pushing the limits of performance and capacity (Rust comes to mind). Otherwise, you're just calling yourself an expert for over-extending a beginner's language.

Actually, JavaScript was specifically designed to be an evolving language. When Brendan made it, he knew he didn't have time to put in all the bells and whistles, so he made it possible for other devs to extend the heck out of it.

Its flexibility is both it's blessing and it's curse. It's sort of like a chainsaw. It's dangerous for beginners, but a powerful tool in the hands of those who understand how to use it.

Jusper: Without respect to the quality of this article, ... "Another stupid article from this site" implies that you have read a lot of them ... yet you continue to come back to it! If I find a site that spews stupidity, I find it easier to not return to it.

This article is idiotic. By your logic, you could say QWERTY keyboards are inefficient and must be avoided like the plague.

I seriously hope nobody starting take your advice. Regardless whether you like JavaScript or not didn't matter. JavaScript became a defacto standard. I'm a C# backend developer mostly but I consider JavaScript a must know. I don't know any senior developer who doesn't know it.

By your logic, you could say QWERTY keyboards are inefficient and must be avoided like the plague.

Works for me!

I've been typing Dvorak for nearly 40 years. It is a tiny bit faster, but more importantly, it is more comfortable! While many of my professional associates have carpal tunnel syndrome and achey hands, I just keep on typing. It has the considerable fringe benefit of keeping others from using your computer!

Useless article, full of bullshit. If I ever found ternary operator used in such a way as in your example, I would slap the one who wrote it in face. No matter what language he wrote it in. And you say node.js is awesome, but javascript is bad? Good morning dubass, programs for node.js are written in JS.

The points made in the article are valid, and every language has something annoying about it.
But you can not say "Avoid like a plague" when these are essential languages and JS will be for another decade.

Make Use Of your time and avoid articles like this like a plague, which I regretably failed to do.

Absolutely agreed. Certainly JS has its problems, as all languages do. But listing it as a language to "avoid like the plague" is so entirely off and misleading. JS is the backbone of almost every modern websites.

JavaScript? Even if something new were to come along tomorrow, JavaScript would not be phased-out in 5 or 10 years. It's an important language to know, and it's still relevant. And, if you learn to use it properly, and show a little self-control and pay attention to what you're writing, you use clean syntax. I think you forgot Visual Basic on your list by the way...

PHP is a little difficult for beginners, but oh my lord JavaScript has to be the worst. If it were my first language (thank goodness it's C) I would have dropped programming a long time ago. The syntax is awful and I never manage to solve a problem in my first try unlike in C# for example. Now I know you can't compare these two languages, but looking at syntax JavaScript has always been a nightmare to me. So glad I'm not alone.

First, there are no alternatives to JS if you want to a web developer, C or C# won't do it.
Secondly, JS has come along way, especially with ES7, plus if given the choice to use C or C# inside HTML, I'm pretty sure most people will turn it down because those languages are overly complicated and extremely inappropriate for simple web dev.
So while js syntax may not look good to some developers, it's best at what it does.

doesn't feel complete.. yeah.. stop wishing that.. javascript alone isn't that hard... but with over hundreds of js frameworks out there, and the ever growing ecosystem since the advent of nodejs.. yeah nahh...

Its pretty silly to avoid js when its literally the defacto language of the web. Eventually, as a developer there will be no way to avoid it. It will be nearly impossible to avoid it in the next 20 years. The web is built on it, how can you avoid it, the semicolon issue us not much of an issue. The array issue sucks, but in all honesty every language has its problems, is still has a lot, but as it matures it will get better. One note on pop, there will be jobs for php for a long time, you are a bit off. Old companies will need them for quite some time.

You are wrong. Even javascript has "script" in it. They are indeed scripting languages. Real programming languages for example are Java, c/c++ , c# , swift, objective c , ect. Php, and even python are scripting languages.

I could not agree more. I have avoided the last two like Ebola however Kelsey Hightower tweeted about learning Javascript reason being you will get to interact with it one way or another. Since then am considering giving it a second look.

I can not agree more. I have avoided the last two like Ebola, however Kelsey Hightower tweeted something about learning Javascript reason being that you will get to interact with it one way or another, since then am considering giving it a second look.

WordPress is a great tool for blogging and for content management... I use it for both, but I rarely EVER interfere with the PHP behind it because the WordPress folks already did all the programming... Thank God, because PHP sucks!
When *I* program, I use *real* languages like Java and C/C++. Then I write about it using WordPress. See how that works?

LOL... point taken. But even so, I think C++, like Java and C has more to offer to those who can master these languages than PHP ever could... unless of course, all you're doing is making web pages for lemonade stands.

Meow

June 29, 2018 at 3:01 pm

I guess ruby is okay, if your hobby is frequently unnecessary code coverage and you like sites that are slow and use way too much hardware.

You have made some excellent points about why and what is bad about a language. I am a developer too, I experience these oddities first hand. But when you point out a problem also try directing towards a solution. Be solution driven not problem driven.

If you can't derive the solution yourself by applying analytical principles and you expect people to hand you a solution you're not a developer, you're a machine that applies rote knowledge dictionary style to every problem and you will be replaced by a cheaper machine eventually.

Avoid them not? The title of the article is "3 Worst Programming Languages to Avoid Like the Plague," so I think you are wrong.

Clearly, this article is aimed and young devs. If you are going to suggest that they avoid 2 of the most widely used programming languages, you should probably bring more evidence than semicolons.

I think OPs point is that this is a fatalistic negative article about 2 successful, widely used languages, when an article called "common gotchas to watch out for as you learn these popular langauges" is a much more productive and actuate title.

Yeah, the whole thing feels very hipster-y. In reality, if you're a young developer without a CS degree looking to break into the market, Javascript is basically mandatory, and PHP is a shortcut to a decent paycheck or unending freelance work.

Lumping them in with esoteric languages makes me feel like this person writes about code more than they actually use code.

Dov

June 29, 2018 at 7:58 pm

As a developer I run into these issues as well. However, I disagree with the OP. A language can have quirks and as developers we don't always get to choose what language we are going to use, so we need to learn to put up with all those quirks for better or for worse.

Plus I find the tire misleading. I wasn't expecting to find two of the most popular SCRIPTING languages given so much attention in a part titled for programming languages.
PHP does usually get an honorable mention in these kinds of posts, though.

DGW

June 29, 2018 at 1:38 pm

Things that are horrible and will never die because so many people use them:
The English Alphabet, QWERTY, Javascript.

Looks like my original reply to you was blocked because I had a web link. The answer is easy: The English alphabet has 26 letters and 44 phonemes. It is a miasma of painful spelling "rules" that are broken over and over again. For a non-English speaker, it is frustrating. Spelling bees, for instance, are unique to the English language, and highlights the difficulty. Attempts to fix the alphabet have failed repeatedly.
For a great example, search for "The Chaos", written by G. Nolst Trenite, a.k.a. Charivarius

lol, the English language is the easiest language for any non English speaking person to learn. Few verbs need to be conjugated, no special character letters, no tildes, no dieresis, no accents, easy gender assignment.
I would suspect your "issue" with the English language isn't the grammar or alphabet but an emotional bias.

Ian Buckley started out with a degree in Music composition, before devoting his time to DIY tech and coding. He now works as a freelance journalist, performer and video producer living in Berlin, Germany. When he's not writing or on stage, he's tinkering with DIY electronics or code in the hope of becoming a mad scientist.