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:
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.
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
Still have a question? Ask your own!