Home > .NET, Java, Programming Languages, Read List, software engineering, Technologies > When you learn new things, learn from books

When you learn new things, learn from books

August 19th, 2007

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…

  1. Ryan
    August 19th, 2007 at 16:48 | #1

    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.

  2. August 19th, 2007 at 18:32 | #2

    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.

  3. Matt
    August 19th, 2007 at 19:44 | #3

    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.

  4. Daniel R
    August 19th, 2007 at 19:51 | #4

    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.

  5. August 19th, 2007 at 23:44 | #5

    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.

  6. August 20th, 2007 at 01:33 | #6

    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.

  7. Damien
    August 20th, 2007 at 05:37 | #7

    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.

  8. Gavin
    August 20th, 2007 at 14:36 | #8

    @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.

  9. August 20th, 2007 at 16:09 | #9

    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/

  10. August 20th, 2007 at 16:16 | #10

    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.

  11. August 20th, 2007 at 23:44 | #11

    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

  12. August 21st, 2007 at 07:19 | #12

    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

  13. Dave
    August 21st, 2007 at 20:00 | #13

    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.

  14. August 21st, 2007 at 22:42 | #14

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

    Thank

  15. August 22nd, 2007 at 13:17 | #15

    @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 Books24x7 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.

  16. Bodom
    September 17th, 2007 at 11:32 | #16

    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

  17. January 16th, 2008 at 03:16 | #17

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

  18. Văn Lý
    December 14th, 2009 at 01:09 | #18

    I’ve just jumped to this topic from Khang’s post.

    At first, I’d like to say that I read books too and I go for people who read books.

    However I’ve seen somebody who don’t read book much but they’re quite good. They learn things quickly and they do things effectively. Sometime they run into some books when googling but they don’t read through the book. They just read what they want to know and forget the book title right after that. They can’t remember any word from the book but they can remember everything they found out from their work.

    I’d like to call them practical guys, who don’t like theory but do things practically. I admit that they can’t reach to some level of abstraction but they can finish the job effectively.

  19. December 14th, 2009 at 17:31 | #19

    @Van Ly:
    Indeed, experts in a certain domain may be able to look into a new technology in that domain (or a related domain) and become quickly proficient in it without requiring much time (e.g. reading a whole book). For example, a person who’s highly proficient in Rails, Struts and C# would probably do not need to read through the whole book to become highly productive with ASP.NET MVC. (Beware, that same person, if being supposed to learn about a not-quite-related-domain, say SharePoint, or fishing [we talk about learning in general right ;) ], might find full-coverage books useful.)

    Unfortunately, the reality is that there are very few experts, and most of the self-claim “pragmatic” “fast-learning” people are usually those who can’t create good software. See this post for a full discussion http://www.buunguyen.net/blog/the-wrong-attitude-of-learning-on-the-job.html.

  20. Văn Lý
    December 14th, 2009 at 19:48 | #20

    But my case is totally against your argument. This person can jump in and out every domain without much effort. She used to be a .NET developer but still find it easy in Java, Perl or PHP. The previous project is ASP.NET MVC and right now is SharePoint :) .

    If you tell her to apply Factory or Observer, you go with the wrong way. She can never build a framework. But she did good on the higher layer, well-organized (no code smell, no ugly hack), well-tested, high productivity, easy to maintain.

    If you ever tell her to guide a person, she will deny with an idea that she don’t know how to teach people. However, if you tell her to help a person, she can *guide* that person effectively. Note that I emphasize the “guide” here to tell you that she won’t do thing for that person but tell him/her how to do that.

    This kind of person is a kind of smart guy who doesn’t know her own talent and just limit herself by some boundaries. She cannot go up on the ladder, but she did good in her position, better than many people.

  21. December 16th, 2009 at 21:20 | #21

    @Van Ly: and you admitted she can’t build a framework (or any kind of work that requires beyond average skill level). I know many people who are like this too – I just recently interviewed a developer who basically knew C, C++, Java, C#, PHP, Oracle, and a dozen of other things yet couldn’t talk intelligently about any one of them.

    Now, it would be a more interesting story if you’re talking about a super cool developer who doesn’t need help from any book and yet can chunk out high-quality code quickly for complex applications in a completely foreign domain. Don’t get me wrong, I’m sure there are many smart people like this, it’s just that there are not as many of them as the rest of us who will and always need good books to help.

  22. Văn Lý
    December 23rd, 2009 at 00:35 | #22

    But she’s still a good developer who doesn’t want to move up. That’s what I want to point out. Sometime a small and effective program can beat a big and well-built framework. We need both in a team.

  23. minhduc
    December 23rd, 2009 at 01:42 | #23

    @vanly: I think that you have a good point. However, what you are pointing out is likely for someone were born lucky. Those people could fall into 2 big categories :
    - too smart
    - too lucky to work in a big software firm where the internal documents, codebase, blue-prints, etc. are even better than books. Therefore, they don’t need to read any book because there are many tremendous pieces of works of other people.
    Therefore, your example doesn’t make sense here.
    OK, in my opinion, what you are mentioning so far in Vietnamese we call ‘chủ quan – duy ý chí – không tưởng’ – impractical idea
    You know, we are human, to evolve, we need to learn. We cannot just sit down in our own lair and grow up normally. We must learn in one way or another. What Buu is discussing here is very interesting for students who really want to level up, who really love software engineering. Generally speaking, he urges the important of self-learning. That doesn’t matter of where we learn and what we learn. It does matter that we must learn, keep our brain work, learn from both the smart and the stupid. Moreover, I believe that he also suggests us the academic way to learn, implies the professional way to studying – read – think and do some works. It is not about how many languages, how many ‘hot’ topics we may ‘know’ but about how can we solve the serious and complex problem professionally. In fact, his article is very practical in any field, any area of our life. Whoever we are, we need to learn to evolve, I believe.

  24. Văn Lý
    December 30th, 2009 at 07:42 | #24

    @minhduc: What’s matter if she is too smart? Don’t you need smart people in your team? It’s a real example. She is working with me right now. And I know somebody else like that in other companies. There are things that you could not find in any internal documents, even if you have a very good documentation.

    To me, of course, everybody has his/her own way to learn and that way is only suitable for him/her. If you look at some successful bosses, they aren’t mature from school. They are mature from life. But that’s their own capability and not everybody should do that.

    In the other hand, you cannot tell them to learn from books because that way is not suitable for them. If you try to do that, or they try to do that, they will mess up and maybe they are about to think that they are so stupid that they cannot do anything. As a result, they will be like one of two frogs which fall into a hole in a well-known story, stayed forever in the hole.

    I stated, again, that I go for books, not against them. I just want to make clear that they are not the only way to learn for everybody.

    If you want to guide a person, don’t force them to go with your way. Show them the direction and the destination, and they will find their own way.

    PS: For the blue-print, I don’t know where you worked, but many big Vietnamese companies I known still not have a good documentation for their products.

  25. December 31st, 2009 at 21:18 | #25

    @Van Ly: I certainly agree with you that each person has his/her own learning style in regarding to new knowledge acquisition. Book learning work for me and many others but it isn’t the only way.

  26. Hung Tran
    June 8th, 2011 at 20:07 | #26

    When I focused how to improving their learning abilities, for example : how to learn quickly, I recognized that I also learned how to forget it easily. Because knowledge can come to me fast, it also leaves quickly. Therefore, books is one of the best choices to remain knowledge in my head, or recover my stuff quickly at needed. Why ?

    You could learn from friends, the Internet or everywhere, but how many times you write down, and how well you organize the reference resources to access them quickly when you want to review. Books always have their own good bookmarks and they are written in structure, so it’s very simple to reach what you want in a book.

    Of course, you can forget what you’ve learned, but you can’t forget names of books you’ve read.

Comments are closed.