Ask HN: Book recommendations for CS fundamentals for a self-taught programmer?

moonlitroar | 37 points

I started out as a business analyst and technical product manager at a startup before transitioning to software engineer job family there and in my 2 subsequent roles over the past 6 years. It sounds like your management is especially supportive of you making this transition internally, which is going to be very helpful.

I want to add a caveat that your manager and colleagues should be a resource for you when tackling projects at work, and not to hesitate to ask pragmatic questions about the project(s) you might pitch in on there. It's ok to not have all the fundamentals down, as long as you're working to be a net positive on the project(s).

I went through some of the books listed in the teach yourself CS resource. https://teachyourselfcs.com/

A subset of the resources listed there are probably the most pragmatic for the topics you asked, but you might discover that you're interested in other areas of CS as you slowly work through them. I think it's ok to nibble away at exercises while juggling your family and work obligations.

* Structure and Interpretation of Computer Programs - SICP. If the book doesn't necessarily click right away, doing a subset of the Scheme exercises are still worthwhile.

* Computer Systems: A Programmer's Perspective - CS:APP. Incredibly helpful knowledge about low-level programming.

* Computer Networking: A Top-Down Approach - You mentioned having a home lab, and more networking understanding will help contextualize some of your work.

patch-n | 11 hours ago

The recommendations in this thread so far do suggest a lot of nice books - CS:APP and SICP - but given your description of previous struggles with more academic stuff, along with the request for "practical examples or projects", I'm not sure they are right for you. By all means take a look, but don't be discouraged if they don't fit what you're after. An algorithm book with a somewhat different tone that you might check out is Skiena's Algorithm Design Manual. I've been reading Ousterhout's A Philosophy of Software Design recently and that might also be something that would interest you.

However, I might suggest that books and theoretical knowledge are not the main things you need right away. I moved into software engineering after a long time in science. I had done plenty of coding, and had a pretty decent amount of theoretical knowledge, but there was still quite a bit of practical adjustment. I really like Rzor's suggestion of https://missing.csail.mit.edu to start with.

Beyond that, I think maybe I would find some specific codebases that you'd like to understand better, and start with reading more of those. I feel like that's often better than books for picking up idiomatic usage and patterns in given domains. As you hit specific barriers, I think it will be much easier to pick up the intrinsic motivation to dip back into theoretical knowledge at that point.

bkcooper | 11 hours ago

The structure and interpretation of computer programs. SICP as it is often called:

https://en.m.wikipedia.org/wiki/Structure_and_Interpretation...

jb1991 | 11 hours ago

With a supportive manager like yours, you should ask to get connected with someone in engineering who might mentor you a bit. If your current side work was driven from that end, you would quickly figure out how the culture works there and if you can get comfortable. You may have the luxury of something like an internship without the hassle.

Given the context you provide, I would suggest you try an online course or two rather than books. There are plenty of free ones but stick to those from credible sources like universities. With ADHD, you will struggle over dry textbooks. The external structure provided by a course would probably work better even with your improved health. If you start with a single self-paced course, you can go as fast as you like and avoid boredom. Burn through it in a weekend, great! Take it slower, also fine. The current lesson covers material you already know, skip it!

Ask your manager what language(s) are used at your company if you don't already know, and filter courses to focus on that for the most rapid progress to your goal.

wai1234 | 11 hours ago

I will probably recommend csprimer, this is hands down one of the best introductions that I found and I recommended to a lot of people who reached out to me. The order I will probably recommend is the following

1. Programming: Beyond the basics

2. Computer Systems

3. Operating Systems

4. Algorithms and Data Structures

5. Computer Networks

This is going to take time but it will be worth your time.

For discrete Math I sincerely recommend you to take a look at this book "Discrete Mathematics with Applications by Susanna Epp. This is an excellent book and it has good problems.

I will also recommend you to look at https://fa24.datastructur.es/ this is a very good beginner course on data structures that is completely free by UC Berkeley

codenlearn | 8 hours ago

Algorithms in a Nutshell. Massive bang for the buck and very approachable. Get a book on Discrete Mathematics for set theory, combinatorial etc. For understanding how computers actually work, I learned to code on a 6510 so that wasn't really optional. I did check out Elements of Computing Systems: Building a Modern Computer from First Principles though which will give you a great understanding.

I didn't find SICP to be that fantastic as I already learned a lot of the principles from the masses of books I've read and software systems I've taken apart to understand.

I can also recommend taking Coursera courses on compilers, ML, architecture, anything interesting from a good US university. At least if they're still a thing :-)

radicalbyte | 11 hours ago

Rob Conery's "The Imposter's Handbook"

whitepoplar | 11 hours ago

Teach Yourself Computer Science[0] is a great resource, but if you have ADHD or focus issues, the CS Primer[1] (by the same curator) might suit you better. It costs up to $75/month depending on your location, but it’s worth it. I also recommend The Imposter’s Handbook and The Imposter’s Roadmap by Rob Conery.

[0]https://teachyourselfcs.com/

[1]https://csprimer.com/

https://bigmachine.io/

elorm | 11 hours ago
[deleted]
| 11 hours ago

I can't help with books. I knew I couldn't teach myself, so I took a boot camp and it was worth every penny. I took out a 14%-ish loan but paid it off. In my early background, I used to be a tech support analyst.

Honestly, if your manager suggested it, do not be scared and take advantage of the opportunity. Be humble, ask questions, find the senior programmer that loves to talk and they will teach you everything.

adamredwoods | 10 hours ago

A key subject is Logic. Logic is the Calculus of CS and should be your first stop. I recommend:

* Logic for Computer Scientists by Uwe Schoening

* Logic in Computer Science by M. Huth and M. Ryan

The first one is short, very elegant and doable. The second one is a bit longer, but also at freshman level.

There are PDFs circulating on the Internet. Skim through those before buying a hardcopy.

nextos | 11 hours ago

My friend Oz has a few resources here that many have found helpful (me included!)

* https://teachyourselfcs.com - book list and open course suggestions

* https://csprimer.com - Oz's own curriculum for CS fundamentals

whatrocks | 11 hours ago

The Elements of Computing Systems, by Noam Nisan and Shimon Schocken.

At the end of the day, CS deals with computers. The book guides you through building and programming your own computer.

I'm a CompEng PhD myself and going through it right now. I keep finding gems at every page.

romesmoke | 11 hours ago

For CS fundamentals, I would say "Computer Science: A Programmes Perspective" covers a good portion.

https://csapp.cs.cmu.edu/

me_vinayakakv | 11 hours ago

Thanks for the help, everyone! I think I'll start with "The Imposter's Handbook" and "CS Primer", as they seem to be more geared toward what I'm looking for.

I do feel a lot better after reading everyone's comments here, and will definitely talk with my manager about maybe starting this transition soon, maybe in a month or two.

moonlitroar | 10 hours ago

Book is not enough though. Fundamentals is hard ! Knowing is different from mastering.

revskill | 3 hours ago
[deleted]
| 11 hours ago

[dead]

a40yoStudent | 11 hours ago