Remix.run Logo
october8140 2 days ago

I always see lists of like 100 MUST HAVE books for Computer Science. Is there like a top 5 must have books for Computer Science?

maqp 2 days ago | parent | next [-]

Top 5 will never cover the field. Here's my top 10

* Brookshear and Brylow - Computer Science - An Overview

* Forta - Teach yourself SQL in 10 minutes

* Stallings - Computer Organization and Architecture

* Stallings - Operating Systems - Internals and Design Principles

* CLRS

* Kurose, Ross - Computer Networking - A Top Down Approach

* Sipser - Introduction to The Theory of Computation

* Stallings, Brown - Computer Security - Principles and Practice

* Aumasson - Serious Cryptography

* Russell, Norvig - Artificial Intelligence - A Modern Approach

And even this fails to cover programming languages. Python is the lingua franca of the field. Most past recommended books are getting outdated, but perhaps Matthes' Python Crash Course 3rd edition.

kenjackson a day ago | parent | next [-]

SICP still deserves to be on such lists.

I also love Concrete Mathematics.

I prefer the Tanenbaum OS books over Stallings. In particular the design and implementation book, although it is more than a decade old now.

wlruys 2 days ago | parent | prev | next [-]

Just to add to this, I think John Levine's Linkers and Loaders is also a great reference.

currysausage a day ago | parent | prev | next [-]

When I need a refresher on the basics of Python, I refer to Python Distilled, and when I want a deep dive, I turn to Fluent Python. Reading these books makes me feel like I'm sitting next to an experienced, witty colleague.

I will take a look at Python Crash Course.

rchiang a day ago | parent | prev | next [-]

I agree that five books won't ever cover every discipline withing Computer Science. Just providing an introductory book, a university-level textbook, and an expert/graduate-level reference for each discipline turns into a long list.

See if this blog post helps out with sorting through the various CS subjects: https://tolerablecoder.blogspot.com/2022/03/a-short-list-of-...

commandlinefan 2 days ago | parent | prev [-]

> * Kurose, Ross - Computer Networking - A Top Down Approach

Over TCP/IP Illustrated?

rchiang a day ago | parent [-]

I'd make the argument that TCP/IP Illustrated Volume 1 covers the details of TCP/IP in a very "packet and fields" oriented way. Volume 2 goes into a lot of the "data structures and implementation" way. That makes for a very good supplemental reference, but makes for a less than ideal introductory textbook on the subject of computer networking.

Kurose's book really does take the top-down approach from high level networking concepts through the application layer to the transport layer and downward. It provides just enough of the necessary details (here's a datagram with fields A and B) over a comprehensive list of all the details (here's every field, every field size, and a list of every field option).

pipes 2 days ago | parent | prev | next [-]

Not sure what your goal is, but If like me you don't have a computer science degree, and want to fill some gaps, this site is fantastic.

https://teachyourselfcs.com/

See the "still too much section". If you want the top two books they recommend if you don't have time for the rest.

throw-qqqqq 2 days ago | parent | prev | next [-]

It’s very dependent on the type of work you end up doing IMO. Sort of like “which programming language should I learn?”. Not a great answer, I know..

bmez 2 days ago | parent [-]

Given unlimited time, read all of them, learn all the languages. It will all help make you a better programmer in your preferred language. With limited time (as a normal being), start with the top 100 books. Any of them. The next will be simpler than the first...

I have an M.Sc. in Comp.Sci. Flicking through books like these, all the chapter titles resonate with courses, exams, and problems we solved. It also makes me realise I have probably forgotten more than I like to think.

On the other hand, bashing my head against graph theory and logic, has made me a much better programmer. Similarly, the hours spent in Van Roy and Haridi's fairly abstract and technically language-agnostic "Concepts, Techniques and Models of Computer Programming" made me primed to learn a lot of languages fast - because I had the primitives mastered.

Jhsto 2 days ago | parent | prev | next [-]

I got no particular book recommendation, but this book seems more about the numbers than relations -- maybe my PDF search is broken, but both 'type theory' and 'category theory' return 0 results. I would recommend to also look into those if you are interested in mathematics of computer science.

segmondy 2 days ago | parent | prev | next [-]

no, there's no such agreeable thing. everyone has their own idea. but if i was to recommend such today, i would say, go on a self discovery method and find your idea books for algorithms/algorithm analysis & data structure, automata theory, programming languages, operating systems & machine learning.

anthk 2 days ago | parent | prev | next [-]

Concrete Abstraction and next, SICP, both for Scheme. If you do these, you already understood most of the grounds of CS; learning another language will be a piece of cake.

mgaunard 2 days ago | parent | prev | next [-]

It's more useful to practice programming through projects. Then once you feel you're missing the knowledge for a particular problem you're trying to solve, read up about that one.

roadside_picnic a day ago | parent | next [-]

Projects are essential, but I've found there is a huge problem with your advice: you have no clue about the possible solution surface.

My advice to learners has been "try to learn as much about a topic as someone who has taken the subject in college and forgotten about it".

For example consider calculus: Someone who took calc 20 years ago and hasn't used it since will probably forget exactly how to compute most derivatives and integrals. But if someone mentions an optimization problem "we need to know when this curve peaks" or asks something involving finding the area under a curve, alarm bells should start ringing. They'll know this can be done, and likely go grab a calc book to refresh.

Another example I run across all the time, which is the opposite scenario: Survival analysis. I have been on countless teams where somebody needs to understand something like churn or the impact of a offering a discount that hasn't expired yet, etc. These are all classic survival analysis problems, yet most people are ignorant that this field of study even exists! Because of this I've seen so many times where people complain that "we'll have to wait months or years to see if these changes impact customer lifetime!" (note: if anyone out there is doing Churn or LTV analysis and aren't familiar with survival analysis, you are most certainly approaching it incorrectly).

I've seen a lot of people get frustrated with self study because they try to learn the material too well. If you aren't going to be using survival analysis soon, it's not really worth remembering all the details of how to implement a Kaplan Meier curve. But if you even have a vague sense of what problem this solves, when you encounter that problem in a project, you know where to go back to. Then you typically walk away with a much stronger sense of the subject then if you had studied it harder in the first place.

layer8 a day ago | parent | prev | next [-]

Computer science is to programming what physics is to engineering. They are not the same thing. You can do some programming without knowing computer science, but a general knowledge of computer science will give you a much more solid foundation, and for some aspects is indispensable.

criddell 2 days ago | parent | prev | next [-]

Thats a little like saying if you want to learn mechanical engineering, fix things around your home and then do research when you get stumped.

Building a bunch of software projects probably isn’t a very efficient way of learning computer science. You might figure out things like big-O or A* on your own, but a more academic approach is going to take you further, faster.

mgaunard 2 days ago | parent [-]

It's well established that practical project work is what works best at producing tangible results, and most institutions that aim to produce the best programmers focus on that.

I can understand this is not the approach preferred by academic types which is a strong community on hackernews.

Most people are more motivated to understand the theory because it helps them solve a practical problem, rather than theory for the sake of theory.

criddell 2 days ago | parent [-]

I thought this thread was about computer science. Working on a programming project is related to computer science in the same way that welding together a shelf is related to mechanical engineering.

ghaff 2 days ago | parent | next [-]

Being "handy" around the house (or even more advanced tinkering) and a mechanical engineering degree--maybe especially from a good school--are absolutely not the same thing.

criddell 2 days ago | parent [-]

Totally agree! And being able to whip together a webapp for your church is absolutely not the same thing as computer science.

Computer scientists often program but not all programmers are computer scientists.

mgaunard 2 days ago | parent | prev [-]

An elitist view disconnected from reality.

Even something like game theory was only developed and earned nobel prizes because of its applications to making money in finance.

bee_rider 2 days ago | parent | prev [-]

That seems more like a necessary precondition, than a path to learning computer science. Like you will probably need to learn penmanship and multiplication tables before you get into real mathematics, but, that isn’t really mathematics.

louthy a day ago | parent | prev [-]

TAOCP