10 ms·
Books that will Substitute for a Computer Science Degree
- plainOldText 16y agoI've always wondered how do you choose the right books to read when you want to pursue a career on your own. Tough job I guess.
- puppetsock 16y agoTry many, keep few?
- mattmcknight 16y agoThere are so many courses online now that you can get syllabi from.
- silentbicycle 16y agoYou might like this thread on ask.metafilter: http://ask.metafilter.com/71101/What-single-book-is-the-best-introduction-to-your-field-or-specialization-within-your-field-for-laypeople http://ask.metafilter.com/71101/What-single-book-is-the-best...
- signa11 16y agohmm, nothing on networking or computer architecture, so sad. or would they be considered a part of a "computer engineering" degree ?
- tmcw 16y agoThe latter. In my experience, the fundamentals that this list covers are 'the hard parts' in terms of a certain kind of understanding and sort of intellectual challenge: most things more 'applied' beyond this point are taught poorly if at all in CS, and learned more readily in the 'real world.'
- Locke1689 16y agoI don't know, at Northwestern you can't pass the Intro to Networking class without writing TCP, software implementations of link state and vector routing, and sockets implementation. Those are just the project sections, there are of course formal exams for the other fundamentals of networking.
- Retric 16y agoWhy? That sounds like a complete waste of time to me. PS: I have a CS degree and I have written a fair amount of low level networking code, but I have no idea how that helps someone understand networking on either a practical or theoretical level. But, if you feel it was in anyway useful I am all ears.
- scott_s 16y agoIf you can implement it yourself, you understand it at a much deeper level than if you just read about it. This is why CS students still implement their own basic data structures (linked lists, hash tables, trees) in the freshmen and sophomore level classes.
- Retric 16y agoIn CS how something behaves is far more important than how it's built. For example one of the most surprising things to me was the fact that all programs built on top of TCP/IP still need their own messaging format because a packet can be split in transport. The header information says almost nothing about the original message sent, just enough information to send a reply up the chain and rebuild the message. As to linked lists, the speed that fragment virtual/physical memory is in no way obvious from their source code. Build one in C vs Java and they behave vary differently even if the code looks similar. PS: I really prefer CS projects that require some thought. Quickly sort this 50GB file requires a different mindset than simply, build a linked list library. IMO, build a linked list library is really a lesson in using pointers and tells you vary little about data structures.
- d4nt 16y agoI'd add "Code" by Charles Petzold. It's a sublime step by step guide to building a computer.
- sanderjd 16y agoIn my opinion, this book is practically a must-read for anyone living in our increasingly computing intensive world, not just for aspiring computer scientists. It has both depth and accessibility, starting with something familiar in concept to many people (Morse code), and slowly building more and more ideas toward the final realization of a workable computing machine. Great book.
- diego_moita 16y agoI suspect that up voting recommendations for Petzold's book became a Pavlovian reflex on me. That is a very well written book.
- lazyjeff 16y agoseems to be lacking a number of cs topics, notably: databases, data structures, algorithms, machine learning, data mining, and security
- presidentender 16y agoDatabases have been the most important topic in every interview I've had: can you "select col, count (col) as count from tbl group by col?" Their omission on this list surprises me.
- jey 16y ago> data structures, algorithms #2 on the list, The Art of Computer Programming by Donald Knuth, covers those.
- aidenn0 16y agoNo Discrete math book either. I wouldn't call anybody a "computer scientist" that didn't have a good grasp of discrete math. Though I suppose you can't make it through TAOCP without picking up some discrete math. Also, does anyone else think listing TAOCP as one book is a cop-out?
- Locke1689 16y agoIt's not even a cop-out, it's just ridiculous. TAOCP is basically a reference book -- no one actually reads through the entire thing like a textbook. TAOCP can be a good companion to other things but I wouldn't attempt to read it 1) in exclusion and 2) as a substitute for a CS degree. Also, no K&R?? How will you make it through OS design without K&R?
- paulgb 16y agoOn the bright side, at least they're computer science books. I was half-expecting to see "Teach Yourself C in 20 minutes" or "Visual Basic .NET For Dummies"
- diego_moita 16y agoAnd nothing on software engineering, testing, image & signal processing, numerical methods, ...
- showerst 16y agoNo mention of CLRS? For shame. http://www.amazon.com/gp/product/0262033844/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=486539851&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0262032937&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=13QJQ1B8HKMKAZFH15ZV http://www.amazon.com/gp/product/0262033844/ref=pd_lpo_k2_dp...
- jey 16y agoAgreed. CLRS > TAOCP.
- weaksauce 16y agoyeah for a cs degree equivalent CLRS >> TAOCP as TAOCP is more of a reference manual on algorithms whereas CLRS is a new way to think about writing programs. Both have their place in your bookshelf though.
- silentbicycle 16y agoYes, and apparently CLRS's place on your bookshelf is shifted to the right of TAOCP. :) Don't forget Okasaki's _Purely Functional Data Structures_, though. CLRS's coverage of persistent data structures is pretty weak.
- weaksauce 16y agoInteresting. I hadn't heard of that one. Is the book much better than the thesis that he did?
- silentbicycle 16y agoThe book expands on his thesis. I'd highly recommend it, especially if you found his thesis interesting.
- ynniv 16y agoNo list of books is going to substitute for years of interactive study, but if there is going to be a list, CLRS should be (high) on it. You might not need it to write a Rails app in 21 days, but you'll be a more enlightened programmer if you do.
- scott_s 16y agoConsider that the best athletes in the world have coaches. Even if it's a cooperative endeavor, it helps an athlete to have someone else to design training programs, objectively point out weaknesses, push them when the still have more to give, and pull them back when they've gone too hard. In theory, the athletes can do this by themselves. In practice, they rely on their coaches. In theory, you can read books on your own and hold yourself accountable so that you grind through difficult problems and projects so that you actually learn the material you read about. In practice, having a teacher to help you through this process makes you much more likely to succeed.
- amackera 16y agoSadly, in my experience, teachers in Computer Science degrees rarely help one through this process.
- mechanical_fish 16y agoYes. I never encountered someone who actually could have (a) sold me a CS degree, then (b) coached me properly, until after the Web was invented. The other point I'd make is that I went to grad school, and frankly in the technical subjects the professors are rarely the best coaches. Most of them have not been beginners for a long time, and their primary focus is not on how to relate to beginners. (Primary focus: How to relate to funding agencies. Secondary and tertiary focuses: How to relate to the rest of the department, and how to relate to grad students. Somewhere down near the bottom of the priority queue: Relating to undergraduates. Those profs who are primarily focused on teaching are absolute godsends, but are probably also having trouble getting tenure; such is the nature of undergraduate technical education at elite universities.) The best coaches tend to be slightly-older fellow students. Ironically, the social structure of undergraduate classes is designed to segregate students at different levels of experience; the moral of that is: You must take steps to seek out older students who are willing to offer advice.
- kkshin 16y agoI had great teachers that helped me with my education at my school and they truly enriched my learning experience.
- pgbovine 16y agowhat a linkbait article title ... sadly, if a company has a degree requirement for hiring, then no amount of self-learning can substitute for a lack of an accredited diploma. i doubt that a hospital will hire you just because you read all the "books that will substitute for an M.D." yes, i know that programming skills can be more easily self-taught than, say, brain surgery, but as long as companies hire based on degrees, there isn't really a 'substitute'
- amackera 16y agoThere are many examples of fantastic hackers with no paper to back it up. There are also many examples of awful hackers with good marks to back it up. The truth is in the code.
- dustrider 16y agoAbsolutely! I once hired a MSc CS grad on a project and he produced some of the worst code I've ever seen, not even just a code perspective, which to some degree is understandable, but from a conceptual point of view as well. Some seriously bad stuff. That said I still greatly value a CS degree (even a self-study one) simply because of the fundamentals it teaches. It's not an automatic indicator of ability, but having that level of understanding makes the difference between someone that can think conceptually about and around a problem and someone that has a set number of tools to solve problems with. I don't think that getting a CS degree is the only way to get that kind of understanding, but I do think it's one of the easier ways. If you're a hacker on your own and you've got to trawl through the glut of bad coding books out there, it's tough to get a good education. Though I firmly believe that if you're the kind of guy that has gotten that education without any help then you're probably better than the guy that got it with help. I'm firmly in the camp that holds that an education is to educate you and provide you with skills and tools to operate effectively, not to obtain a certificate. Holding the certificate is not an indication that you have actually received an education, the only indication is your ability, ambition and results. For what it's worth, I think the majority of the books on the list are must-reads for anyone in programming, there may be a few better ones (I'm a Tannenbaum fan when it comes to OS's as an example) and there may be areas that aren't covered, e.g. usability and CHI (Design of everyday things would be my suggestion there) and there is suspicious lack of anything web, mobile or distributed, but if someone internalises these, they'll definitely be better for it.
- limist 16y agoNo mention of SICP - the CS classic that's not only decently rigorous, but actually inspires the fun and joy of programming, as it promises in its Preface: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html
- silentbicycle 16y agoThere are tons of other books that could be there, too. Any "top X books for field Y" list is going to be a bit arbitrary, probably telling you as much about the people who wrote the list as the field itself. That said, I'd also suggest: * Concepts, Techniques, and Models of Computer Programming by Peter Van-Roy and Seif Haridi ("CTM"), which covers several different programming approaches. Not about different languages, but their underlying models, and ways in which they can be combined. * The Art of Prolog, by Sterling & Shapiro - An excellent book on logic programming, using Prolog for exercises. (CTM also touches on Prolog, but this book goes quite a bit deeper.) * The Lambda papers - http://library.readscheme.org/page1.html http://library.readscheme.org/page1.html * _Lisp in Small Pieces_ by Christian Queinnec ("LiSP"). On implementing Lisp, strongly skewed towards Scheme. * Paradigms of Artificial Intelligence Programming by Peter Norvig ("PAIP"). AI, problem solving techniques, Lisp practicalities and implementation, Prolog, tons more. Extremely lucid. (I wish it was a hardcover, though.) * C Interfaces & Implementations by David Hanson - an excellent book on how to design C library APIs, including quite a few useful libraries.
- J_McQuade 16y agoUpvoted for the PAIP mention - Any book that can totally shift your conception of what programs can do within the first three chapters has to be up there. I know plenty of CS students from university that currently work writing software (I did Maths) who still look at me like some sort of he-witch whenever I do or suggest something data-driven as a solution to a problem, but it's that book that did it for me - it's almost a shame that the only people of my age likely to have read it are the lone "I code out of interest" types that are always on the look-out for a good mind-bending. (the greater shame, of course, is that these people are less likely to find a satisfying job in the area than their seemingly uninterested CS-grad friends (grumble grumble))
- ja27 16y agoI'd add a few that might be a bit dated, but I still think they're still great today: Introduction to Algorithms - CLR(S) - other people already suggested this. The Soul of a New Machine - feels old now, but it's still a fairly well-written glimpse into real-world (hardware) projects, or at least where we came from. Ahh, maybe it really is too old now to be that educational, but it's a good read. Programming Pearls - I think this book still teaches as much practical knowledge about the field than you could get in 5-10 years. If you really "get" everything in here, you should be well on your way to being a super-star code hacker, if that's what you want to be.
- jmg 16y agoG.E.B.? Fun book, yes, but to make a list of 10 books to substitute a Bachelor's degree in CS? nonsense.
- kd0amg 16y agoI'm only about halfway through it, but it does seem like a decent intro to the math and CS concepts that will be needed for more advanced material. A CS degree program isn't all senior-level coursework.
- namin 16y agoIt seems that this 'article' is lots of copy-pasting of most of the reviews from this Amazon user: http://www.amazon.com/gp/cdp/member-reviews/A3CC0TO2YD3P5A/ http://www.amazon.com/gp/cdp/member-reviews/A3CC0TO2YD3P5A/
- baddspellar 16y agoThis is nonsense. A CS degree includes math, science, a range of CS electives (e.g. database theory, networking, algorithms) and non-CS electives (e.g. writing, philosophy). Plus, you have graded assignments, lab exercises, supplemental papers, and interaction with teachers and fellow students.
- dustrider 16y agoGood point, Formal logic I studied in the phil dept far outstripped the AI courses at a similar level in CS. The same goes for Linear Algebra and data mining/IR. Those two areas, possibly along with linguistics (data mining again), were much more useful to me than the programming 101 type courses.
- sireat 16y agoStrange, Linear Algebra and Formal Logic were part of my CS curriculum.
- csl 16y agoAgreed. I think you could substitute a degree if you work through most books required for it. After dropping out of mathematics, CS and physics studies (big mistake there), I've been working as a programmer for 10 years. But I routinely check out the curriculum at Universities to update my bookshelf. The problem is that while I will gladly work my way through SICP or CLRS, stuff like math books are different. I often intend to work through math books (meaning: solving the exercises and working through the proofs), but this is a lot more motivational when you know you need to pass an exam in the end.
- pavs 16y agohttp://en.wikipedia.org/wiki/Autodidacticism http://en.wikipedia.org/wiki/Autodidacticism Higher education is over-rated. If you can read and write, there is no reason why you can't pick up a book and learn something new yourself. Yes, your mileage may vary in performance, but how is it any different from IRL education?
- snikolov 16y agoThe problem is that a lot of people don't learn how to learn until fairly late in their education. Whatever clarity of thought and healthy skepticism I have developed, I give most of the credit to the great teachers who challenged me. It is misguided to tell most high school students to go and learn completely by themselves. Disregarding the motivation that school brings, someone that opts instead to study alone in their room runs the risk of fooling themselves -- the risk of not really getting the point, or not asking the right questions, or being just plain wrong (for long periods of time) without even realizing it.
- Kaizyn 16y agoMost of these books are from the ACM Classic Book Series: http://portal.acm.org/toc.cfm?id=SERIES11430&type=series&coll=ACM&dl=ACM http://portal.acm.org/toc.cfm?id=SERIES11430&type=series...
- techbio 16y agoThis compelled me to take my copy of "Programming Pearls" (by Jon Bentley, 2000, 2nd ed.) from the bookshelf. Another one that has spent time on my night table is "The Turing Omnibus: 61 excursions in computer science" by A.K. Dewdney. Varied, clever problems in dazzlingly plain language.
- csl 16y agoThe Turing Omnibus leisurely covers a broad range of important and often forgotten topics. It's a great book. It will give you a good overview of CS, and then you can go deep at your choosing with other books. I loved the first chapters in Bentley, but then I thought the novelty wore down. Maybe I'll take a new look at it too.
- MarkBook 16y agoExtending the premise to the ultimate, if you have time to study just one book and one in which not a single word is wasted it's got to be : The Elements of Computing Systems: Building a Modern Computer from First Principles by Nisan and Schocken
- mark_l_watson 16y agoMy choices would have been different, with general topics: data structures, automata theory, programming languages survey, systems programming, algorithms, network programming, database/datastores, and AI ("Artificial Intelligence, a Modern Approach"). I have mixed feeling about compiler theory, and left it off of my list. Some may question including systems programming.
- joshfraser 16y agoI haven't read a single one of those books. If you're going to substitute anything for a CS degree, just get out there and build something.
- absconditus 16y agoComputer science and software development are not the same thing. This is part of the problem.
- count 16y agoArchitecture is not carpentry/masonry/tradecraft. I don't know why so many people confuse it with computing...
- akshayubhat 16y agoThe biggest problem with such lists is that unlike novels, academic Books are rarely read cover to cover. If you try to read the book cover to cover you will most likely start forgetting it after few weeks. However when you learn things slowly over few years and interact with material in multiple ways, such as lectures, reading, test, internships, labs, group/individual project you are more likely to have some hint about the material, may be you will remember a lecture or some project or some lab experience, however in case of just reading a book its harder to recall. A good process of learning involves not just you alone but also people around you who motivate you to stay on the course and offer assessment of your capabilities. Thus formal classroom education tends to be more useful than an online one. Though it depends a lot on your school and quality of your peers/ friend circle.
- dminor 16y agoThe article confuses "degree" with "education".
- yoyar 16y agoAnyone like Design Patterns GoF?
- jrockway 16y agoYeah, just do all the exercises in TAOCP and you'll be fine!
- elai 16y agoA typical CS-undergrad set of topics: -How to Program -Algorithms & Data Structures -Functional Programming -State Machines & Computation Classes (NP-Complete, Turing Machines, Regular Languages, etc) -Complier Construction -Physical Computer Architecture / ASM -Operating Systems -Computer Networking -Parallel Programming And then some other recommened topics: -Database Systems -2D & 3D graphics -AI -Crypto
- furtivefelon 16y agoBy the time I hit the second entry, TAOCP, i realized this list is a joke and save for some really smart people, no one else will gain much from pursing that book in it's entirety. Much better off with CLRS or even the first part of Algorithm Design Manual. The list is a classic list of books-i-wish-i-read-but-never-had-time-to.
- kksm19820117 16y agoI wholeheartedly disagree with the recommendation of "Artificial Intelligence, by Elaine Rich". The book was unreadable in a way that made me want to detest the subject. I found the Patrick Winston text a lot nicer.
- gexla 16y agoSubstitute in what way? Can I list all the computer books I have read on my resume?
- forgotAgain 16y agoAs others have mentioned the affects of a coach cannot be overlooked. Add in also the benefit of exploring with one's peers in a free environment. The idea that reading a selection of books is an effective substitute for an undergraduate education is a damning comment about the state of CS programs. As an actual effective substitute, no.
- zeteo 16y agoThe list is at the same time too little and too much. Too little, because it misses on fundamental subjects like computer architecture and algorithms (modern algorithms, which are heavily graph-based). Too much because those books contain lots of in-depth information that is not required, unless you're really, really passionate about the field. And some parts are simply not very relevant - e.g., Knuth tells you at length how to implement (in assembly!) algorithms that are very specialized and you normally draw from a library (plus the fundamentals of assembly are not exactly the same on today's multi-core, speculative execution machines).
- Confusion 16y agoEven if it substitutes for a CS degree, it won't make you a remotely decent programmer. Without books like Code Complete, The Pragmatic Programmer, The Mythical Man Month, etc., your code will suck.