1. 62

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.

  1.  

  2. 13

    That’s really cool!

    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.

    EDIT:

    For compression, I’d suggest Sayood’s Introduction to Data Compression

    1. 2

      Thanks! It was hard to draw the line :) But I’ve now added a link to CG:PP (and cs184.org) in the FAQ, at least.

      1. 4

        You really should add it as a first-class topic, because it is. Think about how much of your computer is being devoted to drawing text, rendering pictures, and interfacing with users.

        1. 3

          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.

        2. 13

          It would be very nice if there were some sort of test you can take to find out where your knowledge is seriously lacking.

          1. 4

            This is a good point, and I wish I had a way to solve it with something other than an interview. Perhaps a well thought out set of self-check quizzes would do the job.

          2. 11

            Would be nice if there was a resource for type theory there. Types and Programming Languages by Pierce is the canonical intro text

            1. 8

              FYI - Your linked favorite SICP videos are going away from YouTube. Seems Berkeley is putting them behind campus auth.

              I hope you can find another resource! I would find it very useful.

              1. 3

                Time to fire up youtube-dl, anyone?

                Edit: consider it done. Would it be legal for me to share these videos with, say, BitTorrent?

                1. 2

                  Edit: consider it done. Would it be legal for me to share these videos with, say, BitTorrent?

                  I would be surprised if that was legal

                  1. 3

                    Well, shame I guess. I’m sure they’ll end up on torrent trackers for anyone looking to find them anyway.

                    1. 5

                      You can find links to all their lectures (including torrents) on archive.org.

                  2. 2

                    Depends on the jurisdiction :^)

                2. 6

                  This version if SICP is a more modern presentation, completed with downloadable ePub.

                  https://github.com/sarabander/sicp

                  1. 4

                    Thanks for this list! Quite a few items I didn’t knew.

                    1. 4

                      Nice, thank you! On Computer Networking there is An Introduction to Computer Networks by Peter L Dordal.

                      1. 3

                        Elements of Statistical Learning is the go-to text for machine learning and relatively accessible if you have a strong math background. You can find it here for free.

                        The CLRS Introduction to Algorithms is a comprehensive but good textbook for algorithms.

                        I recommend, already mentioned by @cmm, Types and Programming Languages highly.

                        1. 3

                          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.

                          1. 3

                            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.

                            1. 1

                              I don’t think it’s essential. It’s a great book but I think people get more practical benefit from Racket and HtDP:

                              http://www.htdp.org

                              1. 1

                                I searched for people comparing How to Design Programs to The Structure and Interpretation of Computer Programs, and found this short Stack Exchange answer or this short Ubuntu forums post by skytreader (scroll down, it’s the penultimate post in the thread).

                                Are the observations there more or less why you, too, would recommend HtDP over SICP in most cases?

                                1. 1

                                  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:

                                  1. Teaches most of the same concepts.

                                  2. 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.

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

                                  4. 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. ;)

                              2. 1

                                But is it really essential if you’ve been programming for 20 years?

                                A few years ago I tried to go through it because people hyped it everywhere but it was boring and more boring and in the end I just glanced and glossed over it.

                                1. 1

                                  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).

                            2. 2

                              I’m not that big a fan of the dragon book. Spends way too much time on parsing and compiler frontends. I think Engineering a Compiler is a better choice.

                              1. 1

                                I agree that parsing theory is overdone. Personally, I’d say skip LR (and LALR etc) completely. For quick prototyping use a parser generator like AntLR. For production quality (good error messages etc), use a hand-written recursive-descent approach with precedence climbing.

                              2. 1

                                For compilers here is a nice overview of resources. The dragon book is fine for the basics, but not for advanced optimizations (especially in SSA form). Your recommendation is fine.

                                1. 1

                                  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.

                                  1. 1

                                    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 :)

                                    1. 1

                                      looks like very well wrapped things.

                                      1. 1

                                        Awesome use of BassCSS. I’m a Tachyons fan, but any use of that CSS philosophy is a +1 in my book.

                                        I’ll go through this guide through the years. Thanks for your time and effort.