When you learn new things, learn from books

I can hardly believe that there is any Java developer who never reads a Java book, or “agile developer” who never reads a book on XP, Scrum… Unfortunately, there are just so many many of those. In fact, many people I know/interview have very fundamental gaps in their knowledge and in most cases I discover that it is partly due to the fact that they never spend time learning things from books. Reasons provided often are: not enough time, internet resources are more than enough etc. In most situations, I don’t think it’s a good mindset to develop software.

A decent technical book would provide a learning framework and good coverage on the topic it discusses. In may cases, it may provide a broader and deeper base of knowledge than what required for people to finish the task at hand. But then, the exposure they have with such breadth and depth will allow them to come up with much better solutions than the just-work ones. Besides, by learning about every aspect of a technology, even only the high-level concepts enough to know what it is about and what problem it is trying to solve, people can avoid themselves from creating things which already exist.

How much time do developers often spend researching on the internet about a particular Java or .NET topic, like generics or reflection, during the course of developing a software? If they learn it end-to-end from a decent book, the researching time would be much shortened as the author already did that for them. Besides, with the base knowledge from the book, they are better informed in order to make better and more specific research decisions in other sources, like the internet, should they need to know more. Now, by emphasizing the importance of learning from books, I do not mean to de-emphasize the importance of learning from the internet, from co-workers, or from any other sources. What I really mean is that reading books, in most cases, is just the minimum requirement to really understand about new things.

Another problem with learning from the internet is that people must know what they need to know about, at least to “google” with smart keywords and pick a handful of good articles out of a million misleading articles, while a decent book already provides the things the author, who is often an expert in his topic, thinks people should know. As a person who has been there, the author should know better than most readers about the things new learners should learn. (Of course, that does not work for all learners; for example there can be a learner who is more knowledgeable than the knowledge covered by a book, but then it’s a problem of audience-targeting instead of a problem of learning from books.)

My team has been working on a SharePoint project and as newbies in SharePoint, one of the very first things we did was sitting down together and defining a research plan based mostly on contents presented in the SharePoint and .NET books we have. For example the group responsible for Workflow has picked “Essential WF” and “Workflow in the 2007 MS Office System”, the group responsible for Excel Services has picked “Beginning Excel Services”, and so on. That’s how we can make sure we understand enough of the technologies to get up to speed with the job and to facilitate further research.

One of my favorite interview questions is “which books do you read to learn about Java (or .NET, WPF, patterns etc.)?”. The interviewee can’t just name a random book to answer that question, s/he needs to tell me how good or bad s/he thinks the book is and why. And if it happens to be a book that I’ve read, I will spend a good amount of time learning how s/he really understands that book.

Reading a lot of books does not guarantee good developers, but not reading any book at all (not including university’ required readings) does guarantee bad developers. So, next time when you learn just about anything new, be it a programming language, tool, development process, or technology, ask your most knowledgeable colleagues for their recommendations, check out the blogsphere as to which books people often mention about, review Amazon’s rating, and pick some decent book(s) to learn. It is a good investment…

18 Comments

RyanAugust 19th, 2007 at 4:48 pm

How about demonstrating that they know how to use a slide-rule while they’re at it? Maybe some cursive on the white-board as well. Maybe recite some Shakespeare.

Or, you could be a boss worth working for and ask “how do you stay current?”. That way if they religiously read 19 different RSS feeds, of technical nature, you won’t polarize anyone who’s smarter than you - in the off chance that such people exist.

h3nryAugust 19th, 2007 at 6:32 pm

I agree completely. When the topic is wide (say a new programming language), it is advisable to have more than 1 book - one as a basic/introductory level resource, another book for the more advanced learning.

I used to use the Internet quite often, but I found that nothing can substitute for a good book.

MattAugust 19th, 2007 at 7:44 pm

After developing for the last 20 years - I’m finding that books just don’t cut it any longer. The rails community has embraced the 7 minute video podcast and they are amazing. You do get to a point where those intro chapters are not necessary and you need the few paragraphs showing the answer to a particular problem or methodology.

Daniel RAugust 19th, 2007 at 7:51 pm

Amen.

I’m a book person, and Amazon.com loves me.

I don’t buy the “I don’t have time to read” argument - over the long term, having a general grounding in a new topic will save time.

I don’t even buy the “I’m too lazy argument.” Without fail, I’ve seen people work harder and longer when they don’t know what they’re doing.

In my mind, avoiding books is a sort of irrational behavior that fits in the category of eating dinner at MacDonald’s every day.

MikeHAugust 19th, 2007 at 11:44 pm

The problem with books are two-fold: the cost and the quality.

Technical books are expensive. $40-50 for something that you want to learn. Once you learn it, you may never pick up that book again. Yes, it’s an investment, but that book occupies space on a shelf somewhere.

Quality technical books are hard to find. There a lot of books out in the market on every single subject, yet not all of them are good. In some areas, few of them are good. You can do some research on Amazon, etc before purchasing it. And ask your fellow developers if they have a recommendation. But, in the end, you may still end up with a bad book.

So you could spend $40 on a bad book, get a bad idea of the concept, and so you still don’t have a good understanding.

I’m not saying I’m against buying books — I’m for it. But care must be taken. Not all books on the same subject are the same quality. Not all books fit the developers way of learning.

Michiel van VlaardingenAugust 20th, 2007 at 1:33 am

I do agree that good programmers read books. All those with passion for their profession buy more books than they read and read more than required. However, I do not share your opinion that you should learn everything from books. I think books are great to learn concepts from, but there are other more suitable ways to learn about current technologies. Books are often outdated before you buy when they are written about anything that has a version number such as software. So keep books for those things that actually have a lifetime longer than the book itself.

DamienAugust 20th, 2007 at 5:37 am

Agreed — while RSS feeds/web articles do sometimes have their uses, there isn’t nearly the same depth as in a *good* book on the topic.

For example, no website will ever teach you what you can learn from “Effective Java”. This is essential stuff from people who are paid to think about this stuff and find the best way of communicating it, rather than someone (however brilliant) who is just taking a couple of hours out of their day to write a couple of paragraphs on something.

GavinAugust 20th, 2007 at 2:36 pm

@MikeH, I agree that books are expensive. That’s why I don’t bother buying them. I have a subscription to Oreilly Safari & I would say 80% of my needs are satisfied there.

FahdAugust 20th, 2007 at 4:09 pm

I agree with the post but I think more information should be available for programmers on the web for getting some quick help.

I spent some time looking for information regarding Windows Event object but couldn’t find a good enough answer on the web. I am sure the information is out there in some book but I am not going to buy a book for one piece of information.

I created this after spending some time searching.

http://fahdk.wordpress.com/2007/08/17/about-windows-events-synchronization/

h3nryAugust 20th, 2007 at 4:16 pm

As Damien suggested, books are written based on peer reviews, and the author gets paid for doing it - his/her/their reputation is online and therefore by nature books tend to be much more reliable, authoritative and definitive.

Using the Internet has its merits, but, if you are passionate enough and want to be a top person at whatever the field you are choosing. then there is absolutely no substitute for books.

Tai TranAugust 20th, 2007 at 11:44 pm

May I suggest an approach like this:

“When learn new things, learn from books, and start with an encyclopedia.”

I suggest going to Wikipedia or Citizendium or any site which can provide a substantial summary of the area you want to explore. Then familiarize yourself with major topics and terminologies of the subject. After that, look for books on such specific topics and proceed with your learning plan.

That’s how I’ve been combining learning from books and Internet resources.
Additionally, discussion with peers during learning, absolutely, is indispensable.

Tai

OJAugust 21st, 2007 at 7:19 am

Any developer worth their salt will learn from a mixture of books and online resources.

Books are great for giving a good introduction and coverage on a particularl topic. The added advantage of books is that it can cover topics that the reader wouldn’t have otherwise known or read about (for whatever reason). A book that’s been paid for is one that the reader will make an effort to read through entirely (at least once) to get their money’s worth. The bad thing about them is that they can be behind the times, and lack quality. The quality issue is actually less of a problem with books that it is for Internet resources.

Internet resources are great as they are much more lively and up to speed with what’s going on in the industry. The bad thing is that it can be tough to separate the wheat from the chaff. There’s a lot of crap content on the web. Avoiding it and learning from the non-crap content is part of the issue.

So, I say again. Reading both books and online resources are key, sticking to one or the other (imho) isn’t a good move. I’m not sure I’d use books as a benchmark in an interview though :)

Cheers!
OJ

DaveAugust 21st, 2007 at 8:00 pm

Except for a handful of classics (like SICP, which is online anyhow), software books are a waste of a lot of paper. Often, there is not enough good information to fill even a 4-page pamphlet. Instead, expand your thinking with general software-related books like:

Papert: Mindstorms: Children, Computers, and Powerful Ideas

Resnick: Turtles, Termites, and Traffic Jams: Explorations in Massively Parallel Microworlds

Hofstadter: Godel, Escher, Bach: An Eternal Golden Braid

Alexander: Nature of Order

etc.

SquallAugust 21st, 2007 at 10:42 pm

Totally agree with you, BTW, can you list some Java, JEE books that you consider worth reading ?

Thank

Buu NguyenAugust 22nd, 2007 at 1:17 pm

@h3nry:
Good point on why books are usually more reliable.

@MikeH:
Gavin gave good point on the Oreilly subscription. In fact, my company gives each associate a Books24×7 account - and I find it very helpful so far. On the other hand, I still think that book is a very reliable resource, as long as people do the homework to pick the most suitable books to their needs (e.g. to not purchase Effective Java without having written a Java’s Hello World).

@Michiel:
I agree. People need to learn from multiple sources instead of rigidly sticking to one or another.

@Tai:
Good point, but that may not work in all contexts. It may be more time-efficient if you simply pick a good book (say, based on your colleagues’ recommendations) and read it cover-to-cover without having to decide in advance what you need to specialize, esp. when you have absolutely no prior knowledge about the topic in discussion (like Java).

@OJ:
Completely agree. People need to master how to learn from multiple sources.

@Squall:
Books for any good developers: Code Complete, Refactoring, Design Patterns (GoF), Extreme Programming Explained, Algorithms in C/Java. Books for Java/JEE developers: Core Java 2, Effective Java, J2EE without EJB. Those are on the top of my head, I am thinking of posting a specific blog about recommended book read. Stay tuned.

@Dave:
Well, SICP is a good book but I’ve seen many others just as excellent (e.g. those in the list above in answer for Squall). Thanks for suggesting the software-related books though, will consider them.

BodomSeptember 17th, 2007 at 11:32 am

Hello,
I’m just a 2-year experience developer. And with my newbie-experience, I totally agree with this post. But I think I know the reason why many people didn’t read any books (Ex: programming language) but they can master the area.
When learning something new, newbie used to face with 2 issues:
1- Technology growing too fast. I have to have the knowledge of the new things immediately, that’s why I have to “google” everyday and read stuff that related to the new language. I remembered a “good” book usually publish a long time after the language’s announcement. I can’t wait until I have that book but hundreds of people out there have an expert knowledge about it
2- I’m young, discover new things is my favourite. It would be great if I knew something prior to my friends :-)

My cycle to learn new stuff: Google –> Book –> Google again :-)

Thanks,
Bodom

Web 2.0 AnnouncerNovember 22nd, 2007 at 11:20 pm

Buu Nguyen?s Blog ยป When you learn new things, learn from books…

[...][...]…

vgndeveloperJanuary 16th, 2008 at 3:16 am

Very good post, at this moment I am reading two books:
“The art of project management” Scott Berkun
and
“Code complete” Steve McConell.

Leave a comment

Your comment