7 ms·
Books every self-taught computer scientist should read
- Jun8 15y agoI haven't read Mastering Algorithms in C (I have the perl version) but if you want to mention one book on algorithms, that's got to be Skiena's Algorithm design Manual (http://www.cs.sunysb.edu/~algorith/video-lectures/ http://www.cs.sunysb.edu/~algorith/video-lectures/). I also like Jeff Erikson's algorithm lecture notes (http://www.cs.uiuc.edu/~jeffe/teaching/algorithms/notes/all-notes.pdf http://www.cs.uiuc.edu/~jeffe/teaching/algorithms/notes/all-...) that comes as a 800+ PDF file.
- okamiueru 15y agoI have to second Skiena's book. I had three books: the famous Cormen tome, "Algorithm Design" by Kleinberg and Tardos, and Skiena's "Algorithm Design Manual" available when learning advanced algorithms. I'm still amazed at how Skiena's book covers both the basics in a far better pedagogical way than the other two, as well as serving as a really nice lookup utility for tackling specific problems (the second half of the book is jammed packed with short problem description, as well as a overview of approaches and considerations). I kept looking up the same topic in all three, and ended up reading the Algorithm Design Manual. That said, Cormen's book is famous for a reason, but more often than not, I felt it gave way for mathematical rigor than plain language. Note: The second edition of Skiena's book is significantly improved over the first... well, besides the quality if the paper. edit: Meant second edition of Skiena's book, not Cormen's. Sorry.
- showerst 15y agoCLRS (the Cormen tome) is actually on its third edition now, with some updates/additional content.
- tptacek 15y agoSkiena's is my favorite computer book of the last 5 years; it's radically different (and I think better) than CLR. TAOCP is, considered on the whole, an even better work, but I end up using it way differently; I've consulted Skiena to solve problems, but TAOCP I more or less flip through and then read 10-20 pages of at random; I am never sorry I did.
- Erwin 15y agoThe big difference between Skiena's book and others (Cormen, Knuth) I've seen is inclusion of his own war stories and real life experiences and less emphasis on rigourous proof.
- srcerer 15y agoThanks for the link! Erickson's notes appear to be a treasure trove of insight into algorithms. I flipped to the section on dynamic programming and was impressed by how well the idea was boiled down. Also, sorry for the pedantry, but that link is to a 374 page PDF. For any one that is truly insatiable, peel back the link to algorithms and one will find an everything.pdf that is indeed over 800 pages!
- srcerer 15y agoItching to buy Skiena's book for the practical examples (after perusing what amazon would show me of it)! Another very accessible algorithms book I highly recommend is: http://hetland.org/writing/python-algorithms/ http://hetland.org/writing/python-algorithms/
- sayemm 15y ago"Joel recommends SICP, The C Programming Language, The Unix Programming Environment, and Introduction to Algorithms as solid books for programmers who want to brush up on their fundamentals and potentially do well at programming interviews." - http://itc.conversationsnetwork.org/shows/detail4144.html http://itc.conversationsnetwork.org/shows/detail4144.html
- cl8ton 15y agoI would add "Numerical Recipes in C" to the list. I have owned this book for many years and get allot of use out of it. http://bit.ly/zHQyeC http://bit.ly/zHQyeC
- reginaldo 15y agoI have a set of honest questions to make: I understand what it means to be a self-taught programmer, which I was from ages 13 to 17, before I got into college and, in some sense, still am today, as many of the things I learn and have learned for the past few years were "self-taught" (or, as I prefer to say, taught me by the authors of books, papers, and blog posts I read). Some people like to call themselves self-taught hackers, software engineers, etc. And that is ok too. But what does it mean to be a self-taught computer scientist? Is there some criteria, e.g. do you have to publish a peer reviewed paper or something like that?
- ahmedfarooki 15y agoIt's a matter of semantics, but I completely agree with you. I would have liked it if there was a book on Design Patterns in the list as well.
- ericmoritz 15y agoThe Design Patterns book is not on the list because I have not read it yet. Based on what I know of it, I am sure that it deserves to be on the list.
- dustingetz 15y ago(iirc) all but one of the interviewees in Coders at Work said the GOF design patterns book is rubbish. The guy who liked it said it was helpful to establish common language.
- lubutu 15y agoI would say a self-taught computer scientist is well-versed in theoretical, or 'purer' forms of computation. That is, I would expect knowledge of λ-calculus, what it means for a language to be regular or context-free, and so on. A software developer and a computer scientist are really very different things (but not mutually exclusive).
- ericmoritz 15y agoWhen I say, "self-taught computer scientist" I had in mind someone, much like myself that did not go through college to earn a comp-sci degree but instead learned on the job and solves problems scientifically rather than by brute force. I agree with you that it is a bit a self-applied label that could be offensive to those who finished college and earned a degree. Much like someone calling themselves a doctor without getting a PhD.
- Spearchucker 15y agoA scientist researches. Was that intentional?
- mrchess 15y agoProgramming Pearls is also an amazing gem you should read as early in your career as possible. If you end up heading into software, also check out The Mythical Man Month. Although dated, the lessons are timeless.
- dfan 15y agoProgramming Pearls was the book I came here to recommend. (Assuming that the original poster really meant "programmer" rather than "computer scientist".)
- j_col 15y agoThose are Amazon affiliate links in the article. Getting this on the front of HN will get you a few clicks.
- ryandvm 15y agoThat seems like fair compensation for assembling a list of books that, I may be interested in reading. Do you actually find this objectionable?
- benregn 15y agoIt's just honest to state that they are affiliate links, regardless of he deserves the revenue or not.
- ConstantineXVI 15y agoThe only time there's really a valid reason to complain about affiliate links is if you're rewriting links posted by others; and even then IMHO disclosure is enough to clear you. Otherwise, affiliate links are serving their purpose properly (encouraging bloggers to post links to Amazon; and Amazon compensating the bloggers for the referral).
- kurrent 15y agolooks like he jumps at any opportunity to get his amazon affiliate link out there. even posting it with a pretty much useless comment on this g+ post: https://plus.google.com/112493031290529814667/posts/LvhVwngPqSC https://plus.google.com/112493031290529814667/posts/LvhVwngP... (this link is from a story that just recently made the frontpage on hacker news) Eric, how's the affiliate marketing going?
- j_col 15y agoI would find a follow-up post discussing the numbers re: Amazon Affiliate click-through and purchase rates from a story hitting the front page of HN more interesting than yet another "here is a list of books that you should read" post, or is that a little too meta?
- bborud 15y agoThat was very far from what I expected :)
- ericmoritz 15y agoI am sorry. What did you expect?
- Joeri 15y agoIf the focus is more on software engineering than computer science, i'd recommend "code complete" and "patterns of enterprise application architecture".
- phillmv 15y agoSpeaking as an actually credentialed computer scientist, this list is ridiculous. First and for all, only one of these books is actually about theoretical computer science, and even then. Secondly, (feel free to disagree on this one) K&R is recommended more as a prestige book. So much of C is in the toolkit and libraries that I think it's a little silly to be recommending a 30 year old intro that is actually kind of hard to read. Thirdly, this question comes up all the time. Here's an actually serious version of this question: http://cstheory.stackexchange.com/questions/3253/what-books-should-everyone-read http://cstheory.stackexchange.com/questions/3253/what-books-... If you only care about actually practical issues to your life as a programmer, give this list a shot http://news.ycombinator.com/item?id=3320813 http://news.ycombinator.com/item?id=3320813 Addendum: Although I'm credentialed as a CompSci, I really work as an engineer. The difference? Scientists read papers (Avi Bryant) http://vimeo.com/4763707 http://vimeo.com/4763707 and think about the nature of our work (Greg Wilson) http://vimeo.com/9270320 http://vimeo.com/9270320
- ericmoritz 15y agoI apologize for any offense that I may have given by using the phase "self-taught computer scientist". This article is my personal recommendation of books that I often recommend to junior developers that are smart but didn't complete a degree and often find their knowledge of basic computer science lacking.
- phillmv 15y agoTo be fair, I didn't take offense to "self-taught computer scientist". I took offense to "every self-taught computer scientist". I'll be the first to admit that university is bullshit and mostly acts as a social signifier. Like I mentioned above, I'm credentialed, and I'll put that on my business cards but between you and me and the internet at large I mostly work as a software engineer. There are even many problems with talking about "computer science" because for the most part it's treated like a branch of mathematics and its academic circle really hates dabbling in messy empirical data. Yet, there's a degree of rigour in it. There's an actual underpinning behind a lot of this stuff. So! Can you be a self taught computer scientist? Certainly! K&R and The Little Schemer just have almost nothing to do with it - even if they might make you into better programmers :).
- veyron 15y agoThe author definitely should have included Algorithms in C++ [Sedgewick] and Introduction to Algorithms [CLRS].
- lee 15y agoYea mean "every self-taught PROGRAMMER should read". Computer science is very different than day-to-day "real world" programming. Computer science is more akin to applied mathematics... its the study of algorithms and computation. What your books teach is programming, building software and such.
- scott_s 15y agoSee my reply to phillmv elsewhere in the thread.
- Varun06 15y agowhat if somebody starts with some other language such as Java or Python. Is mastering in C must to be a good programmer?
- ericmoritz 15y agoNo, I don't think so. Those books were chosen not because they're good at teaching you C but rather because they're good at introducing you to concepts like memory layout, data structures and algorithms.
- impendia 15y agoI have to disagree with The Little Schemer, despite the fact that I took freshman CS with Matthias Felleisen (one of the two authors), thought his course was brilliant, and absolutely swore by Scheme by the time I was done. I felt the book paled in comparison with his lectures. The book is, in some sense, too short; it doesn't have enough examples, and it also doesn't discuss essential language features such as let/local. Also, it has a shortage of long examples (pretty much everything there consists of a single function). Also the book is ridiculously easy for the entire first half (approximately), and then suddenly dumps you into the deep end (they present the Y combinator).
- ericmoritz 15y agoWhat I got out of The Little Schemer wasn't really how to write Scheme but more how to solve problems recursively. At least for me it excelled in that aspect. As a method for teaching Scheme, I am certain it leaves much to be desired.
- impendia 15y ago> What I got out of The Little Schemer wasn't really how to write Scheme but more how to solve problems recursively. They do explicitly claim in the book that that is their goal!
- funkah 15y agoThe Little Schemer made me understand programming in a functional style much better than I did before reading it. It also solidified my opinion that I really would not like working in that style at all.
- kurrent 15y agoI would suggest the following book as a precursor to all of these books: Code by Charles Petzold. It is genuinely one of the best books I have ever read.
- daviddaviddavid 15y agoMastering Algorithms in C will go down in history as one of the most horribly formatted books ever. The code samples in this book are positively unreadable due to comments that go on for pages. To be fair, the content is good. But the formatting is so annoying that it's hard to sink into that content.
- ericmoritz 15y agoI read it on my Kindle so I assumed the bad formatting was caused by reformatting to fit the Kindle.
- InclinedPlane 15y agoRead Refactoring. http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672 http://www.amazon.com/Refactoring-Improving-Design-Existing-... In my view it is the single most important programming book in existence. Yes, other books will teach you other, incredibly important things. Other books will teach you the specifics of one technology or another. Other books will open up your mind on the very nature of programming (especially learning functional programming). And other books will teach you all of the incredibly important stuff that isn't siting at a keyboard and typing in code. But personally I'd rather work with someone who thoroughly groks refactoring even over someone who thoroughly groks functional programming.
- tzs 15y agoOne thing I've not seen yet is a list of books or online resources to take someone from beginner to expert in computer science. I've just seen lists like the submitted list or the lists in the Stack Exchange discussion that phillmv linked to, which are suggestions for books or articles or papers that everyone (in someone's opinion) should have read. Anyone seen a CS equivalent of either of the following? 1. Gerald 't Hooft, the Nobel Prize winning physicist, maintains this list: http://www.staff.science.uu.nl/~hooft101/theorist.html http://www.staff.science.uu.nl/~hooft101/theorist.html That list gives an ordered progression of links to online material meant to take a talented and ambitious person from high school to research level quantum field theory and string theory. 2. The "How to Become a Pure Mathematician (or Statistician)" list here: http://hbpms.blogspot.com/ http://hbpms.blogspot.com/ That list starts assuming high school mathematics, and gives a series of stages to go from that to advanced graduate level, giving for each area of mathematics at each stage lists of books and online material appropriate for that stage.
- neilparikh 15y agoI too would be interested in a CS equivalent of those resources. Also, thanks for that first link! That could be useful to prepare myself for 6.002x.
- dhconnelly 15y agoI guess you really meant programmer, but I think this is a great list.
- swannodette 15y agoUnlike a lot of folks here I mostly agree with the list - I'm a self-taught programmer as well. But don't stop with the The Little Schemer - grab The Seasoned Schemer as well, and if you can make it through The Reasoned Schemer you'll learn quite a few things that many programmers know nothing about. I still think that Rich Hickey's list, http://www.amazon.com/Clojure-Bookshelf/lm/R3LG3ZBZS4GCTH http://www.amazon.com/Clojure-Bookshelf/lm/R3LG3ZBZS4GCTH is the best collection of self-taught programmer must reads I've encountered.
- Stwerner 15y agoI have The Little Schemer, but have had trouble figuring out the best way to use the book. Do you just read it from cover to cover? Or do you cover up the right hand of the page and try to come up with an answer (maybe even typing it into the repl) before looking?
- ericmoritz 15y agoI read it cover to cover. For most of the chapters I read the left side, answer the question in my head and then looked to the right to see if I was right. Having just learned Clojure using "The Joy of Clojure", If there was anything I needed to verify, I translated the code into clj and pasted it into a Clojure REPL.
- gtani 15y agoThere's a few of these lists, depending on what aspects of science/engineering/coding you're interest is http://www.reddit.com/r/compsci/comments/gprp0/is_there_a_list_of_the_canonical_introductory/ http://www.reddit.com/r/compsci/comments/gprp0/is_there_a_li... http://news.ycombinator.com/item?id=3011964 http://news.ycombinator.com/item?id=3011964 http://geekswithblogs.net/MarkPearl/archive/2011/05/19/summary-of-computer-theory-important-things-to-know.aspx http://geekswithblogs.net/MarkPearl/archive/2011/05/19/summa... http://news.ycombinator.com/item?id=3382962 http://news.ycombinator.com/item?id=3382962 --------------- http://www.reddit.com/r/compsci/comments/j10m3/im_an_experienced_developer_looking_to_master/ http://www.reddit.com/r/compsci/comments/j10m3/im_an_experie... http://www.reddit.com/r/compsci/comments/jyz6z/i_want_to_learn_actual_computer_science_not_just/ http://www.reddit.com/r/compsci/comments/jyz6z/i_want_to_lea... http://matt.might.net/articles/what-cs-majors-should-know/ http://matt.might.net/articles/what-cs-majors-should-know/ http://www.reddit.com/r/compsci/comments/kb3sa/what_every_computer_science_major_should_know/ http://www.reddit.com/r/compsci/comments/kb3sa/what_every_co...
- ctruman 15y agoOkay, now I am confused. This article basically directly explained my situation. I learned by doing, not by studying or taking classes. I have a HUGE whole in my knowledge regarding algorithms, uncommon C of features, and things classified as true "Computer Science". Anyway, I was thinking about reading these books. That is, until I saw phillmv's comment. There has been a lot of debate and suggested lists of books to read on this comment thread, but no concrete suggestions. I went from 3 suggested books to a few hundred. I know there are no magic books that make you a master of Computer Science, but does anyone have a concrete quick list of what is necessary for filling in the blanks in a self taught programmer's education?
- ldesegur 15y agoAdd to the list Structure and Interpretation of Computer Programs, which fits perfectly following The Little Schemer, and you're all set.
- darasen 15y agoAs a self taught programmer were I to read all of the books "every programmer should read" I would never have time to actually program.