Maybe worth mentioning that the author has also written a book, Midnight's Simulacra, which I found quite enjoyable. Kinda Pynchon meets DFW meets Greg Egan, if Egan was focused more on gritty engineering rather than abstruse physics.
Some of these books are quite old (like 20 years old or more), I wonder if there isn't newer books on the same subject but with more recent algorithms or methods.
For instance the book "Metric and Multidimensional Data Structures" from Samet, is described as very encyclopedic, but it's from 2006, isn't it missing new research? I'm not sure a twenty years old encyclopedia is very useful in computer science as the field move somewhat fast.
Last time I touched that book was 14 years ago. Yeah not only it is missing a bunch of recent algorithms and quantization methods like HNSW but also as a reference it devotes many many pages to the zoo of tree based methods that frankly did not feel very iluminating at the time an was mostly completely useless since then.
So how do you call people who love to read books like these in their free time, but hate working in the software industry? I hate with passion the “engineering talks”, the “architecture review sessions”, the “PR code reviews”, etc. Have been working for over 15 years for multiple different companies. I never liked a single one of them.
When family asks if i like my job, it’s not so straightforward to answer
I rather like this list of books. Anybody who follows the "Church of Edsger Dijkstra" can never go wrong :-)
I was rather surprised by the author's mention of The Anatomy of a High-Performance Microprocessor which few people have heard of. It is a great concrete case-study to follow and understand.
Network Algorithmics is an excellent guide to performance engineering (app level/OS/hardware). There is an updated 2nd edition which i have not yet browsed. It is relevant for everybody and not just for people making networking devices only.
Stepanov's From Mathematics to Generic Programming and The Elements of Programming shows you how to map your programming language constructs onto abstract algebra such that your "Program" implements a "Model" of that "Theory". Do not go to the second book (which should be in the advanced section) without reading the first more introductory book.
Crochemere et al's, Algorithms on Strings is new to me and seems relevant to NLP (used in LLMs?). Anybody browsed/read this care to share their opinions?
Crochmere is about deterministic algorithms on strings, think regex, and doesn’t have much to do with modern NLP. I’ve found Stanford’s CS166 to be helpful when learning about these algorithms https://web.stanford.edu/class/archive/cs/cs166/cs166.1146/
This is a good question. The title made me think of gritty skills and knowledge that help get the job done, but may not be considered best practices. The list, however, suggests I've misunderstood.
Of course, the author does state,
> these are books to read so that you can cut motherfuckers with knives.
Understanding Formal Methods by Jean-Francois Monin - This is the best for getting a good grip on the breadth, concepts and sample tools for Formal Mathematics/Specification/Verification. Gives a map of the whole domain. Will force you to learn and understand a large set of mathematics, logic, its mapping to CS-theory/PLT and finally shows how they all come together in specific languages/tools. The chapters alternate between the needed abstract mathematics/logic and concrete languages/tools applying them.
Because everything is so succinct and precise (a graduate course in ~250 pages!), you will need to consult other detailed textbooks/AI tutor to understand difficult concepts. Specifically, you would need to consult detailed texts on the languages/tools you are interested in.
This is particularly important today for use with AI. Without knowing the mathematics/logic involved one cannot direct an agent correctly nor verify its output properly.
There are over 30 books here. Some are quite hefty, e.g. CLRS is over 1000 pages.
Am I supposed to believe the author of this rec list has read all 30+ of these, cover-to-cover?
If so, how many additional books have they read which didn't make the list?
Because I would ideally like their "recommended books" list to be, say, the top 10% of the books they've read. So this list would be most credible if the author has read ~300 books, then recommended the top ~30 to us.
Somehow I doubt that.
Experiment: If you have a favorite CS book, please reply to this comment stating your favorite CS book, and the estimated total number of CS books you've read. I'll bet such a thread would be more valuable/higher-signal than OP.
Isn't it likely that this article is the result of the authors findings in multiple similar experiments?
For instance, having not read TAoCP personally, I can still reccomend it based on the fact that just about everyone reccomends it and critical words against Knuth I've ever heard were "I wish he'd adopt a modern writing pipeline so he could finish the books faster".
Out of ~15 CS books read, my top pick would be “Learn You A Haskell For Great Good”.
Admittedly most of the CS books I have read are these instructional, O’reilly style books (often teaching a specific language) as opposed to academic texts. But regardless…
It’s a well written book. It introduces Haskell in a comfortable way, at a good pace. And I do like the humor. Or at least, I did when I read it years ago.
It’s also one of the few language specific books that I felt generally broadened me as a programmer. Worth a read regardless of whether you intend to actually use Haskell.
This is exactly what I am doing. I decided in 2022 that I'd record what books I read, and upon completion, write a review of them and rate them, too. I've divided my lists to fiction and non-fiction (so not strictly tech, because I read my tech books a long time ago!).
It also gives me a good indication of how fast I am reading (do I work to live?) and how my taste changes over time.
CLRS is much more a reference textbook than one you read cover to cover. Even when I took a class that used the book, we only read a few chapters of it. Based on those few chapters, plus one or two that I read later in life, I'd happily recommend it as a reference to others. I don't think you need to read all of it to do that.
Mostly because I view them as two sides of the same coin --- one shows how to design software, the other shows how to document and write the software which one has formally designed.
Walking around my house I found 95 books at first counting --- but I maintain two lists of directly focused on programming books (obviously incompleat):
https://www.goodreads.com/review/list/21394355-william-adams... --- fair number of these I have not yet read, and because they touch on programs I'm not likely to be working with, probably won't, but are listed because I really believe in Literate Programming and want to foster/advocate for it where possible.
That Ousterhout book is really good. I read it over about two weeks on the shitter. Very succinct. My favourite is how he describes what makes a good module, namely a good module is deep and narrow (has a small API but packs non-trivial functionality), rather than wide and shallow (large API but doesn't really do much).
I love Knuth but have not yet added Literate Programming to my library. Have been hoping to find it used somewhere (along with Concrete Mathematics) but hasn't turned up yet.
It's a great book (as is this entire series, and I'm not saying that just 'cause I found a typo and point of improvement in Digital Typography_ and got a Reward Check), but one can get the gist of it from:
and finding a suitable tool for your language of choice and doing a small project --- tangle/weave is such a basic concept that it's notorious for folks rolling their own --- heck, I was able to do it (w/ a bit of help: https://tex.stackexchange.com/questions/722886/how-to-write-... )
That said, I bought a second copy as a gift from Thriftbooks.com and it was a reasonable price.
As chance would have it, I know the author personally. It is virtually certain that he has read all 30 cover to cover. It is nearly as likely that he’s read many more in order to pick out his highlights.
And on CLRS, since GP brought it up specifically, that was one of the two textbooks for the algorithms course (which was really algorithms and theory of computation at that time) back when he was a GT undergrad. So he's had a long time to read them, though he probably didn't take all of the last 26 or 27 years to finish it.
Deep knowledge! How passé. Haven’t you heard that with AI knowing things is out and being nutrient-dense is in? Did you think Knuth or Dijkstra would help you stand out in the slurry? Don’t you know that in processing individual flavors are chemically stripped and a flavor “pack” is then applied to provide a uniform consistent taste? Knuth may have been born in Wisconsin but has spent most his life in California, even if that delicate flavor were to survive the stripping process (good luck!), there is no chance it would survive the freezing. And that’s if you are lucky! Most biomass will end up as pellets for the power plants, and I doubt they care about your knowledge of algorithms.
Please do us all a favor and take this yesteryear concept of sharing knowledge and human advice and restrict it to the portions of the internet that have been selected for publication in the “time capsule” scheduled for deep storage under data center 8099FZN, the former site of what you re-enactment nerds call “the Smithsonian”. Or just ask Claude to do it for you. It’s unnecessary expenditure of joules, never teaching.
This is a list of books for programmers, not computer scientists, with the exception of Knuth's book, which is for both.
For example, Hopcroft & Ullman's "Formal Languages and their Relation to Automata" is nowhere to be found, neither is its second edition "Introduction to Automata Theory, Languages and Computation". Nor is there anything else on formal languages and automata, or complexity theory, boolean, propositional, and first-order logic, boolean satisfiability, (gasp) category theory, type theory, and so on and so forth.
So why not? Obviously programming texts are very useful and you have to be on top of that material if you want to call yourself a "computer scientist", but why is all the theoretical computer science missing? Don't "streetfighting computer scientists" need it? How do you get in a fight with someone who knows their finite state automata from their pushdown automata, and don't expect to get a bloody nose?
Maybe you skipped the Advanced section? TAPL and the Lambda Calculus are definitely not for the typical programmer-not-scientist, and Okasaki's text is debatable, depending on the person and need.
I love these books, but in a poor job market AND "AI can do it anyway", it's not going to get much attention.
Despite "AI can it" is not even true, anyone with a brain will let AI fill in the details but let a "streetfighting computer scientist" make the architecture AND check the AI contributions. I would tell you to look into how the artcraft applications are made but I bet that's too much trouble too.
How about you just try it? Demonstrate getting claude, the best model, making a big application for you. See if it works. Have it make Excel or Call Of Duty, like seems popular. Try it! It won't work! It'll look a bit like it works but it won't, while using $10k or so in tokens, but critically, what happens when you find flaws.
It will fix bugs, but will systematically require more tokens to do so and bog down more than more. After a few more thousand dollars worth of tokens it starts recreating old bugs every time you ask it to fix something, then takes ages fixing those, and eventually it gets so bad it notices and breaks the process off before it even fixes what you asked.
Maybe that's why both Claude and OpenAI have started making ridiculous amounts of test (I'm all for test driven development, BUT according to me if your test file is more than twice the length of the source, something's gone wrong and you need a better strategy for testing)
I’m always a bit baffled by people who go “you know what people need? A list of 12.000 pages worth of books that would take them multiple years of full-time studying to seriously work through!”.
Which one tells me how to do a hadouken?
TigerDirect uppercut
Maybe worth mentioning that the author has also written a book, Midnight's Simulacra, which I found quite enjoyable. Kinda Pynchon meets DFW meets Greg Egan, if Egan was focused more on gritty engineering rather than abstruse physics.
Some of these books are quite old (like 20 years old or more), I wonder if there isn't newer books on the same subject but with more recent algorithms or methods.
For instance the book "Metric and Multidimensional Data Structures" from Samet, is described as very encyclopedic, but it's from 2006, isn't it missing new research? I'm not sure a twenty years old encyclopedia is very useful in computer science as the field move somewhat fast.
The fundamentals won't be different. Get the fundamentals first.
Last time I touched that book was 14 years ago. Yeah not only it is missing a bunch of recent algorithms and quantization methods like HNSW but also as a reference it devotes many many pages to the zoo of tree based methods that frankly did not feel very iluminating at the time an was mostly completely useless since then.
So how do you call people who love to read books like these in their free time, but hate working in the software industry? I hate with passion the “engineering talks”, the “architecture review sessions”, the “PR code reviews”, etc. Have been working for over 15 years for multiple different companies. I never liked a single one of them.
When family asks if i like my job, it’s not so straightforward to answer
He mentions people like you right up front, as being forced to read “design slatterns”.
(I actually laughed when I read that, even if it is a bit unkind: not the criticism of GoF/patterns but the use of “slattern” in the 21st century).
I rather like this list of books. Anybody who follows the "Church of Edsger Dijkstra" can never go wrong :-)
I was rather surprised by the author's mention of The Anatomy of a High-Performance Microprocessor which few people have heard of. It is a great concrete case-study to follow and understand.
Network Algorithmics is an excellent guide to performance engineering (app level/OS/hardware). There is an updated 2nd edition which i have not yet browsed. It is relevant for everybody and not just for people making networking devices only.
Stepanov's From Mathematics to Generic Programming and The Elements of Programming shows you how to map your programming language constructs onto abstract algebra such that your "Program" implements a "Model" of that "Theory". Do not go to the second book (which should be in the advanced section) without reading the first more introductory book.
Crochemere et al's, Algorithms on Strings is new to me and seems relevant to NLP (used in LLMs?). Anybody browsed/read this care to share their opinions?
Crochmere is about deterministic algorithms on strings, think regex, and doesn’t have much to do with modern NLP. I’ve found Stanford’s CS166 to be helpful when learning about these algorithms https://web.stanford.edu/class/archive/cs/cs166/cs166.1146/
whats exactly streetfighting scientist ?
Possibly adjacent to street fighting mathematics or Street Epistemology.
It conveys taking a topic that is normally just used in ivory-tower academic circles and applying it to solve real and immediate problems.
https://ocw.mit.edu/courses/18-098-street-fighting-mathemati...
https://www.streetepistemology.com/what-is-street-epistemolo...
This is a good question. The title made me think of gritty skills and knowledge that help get the job done, but may not be considered best practices. The list, however, suggests I've misunderstood.
Of course, the author does state,
but this doesn't clarify a great deal.Well, I'm not sure a VP would appreciate a tech kniving the prod server, but sometimes it's necessary.
For the "Advanced CS Streetfighter" you need;
Understanding Formal Methods by Jean-Francois Monin - This is the best for getting a good grip on the breadth, concepts and sample tools for Formal Mathematics/Specification/Verification. Gives a map of the whole domain. Will force you to learn and understand a large set of mathematics, logic, its mapping to CS-theory/PLT and finally shows how they all come together in specific languages/tools. The chapters alternate between the needed abstract mathematics/logic and concrete languages/tools applying them.
Because everything is so succinct and precise (a graduate course in ~250 pages!), you will need to consult other detailed textbooks/AI tutor to understand difficult concepts. Specifically, you would need to consult detailed texts on the languages/tools you are interested in.
This is particularly important today for use with AI. Without knowing the mathematics/logic involved one cannot direct an agent correctly nor verify its output properly.
There are over 30 books here. Some are quite hefty, e.g. CLRS is over 1000 pages.
Am I supposed to believe the author of this rec list has read all 30+ of these, cover-to-cover?
If so, how many additional books have they read which didn't make the list?
Because I would ideally like their "recommended books" list to be, say, the top 10% of the books they've read. So this list would be most credible if the author has read ~300 books, then recommended the top ~30 to us.
Somehow I doubt that.
Experiment: If you have a favorite CS book, please reply to this comment stating your favorite CS book, and the estimated total number of CS books you've read. I'll bet such a thread would be more valuable/higher-signal than OP.
>Experiment: If you have...
Isn't it likely that this article is the result of the authors findings in multiple similar experiments?
For instance, having not read TAoCP personally, I can still reccomend it based on the fact that just about everyone reccomends it and critical words against Knuth I've ever heard were "I wish he'd adopt a modern writing pipeline so he could finish the books faster".
I’ll bite.
Out of ~15 CS books read, my top pick would be “Learn You A Haskell For Great Good”.
Admittedly most of the CS books I have read are these instructional, O’reilly style books (often teaching a specific language) as opposed to academic texts. But regardless…
It’s a well written book. It introduces Haskell in a comfortable way, at a good pace. And I do like the humor. Or at least, I did when I read it years ago.
It’s also one of the few language specific books that I felt generally broadened me as a programmer. Worth a read regardless of whether you intend to actually use Haskell.
This is exactly what I am doing. I decided in 2022 that I'd record what books I read, and upon completion, write a review of them and rate them, too. I've divided my lists to fiction and non-fiction (so not strictly tech, because I read my tech books a long time ago!).
It also gives me a good indication of how fast I am reading (do I work to live?) and how my taste changes over time.
(interested can see my profile on HN for link)
CLRS is much more a reference textbook than one you read cover to cover. Even when I took a class that used the book, we only read a few chapters of it. Based on those few chapters, plus one or two that I read later in life, I'd happily recommend it as a reference to others. I don't think you need to read all of it to do that.
Tie: _A Philosophy of Software Design_ by John Ousterhout
https://www.goodreads.com/en/book/show/39996759-a-philosophy...
and: _Literate Programming_ Donald Ervin Knuth
https://www-cs-faculty.stanford.edu/~knuth/lp.html
Mostly because I view them as two sides of the same coin --- one shows how to design software, the other shows how to document and write the software which one has formally designed.
Walking around my house I found 95 books at first counting --- but I maintain two lists of directly focused on programming books (obviously incompleat):
https://www.goodreads.com/review/list/21394355-william-adams... --- fair number of these I have not yet read, and because they touch on programs I'm not likely to be working with, probably won't, but are listed because I really believe in Literate Programming and want to foster/advocate for it where possible.
https://www.goodreads.com/review/list/21394355-william-adams... --- most of these are read, and as noted, this is badly incompleat (but may be affected by some of the books I counted being on other shelves such as "Typography")
That Ousterhout book is really good. I read it over about two weeks on the shitter. Very succinct. My favourite is how he describes what makes a good module, namely a good module is deep and narrow (has a small API but packs non-trivial functionality), rather than wide and shallow (large API but doesn't really do much).
I love Knuth but have not yet added Literate Programming to my library. Have been hoping to find it used somewhere (along with Concrete Mathematics) but hasn't turned up yet.
It's a great book (as is this entire series, and I'm not saying that just 'cause I found a typo and point of improvement in Digital Typography_ and got a Reward Check), but one can get the gist of it from:
http://literateprogramming.com/
and finding a suitable tool for your language of choice and doing a small project --- tangle/weave is such a basic concept that it's notorious for folks rolling their own --- heck, I was able to do it (w/ a bit of help: https://tex.stackexchange.com/questions/722886/how-to-write-... )
That said, I bought a second copy as a gift from Thriftbooks.com and it was a reasonable price.
As chance would have it, I know the author personally. It is virtually certain that he has read all 30 cover to cover. It is nearly as likely that he’s read many more in order to pick out his highlights.
And on CLRS, since GP brought it up specifically, that was one of the two textbooks for the algorithms course (which was really algorithms and theory of computation at that time) back when he was a GT undergrad. So he's had a long time to read them, though he probably didn't take all of the last 26 or 27 years to finish it.
Just FYI, you don't need to read books cover to cover.
Even when recommending them?
The author is an old college friend who was notorious at Georgia Tech for his insatiable reading habit. It actually wouldn't surprise me.
Total books over the years, probably between 200 to 300.
Here’s some of my favourites, cover to cover:
- Steven’s TCP/IP Illustrated
- Maxwell’s Linux Core Kernel
- Tanenbaum’s MINIX book
- Petersen’s Mastering EMacs
- Grune’s Parsing Techniques
- Raymond’s TAOUP
- Schneier’s Applied Cryptography
- “The” Rust book (same as post)
Deep knowledge! How passé. Haven’t you heard that with AI knowing things is out and being nutrient-dense is in? Did you think Knuth or Dijkstra would help you stand out in the slurry? Don’t you know that in processing individual flavors are chemically stripped and a flavor “pack” is then applied to provide a uniform consistent taste? Knuth may have been born in Wisconsin but has spent most his life in California, even if that delicate flavor were to survive the stripping process (good luck!), there is no chance it would survive the freezing. And that’s if you are lucky! Most biomass will end up as pellets for the power plants, and I doubt they care about your knowledge of algorithms.
Please do us all a favor and take this yesteryear concept of sharing knowledge and human advice and restrict it to the portions of the internet that have been selected for publication in the “time capsule” scheduled for deep storage under data center 8099FZN, the former site of what you re-enactment nerds call “the Smithsonian”. Or just ask Claude to do it for you. It’s unnecessary expenditure of joules, never teaching.
Streetfighting without math? How quaint.
http://streetfightingmath.com
This is a list of books for programmers, not computer scientists, with the exception of Knuth's book, which is for both.
For example, Hopcroft & Ullman's "Formal Languages and their Relation to Automata" is nowhere to be found, neither is its second edition "Introduction to Automata Theory, Languages and Computation". Nor is there anything else on formal languages and automata, or complexity theory, boolean, propositional, and first-order logic, boolean satisfiability, (gasp) category theory, type theory, and so on and so forth.
So why not? Obviously programming texts are very useful and you have to be on top of that material if you want to call yourself a "computer scientist", but why is all the theoretical computer science missing? Don't "streetfighting computer scientists" need it? How do you get in a fight with someone who knows their finite state automata from their pushdown automata, and don't expect to get a bloody nose?
Maybe you skipped the Advanced section? TAPL and the Lambda Calculus are definitely not for the typical programmer-not-scientist, and Okasaki's text is debatable, depending on the person and need.
I love these books, but in a poor job market AND "AI can do it anyway", it's not going to get much attention.
Despite "AI can it" is not even true, anyone with a brain will let AI fill in the details but let a "streetfighting computer scientist" make the architecture AND check the AI contributions. I would tell you to look into how the artcraft applications are made but I bet that's too much trouble too.
How about you just try it? Demonstrate getting claude, the best model, making a big application for you. See if it works. Have it make Excel or Call Of Duty, like seems popular. Try it! It won't work! It'll look a bit like it works but it won't, while using $10k or so in tokens, but critically, what happens when you find flaws.
It will fix bugs, but will systematically require more tokens to do so and bog down more than more. After a few more thousand dollars worth of tokens it starts recreating old bugs every time you ask it to fix something, then takes ages fixing those, and eventually it gets so bad it notices and breaks the process off before it even fixes what you asked.
Maybe that's why both Claude and OpenAI have started making ridiculous amounts of test (I'm all for test driven development, BUT according to me if your test file is more than twice the length of the source, something's gone wrong and you need a better strategy for testing)
I’m always a bit baffled by people who go “you know what people need? A list of 12.000 pages worth of books that would take them multiple years of full-time studying to seriously work through!”.
lae, there is nothing about self defense, martial arts or first aids