That said, I’m looking for all things relating to programming and computer science. This year I’ve started my 5-year-to-make Business Administration degree program and, in 2006, I’ll add Computer Science in there and manage, somehow, to get both done. I want to venture on my own in Computer Science for a warm-up. I want to learn as much as it is possible (no time to lose, I says!) in this field.
I have also wondered how it is that hackers (or, black hat hackers, mind you) get their expertise and skill. It is dumbfounding to read about a 15-year-old hacking a secure terminal. How did he know what to do? Hmm… I have much to learn. Not that I want to do this, but you catch my drift.
Anyway, what are some good books on the subject for someone who’s starting to know his computer in a more intimate level, such as me? Also, I’m an infoholic. I can’t settle for the “beginner’s guide” type of book. I welcome each and every input that is as dense as you can make it.
For getting into things there are the O’Reilly Programming books, which are a good intro. More information dense, as reference guides, are the “In a Nutshell” books by the same publisher. If you are into thorough reference books, you might want to try “The Complete Refence” By Osbourne/McGraw Hill.
I’m not terribly impressed with SAMS “Learn blargh in (24 hours/21 days)” series, but I am happy with “Their Linux Programming Unleashed” book (another bargain book).
As an example, If I’m after general idea about how something works, and want a quick and dirty solution I might consult “Practical C++ Programming” by Steve Oualline [O’Reilly]. If I’m after some obscure function or feature, I’ll go to “C++: The Complete Reference” by Herb Schildt [Osbourne]. If I want to program a sorting routine, or a specialized matrix row-reduction routine, I’ll skip the language books and go to “Algorithms in C++” by Robert Sedgewick (Older hardcover addition, before it was split into two very expensive softcovers. Bought it used for $12!). If you want the mother of all comprehensive computer science books then you will want Donald Knuth’s “Art of Computer Programming”, along with “Literate Programming” by the same author. Incidentally Knuth is the inventor of TeX, a typesetting system that is used (in one form or another (LaTeX, I’m looking at you)) by many of the world’s scientist to generate their publications.
If you get into programming in a big way you might want to check out “Numerical Recipes”, but use with caution as the authors do obfuscate some things they shouldn’t and some outright programming errors are made, but many of the algorithms have a decent background discussion.
I find that many Comp-Sci classes are more algorithm oriented than language oriented anyway. You might be required to pick up Java (ack spit!) rather than C++ or C, find out before you pick a reference book to purchase.
Programming is to computer science as arithmetic is to math–you’ll be in for a shock once you’ve got a little further.
That said, it is a good starting point. Reference books tend not to be good introductory books, so be careful there. What you really want is a book that covers the basics of a language and has scads of problems. As with anything else worthwhile, it’s all about practice.
There’s a huge difference between programming and computer science. (All right, a bit of hyperbole there.) CS is about theory, programming is about application. One often can’t do the theory without the implementation (however, hard-core algorithms and automata can be done with absolutely NO programming), while a good programmer will have a grasp of underlying theory (though its entirely possible to be a really good code-monkey with little theoretical understanding). And that doesn’t really approach the hardware aspects of it all.
So, it seems to me that you’re asking for two potentially divergent things here. You want to learn about hacking? Start reading SecurityFocus, or read books like Hacking Exposed. (I should explicitly state that I’m not endorsing hacking; to do computer security in earnest, however, one should be familiar with what’s out there.) You want to learn about computer science? (Note that tons of stuff regarding the following is available on the web.) As mentioned above, read some Knuth. Check out Papadimitrou for computational theory or Cormen, Leiserson, Rivest, and Stein’s book for algorithms. Anything by Stevens is excellent (I’d not have gotten through my networking classes without them). You could always check out citeseer for tons of academic papers.
The best books on general computer science that I have read are Knuth’s The Art of Computer Programming series. (OK, technically they’re more about programming than strictly CS, but they’ll give you the theoretical background you need to cover the first two or three years of a CS degree easily.) For a more specialized reference I find Robert Sedgwick’s Algorithms in C indispensible. Bruce Schneier’s Applied Cryptography and Practical Cryptography are must-reads if you’re interested in how secure systems are designed. (And where their weaknesses lie.)
Others have given you language books, and Knuth’s book (which is a must-read indeed) but here are two that will help you to suceed once you know how to program