12 ms·
Programming books you might want to consider reading
- kodiera 10y agoWe had "Structure and Interpretation of Computer Programs" by Abelson/Sussman when I was at university, which I found a good introductory book. For a more thorough understanding I would recommend Donald Knuth's "The Art of Computer Programming".
- ldjb 10y agoSICP is still a very good book for learning abstraction techniques, although it does sort of throw you in at the deep end in some ways. TAoCP is great as a set of reference books that you can take a look at when stuck on a problem, but I don't think it's really designed to be read from cover(s) to cover(s).
- thomasahle 10y agoI certainly don't think TAOCP is designed to be a reference. If so, it wouldn't be full of excellent exercises.
- clifanatic 10y agoAgree wholeheartedly. I've seen people suggest from time to time that TAOCP should be used strictly as a reference book (like a dictionary or a thesaurus) - I suspect people who try to use it that way are going to be disappointed when they look up, say, the Trie algorithm and find out that the text assumes that you're already proficient in MIX programming, and back-references a half-dozen formulas from previous volumes (sometimes from the exercises!)
- deleted 10y ago[deleted]
- rubiquity 10y agoBoth of those books were recently (as in two days ago on here) in a list of "Books people claimed they read but really don't."
- Millennium 10y agoI've tried a couple of times. Gearing up for another attempt soon. But there's one thing I've found interesting. I'm still stuck in Chapter 1.2: the infamous Mathematical Preliminaries section. I am not proud of this. From what I can tell, the various aborted liveblogging attempts I've seen also all get stuck here. Knuth himself recommends skipping it if you get stuck. But even though I haven't yet managed to finish that single part of the book -this part which comes before any actual computer stuff- I STILL come out of it a much better programmer. Every. Single. Time. I haven't yet written a line of MIX or MMIX, and I have STILL been able to use this book to level-grind, just by getting further in 1.2 than I was able to get before. It's awesome. Even when I fail, I come out stronger. I do eventually plan to blog my own attempt. My plan, though, is to not actually blog 1.1 and 1.2 live: I will do these chapters, write the articles on them to give myself a buffer, and only put up the blog once I'm already through The Big Filter. I figure this will give me a much better chance of actually succeeding once I start.
- clifanatic 10y ago> I'm still stuck in Chapter 1.2: the infamous Mathematical Preliminaries section You might want to try starting with "Concrete Mathematics" (also by Knuth): it's a longer intro to the same material, but covering a lot more of the background that TAOCP just kind of assumes that you already know.
- questionr 10y agoI often here comments about finishing a mathematical/technical book over the course of a "few" weekends. But I don't see how thats possible if it includes completing all (or even most of) the given exercises. Especially when you have a full-time job.
- deleted 10y ago[deleted]
- asimuvPR 10y agoSome people are able to do it. But most are exaggerating or not doing the exercises. It takes me weeks to properly finish a good technical book due to time constraints. Either way, just do your best and forget about anybody else.
- lamby 10y agoMmm. Besides, I find my programming/work/etc. improves when I read novels in my spare time :)
- happy-go-lucky 10y agoOn the contrary, I find my work/family life improves when I do nothing in my spare time ヅ
- peruvian 10y agoOver the weekend? I can't do it. Even if I forced myself to read for 6 hours Saturday and Sunday I'd forget everything during the weekdays. An hour or so every day is much better and realistic.
- throwaway98237 10y agoGreat point about forgetting the material. If you really want to learn something you need to review it more than once, and you need to encounter it in more than one environment / context (unless you're a genius, maybe). It's science, yo. https://en.wikipedia.org/wiki/Spaced_repetition https://en.wikipedia.org/wiki/Spaced_repetition & context based learning --> https://www.ted.com/talks/deb_roy_the_birth_of_a_word https://www.ted.com/talks/deb_roy_the_birth_of_a_word
- ambulancechaser 10y agoDan Luu's style is so impressive for his ability to be super objective about pros and cons of things. There's a post he wrote where he traces his career and lists out possible missteps and successes. His ability to dispassionately look at situations and evaluate them on their merits rather than allow their connotations into his judgement is quite enjoyable to read. Also his talk at strange loop was spectacular.
- zump 10y agoHe comes off as an expert but he hasn't done anything impressive to my mind.
- qntty 10y agoMost experts haven't, you don't need to do anything impressive to have expertise.
- nickpsecurity 10y agoI agree. Especially on the Windows vs Linux thing.
- bosie 10y agoAny chance you can link it? For some reason i cannot seem to find it.
- ptero 10y agoThe idea is good: a list of general topics, a "why should you care" section for each (the part I really liked) and a few specific titles. I would love an expanded list of topics (the current one is short) e.g., compilers, comms, security, Arduinos/ raspberry Pi / IoT. I personally did not like long lists of specific books -- I'd rather know about the topic and browse bookshelves at a Barnes and Noble to pick a couple that I like, but that's just my preferences.
- abecedarius 10y agoThis is vaguely similar in style and much broader: http://lesswrong.com/lw/3gu/the_best_textbooks_on_every_subject/ http://lesswrong.com/lw/3gu/the_best_textbooks_on_every_subj...
- CalChris 10y agoShen & Lipasti, an under appreciated book. I like Hennessy and Patterson Computer Organization more than their Computer Architecture, especially the last edition. I'm looking forward to reading the ARM version of COAD: https://www.elsevier.com/about/press-releases/research-and-journals/arm-edition-of-elseviers-popular-book-computer-organization-and-design-the-hardwaresoftware-interface-now-available https://www.elsevier.com/about/press-releases/research-and-j...
- optymizer 10y agoI own the ARM version. I have enjoyed reading it, but if I recall correctly, most of the chapters are the same, and the few that do mention ARM kind of mention that ARM is similar to MIPS and then proceed with the old MIPS content. It never goes deeply into ARM architecture. I would like to see a true rewritten version for ARM.
- pkaye 10y agoI assume you mean the "Modern Processor Design: Fundamentals of Superscalar Processors" by Shen and Lipasti. I agree that is a great book to read. Just quite an expensive book for a casual reading. I was fortunate to get it cheap at a local used book store.
- gaius 10y agoHacker's Delight by Henry S. Warren
- deleted 10y ago[deleted]
- deleted 10y ago[deleted]
- yellowapple 10y agoA good list for sure; I'll be adding a few of these to my reading list (and a couple, like "Higher Order Perl", already are). "I find algorithms to be useful in the same way I find math to be useful" I'd hope so :)
- throwaway7645 10y agoA pretty cool book I'd like to see translated into other languages.
- perlgeek 10y agoThere's an unofficial companion that has the examples translated to Javascript: http://interglacial.com/hoj/hoj.html http://interglacial.com/hoj/hoj.html Same for Ruby: http://graysoftinc.com/higher-order-ruby http://graysoftinc.com/higher-order-ruby
- uola 10y agoThese type of lists have nothing to do with efficient learning. In the information age we have more available information than time. Knowing how to learn is the multiplication factor. If you do your due diligence these lists quickly becomes anecdotal.
- SoulMan 10y agoI also believe in similar lines. These are just good to have list. I personally think its easier to lean from Internet articles, getting started guides, hello world programs etc. Not sure how many here buy and read a programming book end to end before starting to code. (or start with examples given in this book , given that its 2016)
- bbarn 10y agoI kind of disagree. Knowing what to learn is hard. You have two choices, listen to the advice of others, or learn everything. The latter isn't practical, so I appreciate seeing lists like this. If I see a book on 2 or 3 of these lists, it makes me at least curious to read it if I haven't.
- swiley 10y agoI prefer learning what I find interesting, since I'll learn the most that way. I suppose that gets informed by the advice of others to some extent though.
- adamnemecek 10y agoI also put together a list http://astore.amazon.com/adamnemecek-20 http://astore.amazon.com/adamnemecek-20 I'm not actually making money from the links because amazon closed my affiliate account.
- hal9000xp 10y agoUpvoted for recommendation of "Dasgupta, Papadimitriou, and Vazirani; Algorithms". Unlike TAOCP and CLRS it's actually readable in realistic amount of time. This book is also very good at explaining theoretical computer science. In particular - NP completeness. Official copy is available at home page of Umesh Vazirani at berkeley.edu: 0: Prologue - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap0.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap0.... 1: Algorithms with numbers - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap1.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap1.... 2: Divide-and-conquer algorithms - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap2.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap2.... 3: Decompositions of graphs - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap3.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap3.... 4: Paths in graphs - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap4.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap4.... 5: Greedy algorithms - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap5.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap5.... 6: Dynamic programming - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap6.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap6.... 7: Linear programming and reductions - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap7.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap7.... 8: NP-complete problems - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap8.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap8.... 9: Coping with NP-completeness - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap9.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap9.... 10: Quantum algorithms - https://people.eecs.berkeley.edu/~vazirani/algorithms/chap10.pdf https://people.eecs.berkeley.edu/~vazirani/algorithms/chap10...
- gautamnarula 10y agoPersonally, my favorite algorithms/data structures books is Algorithms 4th ed by Sedgwick and Wayne. It does a great job explaining the material from a theoretical standpoint, but also focuses on practical application in addressing real problems, and every algorithm comes with real, working Java code that in some cases is even superior to the implementations in the standard Java libraries. And it perfectly accompanies Sedgwick's free algorithms course on Coursera.
- 10y ago
- rookiemaverick 10y agoSo pretty much every book from the CS course.
- cagmz 10y agoRegarding OS; how does the Comet book compare to the Dinosaur book?
- ronald_raygun 10y agoI'm really happy to see the books on game theory and auction theory on there.
- jakub_h 10y agoCoincidentally, this very book on auction theory was suggested to me by a fellow faculty member about three months ago. I guess I really ought to find some time to read it!
- ansgri 10y agoMeta question: does author blocks requests from some countries? Somehow danluu.com is only accessible for me through vpn, else times out.
- adrianratnapala 10y agoLuu says regarding the Little Book of Semaphores: "If I’m writing grungy low-level threading code today, I’m overwhelmingly like to be using c++11 threading primitives, so I’d like something that uses those instead of semaphores," But as someone whose lowest-level experience of concurrency is with APIs similar to the C++ primitives (which are not that different from pthreads), I disagree. I found it a real eye-opener to see how all this can be broken down to semaphores. I am starting to think that a semaphore-only set of primtives would be easier to reason about. I've seen better coders than me make over-complicated mutex based solutions when sempahores gave a simple answer. And I bet I've done it too.
- david-given 10y agoI totally agree. I've spent way too much time in the depths of terrible embedded operating systems trying to do basic synchronisation out of whatever terrible primitive they'd decided to implement instead of semaphores, when semaphores would be so much easier. (Frequently I ended up just implementing semaphores, and then doing everything else in terms of those, frequently using a standard library I had precisely for that purpose...) (Embedded device flashback moment: a mobile phone OS where the only concurrency primitive was a mutex, each of which contained a fixed-size buffer of waiting tasks. The size of the buffer was smaller than the number of tasks on the system, and if a task blocked on the mutex while the buffer was fill, another task would randomly wake up.)
- ktRolster 10y agoWhen you use pthread semaphores, be careful reading the documentation, because there are some gotchas that are not immediately obvious. I think that's why more programmers don't use them, because at first they seem intimidating.
- jldugger 10y ago> This book agrees with my biases and I’d love for this book to be right, but the meta evidence makes me want to re-read this with a critical eye and look up primary sources. Too true. Peopleware did not live up to my expectations. It's very light on evidence, has the chapter flow of a monthly-newsletter-turned-book, and contradicts itself in a few places without blinking an eye.
- kkirsche 10y agoIt's language specific but I would recommend eloquent Ruby. One of the most engaging programming books I've read
- asimuvPR 10y agoStill worth reading because ruby is beautiful.
- lisper 10y agoOne of my favorites not on the list: Code: The Hidden Language of Computer Hardware and Software, by Charles Petzold https://www.amazon.com/dp/B00JDMPOK2/ https://www.amazon.com/dp/B00JDMPOK2/ Takes you from simple mechanical switches all the way to a CPU.
- marincounty 10y agoI have that book. It's good for other field too. I've know union Electricians who didn't know how a three way switch works. They could wire it, but couldn't conceptualize it. Same with relay, and transformers. It wasen't there fault. They just weren't taught it in the right fashion. I do feel the book is dry though. I don't feel you need to read it front to back. I personally got more out of the diagrams, than the writing. (My pet peeve in most technical books is the apparent lack of editing. If anyone is on the road to writing a technical book; there is nothing wrong with short books. People will pay for short books. Less is more--much of the time.)
- unethical_ban 10y agoYou're dead, marincounty. I've never seen it before, where someone's comments can be dead sometimes and available others.
- jacquesm 10y agoThe mechanism is called 'vouch'.
- jcoffland 10y agoThe best Calculus book I've ever found is free from MIT. https://ocw.mit.edu/resources/res-18-001-calculus-online-textbook-spring-2005/textbook/ https://ocw.mit.edu/resources/res-18-001-calculus-online-tex...
- Bluestrike2 10y agoAdrian Banner's The Calculus Lifesaver is an excellent companion text as well. It's not really a textbook, but it's a great reference to help you alongside it that's written in a way meant to be accessible to introductory students. http://press.princeton.edu/titles/8351.html http://press.princeton.edu/titles/8351.html
- grawlinson 10y agoAdding to this thread, Paul Dawkin's online notes really helped me get through Calc 1-3. There's also notes for basic algebra & differential equations. http://tutorial.math.lamar.edu/ http://tutorial.math.lamar.edu/
- geoffreyiy1 10y agoMade account to reply: I got this book at a used bookstore for $10 as my first calculus book, I read the entire thing over a week long vacation. It was sweeter than candy, I have not read a better non-fiction book in my entire (18 year old) life.
- retro64 10y agoWelcome to HN! I feel hopeful when I see passionate comments like this from newly minted adults :)
- hollander 10y agoThis may be the best book and it's great that you can download it for free, but it's scanned, and that makes it horrible to read. Still I marked it in my book list under math, and hope I'll find the time to read it in the future. I will buy a decent EPUB or PDF then. I don't mind to pay for that convenience.
- nickpsecurity 10y agoHigh-speed Digital Design should probably be on the hardware list. It was recommended in all kinds of places plus doing high-performance often takes different style. Id be interested in an ASIC engineer's opinion on it if one of you are here.
- jasoncchild 10y agoRead through peopleware recently; I was surprised to see it on this list, mainly because it felt targeted more at low-mid level software engineering managers than "devs". Nice list that I'll certainly pick a title or two from to add to my queue.
- eachro 10y agoI'm surprised the author didn't include Axler's Linear Algebra Done Right under the math section considering how fundamental linear algebra is to so many domains of computer science.
- syncopatience 10y agoCould anyone weigh in on his assessment of Martin Fowler's Refactoring book? I'm considering picking it up - some seem to be of the opinion that its ideas are old news in 2016 and there's not much to learn from it, others say there's still lots of useful information.
- blowski 10y agoIt's still extremely relevant and useful. Once you've read it cover-to-cover, it remains useful as a reference. I would also recommend Michael Feathers "Working with Legacy Code".
- CSMastermind 10y agoPersonally, I found "Working with Legacy Code" much more insightful. Fowler's stuff is great in theory but hard to use in practice.
- webmaven 10y agoInteresting comment on DeMarco's Peopleware: > This book seemed convincing when I read it in college. It even had all sorts of studies backing up what they said. No deadlines is better than having deadlines. Offices are better than cubicles. Basically all devs I talk to agree with this stuff. > But virtually every successful company is run the opposite way. Even Microsoft is remodeling buildings from individual offices to open plan layouts. Could it be that all of this stuff just doesn’t matter that much? If it really is that important, how come companies that have drank the koolaid, like Fog Creek, aren’t running roughshod over their competitors? The answer is in another recent post (http://danluu.com/sounds-easy/#fn:S http://danluu.com/sounds-easy/#fn:S): > For a lot of products, the sales team is more important than the engineering team. Put another way, every measure of engineer / software quality and project success (including the qualitative ones that are harder to measure) like delivering on time / under budget, correctness of implementation, system performance, uptime / reliability, number of bugs, ease of maintenance, minimal technical debt, etc. etc., are very often only nice-to-haves. Not necessarily all of them at all times, but often enough most of them except one or two (not the same one or two, though). Which is a good thing, or startups would never be able to trade off covering edge and corner-cases, or scale, or 'standard' feature-completeness, etc. in favor of new and game-changing capabilities (or business models) & incumbents could never be disrupted. But as it happens, we know that 'worse is better' in lots of ways and in lots of circumstances. So companies that 'drink the kool-aide' and focus on developer productivity and happiness may produce 'better' software by any and all measures you care to use as a developer, instead of focusing on only the most important ones that directly relate to optimizing the customer acquisition funnel and subsequently reducing customer churn. At the level of the corporation, programming is a competitive sport, but companies are not scored on software quality, or developer productivity, or developer happiness. Companies are only scored on 'getting and keeping customers' and 'making a profit' (which may require paying attention to some quality measures, just not all of them all the time). Put yet another way: If you're doing Lean Startup / Customer Development right, the customer decides what 'quality' means, not you.
- prodigal_erik 10y agoAnyone counting Microsoft as "successful" is scoring companies on their ability to threaten price discrimination to exclude competitors' products from the marketplace.
- mozumder 10y agoI could use a good book on combinatorics. The ones I have are way too dry and doesn't explain well in plain English.
- cscheid 10y agoThe best introduction to optimization methods book I've ever read is "Optimization by Vector Space Methods" by Luenberger. This is the book that opened my eyes to the generality of least-squares methods, the actual geometry of the problem, and how to apply it extremely generally. I read this before Boyd and Vanderberghe's "Convex Optimization", and I'm glad I did - it goes much more deeply into the intuition and exposition. It's not as well known as it should be, but it's a complete gem.
- HeavyStorm 10y agoTanenbaum's Operating Systems isn't there. Sorry, this isn't a good list. /fanboy
- anthnguyen94 10y agoCool to see lots of comments on real life algorithm applications, if anyone is interested in diving deeper there's a good book that came out recently called "Algorithms to Live By" by Brian Christian and Tom Griffiths. It talks about how we often use CS algorithms in real life without knowing. If you want a glimpse here's a talk they gave at Google: https://www.youtube.com/watch?v=OwKj-wgXteo https://www.youtube.com/watch?v=OwKj-wgXteo
- gmfawcett 10y agoI think it's on-topic to offer a shout-out to the csbooks subreddit [1], where we share links to freely (legally) available CS books. [1] https://www.reddit.com/r/csbooks/ https://www.reddit.com/r/csbooks/
- tylerpachal 10y agoCan anyone recommend a good book about compilers? I just watched Martin Odersky's talk from Scala World [1] where he talks about the new Scala compiler he is working on called Dotty [2], but he talks a bit about other compilers and now I am interested to learn more. [1] https://www.youtube.com/watch?v=w1ca4KL9UXc https://www.youtube.com/watch?v=w1ca4KL9UXc [2] http://dotty.epfl.ch http://dotty.epfl.ch
- bronxbomber92 10y agoMy three favorite books on compilers (in no particular order) are: * Engineering a Compiler: https://www.amazon.com/Engineering-Compiler-Second-Keith-Cooper/dp/012088478X https://www.amazon.com/Engineering-Compiler-Second-Keith-Coo... * Modern Compiler Implementation in ML: https://www.cs.princeton.edu/~appel/modern/ml/ https://www.cs.princeton.edu/~appel/modern/ml/ * Compiling with Continuations: https://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X https://www.amazon.com/Compiling-Continuations-Andrew-W-Appe...
- Apanatshka 10y agoI second Modern compiler implementation in ML. I'd also add Types and Programming Languages by Pierce, commonly referred to as TAPL for background on type systems. https://www.cis.upenn.edu/~bcpierce/tapl/ https://www.cis.upenn.edu/~bcpierce/tapl/
- astannard 10y agoRefreshing post title! It beats the tired old "10 xxxx books you MUST read, or else" you see all over the place
- suprfnk 10y agoOff-topic, but body { font-family: sans-serif; line-height: 1.4; margin: 0 auto; width: 50em; } Please? I get that these websites aim to be simple, but it's really hard to read like this.
- masteruvpuppetz 10y agoI use printfriendly.com for such cases
- luis_espinal 10y agoMythical Man-Month and Software Project Survival Guide
- apricot 10y agoA little-known book, quite dated by now, but one of those books that takes a tightly-focused problem and shows how to solve it in a beautiful way that doesn't just solve the problem but also creates meaning that transcends the initial problem, is "Threaded Interpretive Languages" by Loeliger.