Ask HN: A good IDE/environment for programming beginners?
I'm extremely unhappy about how people are supposed to learn programming nowadays. Not software engineering even, just the old good programming.
I noticed that too often I meet people who tried to took some courses, spent a year or two studying various subjects but still being unable to solve even simplest problems and not knowing even the most basic CS/programming concepts.
Yesterday I've met a person who spent almost two years on a Java course, trying to become a programmer/engineer. This person is extremely dissatisfied that they are still unable to pass any interviews and/or coding challenges. That's not suprising. This person doesn't know what is linked list, recursion, computational complexity, hashmap, binary tree, even the difference between value and reference - nothing. They are motivated and tried to do some self-education too, solve problems on HackerRank - but still nothing. There is an interesting anecdote about HackerRank. This person solved a challenge, asking to merge two sorted lists into one list, by concatenating them and then calling library function to sort it. The problem is that HackerRank accepted this solution as valid. Which in my point of view is totally unacceptable (pun intended) and kills all the pedagogical idea behind the problem. This challenge was supposed to motivate people to read about computational/memory complexity, reinvent/understand mergesort, read about the historical background and internalize the knowledge which is still very useful in our days. But this won't happen because of the very dumb test suite implemented by an idiot.
None of the adults I know were able to successfully learn programming/engineering at a level which would be enough to get a job/internship if they go the "modern" way, when people learn how to use a language and its standard library but ignore low-level concepts and classic data structures and alghorithms. There were some success stories from Arduino hobbyists though.
So I see a pattern. Usually those who started with low-level languages are able to get farther and they have better understanding of the things. Those who started with typed languages were more successful too. But they were extremely well motivated and they were able to somehow overcome the entry barriers. In our days it's extremely hard for a regular novice to follow this way. It wasn't always like that though.
So, I've tried to understand what advice I may give to a regular novice who wants to become a programmer and, later, an engineer with a job.
I still remember how easy was it to learn programming with QBASIC, Borland Turbo Pascal and Borland Turbo C.
The feedback loops were very short, it was possible to easily install the IDE, run it, type something and get the output.
The manuals and books were awesome and easy to understand. It was easy and enjoyable to learn with Turbo C and K&R.
Turbo Pascal with its manual was even easier and it was fun. Wirth's "Alghorithms and Data Structures" was a treasure of useful knowledge. Unfortunately the examples were written in Modula-2 and there was no nice Modula IDE but, still, once you learn the very basics of C or Pascal it was possible to read AaDS and re-implement examples with your language. There were Knuth's books for more advanced students. There was easily accessible context help showing good explanations and examples for every keyword and standard library method.
I can't find anything as nice and enjoyable nowadays. I want a cross-platform IDE (half of the novices use Mac, half Windows) which is extremely easy to setup with some kind of a typed language with observable featureset and without any memory management features. It would be nice if such language supports records and nominal inheritance in some form. It may be a toy/sandbox environment. The standard library should support/simulate input/output streams, files and easy to setup graphics output allowing to draw some primitives. That would be enough. It should be extremely easy to write, run and debug a simple program. Such environment should be accompanied by a good manual and a book similar to "Alghorithms and Data Structures", which would allow students to learn important foundational data structures and alghorithms.
There is nothing.
C plus K&R seem to be a viable option. But the IDEs/environments are either extremely complex to setup for a novice or are total trash which doesn't work/crashes out of the box. I think I've checked everything what's out there. A text editor plus command line may be a viable option but this experience is hard to compare with old Borland IDEs.
There is no good IDE for Pascal. Lazarus is a RAD IDE and anyways it loves to crash.
There is literally nothing for Modula and Oberon, unfortunately, seems to be dead too. There are the books, good books, which we need so much. But there is no programming environment. There is Free Oberon which is almost what I'm looking for, but there is no Mac support and it's poorly maintained too. Half of the documentation is in Russian.
Situation is kinda better with dynamic/interpreted/managed languages but from what I can see it's a very bad idea to start learning in a managed environment.
C# has good IDEs and short feedback loops but it's managed and, still, there is no book comparable with AaDS. The language featureset is insane and some important concepts are badly named (Selectable vs Monad?..).
Java/Kotlin/Scala environments are easy enough to setup (thanks to JetBrains) but, again, these are production things with managed memory, with too rich feature sets and there are no good books teaching novices the CS foundations using these languages. Personally I prefer Scala over everything else and I know that it's an excellent language for a well-motivated novice but, unfortunately, it doesn't work for the regular novices whom I'm seeing too often.
Racket as the IDE plus SICP as the book may seem to be a very good option, but it's LISP (well, Scheme) and I've seen people who (by my advice) finished SICP and got really good understanding of LISPy way of thinking but they were really struggling to move to non-LISPy languages and get a job later and I don't want to advice this anymore. If it weren't Scheme, Racket+SICP would be the perfect learning environment.
Smalltalk (in form of Squeak? or Pharo?) might be an option but I'm not aware of a book similar to AaDS for Smalltalk.
Scratch and Swift playground are, in my opinion, too primitve and the gap between them and commercial programming is too wide. Still, no pointers, no raw memory.
So, I don't know what to advice to a more or less reasonably motivated novice. It seems like the best way to learn the foundations would be a dosbox environment with Turbo Pascal in it but it shouldn't be like that and it's shocking.
So, commercial/production toolchains are bad for novices. There is almost no toolchain intended to be used specifically by novices with a reasonably easy pathway into commercial programming.
I really feel like we've completely failed as an industry - there seems to be literally no good way to introduce new people (not extremely well motivated and brainy superstars) into programming (bar engineering) in our days. And it was lot, lot better 20-30 years ago.
Any thoughts?
UPD: It seems like Free Oberon running under Wine on Mac and natively on Windows plus AaDS for Oberon might be what I'm looking for.