Programmers Don't Read Books -- But You Should

For anyone using visual basic for windows .net programming, by far my favorite book is:
Visual Basic 2005: The Language

Jeff, I notice on your snapshot of your bookshelf that you have all four of Tufteā€™s self published books. Iā€™m willing to be that a large percentage of your audience (read ā€˜programmersā€™) donā€™t know what Tufte is all about. Iā€™d love to see a note on why Tufte is an absolute must read for all programmers (especially if contemplating any sort of computer/human interface).

Thanks for the blog. I look forward to reading it everytime a new article (?) appears.

ā€¦and one more thing for Darenā€¦
I have read Normanā€™s TDoET (The Design of Everyday Things, originally published under the name The Psychology of Everyday Things until Mr. Norman realized the bookstores were improperly shelving it with the Psych books). A great book and another must read, if you ask me.

Thank you very much for this post.
I set out looking for some great literature on the WHY as opposed to the ā€œDo this and that and Boom!ā€ This post came at just the perfect time.

Lake

I have been programming for over 25 years now. I remember back in the early days that the only way you could learn anything was from books. We didnā€™t have the internet to go to and lookup how to perform certain functions, etc. Luckily that habit has stuck with me over the years and I now have a rather decent sized library (including a couple of old machine language books for the Commodore 64 and 1 book for the Timex Sinclair). Maybe one day Iā€™ll open a museum and make my years of being a pack-rat pay off.

I have yet to meet a good programming book. I own a dozen or so, and I have found some good references now and then, but aside from the introductory books Iā€™ve not found one that can teach anything.

Nowadays there is so much online as far as reference material for various languages that it seems almost silly to buy a paper version which will be outdated in a few months anyway.

I read a great deal, but I have never seen a programming book I find useful outside of reminding myself of syntax or features Iā€™ve forgotten the proper name of.

When I do read books its for: beefing up for certifications, tired of reading off a screen, very brand new programming concept languages (like linq and WCF), or when I donā€™t have Internet access.

I also think you forgot to mention one good reason why most programmers donā€™t buy books. The stale fish concept. Most tech books canā€™t update themselves and who wants to date themself by having books on languages that are extinct.

Iā€™m reminded of a good analogy:

Reading on a monitor is like reading the small text on a light bulb while its on.

It hurts my eyes and gives me a nasty headache to read 100ā€™s of pages on a computer screen. Books are no problem though, and in fact itā€™s been proven that people are typically able to read books faster than text on a screen while maintaining the same level of comprehension.

This is why books will never go away - at least not until we can create some sort of ultra-crisp elecronic print that doesnā€™t require a backlight.

???

I am really not sure how it is possible to gain absolute knowledge without reading booksā€¦

@Jan Willem de Birk

PHP gets no respect because itā€™s simple and nobody gets paid big bucks to setup a web site on a LAMP server. No, see, corporate web sites require an application server. And a web server. And an Oracle server. We need tiers! Each tier needs its own server! Ok, so PHP can do tiers, but it all runs well on a single server and you only need to separate when you get big. I thought you wanted a real enterprise web application? Enterprise applications all have many servers.

Scalability. Donā€™t forget about that. Ok, so you only sell a dozen widgets a day on your site now, but what if youā€™re the next Amazon.com? You can scale your tiers and sell ten million widgets a day! First weā€™ll scale the data tier because the advanced connection pooling doesnā€™t actually help. Two more in a cluster ought to do it. Then weā€™ll scale the application tier because the application server provides advanced session and failover management. That management adds some overhead, so weā€™ll get two more servers instead of just one more. Alright now this cool template abstraction we used for the web front-end tier is pretty slow so weā€™ll add another server there, too.

Man, itā€™s a good thing we didnā€™t choose PHP for this because PHP doesnā€™t have an application server to manage all this scaling. Some people talk of the ā€œshare nothingā€ approach to scaling, but Iā€™ve never done that and I think itā€™s voodoo.

your pretty much right, I have been coding for 10 years and I learned basically from trial and error(oringally went through all the intellsense options till I figured it out :stuck_out_tongue: ) and the internets.

Another thing Iā€™d like to bring up:

I wish I didnā€™t have to work, so that I could spend serious time reading tech books.

On week days, after a long hard day, the last thing I want to do is more tech stuff at home. I do some reading and programming side projects on weekends though - but if thatā€™s all I have it takes a year to do anything that I otherwise could easily have finished during a summer break (if I was still in college).

ā€œThe Mythical Man Monthā€ should be on the top list, why you havenā€™t included it?

Learning principles from a book is good. But the best way to learn how to be a good programmer is to maintain and make directed changes (user specified requests) to your own code. After a few years maintaining your own code you learn how to make it easier to change. After 30+ years of programming I am still learning how to make code easier for the programmer coming behind me to maintain it.

@mistoneā€¦ you got it understood.

@jeffā€¦ you ever live in cary,nc?

@Dave
I work in a company where theyā€™ve build an entire Enterprise server out of PHP. I help develop on it. The company sells their software (not only the server in PHP, but also some C++ stuff) to everyone who needs a media solution (publishers, newspapers, etc). And believe me; it works. I bet that 8 out of 10 papers/books/magazines you read (either online or printed) are made with that softwareā€¦

So in my opinion; everything is possible with PHP. And it sells, once proven :wink:

Hey Jeff, how about some comment modding or maybe even paging?

Itā€™s getting a little crazy here, 90+ pages of comments for a single blog.

I do agree with this one, I think the big difference between picking up a book and just trolling the internet is that a good book will provide information you can use but may not have looked for.

For example, there is a guy here who became our new DBA. At first he made some improvements just by regularly reading a few blogs and picking up some tidbits, but it wasnā€™t until he read a few good Oracle books cover to cover that he really took it to the next level.

Googling for code samples is typically reactionary. Youā€™re looking for a solution to your problem, and youā€™ll only find results that fit into your search criteria. There may be some great solutions that you havenā€™t even discovered because they donā€™t fit what youā€™re looking for in that narrow list.

A startling number of people commenting here seem to have accepted the fantasy that knowing how to look things up is as good as knowing those thing.

This is a dangerous fantasy because it severely limits how you think about problems. If you represent all your knowledge as a tree, the stuff you google for can only form the leafs.
As an example, if I need to change how my drives on my Linux machine are mounted Iā€™ll look up the syntax I need in ā€œman fstabā€. Easy. Because I already know the exact piece of knowledge Iā€™m looking for, and thereā€™s no appreciable sub-knowledge. (The second item on a line is the mount point. I canā€™t learn that in any more depth.)
If I didnā€™t ALREADY know the name of the file system table, it would take a few minutes of awkward searching to find it, but Iā€™d still be close to the knowledge I need.
If I didnā€™t ALREADY know that there WAS a file system table I would have to start my research by first researching the mount command. Not only are we increasing my research time for a simple task, but Already weā€™re pulling back to the point where weā€™re running the risk that it wouldnā€™t even occur to me that the data I needed to change was stored in a human-editable file somewhere.
If I didnā€™t ALREADY know that I had more one device in my filesystem that could be mounted and unmounted, etc, then my problem (which can be solved with a one-line change in the fstab file) could seem insurmountable. I would not even occur to me that the correct solution might exist so I couldnā€™t search for it. I would probably wind up thinking up some convoluted solution involving symlinks or something. (Assuming I was aware of their existence.)

This sort of coding-by-google approach has filled the archives of thedailyWTF.com. Are the people who write the code featured in TheDailyWTF some sort of knuckle-dragging low-IQ cavemen? I suppose some might be, but most of them just lack an understanding of their field, and depend far too heavily on just-in-time googling to figure out whatever crazy thing is in their heads because they DONā€™T KNOW THE CORRECT THING TO LOOK UP.

Thanks for the article. Itā€™s good. I have blogged about it, adding my own comments, here.

http://ploneglenn.blogspot.com/2008/04/why-johnny-coder-doesnt-read.html

Maybe you can make a ā€˜Best Buy Guideā€™ section or a ā€˜Must Readā€™ section where other programmers can vote for their favorite books?