Efficiency Upgrade
Developers solve problems. Good developers solve problems efficiently. The reward for that efficiency is [insert your preferred reward here]. Let’s assume you’re simply motivated by the satisfaction of a job well done (or maybe a promotion, a raise, longer lunch breaks, or just some extra time with your family). Whatever the motivation, the secret to solving problems efficiently is not inventing everything from scratch. Certainly the secret is not spinning your mental wheels hoping for inspiration. And most definitely the secret is not using Intellisense to arbitrarily try classes, methods, and properties until something works.
The secret to solving development problems efficiently is having the right information and the means to find the information you don’t have.
If you have been developing software for more than a week, you know that a working knowledge of language syntax and program construction (that is, "programming") is only a small part of the necessary skill set for solving problems with software. As a developer, you need to understand the technologies, processes, and methods available to you. You also need to have a set of reliable resources you can turn to when you encounter problems.
Below you will find some resource recommendations to help you find the information you need to help solve development problems more efficiently so you can get on with living the rest of your life.
Finding Answers to Specific Problems
Search Engines
I have heard colleagues muse about the changing role of "software developer," postulating that development has become a job mostly concerned with research and discovery. While that is no doubt an overstatement, the ability to find information quickly is an important skill. The place many of us turn to first is our search engine of choice whether it’s Live Search, Google, or a meta search site like Dogpile.
The appeal of most search engines is the beautiful simplicity of a single search box, but the needs of a developer are not simple when you factor in multiple versions of frameworks, programming languages with similar constructs, and behavior differences between competing products (I’m looking at you, Structured Query Language and Cascading Style Sheets). With just a short time investment, you can learn some advanced search operators and tricks to help narrow search results to exactly the information you need. For example, search for "live advanced search keywords" or "google advanced operators" and you’ll find a bunch of operators to help you become a search ninja.
In addition to your search engine of choice, Wikipedia can be an invaluable problem solving tool. I have found Wikipedia to be especially useful when searching for general topics such as common computer science algorithms and concepts. Although I often end up at Wikipedia through search engine results, Wikipedia has its own search box right on the home page (http://wikipedia.org/).
Of course not all problems will have solutions waiting to be discovered via a search engine. Some problems have already been solved in another part of your organization and you simply have no idea about the pre-existing solution. There are many tools designed to help companies deal with code asset management and search behind the firewall. One interesting product is Krugle, a specialty search engine built for indexing and searching code.
Stack Overflow
Searching is great when you know exactly what to search for and somebody else has previously solved a similar problem. When you are dealing with a more difficult issue, you may want to pose your specific problem to other developers for advice. There are plenty of discussion boards and forums for developers on the Internet to ask and answer questions.
One intriguing and useful site is Stack Overflow, a "collaboratively edited question and answer site for programmers." This innovative developer Q&A site allows users to post responses to questions and vote answers up or down based on usefulness, accuracy, etc. In addition to posting questions, you can search Stack Overflow or browse posted questions by tag. When you are posting a question on Stack Overflow, the application automatically searches existing questions and shows you matches that might already contain the answer you seek.
For obscure topics and scenarios such as bizarre error codes, Stack Overflow can be a job saver.
Microblogging seems to be all the rage these days and some developers find services like Twitter to be an extremely effective way to share tips and send out requests for help. Twitter and similar services can be a two-edged sword, though, as they can be as much a distraction as a tool for information exchange.
If you are not familiar with Twitter, it lets you follow posts or "tweets" from other Twitter users. Tweets can be no more than 140 characters. You choose who you want to follow.
There are plenty of ways to use Twitter that will surely reduce your efficiency, but with a bit of intentionality in your approach, you can build a reasonable size network of trusted colleagues with whom you can swap questions, answers, tips, and tricks. (When your friends hear you are "on Twitter," they may demand to know your Twitter username. You might need to maintain separate Twitter accounts for work and personal use.)
Officemates, Coworkers, and IM Contacts
If you are anything like me, you find it tempting to just ask an officemate or IM contact for an answer. Of course this means solving my problem at the expense of my colleague who is distracted from doing his/her own work. With your recently acquired ninja search engine skills, take a look at some of the research on the impact of interruptions on productivity and ponder how a work culture that accepts interruptions as common practice could ultimately make you a less effective developer. Just something to think about before you start picking the brains of your cubicle mates.
Other Options
What sources do you rely on for finding answers to specific problems? Leave a comment below.
Keeping Up with New Technologies
With the rapid and continuous rate of change in the software development space, keeping up with the latest and greatest technologies could be a full-time job – in fact it is in many organizations! It really has become impossible to keep up with everything, but you should not let the fear of information overload prevent you from staying informed about significant changes directly related to your area of expertise. Being informed about new technologies helps you make informed choices about the tools, platforms, and libraries you will use to get from problem to solution.
Blogs
One easy way to stay informed about topics that might affect you is to subscribe to at least a few blogs in your area. Scott Guthrie’s blog is a good choice if you only want to get the big headline news like a new release of the .NET Framework (). If you’re a Silverlight developer, Tim Heuer’s blog would be a good choice (http://timheuer.com/blog/). If you’re an ASP.NET developer, perhaps try the Visual Web Developer Team Blog (http://blogs.msdn.com/webdevtools/).
If checking blogs via a blog reader is not your thing, you might want to use a service that will deliver new blog posts to you via email. FeedBlitz () is a service I use for several blogs that I want to track even when I’m too busy to spend time reading my larger blog subscription list. Or you might want to add a few feeds to a customized browser home page through a service like Pageflakes or Netvibes.
Podcasts
Another way to stay current on technology is by listening to audio podcasts like .NET Rocks (http://dotnetrocks.com/) and Hanselminutes (http://hanselminutes.com/). Internet audio shows like these are generally packed with great technical content that helps keep you up to date. Podcasts can be an easy way to transform a tedious commute into a serious professional development opportunity. Personally I use the Zune desktop software (http://zune.net/) to automatically download new podcast episodes and sync them to my Zune device. If you don’t have a Zune, you can still grab the MP3 files from the Zune download folder and copy them to any portable media player.
User Groups
User groups are another great way to stay current on new technologies. User groups are community-run technical groups that hold events (both in-person and virtual) for members to learn about technologies related to the focus area(s) of the groups. User group events often happen outside of normal work hours, which can admittedly make it difficult for some people to attend. In addition to learning opportunities, user group events can be a great place to discuss technical issues you are tackling and increase the size of your network of colleagues that you can turn to for help.
Go to to find details (including meeting times and places) for .NET-focused user groups in your neck of the woods.
Challenging Your Thinking
When building software, your existing methods for thinking about problems are used to design a solution based on the tools and information you have available. Too many times I have seen developers stuck in a mental rut and developing solutions inefficiently because of outdated or misguided thinking about the problem at hand. Case in point: I used to spend far too much time building and deploying simple tools and utilities as compiled executables until I learned to embrace scripting as a fully legitimate form of programming (after having turned my back on my past as a UNIX scripting hack). In part my thinking was influenced by the experiences of other developers who were sharing their experiences online.
If you do not have people challenging your think, I believe you will stagnate as a developer. That means talking to or reading the musings of other developers. Ideally you will find yourself disagreeing with or questioning their thoughts on a regular basis. You aren’t being challenged if you only read what likeminded people write.
Below are some sources that I find useful in challenging my thinking and assumptions. They might not work for you, which is fine, but I encourage you to find your own trusted sources that will regularly challenge your thinking.
CodingHorror.com is written by the brilliant and prolific Jeff Atwood. It has been a constant trove of insight and reasoned perspective, ranging from discussions of technical details to choosing a programming chair. (Jeff is one of the founders of the abovementioned Stack Overflow.)
JoelOnSoftware.com is written by the equally brilliant Joel Spolsky. He is the source of such gems as "The Joel Test: 12 Steps to Better Code" and "Things You Should Never Do." In addition to development topics, Joel writes about management and business issues. (Joel is the other founder of Stack Overflow. Hmmm… perhaps I have a bias.)
Ted Neward writes a technical blog () that I regularly enjoy. Although I don’t read every post, I always find his pontifications worth digesting.
Daniel Crenna (http://dimebrain.com/blog) is another technical blogger whose musings I enjoy reading. Daniel is a great community champion and the founder of several open source projects. His blogging pace has slowed down in 2009 as he’s been working on some useful projects, but I keep hoping he’ll starting writing again soon. He’s a web / RIA guy, an area I’m interested in, so he stays in the ol’ blog list.
Join the Conversation
What do you do to be more efficient as a developer? What are your favorite resources for challenging your thinking? How do you keep up on technology changes in your area of expertise? How do you find solutions to specific problems? Leave a comment to share YOUR tips with us.
—–
Derek Hatchard is the content editor for http://microsoft.com/youshapeit/msdn and https://devshaped.com. He is also the founder of Crowd Space. You can find him online at http://derekh.com, http://ardentdev.com, and .
ofcourse codeproject
Really useful post thank you
My listing:
A community’s opinion – StackOverFlow
When you are wondering if someone else coded something like – google.com/codesearch
Hanselman, Haacked, ScottGu, SmashingMag – Twitter
In emergency case, and no ideas – My great buddies at office : )