This page may be out of date. Submit any pending changes before refreshing this page.
Hide this message.
Quora uses cookies to improve your experience. Read more
100+ Answers
Vy Thuy Nguyen
I think it's Whitespace. As the name suggests, the language only consists of sequences of spaces, tabs and linefeeds.

Here's a program that prints "Hello, World!" written in Whitespace. (Where S is for Space, T for tab and L for linefeed. Example taken from Whitespace (programming language))


Your response is private.
Is this answer still relevant and up to date?
Joshua Gross

Have you heard of Brainf… nvm. (Why do people not read answers? Why do I ask this question when I know that it doesn’t matter?)

I’m going to add a few concepts:

  1. The most difficult language is that language with the biggest knowledge gap, which is generically any spreadsheet. While I didn’t work on spreadsheets for my PhD research, I know people who did. The number of people who write/maintain spreadsheets, and how much of the world is run on spreadsheets, is mind-boggling, and of course few of these people have any software engineering education (see EUSES for more information), and spreadsheets are very difficult to test.
  2. The most difficult language is the language with high defect frequency. Many people forgot that one of the key purposes of Java was to reduce defects (bugs). About 15 years ago, well into the Java era, a study was done and found that C++ had much higher defect frequency than other languages studied. It wasn’t a perfect study partly because it was based on static analysis, and partly because there are so many ways to screw up C++. There was a joke that in an Interview About C++, Stroustrup admitted that he created C++ to be intentionally difficult to raise the salaries of programmers (which some people took seriously).
  3. The most difficult languages are those for which obfuscated program contests exist. The Obfuscated Perl contest was short-lived but wonderful; here’s Mark-Jason Dominus’s 2000 entry Obfuscated Perl Program. The most famous is the The International Obfuscated C Code Contest (which explains what an obfuscated code contest is about), and my favorite entry is http://www.ioccc.org/1988/westley.c, which calculates pi based on a rough circle made in ASCII.

For me, in practical terms, the most difficult language to learn is C. It’s not a blindingly difficult language from the perspective of syntax, and The C Programming Language book helped me become a better programmer in general, but the purpose of C (at its creation and in its current use) are two of the most complex pieces of software: operating systems and compilers. Compilers follow a very complicated logic based on characteristics of language, but there’s an underlying logic. However, operating systems… it’s not that any one concept is particularly challenging, but building such a complicated piece of software in a procedural language… it mystifies me, but there are good reasons why C is used, the most important of which is that the UNIX operating system and the C programming language were designed and built together. Both were fairly radical approaches at that time, and there is no equivalent hybrid low-level/high-level language. People talk about the challenge of languages outside of the imperative paradigm (Lisp and Haskell are often mentioned), and I’ll admit I’m biased in this regard (I’ve taught and used functional languages), but even a multi-paradigm language like Scala is no match in complexity for a language that’s designed to serve as the basis for a bootstrapping compiler and an operating system at the same time. It’s like taking a Ferrari and strapping a giant snow plow on the front and somehow having it work well for both tasks. To put it more simply, you don’t understand C until you understand compilers and operating systems, which makes learning memory management in C++ seem like a trivial exercise in comparison.

Kevin Chesser

The most difficult programming language to learn would definitely have to be malbolge. Part of the goals when creating malbolge was to create the most difficult language to program in. (As a side note another language with a similar goal is befunge. It was created to be the most difficult language to compile Befunge - Esolang) It took years before an actual valid molbolge program even existed and it wasn’t even created by a human. To give you even more understanding of how difficult it is an entire paper was dedicated to writing a 99 bottles of beer program in malbolge (http://www.sakabe.i.is.nagoya-u....)

The fact that code is self altering makes is incredibly confusing. Here is an excerpt from wikipedia that gives you a glimpse into how it is self-altering.

Malbolge has eight instructions. Malbolge figures out which instruction to execute by taking the value [c], adding the value of c to it, and taking the remainder when this is divided by 94. The final result tells the interpreter what to do:

After each instruction is executed, the guilty instruction gets encrypted (see below) so that it won't do the same thing next time, unless a jump just happened. Right after a jump, Malbolge will encrypt the innocent instruction just prior to the one it jumped to instead. Then, the values of both c and d are increased by one and the next instruction is executed.

And of course a Hello World! (I really don’t want to copy from other places but there are so few valid malbolge programs and I think I’d go insane from ever even attempting to try to learn this beast of a language)

 (=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc 
John Purcell
There are, as others mention, programming languages that are design to be difficult to use. For some of them, it takes months for anyone to figure out how to write a "hello world" program in the language.

But among the languages that are commonly used, perhaps C++ is among the hardest, and assembly probably the hardest.

C++ is difficult because of the lack of insulation between you and the computer. It basically just does what you tell it to, even if you tell it to do something ridiculous. There's not so much error checking in there. On top of that the syntax is not exactly thought up to be as easy as possible, so you could work with it for decades and still get caught out. Most people learn it up to a point and then feel that's good enough; they don't need to know every last syntax and implementation quirk.

Assembly language is difficult because it's only a thin layer of translation over actual machine byte code. You need to understand a lot about CPU registers and memory. Commands are more suitable for computers than human beings.
View More Answers