views:

232

answers:

11

I have $100 to invest in a couple of books. Can you recommend me one or two recently released books on the subject of programming and/or computer science?

I'm a web developer: Python/PHP/Ruby, slow "easy" languages.

I'm trying to add more algorithms, numerical computing, artificial intelligence, and very fast languages to my skill set. I feel incomplete without that knowledge. No matter how good I am with Python and PHP, I feel lesser of a programmer for knowing very little C, C++, Java, C# and cool CS stuff.

Do we live in an age where knowing these languages is no longer necessary? I have a job, but now I want to build great things. Things used by thousands of people.

A few days ago I saw the Mario AI demo on youtube and I was floored. I wouldn't have a clue about how to do that. I'm not stupid, I have a degree in maths, but I don't have lots of exposure to "real" or "difficult" programming outside of the web.

+1  A: 

It's not a particular book, but the Safari Bookshelf allows you access to 10 books/month for $22.99, so for your $100 you could read 40 odd books. Of course you don't get to keep them for reference (though they allow copy-paste, so it's up to your conscience how much you backup for later use).

You can get a 10 day free trial to see if it's useful to you before committing any cash.

Rich Seller
Although I have nothing against ebooks, I still prefer having a real book in your hand...something I can put on my bookshelf when I'm finished with it, and in time have a library of references in my own room.
Andreas Grech
Safari, though, allows you to take your bookshelf with you where ever there's Internet connectivity :)
Bullines
Can you search the dead wood version? how about clicking through to some reference? I think paper books are great for leisure reading, but if you're trying to learn something, a portrait monitor with the doc open is far more useful. If you want to build a collection, buy beanie babies
Rich Seller
meh, well that's my opinion...I just prefer having a book in my hand, maeks me more comfortable. Besides, there exists an Index for books to search for something.
Andreas Grech
@tgamblin if you're interested in a lot of subjects, you can change your choices every month, that can work out at $2.30 a book, seem's quite reasonable to me
Rich Seller
+4  A: 
Frank V
+2  A: 
Frank V
-1 for recommending something you haven't even read.
tgamblin
What difference does it make if I read it -- it's about what might help Peter and this book is noted quite a few times. You've selected a very odd reason to down vote an answer but I suppose that is your right.
Frank V
Call me crazy but I think people should try to post informed answers.
tgamblin
A: 

You might also see this blog post by Jeff Atwood, one of the founders/creators of this site.

Programmers Don't Read Books -- But You Should

In the article there is a list of book recommendations. You might consider reviewing the post and the listed books and find if any are for what you are looking for.

Frank V
+1  A: 

I think IronPython in Action does an awesome job introducing .NET (and a little C#) to experienced Python programmers, as well as vice versa (I may be biased, as one author's a friend and I helped out w/some technical editing, but in the past I've panned other books under similar conditions, so I think I'm being reasonably impartial!-). I just wish the Jython books were just as good, to help out with Java and the JVM, but unfortunately I don't think they currently are.

A book which won't impact your budget (since it's available in free online editions as well as popular paper ones!-) is E. Raymond's Art of Unix Programming; it doesn't meet the criterion of being "recently released", but it remains a great book on software system architecture -- whether you use any Unix-y system (i.e., any but Windows) or not, it's still highly recommended. Another book you need not pay for, which is not recent, but is still an immortal classic, is SICP -- that one will help a lot in understanding the deep structure of computation and data structures, as well as Scheme.

For numerical computing, too, there's not much point in preferring recent books to classics -- it's not a technology that's changing every few months;-). As you have a good grasp of math, you can't do better than Forman Acton's classic books, Numerical Methods that Work (costly but worth it) and Real Computing Made Real (an incredible bargain).

Despite the free books in the above list, this doesn't leave much budget for other subjects you want to study -- general (non-numerical) algorithms, C, C++, Java, and AI... Russell & Norvig (AI), K&R (C), Lippman & Lajoie (or many other excellent books on C++), Cormen / Leiserson / Rivest / Stein (algorithms), Bloch (Java) -- alas and alack, it all mounts up rapidly to a pretty steep investment, quite a bit higher than you mentioned you want to spend!-(

Alex Martelli
+3  A: 

...but now I want to build great things. Things used by thousands of people.

Then one of your first goals must be to be focused on usability. In that way, is highly recommendable to read Steve Krug's book:

Don't Make Me Think! A Common Sense Approach to Web Usability

eKek0
Awesome book. Mostly common sense, but the still so many designers don't follow the simple rules.
Martin
+1  A: 

If you are looking to pick up some algorithms and what not, I would just use wikipedia. It usually has a good explanation of various algorithms. At that point just start playing around.

As far as where to start:

http://stackoverflow.com/questions/445425/what-algorithms-should-every-developer-know

Tom Hubbard
+2  A: 

I'm trying to add more algorithms, numerical computing, artificial intelligence, and very fast languages to my skill set

It's not exactly a recent book (first edition came out in 1990, second in 2001), but Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein is the one book I can't live without. "Introduction" is a bit misleading, as some of the material in it is quite advanced indeed, but it's self-contained, in that everything you need to understand the difficult stuff is explained earlier on in the book.

What I like best about the book is that it teaches you generic algorithm-design techniques and, more importantly, how to identify which technique is most appropriate for a particular task. You'll also learn about data structures that are particularly useful for solving certain types of problems. It covers searching, sorting, randomized algorithms, divide-and-conquer approaches, dynamic programming (aka "memoization") and how to tell when a problem has optimal substructure ("optimal substructure" is a characteristic of a problem which makes dynamic programming the best tool for the job), greedy algorithms, and a whole bunch of different types of graph algorithms (in the sense of networks, not charts).

If you've ever wanted to be able to write code faster and better, this is the book for you -- the first steps in becoming both a faster and a better programmer are being able to quickly identify what kind of problem you're looking at, and knowing what the standard solution technique for that kind of problem is. This is the book that will teach you those skills.

Meredith L. Patterson
A: 

I think every Python/PHP/Ruby (and Perl) programmer should learn C, if only because all three of those languages are implemented in C! Better yet, the next time you've got a hard problem to solve and Python/PHP/Ruby is too slow you'll be able to use your C skills to extend your scripting language with fast compiled code. To that end I recommend you read "The C Programming Language" by Brian Kernighan and Dennis Ritchie. Wikipedia entry

samtregar
+2  A: 

JavaScript: The Good Parts by Douglas Crockford

jQuery in Action from Manning Publishing

These are a must read for any web developer using JavaScript; which is becoming pretty much every web developer these days. Using the knowledge/techniques you learn about the JavaScript language from these books, combined with all the jQuery library has to offer, will definitely bring your JavaScript code to the next level and on par with todays JavaScript coding standards and techniques.

Chris Pietschmann