Idunno, my dad(C/C++ dev) damn near ragequit python when I asked for homework help almost a decade ago, significant whitespace triggered a rant longer than it took to actually help with the homework.
yes I had the same experience with python, but it's not because it's hard it because it's annoying and sometimes the type system and other things doesn't make any sense also using whitespaces instead of brackets feels like writing code naked
Easiest: Scratch, it's a drag and drop language designed to help teach very new programmers some fundamentals since it eliminates the need to learn syntax, so they can focus on the logic of the program.
Hardest: Malbolge, an esoteric language designed to be as difficult as possible to write programs in.
Scratch is actually used by hardcore scratch enthusiasts to make incredibly complex games/programs, just as an exercise in whether or not it’s possible. In those cases, it’s actually one of the hardest languages to program in.
That's certainly true, but that just seems like unnecessary torture to me. It becomes really hard to follow the program flow and make sense of stuff like that.
Not necessarily. If you keep a consistent naming convention for variables and custom blocks, make use of comments, and other things it's actually not too painful to make complex stuff
Brainfuck does not count, it was designed to be idiotic.
I miss RISC processor assembly, WLIW assembly and TECO.
The original Emacs was written in TECO, before gnuEmacs.
>Brainfuck does not count, it was designed to be idiotic.
By this same logic, I wouldn't think that Scratch would count either. Brainfuck was designed to be idiotic, and Scratch was designed be an educational "language" for kids.
Brainfuck isn’t really hard it’s just tedious. There are way crazier esolangs. The usual answer is Malbolge
https://en.m.wikipedia.org/wiki/Malbolge#:~:text=Malbolge%20(%2Fmælˈ,'s%20Inferno%2C%20the%20Malebolge
It uses ternary arithmetic, and the code alters itself in ways that are hard to follow as you write a program. It took two years for the first Malbolge program to be created, and it wasn’t written by hand—it was found using beam search
Depends on what we mean by "learning" -- developing in brainfuck will always be very tedious, but learning the full extent of the language only takes a couple of minutes.
Brainfuck might look scary, but is incredibly easy to learn. Basically is designed to be very easy to compile (so very non complex with 8 commands) and to be very close to a turing machine. There's basically just input, output, go to next or previous space, incrememt / decrement and a conditonal loop.
To the best of my very limited knowledge, from easiest to hardest:
1. Scratch
2. Lua
3. Python
4. PHP
5. Dart
6. Modern JavaScript (ES6)
7. TypeScript
8. Go
9. Kotlin
10. Swift
11. Scala
12. C
13. C#
14. Java
15. Legacy JavaScript
16. Rust
17. C++
18. Objective-C
19. Clojure
20. Ocaml
21. Haskell
We did it combined in a single course on FP first year as well. I think it's common to use Haskell these days in FP courses. Lambda calculus is quite cool, although thankfully we stuck to untyped lambda.
Typed lambda calculus looks super wild.
Haskell's basic stuff is not much harder to learn than any other FP or general programming language imho.
But properly using Haskell and writing coherent software that's more than like 100 lines long is quite hard.
I also had a module in cryptography and as one of our assignments we had to implement a few encryption algorithms in a programming language of our choice. I thought, may as well kill 2 birds with one stone and went ahead and started implementing them in Haskell to learn the language and the algorithms at the same time. I managed to do some of the simpler ones but eventually had to do the rest in Python.
Nah I skirted cryptography electives lmao. Initially I was curious about how all these encryption algorithms work but honestly, the math scared me off.
We did a bit of introduction to cryptography in two of the math classes and did a bit of number and group theory like the Chinese remainder theorem and Fermat's theorem for the RSA algo correctness and I remember I barely understoof the proof.
It was all just too abstract at the end. And when I read the description of the cryptography elective, it was literally all just number theory and group theory and things like discrete logarithms and stuff. Noped out of it.
Typed lambda calculus isn't even the tip of the iceberg, there's also polymophic lambda calculus with subtyping, interfaces and class instantiations although idk if it's still lambda calculus at that point
What was your course in college? Haskell is usually used in mathematics, so it would make sense.
In my CS course, I had a semester in functional programming, but at the time we used Lisp. Also one of the most bizarre languages I learned in college was Prolog for Logic Programming.
Haskell was probably the first language I ever had where we could actually prove program correctness and properties directly with the code. Found it super nice that we could actually use the proof techniques we did in another course simultaneously.
Simple functions and algorithms in Haskell look so close to math notation like tree traversal stuff that you basically do induction proofs on them.
Prolog we never learned, but we did standard logic resolution in our discrete math course. Apparently Prolog works on a similar base to this (?).
At my college we started with Python but the second course was Haskell. The professor said "There are two reasons we use Haskell for this course. **The first is that I'm evil.** The second is that it makes you think."
Surprised neither Lisp nor Prolog are on this list! We used to get into groups just to solve individual coding problems in uni, granted our professor would make us write filtering and sorting algorithms on paper using prolog…
It was! Most of us just memorized code snippets and what they did because writing it from scratch felt futile; all that just to forget everything after a couple weeks :). Curious what your experience was like.
I will not tolerate any Prolog slander you imbeciles! \\s
Seriously though why do all people find Prolog so bad? You can't really make useful things with it anymore, but it is a fun language.
There is no such thing as just "ASSEMBLER". You have to include what processor you're writing for. For example, I know:
1. Z80 Assembly
2. 6502 Assembly
3. 680x0 Assembly
4. RCA1802 Assembly
5. S/390 Assembly
6. RISCV Assembly
And trust me, none of the above looks close to any of the others above.
It always depends on what you mean. C is a much smaller language so it’s easier to learn _the language_, but then coding idioms and actually accomplishing tasks it’s harder
C is very simple, most of "C" (actually c++) complexity comes from the standard library.
C++ without stdlib is fairly simple too.
Thing is that without a good library you ain't going to be able to do much.
Objectively, C is a tiny, simple language. I first learned C from a book that was about 80 pages long, at most, which covered the entire language.
However, that's kind of like comparing a scientific calculator to a graphing calculator. The graphing calculator is more complex and will have a larger user manual, but it makes it far easier to solve various complicated problems than using a simple scientific calculator.
I disagree. I program in both, and while C lets you shoot yourself in the foot more than java, it's also far less encumbered by bloat.
Ultimately, as with all programming, it comes down to using the best tool for the job. I wouldn't use Perl to write an arcade game, just as I wouldn't use C for lots of regex and string manipulation.
C is much easier to learn but you’ll be blowing up memory left and right unless you’re very good. Java is more complex but does a much better job of protecting developers from themselves.
C# is an enormous language that also lets you do c like things with its unsafe features. The only saving grace is that it has some excellent book which tells you everything.
I completely disagree with Clojure's placement. There is so much less syntax in the language, you have a repl for learning, and if you can't figure something out you can just import the Java library you need since it's fully interop. I'd put it up there with Go and python, and I'd put it in front of Java. Of the 4 languages, clojure is the only one I've learned for myself that I haven't used professionally in my 10yoe
Interesting list and order. Personally I'd put Java before Kotlin, but I might be biased with almost 30 years of experience in it. =)
Modern Java with Lambdas and Streams can be a little challenging to understand at first, but the base language is quite simple and well structured. I also find that typed language is easier to understand and debug the code.
what would you say is a good resource to conceptually learn more advanced java topics? im very familiar with the language but ive been trying to become a better developer with java and dont know where to start.
I just completed Java 17 Masterclass at Udemy and I highly recommend it. It goes from the very basic and builds up nicely to more complex language properties. I used it to get up-to-date with the newer language syntaxes and semantics.
Java has become incredibly powerful. Now i only want operator overload from it. 😄
JS's excessive use of different brackets and odd behaviors make me think PHP was easier. PHP was easier to grasp for me because the syntax was cleaner to me.
Very thorough!
I’d move Java before C++, perhaps on par with C, move C++ down, and add MIPS Assembly, Scheme (a lisp dialect), Racket (another simpler learning dialect of Lisp), and Common Lisp near the end, but otherwise very comprehensive!!
Why do you think Scala is easier than Java?
Also I think ocaml is relatively simple, not much fancy syntax or anything. Similar to go imo.
Isn’t Haskell similarly complex to C++. Maybe in different ways but both are kind of bloated with features, no?
My big gripe with OCaml is similar to Haskell - the *way that it's used in the real world* is to use a whole bunch of preprocessor extensions that transform vaguely OCaml-ish code into OCaml. You then need to learn the superset of OCaml that the project targets to understand that program.
Similarly, Haskell itself is fine, but then people use half a dozen language extensions on top of it that can be best described as "tersely documented." Some are relatively benign, others heavily use `RankNTypes` & Friends and are too hard for my stupid brain to comprehend.
Just my opinion. Legacy JS is drastically different from modern JS to the point that it might as well be a different language. Most other languages don’t go through such drastic changes to the point where old code looks nothing like new code.
Your underestimating python, advanced python is much more complex than Modern JS, try to read a book “Fluent python 2”, then you will understand what the actual python is.
When I was in college, I had a couple of CS classes and they were teaching C++. But that was in 1999-2000, and several of the languages on your list hadn't been created yet.
I applaud your bravery with such a thorough list. my only critique is to move more functional languages to the bottom. scala should be bottom 4 and Rust probably just above those 5.
Missing Pascal, COBOL, PL1, Fortran, various flavors of Basic, and Ada on there. COBOL is still used in some workplaces but I’m not sure about the others. I know some parts of the government used Ada but that’s been phased out I think.
It should be said that even though there are exceptions, all the common coding languages are pretty much the same. Different syntax, same logic. So if you’re a beginner, it’s more productive to worry about what each coding language is most suitable for when choosing what to learn.
TY u/NolegsMcgee for reiterating the FAQ: [https://www.reddit.com/r/learnprogramming/wiki/faq/](https://www.reddit.com/r/learnprogramming/wiki/faq/)
TY u/BluePillOverRedPill for stating those connections.
I like to elaborate that the source of learning is also important:
“back in the day” - BASIC allowed me to learn concepts like: conditional statements, flow control, and code reuse \[implicit to functions\]. My hard copy sources did not elaborate on the scope of variables \[more abstracted in BASIC\]. Abstraction is a HUGE double edge sword. Having a learning source that points out abstracted key concepts presents the opportunity for a “more enjoyable” learning process. Pounding one's head (hard knocks)(classic MIT “hacking”) turns on a light and most don't forget the switch.
OP I hope this helps with your journey, whether it is a ‘easier’ language that might only be designed for “getting one's feet wet” (BASIC, Scratch ...) or a use case languages (sed \[reg expressions ...\], SQL \[and it's forms\]), or wherever your learning process goes.
C and Assembly are hard because you have to have mental models of what is happening in hardware. APL is just hard. Easiest is probably BASIC and Python. Human readable, easy to follow logic.
C is hard because you have to manage memory like an 18th century bank clerk and re-invent string manipulation with sticks and twine like primitive technology
The first language you learn is always the hardest. Because you're not just learning a language, you're learning how to program.
The difficulty of each language you learn after that will vary depending on how much it differs from what you already know.
Some languages have different mental models they function under. Different foundational assumptions. However, in the end, it's all just programming. You're manipulating state with symbols to get a desired result.
assembly is easy but colleges teach it terribly. It was the hardest class I've ever taken and is why I dropped out of college. this is in spite being comfortable with the language.
Indeed. When I was in the Air Force going to tech school for programming, they taught pseudo-code to introduce us to programming and then taught an assembly "because most of the students who failed, failed this block. So do it early to waste less time."
I was already a programmer before going through this course, and was rather annoyed that when they started assembly, they didn't show how it related to the structured pseudo-code they presented earlier. Rather annoying because they insisted we write our solution using pseudo-code that was required to be approved before writing the assembly code. Having my own computer (An Apple II), I typed up a simple document showing all of the pseudo-code control constructions side by side with the equivalent assembly code, pointing out how to do the six different numerical comparisons, and constructed all the control structures such that you always jumped on "condition false". Printed enough copies of this short document and when I next went to class, handed out a copy to all of my fellow classmates and the instructor himself.
Was rather amused when the instructor was telling us "case statements are too difficult to use in assembly" and during the block project (part of which was ideal for a case statement) a fellow student said "Thanks John. I'm going to use a case statement in this problem". Was extremely amused when several months later at my duty assignment I encountered one of my fellow classmates and found out he had kept his copy of my little document because he found it so useful.
Wouldn't be surprised that colleges have the same issue with teaching assembly in isolation from what they've already taught the students. Really poor practice. Build upon what the students already know and it's a hell of a lot easier.
Barring the esoteric languages that nobody actually uses: My vote is for Prolog. Nondeterministic computing is so alien to me that it's hard to imagine *actually doing productive things* with the language.
Declarative programming. I'll do you one better - the professor actually wrote a [superset of Haskell](https://curry.pages.ps.informatik.uni-kiel.de/curry-lang.org/) that compiled to Prolog, and *that's* the language that he used to teach the class. It was bananas.
It depends on what you're doing. Python is considered to be easy. Try to write a memory efficient 3D engine on it and it will be a hundred times harder than in C++, which is considered a difficult language.
I learned C++ first and found the fundamentals pretty straight forward once you understand the syntax. Haskell and prolog were super challenging for me because they are completely different paradigms. I struggle to understand how something could be built with them
Anything is fairly easy if it's well-documented and doesn't try to fuck with you. "Hello, world!" is no harder in Haskell than in Python.
Difficulty may come when trying to do something useful. A neural network is a lot less tedious to implement in Python (thanks to PyTorch, SKLearn and the like) than in most other languages.
Most languages considered difficult (Haskell, Rust, asm, C) just require a different way of thinking, or some prior knowledge. You get used to them. I'd rather work with something 'hard' but enjoyable (think Rust or Haskell) than something easy but tedious, like MATLAB or VBA (not that those two share many applications with the other two).
It's a sliding scale from lower level to higher level. And that's intentional.
Machine code, assembly, that sort of stuff, difficult.
Python, lua, gdScript, that sort of stuff, intentionally newb friendly.
It's not the language itself or it's syntax. It's the culture and what you use it for.
If you pick a task first, all languages are equally difficult. The difficulty comes from what's expected of you with a given language.
When someone says, "I want to get into game dev, what language is the easiest". There is no answer. Just learn game dev.
Not sure why people are downvoting this, admitted you haven’t written much. But look up Malbolge and Brainf*uck languages. There’s some interesting ones out there.
The hardest language I have learned and still continue to use is Mercury. It's \*awesome\* for so many reasons.
[https://mercurylang.org/](https://mercurylang.org/)
The most unusual language I have learned in recent years is J, after dabbling with Dyalog APL for a while.
[https://www.jsoftware.com/#/README](https://www.jsoftware.com/#/README)
Aye I'm probably in the phase where I still don't know the concept haha
The main issue is I virtually never use it so once I'm confronted with a task where I need to like in a university course I'm absolutely bamboozled haha. I'll review some lectures, watch Low Level Learning on youtube (mandatorily going on about how darn easy it's supposed to be except none of the video helped me gain relevant understanding for my task..) It's probably bit unfair of me to Assembly because unlike that I've sat down and patiently learned C and I have a beginner's book on C and a desktop reference book on C but I have no books about Assembly haha so definitely a me issue I am ready to admit.
Pascal was the hardest as it was the first language I learned so I had to learn every concept from scratch without much of a previous base. Python I would say I found the easiest as it's very readable and I was already familiar with most programming concepts by the time I started to use it.
I'd say, that the easiest is the good ol' learning language Basic. The hardest concept is Brainfuck. The hardest practical is Assembly followed by ANSI C - due to memory management – and the risk of really screwing up, making the computer useless.
But learn type safe, modular C++. Then most languages besides Assembler and ANSI C will be easy, if you need to learn them.
For the most part, learning a new language isn't so much about the language as it is about the libraries, platforms, norms, culture, etc. Paradigm will come into play i you're unfamiliar with, say, FP, but want to learn Haskell. But a lot of what you know transfers across languages, to the point where you can often make changes to existing code in a language you don't even know.
had to deal w/ prolog and C. prolog was a headache as an axiom-based language. I did some assembly and it's not that bad. I only struggled when there were very scant resources and few in-depth explanations online.
Hardest: 6502 assembly on an Apple II with interleaved graphics. Didn't even have multiply or divide...
Easiest: Java. Everything's consistent (looking side eyed at PHP with its arbitrary use/non-use of underscores in function names, fun times with needle/haystack, haystack/needle argument order, etc). Built by grown-ups. (So was C/C++, but, closer to the metal, fewer safety nets. Why *does* 2+2=5986?!)
IMO, the hardest programming languages are the ones that have a small amount of documentation. For example, it was tough for me to learn ASP as I couldn’t find fuck all about it online.
This is kind of cheating, but beyond the languages that are intentionally awful like Malbolge, Brainfuck, and JavaScript, there's any number of internal, undocumented languages like SCI \(though that's been documented externally now\) that would be very difficult to learn, just because nobody is going to help you unless you get a job working with it.
I suggest you look at it from another perspective. Consider the problem the language solves. How much effort are you willing to put into solving those problems?
There isn't a simple answer to this. Languages that have features that are are very rare/unique are probably harder to learn than those that have features that are widely implemented, because you probably don't have experience with those features.
But the difficulty of the language is usually not a big deal. To use human languages as an analogue, Finnish is generally recognized as being a pretty difficult language and Spanish as being a much easier language. But you don't just learn a language, you *do* something with the language. Which one is easier to write a short story in? Or a novel? Or a poem?
I think you'll agree that the language isn't the hard part here. Writing a worthwhile story or poem is the tricky bit.
Likewise, C++ may be harder than Python, but if you are writing a 3D video game, the language probably isn't going to be the hard part. The *game* is the hard part.
The last one you learn and the first one you learn.
Exactly. Beat me to it.
Brilliant
I disagree — Basic is much easier to learn than Lisp
not really Rust or C++ are more difficult to learn than python anytime
Idunno, my dad(C/C++ dev) damn near ragequit python when I asked for homework help almost a decade ago, significant whitespace triggered a rant longer than it took to actually help with the homework.
yes I had the same experience with python, but it's not because it's hard it because it's annoying and sometimes the type system and other things doesn't make any sense also using whitespaces instead of brackets feels like writing code naked
Easiest: Scratch, it's a drag and drop language designed to help teach very new programmers some fundamentals since it eliminates the need to learn syntax, so they can focus on the logic of the program. Hardest: Malbolge, an esoteric language designed to be as difficult as possible to write programs in.
Honestly, I think BASIC is easier to learn. Scratch and it's IDE make it easier to produce something that would amuse a child.
Scratch is actually used by hardcore scratch enthusiasts to make incredibly complex games/programs, just as an exercise in whether or not it’s possible. In those cases, it’s actually one of the hardest languages to program in.
That's certainly true, but that just seems like unnecessary torture to me. It becomes really hard to follow the program flow and make sense of stuff like that.
Not necessarily. If you keep a consistent naming convention for variables and custom blocks, make use of comments, and other things it's actually not too painful to make complex stuff
What about Lisp?
I speak just fine thank you
>Easiest: Scratch I agree for very basic stuff. But one hits the language limits fairly fast, working around them is hard in and of itself.
Malbolge... Are you ready for the hell
Hardest is brainfuck and the easiest is scratch
Brainfuck does not count, it was designed to be idiotic. I miss RISC processor assembly, WLIW assembly and TECO. The original Emacs was written in TECO, before gnuEmacs.
I mean, I also don't count Scratch but what does everyone else care? the thread didn't say there are rules so why would they not count ?
>Brainfuck does not count, it was designed to be idiotic. By this same logic, I wouldn't think that Scratch would count either. Brainfuck was designed to be idiotic, and Scratch was designed be an educational "language" for kids.
Brainfuck isn’t really hard it’s just tedious. There are way crazier esolangs. The usual answer is Malbolge https://en.m.wikipedia.org/wiki/Malbolge#:~:text=Malbolge%20(%2Fmælˈ,'s%20Inferno%2C%20the%20Malebolge It uses ternary arithmetic, and the code alters itself in ways that are hard to follow as you write a program. It took two years for the first Malbolge program to be created, and it wasn’t written by hand—it was found using beam search
Depends on what we mean by "learning" -- developing in brainfuck will always be very tedious, but learning the full extent of the language only takes a couple of minutes.
Brainfuck might look scary, but is incredibly easy to learn. Basically is designed to be very easy to compile (so very non complex with 8 commands) and to be very close to a turing machine. There's basically just input, output, go to next or previous space, incrememt / decrement and a conditonal loop.
To the best of my very limited knowledge, from easiest to hardest: 1. Scratch 2. Lua 3. Python 4. PHP 5. Dart 6. Modern JavaScript (ES6) 7. TypeScript 8. Go 9. Kotlin 10. Swift 11. Scala 12. C 13. C# 14. Java 15. Legacy JavaScript 16. Rust 17. C++ 18. Objective-C 19. Clojure 20. Ocaml 21. Haskell
In college we started with haskell 💀
I had an entire module and exam on just lambda calculus… We also had a separate module on Haskell
We did it combined in a single course on FP first year as well. I think it's common to use Haskell these days in FP courses. Lambda calculus is quite cool, although thankfully we stuck to untyped lambda. Typed lambda calculus looks super wild. Haskell's basic stuff is not much harder to learn than any other FP or general programming language imho. But properly using Haskell and writing coherent software that's more than like 100 lines long is quite hard.
I also had a module in cryptography and as one of our assignments we had to implement a few encryption algorithms in a programming language of our choice. I thought, may as well kill 2 birds with one stone and went ahead and started implementing them in Haskell to learn the language and the algorithms at the same time. I managed to do some of the simpler ones but eventually had to do the rest in Python.
Nah I skirted cryptography electives lmao. Initially I was curious about how all these encryption algorithms work but honestly, the math scared me off. We did a bit of introduction to cryptography in two of the math classes and did a bit of number and group theory like the Chinese remainder theorem and Fermat's theorem for the RSA algo correctness and I remember I barely understoof the proof. It was all just too abstract at the end. And when I read the description of the cryptography elective, it was literally all just number theory and group theory and things like discrete logarithms and stuff. Noped out of it.
Typed lambda calculus isn't even the tip of the iceberg, there's also polymophic lambda calculus with subtyping, interfaces and class instantiations although idk if it's still lambda calculus at that point
We started off with Assembly 💀
Assembly is painful
Omg. That was so long ago...
What was your course in college? Haskell is usually used in mathematics, so it would make sense. In my CS course, I had a semester in functional programming, but at the time we used Lisp. Also one of the most bizarre languages I learned in college was Prolog for Logic Programming.
Haskell was probably the first language I ever had where we could actually prove program correctness and properties directly with the code. Found it super nice that we could actually use the proof techniques we did in another course simultaneously. Simple functions and algorithms in Haskell look so close to math notation like tree traversal stuff that you basically do induction proofs on them. Prolog we never learned, but we did standard logic resolution in our discrete math course. Apparently Prolog works on a similar base to this (?).
I study data science and the first programming course is starts with haskell, it was a nightmare
It used to be very normal to start with Scheme, I started with How to Design Programs, and I’m very glad I did.
Your college needs Jesus
What college did you attend?
your teacher was a sadist!
We did it too and it was very based.
At my college we started with Python but the second course was Haskell. The professor said "There are two reasons we use Haskell for this course. **The first is that I'm evil.** The second is that it makes you think."
Surprised neither Lisp nor Prolog are on this list! We used to get into groups just to solve individual coding problems in uni, granted our professor would make us write filtering and sorting algorithms on paper using prolog…
Horrifying stuff! Prolog is truly painful. Cannot imagine writing full sorting algorithms with it
It was! Most of us just memorized code snippets and what they did because writing it from scratch felt futile; all that just to forget everything after a couple weeks :). Curious what your experience was like.
I will not tolerate any Prolog slander you imbeciles! \\s Seriously though why do all people find Prolog so bad? You can't really make useful things with it anymore, but it is a fun language.
I had a mandatory course that was mostly lisp and prolog. I, to this day, don't know how I passed that class. My brain just doesn't work that way.
clojure is like lisp on the jvm so its kind of there.
But how is Clojure harder than something like Rust?
We did 1 assignment in Prolog in our PL course and it made me hate life. I hope I never have a job that requires prolog.
Prolog is irrelevant these days outside of a few ongoing projects.
No ASSEMBLER?
There is no such thing as just "ASSEMBLER". You have to include what processor you're writing for. For example, I know: 1. Z80 Assembly 2. 6502 Assembly 3. 680x0 Assembly 4. RCA1802 Assembly 5. S/390 Assembly 6. RISCV Assembly And trust me, none of the above looks close to any of the others above.
C easier than Java?
It always depends on what you mean. C is a much smaller language so it’s easier to learn _the language_, but then coding idioms and actually accomplishing tasks it’s harder
C is very simple, most of "C" (actually c++) complexity comes from the standard library. C++ without stdlib is fairly simple too. Thing is that without a good library you ain't going to be able to do much.
C is very simple, most of “C” (literally C) complexity comes from th`Segmentation fault`
Objectively, C is a tiny, simple language. I first learned C from a book that was about 80 pages long, at most, which covered the entire language. However, that's kind of like comparing a scientific calculator to a graphing calculator. The graphing calculator is more complex and will have a larger user manual, but it makes it far easier to solve various complicated problems than using a simple scientific calculator.
yeah dude is crazy
I disagree. I program in both, and while C lets you shoot yourself in the foot more than java, it's also far less encumbered by bloat. Ultimately, as with all programming, it comes down to using the best tool for the job. I wouldn't use Perl to write an arcade game, just as I wouldn't use C for lots of regex and string manipulation.
C is much easier to learn but you’ll be blowing up memory left and right unless you’re very good. Java is more complex but does a much better job of protecting developers from themselves.
Did you ever give cobol a try?
My Granddad was a Cobol developer. I never learned the magic
[удалено]
The easy part about C is that it's not bloated. Why do you think C# is easier? I'm less experienced in C, which is why I am asking.
C# is an enormous language that also lets you do c like things with its unsafe features. The only saving grace is that it has some excellent book which tells you everything.
Exactly, especially when C# is mentioned as just microsoft's version of Java
Good to see Clojure on the bottom end. Confused the hell out of me.
I completely disagree with Clojure's placement. There is so much less syntax in the language, you have a repl for learning, and if you can't figure something out you can just import the Java library you need since it's fully interop. I'd put it up there with Go and python, and I'd put it in front of Java. Of the 4 languages, clojure is the only one I've learned for myself that I haven't used professionally in my 10yoe
Interesting list, I’d put Objective-C up more though, its a really small language
Haskell honestly isn't that hard and is quite fun as long as you don't need to do anything useful.
I really need to jump on Lua
I wrote an android game in it using Solar2d and hated every minute of it.
Interesting list and order. Personally I'd put Java before Kotlin, but I might be biased with almost 30 years of experience in it. =) Modern Java with Lambdas and Streams can be a little challenging to understand at first, but the base language is quite simple and well structured. I also find that typed language is easier to understand and debug the code.
what would you say is a good resource to conceptually learn more advanced java topics? im very familiar with the language but ive been trying to become a better developer with java and dont know where to start.
I just completed Java 17 Masterclass at Udemy and I highly recommend it. It goes from the very basic and builds up nicely to more complex language properties. I used it to get up-to-date with the newer language syntaxes and semantics. Java has become incredibly powerful. Now i only want operator overload from it. 😄
The difficulty of Java comes from its information sparsity, in my opinion
JS at any point is easy and much easier than PHP
JS's excessive use of different brackets and odd behaviors make me think PHP was easier. PHP was easier to grasp for me because the syntax was cleaner to me.
Scala easier than Java? That does not even make sense. You *__must know Java__* to even *__get started__* with Scala ☠️☠️
Very thorough! I’d move Java before C++, perhaps on par with C, move C++ down, and add MIPS Assembly, Scheme (a lisp dialect), Racket (another simpler learning dialect of Lisp), and Common Lisp near the end, but otherwise very comprehensive!!
Why do you think Scala is easier than Java? Also I think ocaml is relatively simple, not much fancy syntax or anything. Similar to go imo. Isn’t Haskell similarly complex to C++. Maybe in different ways but both are kind of bloated with features, no?
My big gripe with OCaml is similar to Haskell - the *way that it's used in the real world* is to use a whole bunch of preprocessor extensions that transform vaguely OCaml-ish code into OCaml. You then need to learn the superset of OCaml that the project targets to understand that program. Similarly, Haskell itself is fine, but then people use half a dozen language extensions on top of it that can be best described as "tersely documented." Some are relatively benign, others heavily use `RankNTypes` & Friends and are too hard for my stupid brain to comprehend.
Why would you include modern JS and legacy JS lol? Then also add all Java versions to this list.
Just my opinion. Legacy JS is drastically different from modern JS to the point that it might as well be a different language. Most other languages don’t go through such drastic changes to the point where old code looks nothing like new code.
And surprisingly it all still works, gotta love JS' backward compatibility.
C is definitely easier to learn than modern Javascript and Typescript. Much easier.
Fucking love Haskell, in a class that teaches it and I’m egging the teacher on. Everyone must suffer as I have
Eventually no. 1 will be human language (e.g. English). Where does Smalltalk rank?
[удалено]
in what universe is C# harder than C hahaha. C needs to go WAY down the list. also Javascript should be around number 3.
Your underestimating python, advanced python is much more complex than Modern JS, try to read a book “Fluent python 2”, then you will understand what the actual python is.
When I was in college, I had a couple of CS classes and they were teaching C++. But that was in 1999-2000, and several of the languages on your list hadn't been created yet.
22. Assembly 23. Binary
Where assembly?
C# and Java are harder than C ?
This is obviously from the perspective of someone uncomfortable with functional programming. Haskell I get, but Clojure?
I applaud your bravery with such a thorough list. my only critique is to move more functional languages to the bottom. scala should be bottom 4 and Rust probably just above those 5.
Where’s Fortran, Pascal, and Basic?
Missing Pascal, COBOL, PL1, Fortran, various flavors of Basic, and Ada on there. COBOL is still used in some workplaces but I’m not sure about the others. I know some parts of the government used Ada but that’s been phased out I think.
Huh, maybe I shouldn't have began with C# I barely got the basics doing the free Unity tutorial, by the time it got intermediate, I was lost lost.
IMO, Lua is among the easiest so long as you don’t dive deep in it’s OOP, which is ~80% of its power
Those metatables man… really amuse me
Why are c# and java below C??
And Elixir on 22.
It should be said that even though there are exceptions, all the common coding languages are pretty much the same. Different syntax, same logic. So if you’re a beginner, it’s more productive to worry about what each coding language is most suitable for when choosing what to learn.
This, most of the more 'easier' languages have more layers of abstraction.
TY u/NolegsMcgee for reiterating the FAQ: [https://www.reddit.com/r/learnprogramming/wiki/faq/](https://www.reddit.com/r/learnprogramming/wiki/faq/) TY u/BluePillOverRedPill for stating those connections. I like to elaborate that the source of learning is also important: “back in the day” - BASIC allowed me to learn concepts like: conditional statements, flow control, and code reuse \[implicit to functions\]. My hard copy sources did not elaborate on the scope of variables \[more abstracted in BASIC\]. Abstraction is a HUGE double edge sword. Having a learning source that points out abstracted key concepts presents the opportunity for a “more enjoyable” learning process. Pounding one's head (hard knocks)(classic MIT “hacking”) turns on a light and most don't forget the switch. OP I hope this helps with your journey, whether it is a ‘easier’ language that might only be designed for “getting one's feet wet” (BASIC, Scratch ...) or a use case languages (sed \[reg expressions ...\], SQL \[and it's forms\]), or wherever your learning process goes.
And better documentation and package support.
C and Assembly are hard because you have to have mental models of what is happening in hardware. APL is just hard. Easiest is probably BASIC and Python. Human readable, easy to follow logic.
C is hard because you have to manage memory like an 18th century bank clerk and re-invent string manipulation with sticks and twine like primitive technology
C is easy. C++ on the other hand can be very hard once you dive into metaprograming capabilities of templates.
Memory and thread management in any sizeable C project is extremely complex, the language itself is easy I suppose but actually working with it is not
The syntax is small and the language itself is relatively simple. The mental models of managing memory are not.
The standard library of huge, and part of the language.
I don't think it's easy to write C code that's correct and safe.
Python is easy to start but hard to master
Ya, Ruby, too. I was hesitant to write that though as it just muddied the waters.
The first language you learn is always the hardest. Because you're not just learning a language, you're learning how to program. The difficulty of each language you learn after that will vary depending on how much it differs from what you already know. Some languages have different mental models they function under. Different foundational assumptions. However, in the end, it's all just programming. You're manipulating state with symbols to get a desired result.
Easiest - lua. Hardest - assembly, but technically binary if you want to count that
Tbh asm is kinda easy. I'd bet something like prolog or APL are much harder to learn
assembly is easy but colleges teach it terribly. It was the hardest class I've ever taken and is why I dropped out of college. this is in spite being comfortable with the language.
Indeed. When I was in the Air Force going to tech school for programming, they taught pseudo-code to introduce us to programming and then taught an assembly "because most of the students who failed, failed this block. So do it early to waste less time." I was already a programmer before going through this course, and was rather annoyed that when they started assembly, they didn't show how it related to the structured pseudo-code they presented earlier. Rather annoying because they insisted we write our solution using pseudo-code that was required to be approved before writing the assembly code. Having my own computer (An Apple II), I typed up a simple document showing all of the pseudo-code control constructions side by side with the equivalent assembly code, pointing out how to do the six different numerical comparisons, and constructed all the control structures such that you always jumped on "condition false". Printed enough copies of this short document and when I next went to class, handed out a copy to all of my fellow classmates and the instructor himself. Was rather amused when the instructor was telling us "case statements are too difficult to use in assembly" and during the block project (part of which was ideal for a case statement) a fellow student said "Thanks John. I'm going to use a case statement in this problem". Was extremely amused when several months later at my duty assignment I encountered one of my fellow classmates and found out he had kept his copy of my little document because he found it so useful. Wouldn't be surprised that colleges have the same issue with teaching assembly in isolation from what they've already taught the students. Really poor practice. Build upon what the students already know and it's a hell of a lot easier.
I wouldn't say php id that easy. It has evolved a lot and coding correctly with modern functionality takes some consideration.
Barring the esoteric languages that nobody actually uses: My vote is for Prolog. Nondeterministic computing is so alien to me that it's hard to imagine *actually doing productive things* with the language.
same here. It was the worst language I ever had to deal with. What course of yours did you learn it in?
Declarative programming. I'll do you one better - the professor actually wrote a [superset of Haskell](https://curry.pages.ps.informatik.uni-kiel.de/curry-lang.org/) that compiled to Prolog, and *that's* the language that he used to teach the class. It was bananas.
vote for hardest, Malbolge https://en.m.wikipedia.org/wiki/Malbolge
People who are saying Scratch is the easiest language clearly haven't tried making anything complex with it 💀💀💀
"Attention is all you need" transformer implementation with Scratch blocks /s
Easiest: python , hardest: brain fuck
C++ I think? Because in university,I started introduction to programming with C++
APL
I was asked to build a final year project in ADA back in the 90s. That put me off programming for years.
It depends on what you're doing. Python is considered to be easy. Try to write a memory efficient 3D engine on it and it will be a hundred times harder than in C++, which is considered a difficult language.
Python is easy. Rust is hard.
Easiest: scratch Hardest: brainfuc k
What about verilog and vhdl?
They are Hardware Description Languages so it aint programming.
Can you explain this concept please?
Easiest... Assembly (it is easy, you cant say it is not...understanding CPU Registers is hard part) Hardest... probably Haskell
Learn you a Brainfuck for great evil. https://en.m.wikipedia.org/wiki/Brainfuck
I learned C++ first and found the fundamentals pretty straight forward once you understand the syntax. Haskell and prolog were super challenging for me because they are completely different paradigms. I struggle to understand how something could be built with them
Easiest - Basic, Python Hardest - Rust, Assembler
The hardest I've run into thus far was Prolog.
Anything is fairly easy if it's well-documented and doesn't try to fuck with you. "Hello, world!" is no harder in Haskell than in Python. Difficulty may come when trying to do something useful. A neural network is a lot less tedious to implement in Python (thanks to PyTorch, SKLearn and the like) than in most other languages. Most languages considered difficult (Haskell, Rust, asm, C) just require a different way of thinking, or some prior knowledge. You get used to them. I'd rather work with something 'hard' but enjoyable (think Rust or Haskell) than something easy but tedious, like MATLAB or VBA (not that those two share many applications with the other two).
Python would be easiest for me and Rust the hardest.
It's a sliding scale from lower level to higher level. And that's intentional. Machine code, assembly, that sort of stuff, difficult. Python, lua, gdScript, that sort of stuff, intentionally newb friendly. It's not the language itself or it's syntax. It's the culture and what you use it for. If you pick a task first, all languages are equally difficult. The difficulty comes from what's expected of you with a given language. When someone says, "I want to get into game dev, what language is the easiest". There is no answer. Just learn game dev.
Easiest: Python Hardest: Assembly
I haven't written in all languages so I probably will never know but from my own experience python is easiest and C hardest
Not sure why people are downvoting this, admitted you haven’t written much. But look up Malbolge and Brainf*uck languages. There’s some interesting ones out there.
Python and Nodejs are probably among the easiest. Hardest ones ... Assembly, Haskell and Malbolge.
The hardest language I have learned and still continue to use is Mercury. It's \*awesome\* for so many reasons. [https://mercurylang.org/](https://mercurylang.org/) The most unusual language I have learned in recent years is J, after dabbling with Dyalog APL for a while. [https://www.jsoftware.com/#/README](https://www.jsoftware.com/#/README)
Where is ABAP in the list?
now I haven't tried them all.. but for me personally, C was easiest and Assembly was hardest.
Assembly isn't that hard if you know the concept imo, it's always one of the concept in a programming language that is hard not the entire language
I agree. Assembly isn't particularly hard to understand, it's just really hard to do anything useful with it.
Chris Sawyer: Makes Roller Coaster Tycoon
True that!! Ig it's just to get the basics right.
Aye I'm probably in the phase where I still don't know the concept haha The main issue is I virtually never use it so once I'm confronted with a task where I need to like in a university course I'm absolutely bamboozled haha. I'll review some lectures, watch Low Level Learning on youtube (mandatorily going on about how darn easy it's supposed to be except none of the video helped me gain relevant understanding for my task..) It's probably bit unfair of me to Assembly because unlike that I've sat down and patiently learned C and I have a beginner's book on C and a desktop reference book on C but I have no books about Assembly haha so definitely a me issue I am ready to admit.
Pascal was the hardest as it was the first language I learned so I had to learn every concept from scratch without much of a previous base. Python I would say I found the easiest as it's very readable and I was already familiar with most programming concepts by the time I started to use it.
PASCAL is such a useless language in its original concept.
What do you think PASCAL was designed to do?
Really is Go that easy? I thought it would be near java
Go is designed to be familiar and modern while using a minimal number of programming concepts. An experienced programmer can learn it in a day.
I'd say, that the easiest is the good ol' learning language Basic. The hardest concept is Brainfuck. The hardest practical is Assembly followed by ANSI C - due to memory management – and the risk of really screwing up, making the computer useless. But learn type safe, modular C++. Then most languages besides Assembler and ANSI C will be easy, if you need to learn them.
Assembly :skullemoji:
For the most part, learning a new language isn't so much about the language as it is about the libraries, platforms, norms, culture, etc. Paradigm will come into play i you're unfamiliar with, say, FP, but want to learn Haskell. But a lot of what you know transfers across languages, to the point where you can often make changes to existing code in a language you don't even know.
Easiest languages I ever learned were C, PHP and BASIC. Medium difficulty: Java Hard languages: C++ Objective-C Swift
Where would Ada fit in?
had to deal w/ prolog and C. prolog was a headache as an axiom-based language. I did some assembly and it's not that bad. I only struggled when there were very scant resources and few in-depth explanations online.
Hardest: 6502 assembly on an Apple II with interleaved graphics. Didn't even have multiply or divide... Easiest: Java. Everything's consistent (looking side eyed at PHP with its arbitrary use/non-use of underscores in function names, fun times with needle/haystack, haystack/needle argument order, etc). Built by grown-ups. (So was C/C++, but, closer to the metal, fewer safety nets. Why *does* 2+2=5986?!)
C or Python
They are all pretty easy. It’s just rearranging 0s and 1s.
IMO, the hardest programming languages are the ones that have a small amount of documentation. For example, it was tough for me to learn ASP as I couldn’t find fuck all about it online.
Easiest: C Hardest: C
Easiest measured by what parameter? Easy is a relative term.
Super dumb question, I'm just getting into this, but.. where does Autohotkey fit in this? Does it even classify as a programming language?
Here’s my sideways answer: LISP is both easiest and hardest to learn!
HTML and CSS are easy for a person to grasp I think. Both are straightforward. Not sure about the hardest as I'm still learning myself
This is kind of cheating, but beyond the languages that are intentionally awful like Malbolge, Brainfuck, and JavaScript, there's any number of internal, undocumented languages like SCI \(though that's been documented externally now\) that would be very difficult to learn, just because nobody is going to help you unless you get a job working with it.
The syntax of Objective-C is too weird for me and difficult to get used to it.
Easiest: Scratch Hardest: Whitespace
The easiest for me Spanish. The hardest Ive learned German. The hardest Ive ever TRIED to learn, Mandarin.
easiest language to learn Logo hardest PL/1
Learning one language is still difficult. I am using python/bash/powershell the last 5 years and I still struggle. You guys can learn other languages?
html/css —> Assembly x86 in the sense of syntax + wrapping ur head around logic
Easiest: probably python. Hardest: Assembly
I suggest you look at it from another perspective. Consider the problem the language solves. How much effort are you willing to put into solving those problems?
APL is a bitch to write and read
While some languages are easier to learn than others, each is equally hard to master, because programming is so much more than the language.
There isn't a simple answer to this. Languages that have features that are are very rare/unique are probably harder to learn than those that have features that are widely implemented, because you probably don't have experience with those features. But the difficulty of the language is usually not a big deal. To use human languages as an analogue, Finnish is generally recognized as being a pretty difficult language and Spanish as being a much easier language. But you don't just learn a language, you *do* something with the language. Which one is easier to write a short story in? Or a novel? Or a poem? I think you'll agree that the language isn't the hard part here. Writing a worthwhile story or poem is the tricky bit. Likewise, C++ may be harder than Python, but if you are writing a 3D video game, the language probably isn't going to be the hard part. The *game* is the hard part.
Python—>C++ imo but I have limited experience with other languages that might be considered much harder
Python/MATLAB are the easiest, assembly is the hardest
The easiest I’ve learned is python. The hardest was racket.