Just want to emphasize that first part; I've seen the second in new hires who passed a coding bootcamp, and it's really weird to watch. One of them even had to see the error message and go back to the code and still puzzle over it for several seconds before realizing what was wrong.
I wonder whether a "richer" editor/IDE, that flags such things immediately upon writing them, could greatly improve the learning experience.
Many tools even point out things such as non-existing variables in scope, which are not strictly "errors" in a dynamic language during edit time.
I really like reading books too, but sometimes the completion-ist part of me is too strong and I shouldn't really do all the exercises.
For beginners I highly recommend Harvard CS50, the best of the best course available for free and paid too.
Dan Grossman from the University of Washington has an excellent course Programming Languages on Coursera: https://www.coursera.org/learn/programming-languages/, which I think would be far more relevant to modern programmers than studying compilers specifically. And I'm glad to see this course listed under the "Core Programming" section of OSSU.
However, I am concerned with the fact that these curated lists lack a unifying idea of what CS is.
If you go to pure math instead, the consensus is clear. A pure math bootcamp, like Math 55, is mostly linear algebra and real analysis, taught from Axler and Rudin in its current iteration.
Simpler math curriculums progress more slowly, or use easier textbooks, but the idea remains the same: Linear algebra and real analysis.
What is the equivalent distilled core of CS? It can't be so many things. There must be a core which you build upon by stacking other courses and textbooks.
My take on this is logic and computation. They are the algebra and calculus of CS, and they are intimately related by the Curry-Howard isomorphism. I find it alarming that CS students are often not taught basics of propositional logic, first-order predicate logic or lambda calculus. It's the basics, and it is really useful.
Software Foundations [1] implements a nice curriculum in line with the ideas I have written about, but it is aimed at graduates and consequently it lacks background. I am still thinking about combinations of textbooks for undergrads that would offer something equivalent. Any suggestions welcome.
N2T teaches digital logic, what Turning saw, how it was physically implemented and how programming languages were and are developed. TLS introduced various topics like the halting problem in an effective and playful manner. Both spark interest, something I find some maths courses fail to do in many people unfortunately.
~Some Existing Touch Point With CS
Teachyourselfcs.com is definitely in the conversation - in general I recommend it to friends who have a pre-existing "gateway" to the field (software engineer or otherwise). The page talks about progressing from "type 2" to "type 1" software engineer - a deeper understanding affording a richer career/experience.
~Relatively Fresh - but have strong intent
For people who are more "virgin" and fresh but are willing to put in the work - I recommend OSSU ("open source curriculum") - and i've found for whatever reason that structure has let them gradient in with more success. (https://github.com/ossu/computer-science)
~Intrigued/Engaged - but intent is still nascent
For people who have a fleeting interest but don't necessarily have the time or intensity about their interest i usually recommend a starter python course - 90% of these people will fall off the path unless there is a more permeable access-point to the space that offers a positive feedback loop. The university of Michigan has some engaging options.