I recently received an email from a reader asking me for advice about
improving his developer skills.

I am not sure there is any straight answer to this question but let me throw
a few random ideas.

  • I have certainly found that reading (a lot of reading) is certainly a
    great way to accelerate your skills and to force your brain to expand its
    horizons.

    Reading Java books is one way of doing it but the most important thing to me
    is to try and vary the books I read as much as possible.
     

  • Studying other
    languages is also a fantastic and fascinating way of learning new concepts
    that change the way you think.  Somebody once said "learn a new language every
    year" and I can’t agree more.  And just like natural languages, the more
    languages you know, the easier it becomes to learn new ones.

    Things can get really interesting when you start "cross-pollinating": 
    mixing concepts read in several books.  For example, trying to apply
    concepts that are particular to a language (e.g. closures) to a language that
    doesn’t support them (e.g. Java).

    Also, don’t be afraid of marginal or complex languages.  I see this
    practice similar to mathematics:  it’s something that you study not
    because it will be directly applicable to you, but for all the wonderful
    benefits it will indirectly bring you.  For example, the complexity of
    C++ is daunting and you might not want to be involved in such a language as
    long as you don’t really need it, but that would be a mistake.  Pick a
    book by one of the gurus and look at the amazing things they can do just by
    tweaking the concept of templates (partial specialization, traits, etc…).

    Similarly, more abstract languages such as Dylan or CAML are quite confusing
    at first but they will reshape your way of thinking in interesting ways.

  • It is very rare to find "curious" colleagues.  What I mean by
    curious is simply what I just described:  people who are not only good at
    their job but who also like to explore other areas and discuss them.  If
    you happen to have somebody like that in your work environment, take every
    opportunity you can to have lunch or coffee with them.  There is nothing
    more exciting than two curious spirits bouncing off ideas.  Separately, you
    and him will spark interesting ideas, but if you put both together, the total
    knowledge will greatly exceed the sum of its individual parts.
     
  • Of course, all this would be useless if all you did is read and never practice. 
    At all my jobs, I have always saved some time every day to do something "on the
    side", something that doesn’t pertain to my work directly.   Working on side projects is definitely a way to sharpen your skills, especially
    if you can be involved in a project for a long time, which will allow you to go
    through all the cycles involved in the development process.  If you can do
    this, it’s worth it.  Don’t forget to have a life and enjoy your hobbies,
    though, this is a lot more important than it may seem.  If you are not
    balanced, you will quickly plateau at work, no matter how dedicated you are.

  • Finally, there are a lot of books I could recommend.  I try to maintain a
    list of books I read, feel free to take a
    look.

How do you guys "stay sharp"?