Hi there, I'm the author. Yes this list precisely constitutes the topics in computer science on which I believe a software engineer with an informal education should focus. It's based on my experience of having taught computer science to over 1,000 junior to mid-level engineers, mostly bootcamp grads, in person in small classes over the last 5 years.
I've been meaning to update it slightly, to recommend _Computer Systems: A Programmer's Perspective_ over P&H (although P&H is still excellent) as well as Martin Kleppmann's book _Designing Data-Intensive Applications_ for distributed systems.
For anyone looking to pick up Computer Systems: A Programmer's Perspective, you should probably avoid the Global Edition. From the author's website [0]:
> Note on the Global Edition: Unfortunately, the publisher arranged for the generation of a different set of practice and homework problems in the global edition. The person doing this didn't do a very good job, and so these problems and their solutions have many errors. We have not created an errata for this edition.
If you can't afford the book, it seems like the First North American Edition is available on the Internet Archive, although I'm uncertain of its legality. Remember to support the authors, if not now then hopefully in the future after you get a high paying software engineering job.
I haven't read each edition in order to make a comparison. However, it's probably worth mentioning that, unlike the 3rd edition, the solution manuals for both the 1st and 2nd editions can easily be found online with a quick search. If you intend to sit down and start solving problems then the 2nd edition might be better, since you'd be able to check your answers against the solution manual.
Edit: I actually hadn't looked, but it looks like all the solutions for the 3rd edition are also available online [0].
This book looks interesting, but it's unfortunate that there's no way to get the instructor's book for the answers to the exercises. Sort of diminishes the value of the book for self-learners.
The solution manuals for the 1st and 2nd edition are both easily found online with a quick search. As for the 3rd edition, I was able to find this [0], although I haven't verified if their answers are correct.
But it would appear that you're correct that Pearson doesn't seem interested in selling the 3rd edition solution manual to anyone that isn't an instructor [1]. IMO, fuck their antiquated gate-keeping bullshit.
+1 for Designing Data-Intensive Applications by Martin Kleppmann. A fantastic book, one of the best computer science books I have read! Summary of it and why I like it here:
Hey - just wanted to point out that the webpage currently points to low-quality and potentially unauthorized recordings of 6.824, but it looks like the iteration of 6.824 being offered this semester is offering publicly available (and authorized) recordings of lectures! https://pdos.csail.mit.edu/6.824/schedule.html
This is a great resource, even better for having been honed by actual teaching experience.
I was actually about to suggest added Kleppmann to the list! I think some of the earlier chapters of Kleppmann might actually be good for the databases section as well. Probably the best discussion of transaction isolation that I've read anywhere.
Another recent book that's good for databases (and that might replace or complement the "Architecture of a Database System" paper) is _Database Internals_ by Alex Petrov (O'Reilly, 2019). Like Kleppmann it also covers distributed systems; indeed it's getting harder and harder to separate the two areas these days.
I am thinking of creating a toy DBMS implementation for practice. Since, I would be doing if in off time. I won't be having much time for reading. So, what would you recommend as a starting point?
I've been meaning to update it slightly, to recommend _Computer Systems: A Programmer's Perspective_ over P&H (although P&H is still excellent) as well as Martin Kleppmann's book _Designing Data-Intensive Applications_ for distributed systems.