November 2008 Entries
Developer Tools and Utilities

I often get asked by other developers at work or during presentations about various tools that I use.  Most of the tools I use are relatively well known, but I'm going to create this post so that I have a single point where you can download everything without a bunch of Googling.  Almost all of the tools on this list are free.  My only disclaimer is that this is simply my personal list of the tools I use most often.  If you're looking for a *real* list that is extremely comprehensive, then I recommended checking out Scott Hanselman's Tools List.

There are many tools listed below but, generally, the tools I cannot live without and use on a daily basis are: Reflector, Executor, PowerShell, TextPad, FxCop, Royal TS, Web Dev Helper, Firefox Live HTTP Headers, ZoomIt, and Process Monitor.

Misc Dev Tools

  • PowerShell - There is definitely a learning curve with PowerShell but once you get comfortable with it, you have the power of the .NET framework from the command line.
  • TextPad - I've been using this text editor for years and I generally believe that you should stick with the text editor that you are most familiar and skillful with.  I love the syntax highlighting for all kinds of document classes.
  • Log Parser - Essential tool that allows you to query a variety of file formats (e.g., IIS, ETW, CSV, XML, etc.).
  • Visual Log Parser  - Provides a great GUI over top of Log Parser.  Very easy to work with compared to command line - particularly with the ability to save queries to files.
  • Rock Scroll - This is a cool VS.NET add-in that I originally saw during a Scott Hanselman presentation.  It gives you a nice scroll bar that "shows" the code as well as some context highlight of tokens.
  • VS.NET 2008 Power Commands - This adds a host of commands to VS.NET which the IDE should have had on its own.
  • GhostDoc - This VS.NET add-in allows the quick creation of method comment stubs.
  • Database Publishing Wizard - Let's you quickly script your entire database including optionally scripting the data.
  • Snippy - I use this tool exclusively to create Visual Studio code snippets for general every day development as well as presentations.
  • NUnit - NUnit, MSTest, xUnit, MBUnit - Use what makes you happy.
  • Moq - This is currently my favorite mocking framework.  RhinoMocks and TypeMock are also good but I believe Moq is more intuitive with a smaller learning curve.
  • Tortoise - If you use Subversion, this is obviously a must.  But even if you don't use, there are features such as the Diff tool that are great (and free).
  • WinDbg - A big learning curve if you have never used it. But if you are working on an application where detailed analysis of memory is required, then it's literally impossible to debug some of those issues without this tool.
  • LinqPad - If you're working with LINQ to SQL, this is your "Query Analyzer".  Very robust tool that allows you to write LINQ queries over any IEnumerable including data base connections.
  • XML Notepad 2007 - This is a great, lightweight, free editor for XML files.  The 2007 version is vastly improved over its original.

Code Analysis

  • Reflector - There are certain days it would be impossible to do your job without this tool.  Also check out the Reflectors Add-Ins on CodePlex.
  • FxCop - Stand-alone GUI and command line for build server are essential.
  • NCover - The new version costs money now but it's more than worth it.
  • StyleCop - This relatively new public tool has been used internally by Microsoft for years.  I believe it's going to be used more and more in the coming years. Unlike FxCop which looks at your binary code, StyleCop looks at your source for conformance with style coding standards.
  • SourceMonitor - Being able to quickly identify where your code complexity lives is essential to refactoring to cleaner designs.  This tool does a great job of that.

Web Development

  • Web Dev Helper - This IE add-in is essential to web development.  If you're doing AJAX development, this is a must have.
  • Firefox Live HTTP Headers - If you work with HTTP status codes, need to understand when redirects are happening, etc. this tool is essential to give you the entire picture of HTTP headers.
  • IE Developer Toolbar - Another invaluable IE add-in to be able to quickly select and manipulate DOM elements.
  • Fiddler - HTTP debugger which shows all details about the HTTP request/response.
  • IIS 6.0 Resource Kit - Comes with many useful tools including Log Parser.  My favorite is TinyGet.


  • Executor - Executor has now overtaken SlickRun as my launcher of choice.  It is fast, responsive, and user-friendly.  I literally haven'ted clicked my Start button in windows in 2 weeks.  I use this all day long to launch everything.  A must have.
  • SlickRun - EDIT: This is no longer the launch I use because I've replaced it with Executor but it's still a good tool so I'm leaving it on this list.  This is a launcher I cannot do without and I use it all day long.  I barely have to pick up the mouse to click the Start button because of how robust this launcher is.  It is a must have.
  • ZoomIt - If you do presentations of any kind (to clients, developers, etc.) this is absolutely a must have.  Very easy to use and the features are robust.
  • Royal TS  - If you work with Remote Desktop at all, then this is a must have. This free tool allows you to easily organize your remote desktop sessions as well as bounce back and forth between different active sessions with ease.
  • Process Monitor - This is a must have for debugging "mysterious" issues.  They've rolled RegMon, ProcessMon, and FileMon into one now.
  • Password Safe - This is a lightweight, portable, and easy to use password storage app.
  • Clean Sources - Windows shell app that gives the ability to quickly remove the bin and obj directories from your visual studio solutions.
  • Consolas Font - I set Visual Studio and all my text editors to use this font.
  • Live Writer - I use Live Writer for all my blog posts and it's generally considered the best tool out there.  There are some other features I'd like to have in it but it does the job well.


Posted On Sunday, November 23, 2008 3:03 PM | Comments (16)
Approach For Learning A Specific New Technology

In a previous post, I discussed how to identify the technologies you want to learn and come up with a personal learning road map, so to speak.  But when it comes time to dive into one specific technology, how do you go about learning something new?  In fact, I almost always ask that question during developer interviews.  The most disappointing answer I get to that question is, "well, I will Google it and read articles about it." That doesn't really show a very deep level of enthusiasm or commitment.

Obviously, different people have different learning styles.  Some people do well learning from a book whereas that is useless for other people.  Some people do well in instructor led training whereas that is useless for other people.  In my opinion, it is very important to understand how *you* personally learn best but don't let that limit you.  In other words, make your learning as well-rounded as possible.  For example, if you feel you learn best from hands-on practice, that's great but don't let that be an excuse to not buy a book. Ultimately, you're never going to be able to learn every aspect with solely hands-on practice because there may be features you were not even aware of had you not read about it in a more complete reference like a book.

When MVC came out last year, I decided that I wanted to learn it as it was quite interesting to me.  This is how I learned it and this is the approach that I typically use for any technology.  Regardless of the technology that you want to learn, this type of approach can be used.

Much of this might seem intuitive and freely available on most Microsoft sites.  But the keys are: 1) be systematic and organized in your approach, and 2) keep track of everything you're about to do and what you've done in written or electronic form.  You need the systematic documentation to keep you goal oriented, focused, and on-track.

Step 1 - Identify specific quality sites and read EVERYTHING on these sites. For MVC, there was MVC on ASP.NET. There are a ton of links to articles, training, and additional resources that you'll find on sites like these. Read everything on these sites.

Step 2 - Identify and subscribe to quality blogs. For MVC, there was Scott Gu, Scott Hanselman, Stephen Walther, etc. There will be other blogs like these for whatever technology you are currently learning - find them.  It's great to read articles (from step 1) but blogs can be extremely valuable with information from people that are already experts in the technology or are using the technology hands-on.  Use them.

Step 3 - Web casts.  For MVC, there is a page dedicated to MVC web casts.  You can read all the articles in the world but web casts can give you a great high level picture while seeing live demonstrations that can get you up to speed quicker than floundering yourself. If Microsoft gives you a page with 10 web casts, watch all 10.  In fact, should write down specific days and which web casts you are going to watch on which days and treat watching them like goals. Get it done.

Step 4 - Get a book. Articles and web casts are great but a book is a more complete reference that will go into details of your technology in greater depth than you'd get from an article or blog post. Use the consumer feedback on sites like to determine the best books to get if you're unsure.

Step 5 - Hands-on Labs.  You can read/watch all the articles/books/webcasts in the world but there is simply no substitute for hands-on experience.  Microsoft does a decent job providing guided hands-on labs in many new technologies.  These typically (but not always) do a good job providing systematic hands-on experience in the primary areas.

Step 6 - Hands-on Project.  Hands-on labs are great but, ultimately, they are totally guided.  All the code is given to you.  To really become good at something you *need* to flounder a little.  You need to run into problems and figure them out.  Give yourself a little side project outside of work to build some sort of application that does XYZ.  Although this is step 6, this is the most important step.  There is simply no substitute for hands-on experience. But you want that hands-on experience to be based on an already strong foundation from other learning materials.

Step 7 - Write an article. This might be something as simple as a blog post. Or you may decide to go as far as to write an article for MSDN Magazine or Visual Studio Magazine.  Having to write something down helps organize your thoughts especially if you know other people are going to read it. I've certainly had times when people politely (or not so politely) told me that something I wrote on my blog made me look like an idiot so you want to give it at least a little thought first.

Step 8 - Give a Presentation. This one often scares people off but it shouldn't. Set a goal for yourself to give a presentation on your topic in a 6 month timeframe.  You'll have plenty of time to learn it. This presentation might be for 5 developers at your company, maybe your entire development staff, maybe a local users group, maybe a regional Code Camp, maybe Tech Ed!  Either way, this is a huge motivating step.  You know that if you're going to get up in front of a room full of your fellow professional developers then you better know what you're talking about!

If you're learning a new technology that you're truly interested in, then it should be an enjoyable thing to totally immerse yourself.  With the amount of freely available training materials these days, you have only yourself to blame if you don't take full advantage.  Either way, next time you're asked in an interview how you learn something new, please don't tell them you Google and leave it at that.

Posted On Saturday, November 22, 2008 7:45 PM | Comments (2)
Approach For Learning New Technologies

How do you stay up on new technologies?  How do you approach learning a specific new technology?  The first thing you have to accept is that the Microsoft technology stack has gotten so vast that it is simply impossible for a single person to be an expert in everything.  This is the most important aspect to remember. This post is simply to describe my personal approach for staying up on new technologies in the hopes that other people will find something valuable in this to add to their toolbox.  In terms of a high level philosophy, my outlook is that I want to be able to speak intelligently about as many technologies as possible, but then be able to consider myself an "expert" in a few of the most important.  It is simply not possible to be an expert in everything.

Step 1 - Make a list.  Literally create a spreadsheet for yourself for all the technologies that you already know or want to learn about. Consider this your own person "Skills Matrix."  You want to be able to see, on one page, everything you know or don't know.  I've been keeping my own list for 4 years and it's a working document that I'm constantly updating. My personal list looks something like this:

  • C# language / .NET Framework
  • C# 2.0 (generics, anonymous methods, etc.)
  • C# 3.0 (lambdas, object initializers, etc.)
  • ASP.NET 2.0 (Membership, MasterPages, etc.)
  • ASP.NET 3.5 (New web server controls, etc.)
  • Windows Apps
  • XSLT
  • OO Design / Architecture
  • Design Patterns
  • Web Services (asmx)
  • LINQ to SQL
  • IIS 6.0
  • IIS 7.0
  • WSE
  • Windows Workflow Foundation
  • Windows Communication Foundation
  • Windows Presentation Foundation
  • CardSpace
  • Commerce Server
  • Oracle
  • Microsoft AJAX
  • jQuery
  • InfoPath 2003/2007
  • BizTalk 2004
  • BizTalk 2006
  • Enterprise Library Validation (VAB)
  • MSBuild
  • SQL Server
  • SQL Reporting Services
  • SQL Integration Services
  • SQL Analysis Services
  • SQL Notification Services
  • SQL Service Broker
  • MOSS
  • Silverlight
  • Entity Framework
  • ADO.NET Data Services
  • ASP.NET Dynamic Data
  • Enterprise Library Logging, Data block, Exception Handling, etc.
  • Microsoft Expression

Step 2 - Categorize your list.  If you're not overwhelmed with the list you created above then you're doing something wrong. Remember, the goal is to not be an expert in everything.  The next step is probably the most challenging - you must put each item on the list in 1 of 4 categories: 

  • Expert - I'm a true Expert in this technology and I could talk with anyone in true technical depth about any aspect of it. I can complete any hands on task given to me with mastery.
  • Solid - I'm Solid in this technology with some great professional hands-on experience but not a *true* expert.
  • Low - I have *some* experience so I can speak intelligently about this technology but my expertise is "low".
  • None - I may or may not have read about this technology but I definitely don't have any hands on experience and I don't really know what I'm talking about.

In order to be successful with this step and, ultimately, successful learning new technologies you have to be very honest with yourself with Step #2.  Remember, you're not sharing this list with anyone so if you have only 1 item in Expert and 30 items in None, that's OK - no one will know but you.  If you've got 40 items on your list and you've got 20 in the Expert category, then you're *definitely* doing something wrong and are not being honest with yourself.  Trust me, you're not a true expert in 20 technological areas.

Step 3 - Identify Key Areas.  Now it's time to start narrowing down what you're actually going to dive deeper into.  There are three main categories I have for this:

  1. Technologies on the list that you're very interested in but you don't have a lot of opportunity to use them in your professional life. 
  2. Technologies on the list that your employer is going to consider very important but the technology is not incredibly engaging to you. 
  3. Technologies on the list that both interest you greatly (#1 above), and your employer deems valuable (#2 above).

The technologies in #3 are the best ones to start with.  But don't forget about #1 and #2 as those are important as well.  If you list has 40 items on it, focus on about 5 for this step #3 here.

Step 4 - Determine where you want to go.  Now that you've identified about 5 areas in step 3, you need to look at what category you're in now and then figure out where you want to go.  If you're a "None" in all 5 areas and you want to go to "Expert" in all 5, then you're doing something wrong.  In fact, I think, from a goal perspective, it would be a mistake to go above 1 item for the Expert category.  There might be one or two where you want to go from None to Low because you want to be able to speak intelligently about it but don't have a need to be a true hands on expert - once you attain that level, it's time to move on to the next thing.  There might be an area where you're already very solid with a couple of years of experience but you want to go to the next level and become an Expert.  Bottom line, it varies for each item.

Step 5 - Repeat steps 1-4.  Going from None to Low is not difficult for most items.  You're going to read articles, do some hands on labs, etc. and you'll feel comfortable talking about it.  But you want to constantly re-asses.  When I started my own personal list 4 years ago, it probably only had 20 items on it but it's obviously going to grow as new technologies emerge.  Make sure to add new items to your None category as they come out and keep re-assessing Step 3 to constantly identify the areas where you want to learn.

Much of this might seem pretty intuitive but I think the real key is to keep track of everything in written (or preferably) electronic form. 

There are some technologies where you're going to want to go to the next level and truly improve your current knowledge level. I discuss my own process here in my Approach For Learning a Specific New Technology.

Posted On Saturday, November 22, 2008 7:45 PM | Comments (2)

View Steve Michelotti's profile on LinkedIn

profile for Steve Michelotti at Stack Overflow, Q&A for professional and enthusiast programmers

Google My Blog

Tag Cloud