Hi Lobste.rs, I’d love some feedback on this guide from the CS autodidacts among you: are there any great resources that I’ve missed? Or is there advice you wish you’d received earlier in your journeys?

The target audience is software engineers who do not yet have an undergraduate level of understanding of computer science.

You should add a section on graphics, the standard text being Foley and van Dam’s Computer Graphics: Principles and Practice. Goldman’s book is really nice if you like a more geometric/mathematical approach, though probably not as practially useful.

I agree with angersock on this. Ill add that the GUI pretty much created the PC revolution. Then browsers. Then gaming engines drove quite a bit of Intel and AMD decisions about their CPU’s. Also, graphics and CAD were main drivers of Mac and UNIX workstation sales respectively.

So, it’s one of the most high-impact things in CompSci. There’s also tons of opportunities for research there from fundamentals all the way to improving existing products/methods. That includes research funded by the companies themselves with university partners.

When I first decided to become a “programmer” my research showed that Structure and Interpretation of Computer Programs was the book to start with. I largely dismissed it. Then, my SO’s self-taught programmer brother told me to read it. Again, didn’t do it. Guess I better drop the $50 and start some serious learnings.

SICP is really, really essential. It’s not some obscure book about Lisp from the 80s. It’s about programming in general, it’s just using Scheme as an illustration language. There’s stuff about mutability, identity, state, objects etc. that are absolutely fundamental to programming.

These two quotes from your links sum up my view from reading/skimming each:

“ SICP is geared to complete newbies who study at MIT. And so, while it does not assume any programming knowledge, it does assume quite a bit of domain knowledge, e.g. in the fields of electrical engineering, physics and math. Note: these have nothing to do with the concepts being taught, they are just needed to understand the exercises and examples.”

“If you’re around [0,4] (i.e., you can code but you code in a very straightforward manner, auxiliary functions and abstraction means nothing to you, you’re not very good with loops), go for HtDP first. It will introduce you to a very systematic manner of thinking about programming. HtDP is a very good intro to programming without becoming too ”(continuous/calculus) mathematical"."

The advantages of HtDP are as follows:

Teaches most of the same concepts.

It does so in a way a wide audience of non-geniuses or non-engineers can understand. If you can program, you can understand HtDP with time. Lots of people like this had positive comments about HtDP.

Comes with an IDE for the language it teaches. Need I go into the benefits of that?

When you’re done, you’re proficient in a Scheme and development style that you can use for real problems. The reason being it has an IDE, lots of libraries, active community, and so on. Better expertise to have than more academic-focused stuff with possibly less maintenance.

Those are the reasons I recommend HtDP for the person starting. One last benefit of learning Scheme over ML or Haskell when starting these things is how easy it is to modify at language-level to suit your needs. You can more easily build whatever tool you need as a programmer going out. A guy named sklogic even built ML’s and Prologs as macros in his so he can use safe imperative, functional Scheme, or logic programming all in one app. The LISP’s help you use best tool/method for the job. Good so long as you don’t get too wild with the macros. ;)

It depends on what you’ve encountered, I think. There are people who’ve programmed for 20 years for whom some of the material would still be new and possibly enlightening, because they have a lot of programming experience but in a fairly disjoint area of CS. Of course, if that’s the case, they may not care about the material SICP focuses on either; some people in that category would find it stimulating and some would be annoyed or find it irrelevant to their, by that point pretty well established, career. And of course for other people it ends up anticlimactic, because by the point they read it they’ve already encountered most of the interesting ideas in it elsewhere (as it sounds like is the case for you).

Thank you for this resource! Lists of curated/“canonical” resources are often a good thing, especially for novices to a field or subfield who don’t have the technical discernment yet to know what is garbage and what is good.

Are there good lectures available for Distributed Systems somewhere? I find most of the classes are usually just about reading lots of papers. While that’s great and I’m doing it, it would be really fantastic to have an experienced instructor drilling down the principles and practical examples of distributed systems. Thanks :)