TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Ask HN: What are the most fundamental books on computer science?

474 pointsby michaluover 5 years ago
I&#x27;m relatively new to CS (4 years) and I&#x27;ve seen a lot of great book recommendations here. But every discipline has it&#x27;s most fundamental books ... e.g. philosophy -&gt; Socrates, Plato, Aristotle, civil law -&gt; code civil, christianity -&gt; bible, etc. one should read to get a truly deep understanding.<p>What are those books for CS?

78 comments

reacwebover 5 years ago
Structure and Interpretation of Computer Programs (), Introduction to Automata Theory, Languages and Computation (Hopcroft Ullman), don knuth&#x27;s art of computer programming, Tanenbaum&#x27;s Modern Operating Systems, Compilers: Principles, Techniques, and Tools5 (Aho Sethi Ullman)
评论 #21312310 未加载
评论 #21315224 未加载
评论 #21317710 未加载
评论 #21313086 未加载
omarhaneefover 5 years ago
CS is such a wide field, I think that fundamental texts mean different things to different people. These are some examples of various CS verticals (from off the top of my head), and each has canonical texts:<p>For instance, there is a whole subset devoted to turing machines, the halting problem, finite state machines, provability, incompleteness, the set of all sets, diagonalization proofs etc<p>There is a whole subset devoted to programming languages: computational complexity, reducing the time spent in loops, and so on.<p>Then there is a whole bunch spent on best practices: git and other version control, review, commenting style.<p>Then there is this actual thing called programming: learning different languages, arguing when functional is better than object oriented, please build a web server in prolog as an exercise, and so on.<p>Then there is a bunch about operating systems, and where the hardware meets the software, and garbage collection, and parsing and all that stuff.<p>Then databases are their own thing: boyce-codd normal form, ACID properties, is the web a database? how do you prove the ACID properties? Distributed databases, and B-trees time for storage and retrieval.<p>These are just various sort of &quot;verticals&quot;.<p>I myself like to think of it in terms of specializations: data science&#x2F;machine learning is one, web apps are another, mobile apps are another and so on. Each specialization depends on what useful thing you are trying to achieve.
评论 #21312352 未加载
评论 #21315607 未加载
bo1024over 5 years ago
CS is like math, not philosophy -- the fundamental ideas are gradually refined by a community, and eventually someone puts them into a book. Usually there are many books and people have different favorites.<p>So the closest parallels are original research papers like Turing&#x27;s and Shannon&#x27;s; but you&#x27;re probably better off reading more recent textbooks.<p>That said, to balance out the heavy emphasis on programming and engineering books here, some recommendations:<p>- Sipser. Introduction to the Theory of Computation.<p>- Russell, Norvig. AI: A Modern Approach.<p>- For algorithms I don&#x27;t have a preference. There is Dasgupta-Papadimitriou-Vazirani; Cormen-Leisersen-Rivest-Stein; Kleinberg-Tardos; and more.<p>A bit farther from core CS, I also like:<p>- Cover, Thomas. Elements of Information Theory.<p>- Li, Vitanyi. An Introduction to Kolmogorov Complexity and Its Applications
评论 #21312427 未加载
评论 #21313247 未加载
qnttyover 5 years ago
Structure and Interpretation of Computer Programs is frequently recommended here. I would especially recommend understanding section 3.2, which I&#x27;ve found very helpful for understanding the environment model of other languages.<p>Computer Systems: A Programmer&#x27;s Perspective has a lot of good explanations of hardware&#x2F;os subsystems that can be hard to find detailed explanations of elsewhere. I especially like the sections on virtual memory.
评论 #21311709 未加载
archielcover 5 years ago
Code: The Hidden Language of Computer Hardware and Software by Charles Petzold<p>This one&#x27;s for you if you want to learn or just recap principles of computers (and read on evolution as well). I just started reading it and found it suprisingly easy to follow. It&#x27;s perfect if you like things explained step-by-step and in a simple way.
评论 #21318201 未加载
评论 #21314394 未加载
评论 #21313693 未加载
评论 #21315175 未加载
评论 #21318002 未加载
FillardMillmoreover 5 years ago
I&#x27;m going to cast a vote for &#x27;Unix &amp; Linux System Administration Handbook&#x27; - it&#x27;s been around a long time and is currently on edition 5. It&#x27;s the book that made me fall in love with system administration.<p>It&#x27;s an extensive and well-rounded look at various fundamental system administration topics with examples included from multiple different *nix distributions (topics like work management, logging, networking, security, the kernel, systemd, permissions, etc.). If you&#x27;re at all interested in Linux, this is a great book to have on your shelf.<p><a href="https:&#x2F;&#x2F;admin.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;admin.com&#x2F;</a>
madhadronover 5 years ago
&gt; every discipline has it&#x27;s most fundamental books ... e.g. philosophy -&gt; Socrates, Plato, Aristotle, civil law -&gt; code civil, christianity -&gt; bible, etc. one should read to get a truly deep understanding.<p>I dispute this idea. For some disciplines, this may be so. For other, such as physics, biology, chemistry, mathematics, civil engineering, poetry...actually, for most disciplines they aren&#x27;t based on fundamental books. They&#x27;re based on a living community of practice.<p>In these disciplines a book is important only insofar as it can be used to increase your abilities. No one goes and studies the textual details of Landau &amp; Lifshitz as a guide to anything, any more than they do so with TAOCP.<p>Rather than worry about fundamental books, worry about opening up black boxes at a steady rate.
评论 #21313281 未加载
评论 #21313335 未加载
评论 #21313864 未加载
评论 #21315153 未加载
评论 #21314691 未加载
评论 #21313636 未加载
ztreeover 5 years ago
I&#x27;ve spent this entire year taking a break to learn fundamental CS(I&#x27;m not a CS graduate) Here are the books I found most useful&#x2F;interesting: 1. The Annotated Turing by Charles Petzold : Used it because I had a hard time digesting the original Alan Turing paper 2. An Introduction to Formal Languages and Automata by Peter Linz : To grab the concept of state machines 3. The description of sequential processes by Iverson 4. Clrs: Have kept it for reference<p>Then I studied a matrix of math books, along with other CS books regarding compilers, operating systems etc. My aim was to get good enough understanding to comfortably digest the famous research papers.<p>I am yet to find definitive books that teach a way of thinking on their own merit as a single book. Cs like others is a matrix of knowledge that clicks as a whole &#x27;chunk&#x27; of understanding, changing the way you have thought about things like programming in general. I&#x27;m having a hard time explaining this.<p>If you&#x27;re not a CS graduate, I highly suggest simply going through academics of places teaching theoretical CS.
fredophileover 5 years ago
Do you want to know about CS or do you want to know about programming? A lot of the suggestions I&#x27;ve seen so far in this thread are really about programming and not general CS. The basic math and principles for CS date back to before we had computers. I&#x27;d argue that if you want a real CS bible then you need to look at things published back when computer was a job and not an object. For example, you could check out &quot;Introduction to a General Theory of Elementary Propositions&quot; by Emil Post. Reading it will teach you about CS fundamentals but it will not make you a better programmer.
guiraldelliover 5 years ago
I don&#x27;t think there is a definitive answer for your question because computer science is a relative new area of knowledge and “fundamental books” are still being published.<p>If I had to say <i>one</i> text that is the fundamental one, I would go with a paper: “On Computable Numbers, with an Application to the Entscheidungsproblem” [1], by Alan Turing.<p>---<p>But if you just started your course in Computer Science, then I will give you some “bookshelf advice&quot; based on my experience. I had the pleasure to study all the books I am going to recommend you, and most of them I was able to read cover-to-cover during the university years. And they are also in my bookshelf for reference.<p>The book order does not represent rank of importance.<p>* “Introduction to the Theory of Computation”, by Michael Sipser.<p><pre><code> * I also recommend the “Elements of the Theory of Computation”, by Christos Papadimitriou. * Another good complement is “Introduction to Automata Theory, Languages and Computation”, by Hopcroft and Ullman. (Thanks, @reacweb, for the reminder.) </code></pre> * “Graph Theory”, by Reinhard Diestel.<p><pre><code> * If you feel you want to go deeper, and like a book which you cannot skip a single word, I strongly recommend “Modern Graph Theory”, by Béla Bollobás: it is one of my favorite textbooks ever! </code></pre> * “The Algorithm Design Manual”, by Steven Skiena.<p><pre><code> * While a lot of people seems to praise either the Cormen et al. or the Sedgewick books, I have the feeling that “Algorithms” by Dasgupta, Papadimitriou and Vazirani is my choice for “fundamental” book. But I decided to </code></pre> * “Computer Architecture: a Quantitative Approach”, by Hennessy and Patterson.<p>* “Modern Operating Systems”, by Andrew Tanenbaum.<p>* “Artificial Intelligence: a Modern Approach”, by Russel and Norvig.<p>* “Modern Compiler Implementation (in ML)”, by Andrew Appel.<p>I would like to also recommend “Concrete Mathematics”, by Graham, Knuth and Patashnik, but I remember to not feel it the most pedagogical book on the subject.<p>Good luck!<p>---<p>[1]: <a href="https:&#x2F;&#x2F;www.cs.virginia.edu&#x2F;~robins&#x2F;Turing_Paper_1936.pdf" rel="nofollow">https:&#x2F;&#x2F;www.cs.virginia.edu&#x2F;~robins&#x2F;Turing_Paper_1936.pdf</a>
评论 #21314312 未加载
jamil7over 5 years ago
I&#x27;ve found this to be a pretty good list (<a href="https:&#x2F;&#x2F;teachyourselfcs.com" rel="nofollow">https:&#x2F;&#x2F;teachyourselfcs.com</a>), I can&#x27;t say I&#x27;ve read every book on the list but I hope to someday.
agentultraover 5 years ago
The Art of Computer Programming<p>Structure and Interpretation of Computer Programs<p>Purely Functional Data Structures<p>Programming in the 1990s<p>A Logical Approach to Discrete Math
评论 #21311865 未加载
robtoover 5 years ago
The Elements of Computing Systems: Building a Modern Computer from First Principles[0] and its accompanying class Nand to Tetris[1]. Starting at logic gates and moving up through the levels of abstraction until you can build a programming language and implement a video game is the most fundamental approach that I&#x27;m aware of.<p>[0]<a href="https:&#x2F;&#x2F;www.nand2tetris.org&#x2F;book" rel="nofollow">https:&#x2F;&#x2F;www.nand2tetris.org&#x2F;book</a> [1]<a href="https:&#x2F;&#x2F;www.nand2tetris.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.nand2tetris.org&#x2F;</a>
artimaeisover 5 years ago
A lot of great books have already been recommended. Going to go a different route than others here have and recommend The Elements of Computing Systems.<p>It&#x27;s a book that explores hardware from the ground up. It&#x27;s one of the most insightful books I&#x27;ve found for getting a real intuition for hardware.
srijanshettyover 5 years ago
The books that really shaped my understanding of CS are:<p>- Theoretical CS: - Compilers: Principles, Techniques, and Tools (The Dragon Book) - Introduction to the Theory of Computation, Sipser<p>- Programming: - Java Concurrency In Practice, Brian Goetz - Generics in the Java Programming Language, Gilad Bracha - Professor Frisby&#x27;s Mostly Adequate Guide to Functional Programming - Unix for Poets - Modern C++
mrbrowningover 5 years ago
To stick to the more theoretical interpretation of &quot;computer science,&quot; and with a focus on theory of computation&#x2F;programming languages:<p>- Discrete Mathematics And Its Applications, Kenneth H. Rosen (this is more foundational, but it&#x27;s definitely targeted at a CS audience and touches on things like automata theory)<p>- Types and Programming Languages, Benjamin C. Pierce<p>- Semantics of Programming Languages, Carl Gunter
faizshahover 5 years ago
One possible answer to this question is the most assigned books on computer science syllabi: <a href="https:&#x2F;&#x2F;opensyllabus.org&#x2F;results-list&#x2F;titles?size=50&amp;fields=Computer%20Science" rel="nofollow">https:&#x2F;&#x2F;opensyllabus.org&#x2F;results-list&#x2F;titles?size=50&amp;fields=...</a>
dougb5over 5 years ago
_Concrete Mathematics_ by Knuth et al is a dense but joyful overview of discrete math for CS: <a href="https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;112243.Concrete_Mathematics" rel="nofollow">https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;112243.Concrete_Mathemat...</a>
andrelgomesover 5 years ago
Operate on first principles, what do you need to know to be a &quot;successful&quot; programmer in the technical, social, and&#x2F;or ideological context.<p>Data Structures and their relationship with each other to be a great technical programmer. These books (just highlight not everything) I would think -&gt; Algorithms Sedgewick, Lisp Programmers Manual, Designing Distributed Systems. .To be a great collaborative programmer (in a work enviornment) -&gt; Pragmattic Programmer, Code Complete, Mythical Man Month, A Philsophy of Software Design by Ousterhout. For philsophy of programming itself -&gt; The Soul of a Machine<p>Edit: Programming is very broad and operates in many context from the technical, social, to the ideas behind it. I would say it is almost to early to have those definitive fundamental books
carapaceover 5 years ago
1. Knuth. Skim it all then keep as a reference. Dive deep into anything that catches your fancy.<p>2. &quot;Programming Pearls&quot; by Jon L. Bentley IMO this is the most concise yet accessible gateway to the inner Mysteries of Computer Programming. Read between the lines, the prime thesis is implied not explicit.<p>3. &quot;Thinking Forth&quot; by Leo Brodie (Available as a PDF here: <a href="http:&#x2F;&#x2F;thinking-forth.sourceforge.net&#x2F;" rel="nofollow">http:&#x2F;&#x2F;thinking-forth.sourceforge.net&#x2F;</a> ) <i>Most</i> software is <i>grossly</i> too large. This book shows how to grok and extract the essence of your problem into minimal code. (Chuck Moore had a 3D wireframe CAD program he used to carry around as a deck of punch cards in his shirt pocket.)
scottndeckerover 5 years ago
Not sure I&#x27;d say &quot;fundamental&quot; but possibly the one I refer junior developers to the most often is Clean Code
beagle3over 5 years ago
Iverson&#x27;s &quot;The description of sequential processes&quot; is eye opening (as our &quot;Notation as a tool of thought&quot; and &quot;A programming language&quot;). But that&#x27;s about describing the science than the actual science (imagine a book about the merits of Leibniz notation vs. Newton notation of derivatives...).<p>The actual science in computer science? Weyuker, Sigal &amp; Davis - Complexity, Computability and Languages; CLRS - Introduction to Algorithms. Harel - Algorithmics, the spirit of computing; And nand to tetris, in whatever format you find it.
HorkHunterover 5 years ago
I would personally say SICP. Also a bit far fetched, but I would love to see more people read Compilers: Principles, Techniques, and Tools aka The Dragon Book, is what made me fall in love with compilers
Anon84over 5 years ago
I&#x27;m going to go a bit against the grain here and suggest the<p>Feynman Lectures on Computation: <a href="https:&#x2F;&#x2F;www.amazon.com&#x2F;Feynman-Lectures-Computation-Frontiers-Physics&#x2F;dp&#x2F;0738202967&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.amazon.com&#x2F;Feynman-Lectures-Computation-Frontier...</a><p>In pure Feynman style he builds up a the theory of computation from first principles. YMMV but it really helped me put many of the ideas and concepts from my CS MS into context and find new ways in which they relate with each other.
dcchambersover 5 years ago
K&amp;R (<a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_C_Programming_Language" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_C_Programming_Language</a>)
评论 #21312355 未加载
rawfoolover 5 years ago
The New Turing Omnibus: Sixty-Six Excursions in Computer Science.
dawg-over 5 years ago
I never formally studied CS, but I can strongly recommend Code by Charles Petzold.<p>If you want to learn how a computer does what it does at the absolute lowest levels, it&#x27;s a great starting point. It&#x27;s all written in laymans terms so it&#x27;s good as a conceptual overview or for people without a strong math background. If you&#x27;re interested in diving super deep into that kind of stuff I imagine it would be a great high level overview to anchor yourself.
modzel1990over 5 years ago
SICP gave me nice insight into the way that things works but I found much more valuable to read &#x27;The Elements of Computing Systems&#x27;. It is a long book but you will build each element of the computer if you follow it. It might not reflect nowadays computers, but surely it will bring an idea how everything works, from the very ground of gates and bits to the kernel, compiling and so on... just my personal opinion.
cbenover 5 years ago
My recommendations are not exactly what you ask but what I suspect you&#x27;ll enjoy if you&#x27;re asking this.<p>(1) &quot;Understanding Computation&quot; by Tom Stuart. Not &quot;fundamental&quot; as a deep textbook, but very approachable for programmers intro into a big chunk of CS, explaining deep ideas about languages using rigorous working clean code (in Ruby, no prior knowledge needed). I especially loved the first few chapters about what it means to define a programming languange and various kinds of formal semantics.<p>(2) Designing Data-Intensive Applications, Martin Kleppmann. This gives you a phenomenally good survey of concepts and practice of distributed systems. This is more software engineering than pure CS, but in my view you can&#x27;t approach the field of distributed systems without blending both anyway.<p>(3) POODR — Practical Object-Oriented Design, in Ruby, by Sandi Metz. This is 100% software engineering, where there is no single definition of &quot;foundational&quot;, but many people who read this swear by it. It&#x27;s remarkably thin but lucid distillation of ideas that were &quot;in the air&quot; but Sandi nailed them down. An important thesis is that good code is not an aesthetic judgement of how it _now_ looks, but objective question how easy it will be to _change in the future_. Not Ruby-specific at all, but it teaches the original Smalltalk &quot;message-passing&quot; view of OOP, that for people that only learnt statically-typed Java, C++ etc view of OOP is a fundamental idea they&#x27;re missing on.<p>Finally, not a book, but &quot;the morning paper&quot; <a href="https:&#x2F;&#x2F;blog.acolyer.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;blog.acolyer.org&#x2F;</a> is excellent &quot;return on your time&quot; if you want to sample academic papers, both classic foundational ones, as well as cutting edge.
todd8over 5 years ago
<i>Feynman Lectures on Computation</i> by Richard Feynman. Interesting perspective from a Nobel Prize winning Physicist.<p>Chapters: Introduction to Computers, Computer Organization, The Theory of Computation, Coding and Information Theory, Reversible Computation and the Thermodynamics of Computing, Quantum Mechanical Computers, and Physical Aspects of Computation.
leemckover 5 years ago
In 1973 I was 26 years old and for about ten years I tried to build a library that included the fundamental computer books. Your education needs to exceed the narrow field of computer reference books only.<p>First comment is I did get the Knuth books but I never got the college courses and problem solving work to use them. As Professor Marc Nicolet said: You have got to do the problems to master the subject (referring to his Caltech area of physics).<p>The second comment is computing is all binary. Go beyond that and learn about fractals, chaos, topology and knot theory. For instance, in Kaufman&#x27;s Knot Theory, there are obviously true but rigorously unproven theorems in the first chapters of the book.<p>The third comment is after Turing&#x27;s paper and Godel&#x27;s uncertainty arguments, all real world computer programs, no matter how carefully they employ something from a fundamental book, must be tested.
amirathiover 5 years ago
Introduction to Algorithms by Cormen et al.
评论 #21315792 未加载
jakelazaroffover 5 years ago
Design Patterns: Elements of Reusable Object-Oriented Software (also known colloquially as “Gang of Four”).
评论 #21315658 未加载
coldcodeover 5 years ago
The Mythical Man-Month: Essays on Software Engineering by ‎Frederick Brooks should be read by everyone, even though it was written in 1975. Some things don&#x27;t change no matter the technology change. Sometimes I am amazed to have co-worked who have never heard of it.
评论 #21313129 未加载
brentjandersonover 5 years ago
From <a href="http:&#x2F;&#x2F;www.michaelnielsen.org&#x2F;ddi&#x2F;lisp-as-the-maxwells-equations-of-software&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.michaelnielsen.org&#x2F;ddi&#x2F;lisp-as-the-maxwells-equat...</a><p>&gt; Alan Kay has famously described Lisp as the “Maxwell’s equations of software”.<p>Maxwell&#x27;s equations could be considered fundamental axioms in electromagnetism and physics. Lisp, likewise, expresses the heart of computer science at its core. I&#x27;m still working on grokking it myself, but believe that studying Lisp could be precisely what you&#x27;re looking for (even if you also mean writing software in addition to strict computer science).<p>Paul Graham&#x27;s essays could prove interesting as well.
eyegorover 5 years ago
I&#x27;m a big fan of Algorithms by Jeff Erickson (free to download at <a href="http:&#x2F;&#x2F;jeffe.cs.illinois.edu&#x2F;teaching&#x2F;algorithms&#x2F;" rel="nofollow">http:&#x2F;&#x2F;jeffe.cs.illinois.edu&#x2F;teaching&#x2F;algorithms&#x2F;</a>)
poklerover 5 years ago
For Computer Science, Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman. For programming, Computer Systems: A Programmer&#x27;s Perspective by Randal E. Bryant and David R. O&#x27;Hallaron
8458e112e7b2over 5 years ago
Tangentially related to the topic but I am going to ask here since it seems to be trending. Based on this query and another topic that was popular a couple of days ago around SICP, here is my question:<p>The last time I did any kind of math that was more complex then simple operations was a long time ago and math was never my strong subject.<p>I have pretty much forgotten any kind of algebra, calculus etc I learnt. So assuming I know very little math, what is the best way&#x2F;book&#x2F;method to learn algebra&#x2F;calculus etc to tackle SICP ? I would like to do that before I begin my SICP journey.<p>Any suggestions appreciated!!
评论 #21375861 未加载
todd8over 5 years ago
Over the years I find myself often referring back to <i>Numerical Recipes, The Art of Scientific Computation</i> now in it&#x27;s third edition by Press, et. al.<p>I realize that for practically any topic covered by this book that there are more heavily optimized solutions available in the best numerical libraries, but this book nicely rounds out my reference books with clear and easy to understand coverage of subjects I don&#x27;t know. (e.g. Savitzky-Golay Smoothing Filters).<p>I enjoy reading this book.
todd8over 5 years ago
For new computer scientists that want to understand the interface between programs, operating systems, and hardware, I recommend <i>Computer Systems, A Programmer&#x27;s Perspective, Third Edition</i> by Bryant and O&#x27;Hallaron.<p>It&#x27;s detailed enough to use when trying to understand how a shell works or how to write a signal handler, but the writing couldn&#x27;t be clearer.
e12eover 5 years ago
Good recommendations in this thread, but seems a bit thin on the data side - both in terms of abstract datatypes, and in terms of database theory.<p>I don&#x27;t have a concrete recommendation off-hand - but certainly something by Codd on databases&#x2F;normalization should be on such a list?<p>A lack of understanding data normalization can hurt even &quot;simple&quot; code that uses structs and procedures.
评论 #21314173 未加载
tabtabover 5 years ago
A big problem is that software organization success largely depends on &quot;soft sciences&quot; like psychology and physiology. Science may find ways to make faster machines, but being that the actual bottlenecks are the cost of humans reading code and designs and managing changes to systems, the human grokkability factor is usually the largest.<p>Software should be written mostly with humans (code readers) in mind, and not machines. The soft sciences are much harder to study; it&#x27;s expensive to use trial and error on real projects in order to compare outcomes. Equations on a blackboard or chips in a lab are probably not where most real IT revelations will come from.<p>There are pet theories that focus on overly-narrow factors. For example, those who focus on linguistic parsonomy (less code) may conclude that functional programming is &quot;better&quot; because it usually can be made the most compact. However, a good many coders have a hard time working well with functional programming. Some take a Darwinian view and say &quot;fire them all and hire elite functional coders&quot;. But so far that has rarely paid off in the market-place, barring a few grow-fast-at-all-costs startups. Short code is not always legible code to the majority of coders.
评论 #21314839 未加载
giancarlostoroover 5 years ago
Green Tea Press has some good ones, &quot;How to Think Like a Computer Scientist&quot; one with Java and one with Python, they&#x27;re open source books so some people have produced more interactive (browser) books.<p><a href="https:&#x2F;&#x2F;greenteapress.com&#x2F;wp&#x2F;" rel="nofollow">https:&#x2F;&#x2F;greenteapress.com&#x2F;wp&#x2F;</a>
todd8over 5 years ago
<i>Pearls of Functional Algorithm Design</i> by Richard Bird. Is a collection that demonstrates through thirty small examples spread over the same number of chapters, the appeal of functional programming. Most books on functional programming get a bit bogged down on a particular language, this one doesn&#x27;t.
prependover 5 years ago
Joel on Software by Joel Spolsky<p>Code Complete by McConnell
评论 #21312238 未加载
eeccover 5 years ago
Not a book, but fundamental nonetheless: <a href="https:&#x2F;&#x2F;homepages.inf.ed.ac.uk&#x2F;wadler&#x2F;papers&#x2F;propositions-as-types&#x2F;propositions-as-types.pdf" rel="nofollow">https:&#x2F;&#x2F;homepages.inf.ed.ac.uk&#x2F;wadler&#x2F;papers&#x2F;propositions-as...</a>
tu7001over 5 years ago
This is not a book (youtube lectures), but I add it here: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=uaAvVNWvi4A&amp;list=PLm3J0oaFux3aafQm568blS9blxtA_EWQv" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=uaAvVNWvi4A&amp;list=PLm3J0oaFux...</a>
kenover 5 years ago
The Art of the Metaobject Protocol.
yoz-yover 5 years ago
When these lists of books threads pop up I always feel ashamed at how few I have read myself. I&#x27;ve only read Perl by Larry Wall and most of Effective C++. I wonder how much I am actually missing out by not digging into the theory more.
评论 #21318512 未加载
riccover 5 years ago
The answers from this[0] post can be helpful.<p>[0] <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=20729252" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=20729252</a> (What book to read to get a footing in CS theory?)
tudorwover 5 years ago
<a href="https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;722414.Computer_Lib_Dream_Machines" rel="nofollow">https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;722414.Computer_Lib_Drea...</a> by Ted Nelson :)
jammygitover 5 years ago
I suppose we should talk about our favourite algorithms&#x2F;data structures books here. I like Drozdek for data structures: very clear yet concise with both theoretical rigour and application
donatjover 5 years ago
&quot;The Art of UNIX Programming&quot; was certainly one of the most formative personally. It&#x27;s more holistic than technical, but has changed me in a number of ways for the better.
fortran77over 5 years ago
&quot;The Rust Programming Language&quot; <a href="https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;book&#x2F;" rel="nofollow">https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;book&#x2F;</a>
评论 #21315666 未加载
un_montagnardover 5 years ago
Refactoring by Martin Fowler and Kent Beck.<p>Patterns of Enterprise Application Architecture by Martin Fowler.<p>Domain Driven Design by Eric Evans.<p>Growing Object-Oriented Software, guided by tests by Steve Freeman and Nat Pryce.
评论 #21312635 未加载
评论 #21315645 未加载
aptmigukover 5 years ago
Check out <a href="https:&#x2F;&#x2F;github.com&#x2F;cbourke" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;cbourke</a> - free Comp Sci books (I, II, and III).
bjourneover 5 years ago
Algorithm Design by Kleinberg and Tardos. It is a wonderful book especially because of the well-designed problem sets. Most of them come with answers too.
fierarulover 5 years ago
I wanted to say that if you study CS at an University you will most likely read many &#x27;fundamental&#x27; books.<p>I find it funny &#x27;Structure and Interpretation of Computer Programs&#x27; is considered fundamental when it&#x27;s basically an MIT textbook. Presumably it&#x27;s a very good textbook, but it&#x27;s not fundamental because the rest of the world doesn&#x27;t really study it. The world does study Aristotle.<p>CS is also a wide field (and I presume you said this on purpose to separate the software engineering books?). Something by Chomsky for formal grammars comes to mind.
评论 #21314399 未加载
LandRover 5 years ago
SICP if you want to learn programming side of CS.
评论 #21311808 未加载
mongolover 5 years ago
Is Hennesy &amp; Patterson, &quot;Computer Architecture: A Quantitative Approach&quot; still used in universities?
评论 #21314197 未加载
评论 #21322718 未加载
toolsliveover 5 years ago
Communicating and Mobile Systems: the Pi-Calculus (Milner) Fundamental, but rather painful to digest.
mferover 5 years ago
&quot;Design Patterns: Elements of Reusable Object-Oriented Software&quot; by the Gang of Four. It has sold over 500k copies and has been translated to numerous languages.<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Design_Patterns" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Design_Patterns</a>
评论 #21315105 未加载
评论 #21313829 未加载
riemann77over 5 years ago
computational complexity a modern approach by sanjeev arora<p>don knuth&#x27;s art of computer programming [if you like some rigor][it is a bit time consuming to read the whole thing , but be sure to atleast try reading the first volume]
评论 #21312384 未加载
probinsoover 5 years ago
Computer Science -&gt; The Art of Computer Programming<p>Software Engineering? no clue
andrei_says_over 5 years ago
I’ve found Martin Fowler’s Refactoring very practical
kampsduacover 5 years ago
One of my favorite fundamental books is &quot;The Pragmatic Programmer: From Journeyman to Master&quot; by Andrew Hunt and David Thomas
评论 #21315548 未加载
aphextronover 5 years ago
TAOCP and SICP
Iwan-Zotowover 5 years ago
TAOCP
kavalecover 5 years ago
Knuth!
codesushi42over 5 years ago
The C Programming Language.<p>And I am surprised no one mentioned Operating System Concepts (the dinosaur book).<p>It was the most useful CS text I read in college. I see a lot of SICP love; I never had it for a college course, but it looks good as well.
iikoolppover 5 years ago
Smalltalk-80: The Language and Its Implementation
jrauserover 5 years ago
CLR
dominotwover 5 years ago
leetcode.com
brookhaven_dudeover 5 years ago
Panini&#x27;s Ashtadhyayi.
评论 #21312216 未加载
mmwangaover 5 years ago
The C++ programming language by Bjarne Stroustrup. Whether you plan to learn C++ or not, this is a great book to read
beatover 5 years ago
&quot;Fundamental&quot; is a matter of perspective. To use an analogy, if you were looking for the most fundamental books about the English language, would you be reading about grammar, or would you be reading Shakespeare?
评论 #21317408 未加载
sweeneyrodover 5 years ago
I don&#x27;t think there are any. The problem with learning computer science from textbooks is that most textbooks will go a lot further than just the fundamentals on the subjects they cover. So if you try to learn the basics by choosing a textbook for each area and read it cover to cover you&#x27;ll never finish. Perhaps the answer is to thoroughly read the first few chapters&#x2F;skim the remainder of Introduction to Algorithms; the Dragon book; Computer Networks&#x2F;Architecture&#x2F;etc.: A Systems&#x2F;Quantitative&#x2F;etc. Approach; Types and Programming Languages; Security Engineering; AI: A Modern Approach and so on -- that was certainly my experience of undergrad CS. A few exceptions are K&amp;R, The Mythical Man-Month and What Every Computer Scientist Should Know About Floating-Point Arithmetic which are short enough that you can easily read them in their entirety.
friendlybusover 5 years ago
The depth of programming is following the code down to electricity, like the Ben Eater youtube videos show. What you want that code to do has it&#x27;s own depths; math, ml, ai, games, business ect.<p>It&#x27;s not like classical art or architecture where the principles closer to all commanding or &#x27;figured out&#x27;. Your everyday work is like swimming through code solving problems as you go. Pushing blocks into permanent place never works, they find a way of getting crufty, old and replaced to fit new requirements. I imagine any field that deals with flowing quantities of objects, or fluid-like systems would have structural overlaps with programming. Fields like plumbing, finance, the energy sector, ect.<p>I would describe programming to be at it&#x27;s very base to be ascribing meaning to quantities of meaningless numbers and building a structure to pipe those numbers around to a qualitative result.<p>Measuring principles in depth here is not that useful, the river of valuable information runs left to right in code. You&#x27;ll likely restrict how deep and how abstract you go and instead focus on churning out a high quantity of solved problems. It&#x27;s just not that useful to be thinking in machine code when you&#x27;re programming in C++, but knowing all the functions of C++ and where it should be ending up is very important.