As a non programmer, when you read the stories of all the famous nerds, the first thing you do is go on amazon and shop for programming books. Most titles are confusing, you only wish to know which book Zuckerburg was reading so you can create your own bookface as quick as possible. After much confusion, you call your programmer friend and ask for a book recommendation. Of course his response is to not get a book, all the stuff is on the Internet already.
In my first year as a programmer, the only books I read were the ones that were forced unto me in school. The Internet is so much richer for finding this kind of information.
What books provide
In a technical field like programming, you can find 2 types of books. Those that teach you how to use a tool and those that teach you about programming, the theory.
The books that teach about programming are hard to stick to. They are the barrier that weeds out the new comers. They don't just give you a snippet of code and tell you to run it. Instead, they go into details, describing concepts and ideas. You often see quotes from famous programmers in these books.
These books are not specific to a particular language or tool. They are not for beginners and once you finish reading them, you have a good idea of what philosophy you will apply to your software architecture. I passed a few of those in the library when I was in school. After a good 30 minutes I place them back on the shelf and forgot all about it.
I call them practical, not because they are better, but because you can test their content on a computer immediately.
What the Internet provides
On the Internet you find information found in both type of books. The problem is it is decentralized. It's very hard to go through a website from beginning to end finding all the information you need. As soon as you find one term you can't understand, you google it and find the explanation on a different website, and you face another new term problem and it is back to Google again.
There are websites that can teach how to use a particular tool. Codeacademy, Threehouse, or lynda.com are good examples. These are very good alternative to books that teaches you how to use a specific tool. Not only you have the same information you find in books but the interactivity makes it much easier to learn.
Everyone that was moved by Mayor Bloomberg is probably subscribed to one of those websites. And when you complete a course provided by any of these services, you will be able to open your code editor and create something. Anything. You are now a programmer.
Why should you read books then?
I know the basic structure of many languages. I can create a for loop, a conditional statement, a class, and yes I am listing these very small feats. However these are not enough anymore. If I have a bug with any of the basics, stackoverflow is my friend. But If I want to build a large application, I need to understand more important concepts. That's where those Theory/Concept/Philosophy books become handy.
I read game programming patterns, which is an online book if you can call it that, but it falls in the same category as the theoretical books. Most of the pseudo code presented in the book is in C++, but make no mistake this is not a book on how to implement these patterns in C++. The book is rich in information that will help you implement clever designs that make your large application, not just games, easier to work with. If you had to go figure on your own all the patterns found in this book, it will probably take years.
These books are not what you start with in your career as a programmer. Our education system make the mistake of teaching the very complex theories right from the beginning which make no sense. For example, if anyone told me using singletons is bad when I was just getting started, I would just accept it as the thing you should never use in an application without really understanding the why. If I was to see a singleton in someone else's code it would probably be a red flag. But after using the pattern for a few years and seen different alternatives, I can much better weight the pro and cons of a singleton. And also have a constructive argument about it.
Reading a book just to get quick information that you can paste in your code is only going to help you in the short term. If you want to advance in your career or just increase your knowledge, don't bombard your mind with as many programming language you can learn. Instead, read a book that will teach you new programming paradigms. You will be better off in the long run.
Here is where you can get started: