How can I become a world-class coder in under three years?

I came across this question on Quora today and decided I would answer it.  There were enough up-votes by people following the question that I’m re-posting my answer below:

I’m not sure what the term “world-class coder” means to you.  But I would actively discourage the notion that there is some point you can reach in the practice of software development (whether it’s 3 years or 20 years) where you can look at yourself and say “Achievement unlocked!  I am a world-class coder at last.”  What may give you more satisfaction over time than the question of “where do I rank” in some mythical best coders on Earth list is “Am I a better developer now than I was last week?  Last month? Last year?”

The things that previous commenters have suggested are great ideas for continuous improvement and refinement of your skills in programming.  Do as many of those things as you can.  Beyond those, I’d suggest the following:

  • Be willing to learn from anyone.  I’ve made my living writing software since 1996 and I regularly learn new things about my craft from people a decade or more younger than me.

  • Keep track of what you learn–and share it.  Whether it’s through blogging, Stack Overflow contributions, or something else–write about it.  You may not encounter the exact problems you’ve solved in the future, but they will often be close enough that what you’ve captured will help you solve them much faster than you would have otherwise.  The ability to explain what you know to others is a very valuable and rare one.  The process of preparing to give a presentation to others on a topic has often been a good forcing function for me to learn that topic to the level where I can explain it well.

  • Learn about subjects beyond programming.  The importance of the ability to understand new domains well enough and deeply enough to design and implement useful software for them cannot be overstated.  I’ve delivered software solutions for news organizations, healthcare companies, marketing companies and defense/intelligence contractors in my career so far.  Making myself familiar with the sort of terminology they use and the way such companies operate (above and beyond a specific project) definitely results in a better end product.  One or more such topics can end up being great fodder for pet projects (which are great vehicles for learning things you aren’t already learning in a job).

Book Review: Building Interactive Queries with LINQPad

Any new technical book has the challenge of adding value above and beyond what’s available for free on the web.  A new book on LINQPad has the additional challenge of adding value above and beyond the wealth of samples already included with LINQPad, including code samples from two LINQPad-enabled books.  So when I received my review copy of Building Interactive Queries with LINQPad, I was very curious to see what the author (Sebastien Finot) could accomplish in 126 pages.

Even as someone who has used LINQPad enough in the past few years to present on it on front of a .NET user group, I learned new things about the tool I hadn’t known before (such as the ability to interact with the console and CSS customization of the application’s look-and-feel).  The book might have been more accurately titled “Building Interactive Queries with LINQ and LINQPad”, as the book provided good examples of a wide variety for LINQs query operators.  Finot also mentioned the performance implications of ToList()–a very useful mention depending on the size of collection you might be dealing with in your queries.  All the code samples in the book are available for download as well.

The book missed some opportunities to add value for readers.  Fuller treatment of the NuGet dependency management capabilities in the paid versions of LINQPad would have been helpful in deciding if the feature was worth paying for.  Finot also mentioned the existence of LINQ to Twitter and LINQ to JSON APIs but didn’t link to the projects in the book.  More examples of using LINQ to parse and manipulate JSON (instead of XML) would have improved the book significantly, given the increased usage of JSON in .NET development these days.  Unfortunately, the code samples didn’t include databases, which would have enabled the author to go above and beyond the fairly standard Northwind database examples.  A custom OData feed for use in explaining the ability of LINQPad to query those data sources would have been a great help as well (given the rather tenuous availability of the sample services at odata.org).

Building Interactive Queries with LINQPad is the only book I’ve seen dealing specifically with LINQPad.  If you use LINQPad on a regular basis (or plan to), the e-book is worth purchasing.  For an in-depth treatment of LINQ, you’ll have to look elsewhere.

Disclosure: I received the e-book free of charge from the publisher for the purpose of providing this review.