In every era in recent times there has been one profession that for a short while you could enter without formal training. Autodidacts in the 19th century could read the law without recourse to formal education (see Abe Lincoln). In the early 20th century it was aviation. For a short while in the 1980s and early 1990s, it was computing, thanks to the release of the Apple IIe, the IBM PC and the Mac.
Were it not for that Window® of opportunity, I hate to think what would have become of me. (Hey buddy, can you spare a dime?) But I was very lucky, when I became serious about learning to program all i needed was a book on the 8088 and a book on C, and I was all set to Rock and Roll.
As much as I continue to love to code 30 years later, there are a few aspects I hate:
- Doing a mundane task more than once
- Not remembering how i fixed this problem in the past
- Losing work to crashed disks or stupid irreversible revisions
- Not being able to find subtle text differences in files.
Hence, my 12 essential utilities….
Before We Begin
I assume you have (and use)…
- Visual Studio 2010
- Expression – at a minimum Expression Blend and probably Expression Encoder
- Windows 7
- The essential hardware to run it (see forthcoming list!)
- All the necessary development software available here
If not, stop reading this list and go get em.
While I work on both Windows and the Mac, this list is entirely Windows-centric.
The Top Dozen
# 1. ReSharper or CodeRush
After chatting with whoever was in shouting distance at PDC, I can say that there is nearly universal agreement among all professional programmers world-wide (or at least those within shouting distance) that having CodeRush or Resharper is essential. .
What is wonderfully controversial is which one is better. This is the kind of question you can throw out at a technical presentation and then sit back and enjoy hours of deafening amusement. (Other such questions include C# vs. VB and where a method’s opening brace should go.)
Both ReSharper and CodeRush are Visual Studio add-in products that enormously enhance your productivity and the quality of your code. They do this in ways big and small but the three I consider essential are:
- Making it very easy to refactor your code
- Radically reducing the amount of typing you have to do.
- Finding errors and superfluous code.
That is, you type less and end up with better code. Nice. Neither product is free, but having at least one is essential.
#2 Fiddler and FireBug
Fiddler logs all the HTTP and HTTPs traffic between your computer and the Internet. You can inspect the logged data just as you might in a debugger, and most important it has a scripting system and is extensible with C# (or any .NET language). Even nicer, Fiddler is free and works on IE, Firefox, and just about all the other browsers you can shake a stick at
FireBug is the single most popular web development tool, and for good reason. With it, you can in real time inspect and modify HTML in a web page, make use of a surprisingly powerful javascript debuger and obtain detailed measurements and profiling of network activity. Don’t leave home without it.
#3 Tortoise SVN
If you are on a PC and you are programming, then you must, must use version control. Microsoft makes a great version control system, and if you buy the right version of Visual Studio you get it for free. I use SVN because I did and do a lot of cross platform and open source work and svn is the lingua franca of source control (though keep an eye on Git!).
If you are on a pc and you want SVN as your version control, then the decision tree has only one node: Tortoise SVN – it is free, GPL and works as a shell extension so it is wicked intuitive. Create a directory, check out the latest version and get to work. Each time you want to do more work start with Update and end with Commit.
The key benefits of version control are
- Your files are backed up
- Your changes are backed up so you can decide to go to a previous iteration after you cabbage your code
- Old releases are available for testing as needed
- Your files are backed up
- If more than one programmer is working on different parts of the code, version control lets you put the pieces back together in a sane way
I should mention that I use SVN not only for my source code but for my documents and for my presentations. Having version controlled PowerPoint slides is a terrific thing.
If you want very much the same functionality, but integrated into Visual Studio, take a look at Visual SVN. At $50 it is reasonable, but it ain’t free.
This Just In: I recently found a brilliant cross-platform, incredibly powerful and easy to use SVN client: Syncro SVN 6. I’ve only started to exercise it, but so far it is the best SVN client I’ve seen, especially on the Mac where good SVN clients are scarce. I particularly like their licensing, which is per user, and so you are invited to put it on your Windows machine, your Mac and your Linux box, as long as you use only one at a time. Nice. The client seems to be on sale for 40% off, so I am buying it as I write this.
#4 TimeSnapper
Every great scientist keeps a lab book, in which they write down everything they do. This is critical, so that when something changes they can determine what happened. For years I’ve thought that it would be terrific to keep such a log book so that I could go back and figure out what the heck it was I did way over there that has broken this code way over here
I’m happy to say that this problem is reduced greatly by test-driven development, as I discussed recently in Test Driven Silverlight Body Snatchers. But it is not eliminated entirely.
Over the years I’ve tried a number of approaches, and like every diet on the best seller list, they work perfectly until you stop doing it, which you always do. I tried
– Creating a log of my work on a pre-net-top HP computer
– Creating a running log on a second computer
– Using dictation software to capture a running commentary
– Videotaping my work
Every attempt ended in ignominy.
Then came TimeSnapper. This little program sits in the background and takes a picture of what you are doing, as often as you like, at whatever fidelity you need. It’s all configurable, but I set mine to record just the active application, saving each image as a jpg, with 100% resolution (75% resolution provides an image at 3/4 of the original size), and 75% quality (I can’t see the difference). I instructed TimeSnapper to take an image every 5 seconds and to save 10 days worth.
When I first tried this program, many revisions back, on a slow PC, I did find that it was slowing down Visual Studio. Today, running on a blistering machine (Windows 7 running on Parallels 5 on a 4 Quad Mac with 8 Meg of memory and a pair of wicked fast terrabyte drives) I see zero speed degradation, but I set their new “use very low priority” switch just to make sure.
The images range in size depending on how large the window is, but devoting all of one cinema monitor to Visual Studio, I probably average larger snapshots than most. That said, every 5 seconds = 720 per hour. A bit less as I tell it not to save a new image if nothing has changed, and if I’m out of the VM it sits idle. That said, the images range upwards of 100K, so my worst case scenario is 7200 images in a day times 10 days = 72,000 images at 100K each = 7,200,000,000 bytes or 7.2 Gig; which is peanuts.
Among the things you can do with TimeSnapper is tell it what you count as productive work, and it will report on any time period you like. You can create time reports, and all sorts of other fun stuff, but its killer feature is that you can play back any part of your day like a movie, and more than once you watch as you do something astonishingly stupid.
#5 Instant VB….
Instant VB is by Tangible Software. You point it at a C# application, wait a nanosecond or two, and hey! presto! you have a VB application. Yes, it’s a one-trick pony, but it’s a hell of a trick! They also sell a variety of other converters (VB to C#, C++ to Java, and many others)
When its done, Instant VB offers to bring you to the directory of your original program, your converted program or to launch the converted program. Nice.
I like them because they make an incredibly great product that they keep improving, because they are extraordinarily nice folks and because they listed my unsolicited testimonial first.
#6 ExamDiff Pro
By far the best comparison and merge program I’ve ever seen. You can compare folders (recursively or not) or versions of files, but what makes ExamDiff Pro stand out is that you can use it right out of the box – the UI is incredibly intuitive, or you can adjust dozens (hundreds?) of settings to meet your particular needs (do you want to consider two files different if there are changes in the amount of white space in lines?)
PrestoSoft offers the free version ExamDiff and the souped up version ExamDiff Pro. The price marked on their site for the Pro version is “$34 or less.” Their web site is terrific, offering extensive information, screenshots and tutorials – everything from “How to compare files” through “How to ignore line numbers in text files.”
I’ve squished this image down and put the files one atop the other rather than side by side to make the image legible (better, though if you click on it to see it full size). Each difference is identified, the summary shows you what you have to do to make the files the same, and you can either use the arrows to migrate the change from one file to the other, or edit directly in the files as you go. It does much more, as well, and its handling of recursive folder and file differences is brilliant, letting you find and fix every change in two complete software solutions.
I routinely replace the file comparison and merge of my source code control with this, as it provides a clearer, faster and easier to use UI.
#7 AutoHotKey
I hate typing the same thing again and again and I miss TSRs (old enough to know what they were??). AutoHotKey solves this problem and a host of others. You can create simple substitutions or complex scripts tied to hot keys. You can use it to remap your keyboard, run scripts, create menus and forms. I just use it for two simple things:
- Macro substitution. If I type @jl it expands instantly to [email protected] (I add the at sign only to have a consistent signal for myself, AutoHotKey doesn’t care. Here is the line in the script that causes the instant substitution:
:*:@jl::[email protected]
The initial colon begins the line. The star * says “substitute immediately, don’t wait for a space.” The second and third colons contain the macro and the final colon begins the substitution text.
- Quick error correction. There are some words I should never misspell. Here’s an excerpt from my AutoHotKey correction file:
::Sliverlight::Silverlight ::Silvelright::Silverlight ::silverlight::Silverlight ::iPhone::Windows Phone 7 ::Stacy::Stacey
Thus, were I ever to write Sliverlight as soon as I hit space it would correct to Silverlight.
As noted, there is much more you can do, and fortunately it comes with an extremely well put together help file. Even better, AutoHotKey is free, open source and available in German, French, Italian, Russian, Japanese, Greek, Portuguese, Korean and Chinese versions.
Wikipedia has an excellent article covering AutoHotKey in depth.
#8 Clipx
My favorite feature in Emacs was yank-pop. If you copied line 1 to the clip board, and then line 20, and then line 5, hitting paste would return line 5, but if you then hit yank-pop line 5 would be replaced by line 20. That is, it unwound the clipboard stack.
ClipX provides that functionality and a good bit more for Windows – across applications. Its icon sits in the tray waiting for you to click.
When you do, up pops a very long menu of your n most recent clipboard entries where n is a number from 0 to 1024 (the image shows a cropped example)
You can also store permanent clipboard entries for fast retrieval as you can see at the bottom (I’ve disguised the first two as they are passwords).
It isn’t the fanciest of clipboard managers, but it works reliably and, as they say on their site, “it is sweet, it is free, use it.”
#9 Snip It Pro
Based on the reactions I get when I present code at conferences, the entire programming world is looking for a great snippet manager. Snip It Pro is the best I’ve seen. It makes creating and managing snippets (and sets of snippets) a breeze, it gets out of the way when you don’t need it, and while its basic functionality is obvious and intuitive, it has some additional features that are just sweet as pie. One that I personally requested and use all the time is the queue. Right click on a folder and choose Queue snippets and then each paste will paste the next snippet in the folder. Bang, bang, bang! The (excellent) help file offers the following hot-keys for working with queued snippets
CTRL+SHIFT+V – Paste the currently queued snippet and advance to the next one.
CTRL+SHIFT+1 – Move to the previously queued Snippet without pasting anything.
CTRL+SHIFT+2 – Move to the next queued Snippet without pasting anything.
CTRL+SHIFT+C – Ensure the currently queued snippet is in the clipboard. (Useful if you copy or cut another piece of text after advancing the queue).
#10 Evernote
I am a bear of little brain. And there is nothing more annoying when I’m stuck trying to solve a programming problem, than to know that I’ve solved this very problem before, but I haven’t the vaguest idea when or where. I hate solving the same problem twice. What I need is a reliable place to put my notes.
I also get a lot of information streaming in that I know I’ll want some day but not now. I need a place to put that.
When I see something interesting in a magazine (or on a billboard, etc.) I never write down a note, I take a picture – isn’t that what phones are for? I do not want to transcribe that information, but I have to be able to find it.
I work on more than one machine, in more than one location.
Enter, finally, Evernote. Evernote has very many wonderful things to say for itself (including that the basic version is free), but the two killer features for me are:
- It runs on phones, Windows, Mac, and the web.
- You do not need to organize your information on the way in – its search engine is so powerful that you can find what you need nearly instantly. Yes there are multiple notebooks if you want them (I use only one) and there are tags (I use them but for no good reason), so you can organize your information as you add it, but a killer organizer doen’t force you to. I know, absolutely that whatever I put in, I can find quickly just by searching.
That would be plenty, but Evernote has two other nearly incredible features.
- When you add an image, they read the image and index all the words in the image. And they are very very good at that. So I can find that photo I took of that article about that great utility I want.
- You can not only search both within notes and across notes by any word(s) appearing in the note, but you can search by when the note was created or when it was modified, or how it was added (I emailed that note) or whether it contains images or attachments, etc. etc. One of my favorite features appears on the phone version, which let’s me search for every note I added “near here” where I get to define the meaning of “near.” So when I’m in Redmond, I can instantly find 4 years of notes I added within, say, 10 miles of corporate.
Of course, all my versions sync with one another constantly, so all 1500 or so notes are always up to date.
The free version is perfectly good, but I upgraded to pro to give them money. No one should produce a product this good and not be compensated.
#11 Mozy
When all is said and done I’m a big believer in belt & suspenders. And the more valuable the pants, the more belts and suspenders I add. Thus, I keep my source code, presentations and important documents in off-site version control, I do regular on site backups, and I have Mozy backup all my data to their offsite computers, constantly.
Mozy’s deal is unlimited data, and I have it set up to watch every directory that does not have Microsoft proprietary information in it, and back that up as soon as the computer is less than 25% busy. I add a scheduled backup at 2:30 am every day (in the hope I’ll not be working then!). Finally, since everything is a trade-off, I instruct Mozy to throttle its use of the Internet bandwidth to 512KB/Sec between 7am and 1am.
We do what we can.
#12 Mikago
One of the things I truly love about my job is that I work from home. I’m in Massachusetts; my boss is in Oregon and his boss is in Redmond. My co-workers are in San Diego, Washington DC…. you get the idea. To make this work we use Microsoft Communicator and Live meeting (face to face is vital for avoiding confusion) but every once in a while it is incredibly helpful to be able to share a workspace fully, interactively and with great response.
There are a number of good products for doing this (some you even get for free with your operating System) but Mikago stands out for providing extraordinary control, incredible ease of setting up an ad hoc shared desktop, and being free.
For this article, I invited two buddies who did not have Mikogo to share my screen; sending them an email invitation through Mikogo to an event 1 hour later. Total time for each of them from clicking on the link to sharing my screen was under 3 minutes; but that will be faster next time as they saved the small program Mikogo needs.
A truly nifty feature is that when I have control of the screen, they can still click, and an arrow appears on my my screen (with their name attached) so they can ask “What’s this button do?” Shiny.
Please be sure to leave comments with the utilities you find essential as a professional programmer.
@Ariel Rivera
You mean Apple users program? Huh… that’s a new one. Thought they were pretty much consumers, not creators.
Insanely Essential Utilities….. and what you come up with is “instant VB”?
Must be real hard for you to make a living in software development. Oh wait… you don’t, you ‘manage community programs’. That sort of explains this article then.
Henk,
What would prompt an adult to post such a hostile message to someone you’ve never met and don’t know?
I can tell you. Ever hear of Beer Muscles? Means an aggressive attitude resulting from consumption of an alcoholic beverage. Henk’s got internet muscles meaning an aggressive, arrogant attitude resulting from knowing you’ll never meet face to face. It’s a common condition.
good resources sharing
I ought to thank your for this great list
I also find this tool very useful – WinGrep, WinRar, 7-Zip and
We use Mikogo at our company, Market Dojo, and it works brilliantly, saving us a lot of time and money from travel. I only hope that our b2b e-auction software works half as well!
Have to agree with TortoiseSVN, ReSharper, Fiddler and AutoHotKey.
I haven’t tried Snip It Pro, but SnagIt Pro is pretty good, but until I can justify the cost (work won’t pay for it), I’ll continue using Win 7’s own Snipping Tool, which does a very good job. Also, I have to put a worthy mention to Notepad++, which I use on a daily basis for editing config files, build scripts and the occasional project or solution file.
FTW!
pudieras haber dejado oftware libre nadie tiene plata para estar gastando ene so o kieres que piratiemos??
+1 for beyond compare, v3 is the business. Delphi FTW! 🙂
@F-Kiss
I totally agree. I took a very quick look at ExamDiff Pro and I couldn’t see any feature that Beyond Compare 3 doesn’t have. Also Beyond Compare 3 Pro supports diffing of image files. Also, I think the UI in BC3 is better looking. This was very useful when I was constructing a WPF UI that made some heavy use of PNG graphics. I was able to show a graphic designer that his graphics were getting mangled when being exported from Photoshop by using that feature. So it wasn’t just a bullet item feature for me.
Keep Posting Thumbs Up!
You should really try Code Barrel for snippet management. It integrates directly with Visual Studio, allows you to share easily, and you can get your snippets from anywhere.
Did you consider BeyondCompare for the diff tool? It’s really a lovely app too.
@Aglo
Indeed, Notepad++ and Paint.NET are really great tools and first two at the top of my list, with DB Comparer as the third one.
This is not really a ‘code’ tool, but I have to track my time spend on different aspects of what I’m doing, example: coding for project A, status meeting for client B, testing, etc. and I found a little tool called Task Tracker (http://www.cix.co.uk/~gort/win32.htm) that tracks the wall clock time on each with just a simple click of the button… really its that simple. I makes my reporting effort less of an effort, so I can spend more time coding.
Oh, and VirtualBox, for those of us not hip enough to want to be seen using a Mac.
You totally forgot Wireshark… a much better Fiddler (but has a learning curve).
Editplus is an amazingly lightweight editor that handles huge files, fast as all get out, minimal footprint, makes regular expression searching a breeze, and on and on. I’ve used it since it first came out because it could handle files sizes no other editors could. That was 10+ years ago and I still haven’t used anything better that has these abilites and is very small, very fast, and very easy to use.
Seem that some people had a ‘virus detected’ issue with this page.
http://www.autohotkey.com/forum/viewtopic.php?p=380350
Please have look into it.
Looked, fixed. It was from the assault on the site a few weeks ago. Purged. Thanks
Hi Jesse,
Thanks for including Mikogo in your Top Dozen. Great to read that it’s been a big help for you and your company when working in different locations. Btw, we are developing Version 4 right now which will include several new features. Feel free to follow us on Twitter or our RSS feed to hear more about the new software.
Regards,
Andrew Donnelly
The Mikogo Team
Twitter: @Mikogo
Great article! I wanted to mention another SVN client that might help everyone out: called AnkhSVN; it plugs into visual studio and it’s free, perfect for freelancers or homebrew developers without cash. Fortunately, VisualSVN’s server application is free, so you can get a fully integrated source control environment for $0, which is great. I set this up at a small company I used to work for and the boss was very pleased!
@Peter Gfader
Does RescueTime show pictures? I don’t need to know I used Visual Studio for 8 hours, I need to know which problems I solved.
My uncle thinks he’s better than me because he has switched to Mac. The guy can’t even delete a file without my help anyway. Yeah, Mac is great for the user that needs to have everything dumbed-down. hehehe ok sorry. Good article however. I will be trying some of the tools. =)
Textpad…I do alot of text processing for EDI/X12 files and BizTalk development and I find the convenience of doing regular expressions in a light-weight utility like textpad so handy.
…it’s still included in this page, so it wasn’t cleaned all the way. I mean I was never getting redirected, but some people’s AV were alerting them & I found that in the source code. Maybe you should grep the whole site for that string & maybe the DB too. Cuz it’s not completely cleaned, if it’s still showing up in outgoing pages.
It’s appended right after the string…
…is it only this article infected? I should check a few more articles & find out…
Better script for correctly spelling AutoHotkey, with audible feedback…
SendMode, Input
Sound_dir=%A_WinDir%\Media
;// comment or uncomment next couple lines for sound/no sound on success
;//Sound_correct=%Sound_dir%\ding.wav
Sound_correct=%Sound_dir%\tada.wav
;// leave this so you know you got it wrong…
Sound_incorrect=%Sound_dir%\chord.wav
:b0c:AutoHotkey::
SoundPlay, %Sound_correct%
return
::AutoHotkey::
SoundPlay, %Sound_incorrect%
Send, {Raw}AutoHotkey%A_EndChar%
return
…are there code tags here? Prevew? No blog comments have preview anymore! Hmph!
“There are some words I should never misspell.”…exactly…
:c1:AutoHotkey::AutoHotkey
…there, that script will take ANY misspelling/mis-capping of AutoHotkey & fix it.
SnagIt is an awesome tool for taking screenshots. I’ve used it practically every day for the past 4 years. It’s great for throwing together how-tos or pointing out an issue in a config file or GUI by allowing you to add pointers, outline or underline. It also gives you a lot of additional functionality that I don’t use on a daily basis.
Search the source of this page for “aeaaea.com/ou”…is that there on purpose or do you need to clean your blog?
It is residual from a WordPress plague, but the site has been cleaned and in any case it was not browser infectious it just sent you away from the blog to a bozo site.
Nice article, instead of AutoHotKey I would suggest a mixture of SlickRun and VIM. Keyboard junkies FTW!!!
@Yaro Kasear
“Serious” programmers don’t get too hung up on the tools they’re using. All clients care about is results, they couldn’t give a furry rat butt what you’re using to achieve that. Because we’re so intimately a part of the *process* we often forget that most people couldn’t care less about that, they’re only interested in the end product. Perspective, use it.
@Yaro Kasear
An idiot wrote:
“Most serious programmers, as in the ones who don
FYI:
according to Kaspersky, your website is infected with the trojan.JS.Redirector.cq trojan.
@Mario Wow, what a jerk. You really went this far out of your way to make a stupid comment and make yourself look like an idiot? There are more efficient ways to do that (although I have to admit, your way is good, too).
Awesome post, bookmarked.
To add my 2 cents, on #7 I would recomend AutoIt, that is a development from Autohotket but much more powerful and with a huge support community behind.
Great post. Quick note on CodeRush: there *is* a free version (it has a smaller set of features, but still, it’s a lot better than just bare VS). 🙂
And yes, I’ve been using Timesnapper and Evernote for years. Awesome stuff!
Per recommendation #6, I prefer WinMerge. It’s equally as powerful and it’s FREE:
http://winmerge.org/
Hmm and what about Visual Assist X? It greatly expands intelisense in visual studio.
Uh, no. What a horrible assumption.
Windows, Visual Studio? REALLY?!
Most serious programmers, as in the ones who don’t suffer under PHBs, will use Linux, GCC, a couple different IDEs, and about several dozen tools you’ll never find on Windows that makes Linux thousands of times a better platform to program on.
Windows should always be cross-compiled to, never programmed directly for.
I have to admit that when I read “You use foo? Really? Real programmers use BAR.” I typically stop reading.
I do not have any doubt that Linux is a great platform (I spent 10 years programming in Unix) and I’ve no doubt that Java is a great platform, and a few others as well. But most folks come to my blog to read about Silverlight specifically and .NET in general, and after 20 years in the industry, I find them to be wonderful development platforms. If you don’t, that’s okay, I’m not insulted. 🙂
Hi,
many thanks for the list.
one remark about clipx: i also chose this clipboard manager, and like it, but i cannot help finding it not very reliable. it often stops completely monitoring the windows (i am on vista 64bit sp2) clipboard, so i frequently have to restart it. that is not the worst, though: i mind more that, when i finally notice clipx has failed again, a number of earlier clipboard entries which i thought had been captured, went into nirwana.
oh well, cannot argue with free – but if somebody knows of better configuration settings, or of a more reliable, but otherwise similar clipboard manager, i’d appreciate a hint.
Try Clipmate – it is the most powerful clipboard manager I’ve found and I really like trying out tools.
great article! bookmarked for future use 🙂
I “evernoted” this page, of course… The one that I think might help me most is TimeSnapper. Mikago looks good, but I’m happy with the free version of LogMeIn
Great article, thank you.
@T Leijten I have been using AnkhSVN for a while and let me tell you that it works great (with VS05 and VS08)
Great compilation! Thanks,
Lol…you have a whole whopping 8 MEGS of memory!
Think you mean GIGS.
Good article. Interesting thing that a Microsoft programmer is using a Mac to work… hehehe.
I can never figure out why people snicker at that. My job is Silverlight, a cross-platofrm dev product that creates Mac and Windows programs. In addition, the Mac makes a superb Windows platform, and when I’m not in bootcamp I’m often using Office For Mac. So I don’t see why it is inconsistent 🙂
Two more great tools:
Notepad ++ to compare files is great. Is very helpfull if you have two css files to compare.
Paint .NET if you are a web developer.
@daniel
Very much agreed, I’m surprised this wasn’t on the list. I use it more than anything else for day-to-day development.
What does an embedded Linux developer do with Visual Studio 2010?
Regrets the loss.