(Part 2) Top products from r/compsci
We found 106 product mentions on r/compsci. We ranked the 669 resulting products by number of redditors who mentioned them. Here are the products ranked 21-40. You can also go back to the previous section.
21. Algorithm Design
Sentiment score: 6
Number of reviews: 7
Used Book in Good Condition
22. Pattern Recognition and Machine Learning (Information Science and Statistics)
Sentiment score: 4
Number of reviews: 6
Springer
23. The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography
Sentiment score: 4
Number of reviews: 6
The Code Book The Science of Secrecy from Ancient Egypt to Quantum Cryptography
24. Introduction to the Theory of Computation
Sentiment score: 2
Number of reviews: 6
25. Introduction to the Theory of Computation
Sentiment score: 3
Number of reviews: 6
Used Book in Good Condition
26. The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine
Sentiment score: 3
Number of reviews: 6
John Wiley & Sons
27. Quantum Computation and Quantum Information: 10th Anniversary Edition
Sentiment score: 3
Number of reviews: 5
Cambridge University Press
28. Programming Pearls
Sentiment score: 1
Number of reviews: 5
Addison-Wesley Professional
29. Head First Java, 2nd Edition
Sentiment score: 4
Number of reviews: 5
O Reilly Media
30. The Haskell Road to Logic, Maths and Programming. Second Edition (Texts in Computing)
Sentiment score: 2
Number of reviews: 5
Used Book in Good Condition
31. Purely Functional Data Structures
Sentiment score: 3
Number of reviews: 5
Used Book in Good Condition
32. Hackers: Heroes of the Computer Revolution
Sentiment score: 2
Number of reviews: 5
O Reilly Media
33. Feynman Lectures On Computation (Frontiers in Physics)
Sentiment score: 3
Number of reviews: 5
Used Book in Good Condition
34. Patterns of Enterprise Application Architecture
Sentiment score: 1
Number of reviews: 4
36. Algorithmics: The Spirit of Computing (3rd Edition)
Sentiment score: 3
Number of reviews: 4
37. Types and Programming Languages (The MIT Press)
Sentiment score: 4
Number of reviews: 4
Mit Press
38. Effective Java (2nd Edition)
Sentiment score: 2
Number of reviews: 4
Prentice Hall PTR
TAOCP is too hard: its like one of those fantasy wishlist items: the kind of thing every computer scientist wishes they had read but never really has the time to. Some nicer books that are gold standards in their respective fields are:
CLRS (Algorithms)
SICP (Just see the top two amazon reviews)
Kernighan and Ritchie (if you want to be a pretty accomplished C programmer and have little to no real C experience before)
Since you mentioned security, Ross Anderson's Security Engineering is a fantastic read, and very easy to parse: you could read it through in less than a week and have a deeply changed view of the structural issues in security: there is little crypto in the book (for that, Schneier is the gold standard) but more discussion about protocols, where protocols fail, real-world protocols like the military classification scheme, etc. It is absolutely fantastic. If you read this and Schneier you'd have a very thorough understanding of the entire security stack.
Kleinberg and Tardos is a much easier read than CLRS when it comes to algorithms, doesn't cover as much, and is very graceful in its explanations. Personally, I love it.
I think this might be beyond what you're looking for, but I really enjoyed Pattern Recognition and Machine Learning. It's very heavy on statistics, and if you're looking into machine learning methods, it has a wonderful amount of mathematical information given in a fairly clear manner. It might be severe overkill if this isn't your field, but I thought I'd mention it since you said AI.
For AI in general, I see Artificial Intelligence: A Modern Approach used a lot. It gives some solid basic concepts, and will be helpful in getting you started writing basic AI in your applications.
I can't really recommend discrete math because, despite enjoying it quite a bit, I haven't found a textbook that I like enough to endorse. My textbook for it in college was by Rosen, and I despised it.
edit:
Just double checked it, and I would stay far away from the first recommendation unless you have a very extensive knowledge of sophisticated statistics. I like it because it gives the math that other books gloss over, but it's not good for an introduction to the subject. It's almost like going through a bunch of published papers on some new cutting edge methods. The ever popular Machine Learning by Thomas Mitchell is a much better introduction to machine learning. If you want to obtain the mathematical depth necessary for your own research into the field, go with the other book after you've gotten acquainted with the material. I'll leave my suggestion up anyway in case anyone here might find it interesting.
Start with a good algorithms book like Introduction to algorithms. You'll also want a good discrete math text. Concrete Mathematics is one that I like, but there are several great alternatives. If you are learning new math, pick up The Princeton Companion To Mathematics, which is a great reference to have around if you find yourself with a gap in your knowledge. Not a seminal text in theoretical CS, but certain to expand your mind, is Purely functional data structures.
On the practice side, pick up a copy of The C programming language. Not only is K&R a classic text, and a great read, it really set the tone for the way that programming has been taught and learned ever since. I also highly recommend Elements of Programming.
Also, since you mention Papadimitriou, take a look at Logicomix.
Introduction to Algorithms by CLRS
TAOCP is a waste of time and money; it's more for adorning your bookshelf than for actually reading. Pretty much anyone who suggests TAOCP and is less than 55 years old is just parroting Standard Wisdom™.
Godel, Escher, Bach is a nice book, but it's not as intellectually deep in today's world as it was when first published; a lot of the memes in GEB have been thoroughly absorbed into nerd culture at this point and the book should be enjoyed more as a work of art than expecting it to be particularly informative (IMO).
If you're interested in compilers, I recommend Engineering a Compiler by Cooper & Torczon. Same thing as TAOCP applies to people who suggest the Dragon Book. The Dragon Book is still good, but it focuses too much on parser generators and doesn't really cover enough of the other modern good stuff. (Yes, even the new edition.)
As far as real programming goes, K&R's The C Programming Language is still unmatched for its quality of exposition and brevity, but these days I'd strongly suggest picking up some Python or something before diving into C. And as a practical matter, I'd suggest learning some C++ from Koenig & Moo's Accelerated C++ before learning straight C.
Sipser's Introduction to the Theory of Computation is a good theory book, but I'd really suggest getting CLRS before Sipser. CLRS is way more interesting IMHO.
I would suggest that the carlh programming guides is not a bad idea then!
I would heavily suggest learning C well - this is a language that was designed to stay close to the hardware while being portable, and is a very small language. So, buy a copy of the K&R Book, ever C programmer has one.
Then, Patterson's book is a tome for computer engineering. It'll show you assembly, all the way down to NAND gates.
I would suggest you start by watching and working through Berkeley's CS61C course. It's the logically second course in CS, and after a quick overview of C it dives into the machine itself. Website here, videos here. Also, Dan Garcia is an excellent lecturer.
Once you have all the machine details down, you'll probably feel hampered by your actual program wizardry. This is where you start looking into algorithms and data structures. Your go-to guide here is probably Cormen's Introduction to Algorithms since it handles both data structures and algorithms. It's definitely more of a theoretical/CS-ey book, so if this is not what you want, then Head First Java will teach you a new language (and learning more languages is one of the best ways to grow as a programmer!) and also do many data structures. In fact, you can get both those books and have the light side and the serious side of programming books.
At this point you should be well equipped to go off in whatever direction you want with programming. Start contributing to open source projects! Find things that interest you and try to solve problems! Being a part of the programming community will be your biggest aid in both learning programming and starting to make money through it. People pay for programmers that they know can deliver, and success in the open source world means a lot, and you don't need to go to school for it to get to this point!
Lastly, many CS/programming folks hang out on IRC. If you have questions, find the appropriate IRCS channels and go talk to people. Good luck and welcome to programming!
I'd say CLRS is the most fundamental, since all CS is built on algorithms.
For architecture/systems people (my area):
Computer Architecture: A Quantitative Approach by Patterson and Hennessy. Their other book Computer Organization and Design is excellent as well (and should be read first).
All books by Andrew Tanenbaum. His distributed systems, OS, and network books are excellent reads.
The Dinosaur book for OSes.
I also really like Smith/Nair for Virtual Machines. It is a new book and is not among the classics yet, but it is great.
For memory, caches, and disks, I recommend Jacob. It is also a newer book, but is essential to understand the Von Neumann bottleneck and possible solutions.
And, of course, the dragon book for getting started compilers. Then Ken Kennedy for advanced compilers.
And as a side note:
For AI, Russell and Norvig is required reading.
For type systems, Pierce is awesome.
This is a good list. I'd definitely not go for Winskel's book, and I'd skip the Dragon book because I think it is quite out of date (nothing on type systems, or first-class functions or even objects).
For languages, I'd go with Andrew Appel's Modern Compiler Implementation in Java (or "in ML"), and for language semantics, I'd go with
Semantics with Applications: An Appetizer, followed by Pierce's Types and Programming Languages (TAPL).
Also, Knuth's Concrete Mathematics is very very good, but is heavily skewed towards number theory. It is a must-read if one's interests are in crypto, but won't help you at all if for example, you want to work with databases, theorem proving, programming languages etc. You need a solid set theory foundation. Or if you were interested in graphics or machine learning, I'd go for a solid linear algebra foundation.
There are no systems books on your list, so I'd suggest one on operating systems: it is free and very good.
Operating Systems: Three Easy Pieces
I watched the entire course of Data Structures and Algorithms by Richard Buckland (UNSW) and thought it was excellent.
http://www.youtube.com/playlist?list=PLE621E25B3BF8B9D1
There is also an online course by Tim Roughgarden (Stanford) currently going on. It's very good but I don't know if you can still sign up.
https://class.coursera.org/algo
Topcoder.com is a fun place to test your skills in a competitive environment.
That being said, based on the description you are interested in things which don't usually fit into algorithms books or courses. Instead, you might want to look into machine learning and maybe even NLP. For example Pattern Recognition and Machine Learning by Bishop and Foundations of Statistical Natural Language Processing by Manning & Schuetze are great books for that.
(Note: I wrote this elsewhere)
Discrete Mathematics. It teaches the basics of the following 5 key concepts in theoretical computer science:
When you master these concepts, you will see that all hairy, formal definitions boil down to functions, sets, and propositions (with quantifiers). Recursion appears in many interesting structures in computer science, as well as in proofs of theorems (which are themselves propositions).
I don't know of any good online introduction to discrete math, but here are a few book ideas.
In the theoretical field of complexity...
The 1979 version of Introduction to Automata Theory, Languages, and Computation by Hopcroft & Ullman is fantastic and used to be the canonical book on theoretical computer science. Unfortunately the newer versions are too dumbed down, but the old version is still worth it! These days Introduction to the Theory of Computation by Sipser is considered to be the canonical theoretical computer science text. It's also good, and a better "introduction" than H&U. That said, I prefer H&U and recommend it to anyone who's interested in more than getting through their complexity class and forgetting everything.
In the theoretical field of algorithms...
Introcution to Algorithms by Cormen, Leiserson, Rivest and Stein is dynamite, pretty much everything you need to know. Unfortunately it's a bit long winded and is not very instructive. For a more instructive take on algorithms take a look at Algorithms by Dasgupta, Papadimitriou and Vazirani.
Like you I work at a tech startup. When we were just starting, our business/strategy people asked the question you just asked. They opened a dialog with development team, and found good answers. I attribute our success in large part to that dialog being eager and open-minded, just as you are being right now. So, it's good tidings that you are asking.
For us, the answer came from conversation, but it also came from reading the following books together:
I read The Annotated Turing by Charles Petzold while I was in high school and it really sparked my love for logic, math and computer science. So, as far as popular science books go, I can't not recommend it.
Right now I'm interested in programming languages, and I think TAPL is a great resource. The (relatively) new blog PL Perspectives is also pretty cool, and so is /r/ProgrammingLanguages.
A really interesting book that would complement (or be) a course in computer architecture is "The Feynman Lectures on Computation" http://www.amazon.com/Feynman-Lectures-Computation-Richard-P/dp/0738202967 This is a really fascinating book that explains computers from basic physics up to a useful machine that does work. It also has the virtue of being written by Feynman, someone with an amazing ability to explain things!
Well, what do you want to learn?
I mean, if you're looking to code, the HeadFirst books might be worth looking into. Go browse one at your local book store.
Eclipse is pretty cool for writing Java, but I'm sure someone will come along and suggest another IDE.
I haven't tried it, but Python is supposed to be pretty good.
Also, when you're trying to learn to code, do the exercises. Do all of them. Practice doesn't make perfect, but it helps.
Finally, Bucky, aka theNewBoston, is a friggin' boss when it comes to tutorial videos.
https://www.amazon.com/Quantum-Computation-Information-10th-Anniversary/dp/1107002176
Best book hands down. This will bring you to the frontier of quantum computing. The book is also very approachable and meant for people trying to learn. It covers some linear algebra as well as physics in order to bring you up to speed.
Michael Nielson is an amazing educator and expert in the field. His you tube lecture course https://www.youtube.com/playlist?list=PL1826E60FD05B44E4 Quantum Computing for the Determined, is a short version of that book. He also has a free book online on Neural Networks that is probably the most referenced source on the matter. http://neuralnetworksanddeeplearning.com/index.html
It's really Comp Sci, but I really enjoyed The Code Book. Goes over secret codes over time, starting with the basics, ends with Cryptography, goes over some of Alen Turing's work. Over all a good, fascinating read.
Upvote for Domain-Driven Design, it's a great book. Depending on the size of the system, Martin Fowler's PoEAA might also be helpful.
Also what dethswatch said: what's the audience & scope; i.e. what's in the previous document? If you're presenting three architectures you probably need enough detail that people can choose between them. That means knowing how well each will address the goals, some estimate on implementation effort (time & cost), limitations, future-proofing, etc.
Finally, IMHO, this really isn't computer science. You might have better luck asking in /r/programming/ or the new r/SWArchitecture/
There's a pretty good list at:
http://www.codinghorror.com/blog/2004/02/recommended-reading-for-developers.html
Personally, I'd recommend the following:
I know that this is way more on the theory/mathematics side of the spectrum than CODE, but Charles Petzold also wrote a book called The Annotated Turing that I really enjoyed. He took Alan Turing's original paper on computability which was about 30 pages and annotated it until he had about a 400 page book. There were a couple of chapters in the middle that got a bit dense, but he did a fantastic job of making the subject more approachable and understandable.
The way I got started was working through the exercises in Benjamin C. Pierce’s Software Foundations. It starts from the absolute basics (which was good for me). Volume 1 covers logic, theorem proving, and other Coq fundamentals. Volume 2 discusses proving programs correct and proving the soundness of type systems. I haven't worked through Volume 3, but it covers verifying algorithms and data structures.
It also helps to have a good understanding of type theory in general. For me, that background knowledge came from another Benjamin C. Pierce book: Types and Programming Languages.
Once you know the basics of how logic works in Coq, I think the material from a discrete math course (like this) is probably a good source of proofs to try (logic, graphs theory, combinatorics, number theory, etc).
The Sipser book mentioned elsewhere is pretty much all of those topics. You may also be interested in a good algorithms book. CLRS has been recommended elsewhere, but Kleinberg & Tardos is probably more accessible. I am using both in school right now, and I find CLRS as a better reference (more breadth) and K&T better for exposition.
Maybe this one: Algorithmics - The Spirit of Computing
A good conceptual overview of Computer Science
>The best selling 'Algorithmics' presents the most important, concepts, methods and results that are fundamental to the science of computing. It starts by introducing the basic ideas of algorithms, including their structures and methods of data manipulation. It then goes on to demonstrate how to design accurate and efficient algorithms, and discusses their inherent limitations. As the author himself says in the preface to the book; 'This book attempts to present a readable account of some of the most important and basic topics of computer science, stressing the fundamental and robust nature of the science in a form that is virtually independent of the details of specific computers, languages and formalisms'.
This isn't criticism or a judgment, but that sounds like an odd request. If you've really absorbed what's in CLRS, I would imagine you could just research those data structures yourself and, for example, look at some open source implementations.
Or research what's in other Data Structures and Algorithms books and read up on them.
Having said that - there is an MIT course on advanced data structures.
I also enjoyed Chris Okasaki's Purely Functional Data Structures
There are 2 Coursera courses in particular - Princeton University's Algorithms Part I and Algorithms Part II - they've provided a web site for their book where lots of algorithms and data structures are implemented using Java with the libraries and source code freely available.
Data Structures and Algorithms is what I used in my class... not so easy to read but a ton of sample code that is easy to understand. I would recommend checking it out at a library before buying it, though... my class was fairly 50/50 on who liked it and who didn't.
Cracking the Coding Interview: More to help you get a job as a Software Engineering, but full of fun problems even if you do them just for the challenge and learning.
The Code Book: A great overview of the history of Cryptography.
Severo Ornstein's book Computing in the Middle Ages: A View From the Trenches 1955-1983
Contains some neat gems and is a neat read
http://www.amazon.com/Computing-Middle-Ages-Trenches-1955-1983/dp/1403315175
The Soul of a New Machine by Tract Kidder is also a lot of fun
http://www.amazon.com/The-Soul-A-New-Machine/dp/0316491977
Hackers starts after Turing and other pre-computers (at least what we think of as a computer), but it is a pretty good narrative history beginning with the formation of the Model Train Railroad Club at MIT through to the PDP-7, Apple Mac and beyond.
edit: a letter
Seems like it goes from types and operators through to multithreading. If you're set on learning Java first (though I'd suggest C or Python) then I suppose it's not a bad place to start since I think a lot of Java books would assume some previous programming knowledge. Personally, I liked http://www.amazon.com/gp/product/0596009208 since it was quite an easy read but I think that one assumes too.
You might find /r/learnprogramming has a lot of useful stuff for you.
Though not really geared to compsci, The Code Book is a great history of cryptography and cryptanalysis from the dawn of time to current. Excellent read.
I always recommend this book for a self-study beginner.
Edit: To clarify, this is a programming book, not a CS theory book. Not sure which you're looking for, but learning programming now most definitely will help you with your future CS classes.
For designing programming languages, my favorites are
If you only get one then go with Pierce. But If you want to get serious about semantics, then Winskel is the way to go.
On the implementation side my favorites are
As far as I know to understand how a computer works it's also important to understand the algorithms running on that.
I'd suggest you to read something light like this (http://www.cse.ohio-state.edu/~gurari/theory-bk/theory-bk.html) and after that read things like Knuth (http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025/ref=pd_sim_b_2/191-9538329-5615213) (http://www.amazon.com/Art-Computer-Programming-Volumes-Boxed/dp/0201485419).
MIT's introduction to CS is also a nice begin (http://academicearth.org/courses/introduction-to-computer-science-and-programming)
Feynman gave a few lectures about computation. He talked about things like reversible computation and thermodynamics, quantum computing (before it was a thing), and information theory. They were pretty interesting. https://www.amazon.com/Feynman-Lectures-Computation-Frontiers-Physics/dp/0738202967
Hackers: Heros of the Computer Revolution
The Cookoo's Egg
Both non-fiction, both excellent. Both cover a unique period in computing history, the understanding of which is worthwhile.
My local used book store has a copy of Sipser for $15 that I've been meaning to pick up. Considering the $143 price tag on Amazon, it's a pretty good bargain. I just don't know whether it's 1st or 2nd edition. Anyone have any idea if there are major differences?
There are a few good tutorials online. In fact Scott Aaronson has linked to several of them from his blog when that question comes up. I have a bias for this one
Quantum Computing Tutorial
Since Dr. Braunstein is my former supervisor. Also, in my opinion the best introductory book on the subject is:
This
though some academics seem more partial to:
this
I have found that once you get into the workforce, the need for writing the most efficient algorithms and the overall value that I have gotten from such courses rarely comes up in every day application development. What they really should be teaching you are best practices and programming patterns. Here's a great book on that. It's titled Java, but much carries over to other languages as general practice.
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
OK..
http://www.amazon.com/Contemporary-Abstract-Algebra-Joseph-Gallian/dp/0547165099/
http://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321295358/
http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/
http://www.amazon.com/Introductory-Combinatorics-5th-Richard-Brualdi/dp/0136020402/
http://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/
And I guarantee you those nice amazon prices aren't that steeply discounted around the start of the semester, and certainly not in any brick-and-mortar bookstore.
>So do you guys have any ideas on a title?
"Everything I Learned About Quantum Computing After I Stopped Worrying About the Title and Learned About the Content"
>and can you recommend any good books?
What level? The standard intro is Mike and Ike if you have a calculus and linear algebra background.
It sounds like you might be in high school (or equivalent) so you probably don't have much linear algebra knowledge beyond knowing what a matrix is.
It isn't a book, but Scott Aaronson has a decent blog. There is a lot of non Quantum talk too, but if you sift through there is a lot of interesting stuff.
You should mention more specifically what kinds of problems you're looking for. Do you want to merely implement well known algorithms? Design novel algorithms for specific problems? Analyze the efficiency of a given algorithm?
For the first two possibilities that I listed, you should not need solutions (and there's no single way to write code and many algorithm problems have multiple solutions). Instead, you should be writing test suites that can let you know when they code works. This isn't 100% perfect because it's always possible that there'll be some edge case that you'll miss (although test suites should be rigorous to try and avoid this), but it'll do well for most cases and is how you'd work in the real world.
And of course, you can always try and formally prove novel algorithms work. There's isn't really an easy way to check for answers here, though, since there's more than one way to prove many algorithms (and some algorithms are extremely complicated to prove). So there isn't really anything you can do besides having a more experienced person check your answers. If you have a low volume of questions, Reddit might be able to help (find specific subreddits). But otherwise expect to have to pay for a tutor (if you're in school, your university might have something free available for CS help).
As for some actual advice, I thought Kleinberg's Algorithm Design was very good for creating novel algorithms. It has lots of problems. No answers, though.
You're right that it's pretty hard to find quality books that come with solutions (even if it's just one solution to a problem that has many possible solutions). It seems that most texts of a reasonable quality are targeted towards universities and thus don't make answers available so that universities can use the problems in assignments. I wish more books would do something like giving answers to even numbered problems. It's a major pain in the ass for those who would try and self-learn something.
Effective Java by Joshua Bloch is a really good book and definitely worth reading if you're using an object-oriented language, not just Java. It helped me immensely when I was starting out with how to think about my code and my designs.
I agree, CLSR is too much like a dictionary and not enough like a story. For my graduate algorithms course, we used Algorithm Design by Kleinberg and Tardos. I could actually read this book because they took the words to explain the formulas they used. I'd recommend it! Not only did I learn about algorithms, but it also helped with reading formulas. Website Amazon Link
That said, they focused more on algorithms than on data structures, so this might not be for you.
[The Soul of a New Machine] (http://www.amazon.com/The-Soul-A-New-Machine/dp/0316491977/ref=sr_1_1?ie=UTF8&qid=1342493295&sr=8-1&keywords=the+soul+of+a+new+machine) by Tracy Kidder is a great read also, it was recommended by one of my professors.
I'd recommend you to read Bishop's PRML's Chapter 8, luckily this chapter is available on the web.
I'm quite a fan of Sipser's Introduction to the Theory of Computation: http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X
It's not a full-on algorithms book but formal models were always the most interesting part of theoretical computer science to me. vOv
The Mathematical Theory of Communication is short and sweet.
Once you have had your linear algebra, you might be interested in looking at quantum computing. The canonical text there is Quantum Computation and Quantum Information.
If you're interested in learning more about Turing's paper that introduced the Turing Machine, I highly recommend the book The Annotated Turing. It's by the same person who wrote Code, which is an oft-recommended book on this sub-reddit.
Another book to add to the list:
Data Structures and Algorithms (Aho, Hopcroft, Ullman)
It's very easy to follow, the examples are in pascal.
If you have the CLRS book, with that you are ok. This is much shorter.
If you're planning on learning haskell (you should :D), why not do a book that teaches you both discrete maths and haskell at the same time?
There are atleast two books that do this:
Both books use Haskell in an effective way to teach you discrete mathematics. (They don't assume prior knowledge of Haskell).
I've been working through the 2nd book and posting my notes and solutions here . You could compare solutions/notes and discuss stuff with me.
I heartily recommend Steven Levy's "Hackers". One of my all-time favorites.
Either Introduction to Algorithms
or Algorithm Design
Those books were the textbooks for the algorithm and data structures courses, respectively during my bachelor and master's degree in computer science, I find both of them really well written.
To my knowledge, Chris Okasaki made a big impact with this work in this area, and directly influenced Clojure, among other projects.
His book is a great read: http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504
It's based on his PhD thesis: https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf
This StackOverflow question addresses what's changed since the late 90's: http://cstheory.stackexchange.com/questions/1539/whats-new-in-purely-functional-data-structures-since-okasaki
Expert C Programming : Read this after reading K&R C book.
Programming Pearls : Excellent Book
Algorithm design manual : Read it after CLRS.
I'm kind of in the same position as you, OP. Thinking of getting CLRS, New Turing Omnibus, The Elements of Computing Systems, and Algorithmics!
So excited.
Check out The Code Book by Simon Singh. It is about the history of cryptography, but along the way, it also has some history of computing, and it's an entertaining read.
There are books that are compendium of computing such as
but they still require some effort on your side.
It would be better if you rephrase the question from "Cliff Notes" to "beginners intro that is not Sipser" : )
Some books on my wishlist (not sure if you're okay with math):
TAOCP
Operating System Principles
Computer and the Brain
Path to the Quantum Computer
Depending on the amount of energy you want to put into this: "Introduction to Lambda Calculus" by Henk Barendegt et al. is great ((http://www.cse.chalmers.se/research/group/logic/TypesSS05/Extra/geuvers.pdf).
Study the proofs and do the exercises and you will learn a ton, quickly. You can also read "proposition as types" by Philip Wadler (http://homepages.inf.ed.ac.uk/wadler/papers/propositions-as-types/propositions-as-types.pdf) and pick up the "Introduction to the Theory of Computation" book (https://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/0534950973/)
Of course you don't need to read all of this to get a basic understanding of lambda calculus but if you want to understand for "real" so it sticks.
This book was handed to me by my data structures and algorithms professor at CMU back in the day and it was really inspirational -- and totally accessible.
Tips and pointers for writing good Java code
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
Algorithms in Java with code examples
http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&ie=UTF8&qid=1416453105&sr=1-1&keywords=algorithms
For mobile development, check out the Big Nerd Ranch books. They contain guided projects that help you learn a variety of core features of mobile programming.
Also, take a note: patterns are only a small part of systems engineering applied to CS. Think REST and SOAP, think of how to better integrate two different applications together - not how to code their insides more efficiently. Start considering business logic and requirements - and you will find yourself whole new level of challenging architectural tasks.
On the functional programming front, Purely Functional Data Structures has some fun stuff in it. You should be really familiar with functional languages before going through it though.
Agreed on ML. We used Alpaydin for the intro class and Bishop for the advanced class.
It's not free (in fact it's sickeningly expensive) but Sipser [amazon.com] is a very self-teachable (self-learn-from-able? :) ) text covering automata theory, computability theory, and complexity theory.
sipser (I have the first edition which you can get on the cheap, it's very good.)
AIMA
Dragon
Naturally, TAOCP.
Many will also recommend SICP, though I'm not quite sure that's what you're angling at here, it's probably worth browsing online to see.
A lot of good mentions here. Although they're more programming and engineering than "computer science", I would add Design Patterns by the Gang of Four, and
Programming Pearls by Jon Bentley.
If you're looking for a story, here's a good classic non-fiction one:
The Soul of a New Machine by Tracy Kidder
And a fictional one:
The Bug by Ellen Ullman
Michael Sipser's Introduction to the Theory of Computing is another good book on this topic. Very readable and short.
The Code Book by Simon Singh is a nice, informal introduction to cryptography including modern day cryptography.
Knuth's Art of Computer Programming
edit: I suppose a ";-)" smiley would have made the sardonicism a bit more obvious.
You may also want to check out The Haskell Road to Logic, Maths and Programming.
This book focusses on logic and how to use it, so you get to learn proofs. It even hits corecursion and combinatorics. If you think math is pretty but you want to use it interactively as source code, this could be the book for you.
$50 for the 2006 edition? I'm not sure I would count that as "incredibly expensive".
But yes, the CLRS is a must-have. Almost every intermediate-high level algorithms course I've seen at any university uses the CLRS.
I've also used Kleinberg's Algorithm Design back for some 200-level algorithms course.
In case it helps.
http://www.amazon.com/Hackers-Computer-Revolution-Anniversary-Edition/dp/1449388396/ref=ntt_at_ep_dpt_2
In Natural Language Processing, it's Jurafsky and Martin. In Machine Learning, it's debatably the Bishop book.
Feynman's Lectures on Computation
Definitely light reading. Some of the stuff seems a bit dated and some a bit basic, but Feynman's has a way of looking at things and explaining them that is totally unique. (You might want to skip the chapter on quantum computing if you don't have the background).
Would this book https://www.amazon.com/Pattern-Recognition-Learning-Information-Statistics/dp/0387310738/ref=mt_hardcover?_encoding=UTF8&me=
Be good for someone with no knowlege of machine learning that wants to learn.
>I didn't really get that much coding experience in actually implementing my own versions of the data structures that were covered.
Nothing's stopping you, don't need a book to do that. If you learned the theory and are familiar with the ADTs it should be a piece of cake. I actually think it's better for classes to stay abstract and teach more theory - too many students get caught up in languages, but these concepts are higher level than that.
This one is solid but if you are looking for something to walk you through implementing them then you should just use online resources. This site has implementations and should cover everything you need and more (plus it's free)
Title: On Computable Numbers, with an Application to the Entscheidungsproblem
Authors: Alan Turing
Link: http://plms.oxfordjournals.org/content/s2-42/1/230.full.pdf
Abstract: In just 36 pages, Turing formulates (but does not name) the Turing Machine, recasts Gödel's famous First Incompleteness Theorem in terms of computation, describes the concept of universality, and in the appendix shows that computability by Turing machines is equivalent to computability by λ-definable functions (as studied by Church and Kleene). Source
Comments: In an extraordinary and ultimately tragic life that unfolded like a novel, Turing helped break the German Enigma code to turn the tide of World War II, later speculated on artificial intelligence, fell victim to the homophobic witchhunts of the early 1950s, and committed suicide at the age of 41. Yet Turing is most famous for an eerily prescient 1936 paper in which he invented an imaginary computing machine, explored its capabilities and intrinsic limitations, and established the foundations of modern-day programming and computability. From his use of binary numbers to his exploration of concepts that today's programmers will recognize as RISC processing, subroutines, algorithms, and others, Turing foresaw the future and helped to mold it. In our post-Turing world, everything is a Turing Machine — from the most sophisticated computers we can build, to the hardly algorithmic processes of the human mind, to the information-laden universe in which we live. Source
Data Structures and Algorithms. Aho, Ullman & Hopcroft
Programming Pearls
http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420
http://www.amazon.com/Enterprise-Integration-Patterns-Designing-Deploying/dp/0321200683/ref=pd_bxgy_b_text_y
Couple must reads:
http://www.amazon.com/gp/aw/d/0321503627?pc_redir=1408680419&robot_redir=1
http://www.amazon.com/gp/aw/d/0321127420?pc_redir=1408765483&robot_redir=1
http://books.google.com/books/about/Domain_Driven_Design.html?id=hHBf4YxMnWMC
Check out Effective Java 2nd Edition.
The Code Book, which is a nonfiction book about the history and mathematics of secret codes and how to break them, ranging from the earliest and simplest codes, up through the Engima machine and the first computers, through modern RSA, PGP, and (the hypothetically unbreakable) Quantum Cryptography.
Have you seen the book The Annotated Turing?
https://www.amazon.com/Annotated-Turing-Through-Historic-Computability/dp/0470229055
http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504
http://www.amazon.com/Introduction-Algorithms-Second-Thomas-Cormen/dp/0262032937
Introduction to the Theory of Computation
Introduction to the Theory of Computation is one of my favourites
Head First Java https://www.amazon.co.uk/dp/0596009208/ref=cm_sw_r_cp_apa_i_-ZfwDbHAGW75R
https://www.amazon.com/Feynman-Lectures-Computation-Richard-P/dp/0738202967
I think he may have meant the other Feynman lectures.
The Haskell Road to Logic, Maths, and Programming.
Can we not put this in the sidebar by now? This question has been posted so many times lately. Use this book. The prerequisites are basically nothing.
Actually, I've seen quite a few loop invariants in shipping production code. But probably 95% of the times they're used, the programmer might not even think to call it a loop invariant.
Specifically, a lot of codebases use conditional assertions to test for bad conditions (usually debug-only). If you place a conditional assertion in a loop, you're expressing a loop invariant. I personally have used them to find a number of bugs in shipping production code.
Read Programming Pearl's - it's very short classic, and he uses loop-invariants via assertions.
Sipser's Introduction to the Theory of Computation is somewhat of a classic in the field. I just really hate his notation.
If a book will do, "Hackers - Heroes of The Computer Revolution" by Stephen Levy was excellent. It covers the problems from the early stages to modern times, and the innovative open-thinking people that pioneered some crazy solutions, and gives a reasonable view into the early years of computer use.
It's actually very good at demonstrating the real difficulty computer users and enthusiasts had back then, because not only were you vying for time... but you were fighting for correct results.
I like to buy this book for people who have become tech "later" in their lives (i.e. newbies who did not participate in that industry as children and have only taken it on strictly as a profession) who hold that strong misconception of the idea that a hacker is an evil terror nerd.