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.
Yes TimeSnapper !!! Thanks a lot Jesse for this list of utilities.
Good list! Hey, have you tried WinMerge, another visual diff tool? I recommend it. http://winmerge.org/
Evernote “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.”
I completely agree! I didnt know about the location awareness aspect of the notes…that is so cool!
“Before We Begin
I assume you have (and use)
You are right. For 20 years I’ve been a hobbyist. Which is great, I love getting paid for my hobby.
“a 4 Quad Mac with 8 Meg of memory”
Wow, a whole 8Mb??? ;D
“I
I don’t think my brain can get used to 8 Gigabytes of memory, having lived through $1,000/meg. That would be $8,000,0000 worth of memory. For that matter, when I was at Citibank, my boss bought a 5 MB hard drive for $5,000 that was the size of a large hard cover book. I just bought a 16 Gig (that is, more than 3,000 times as much storage) for $49 in a mini-card the size of a stamp. We really do live in a s.f. world.
Great article Jesse, I used to have most of the tools on my list. The only one I haven’t heard about till now and I find very useful (also because it is free) is Mikago.
I was using TeamViewer & LogMeIn but for a quick use I find it way better.
Thanks again!
Wow!
You are really using Timesnapper to track hat you are doing.
Or what is the purpose of using Timesnapper?
To record hat you were doing there is another nice tool called RescueTime.
It knows which app you had running and gives you a nice weekly summary:
VS2010: 24h
Outook: 11h
IE: 1h
FireFox: 3h
…
Another good one is ManicTime, for which there is a free copy. This tool automatically tracks which apps you are running and tallies up the time spent. The best tool in this category is SphericalTech’s but they appear to be out of business (non-responsive website.)
@Steve
Didn’t have to read further then “Before we begin..” to get that point…
Kaspersky warned about this page:
31.08.2010 12:43:59 Denied: Trojan.JS.Redirector.cq http://aeaaea.com/ou//aeaaea Internet Explorer
Autocorrect iPhone to Windows Phone 7, seriously?
There is a free version of CodeRush and it’s name is CodeRush Xpress: devexpress.com/crx
Pretty sure those passwords are still at least halfway legible. Might want to blank them out completely rather than just pixellating them.
I didn’t read any further than #1. The fact that the #1 item a programmer might need only works on Visual Studio told me that reading any further was pointless.
@Leroy
I completely agree. Beyond Compare is the best diff/merge tool ever. I think there’s a little bias towards Microsoft-based products and workflows in this post, but a good list nonetheless.
@gorlok
Linux has the best development environments anyway.
No one tried Araxis Merge!! … I think it is beyond beyond compare. It has made code comparing and merging a pain free task.
@Akku. As for project management, that one I’ll leave to someone else though i’ve had good success with… aiii forgot the name, but they wrote “Rework”
Great suggestions, thanks. Task list, watch for a posting on the 10 utilities I use to keep myself organized
37 Signals is the firm you’re thinking of.
@Ariel Rivera
I officially owe you 2 clicks. 🙂
Great list of applications-to-have, especially for programmers. Thanks for sharing, Jesse.
I use most of the tools suggested. Feeling pretty cool……… Wow if i dont have the skills atleast i have the tools 😉
Hi Jesse,
Thanks a lot for including Mikogo in your essential tools list. Great to hear that you’re enjoying our remote desktop app!
Btw, we’re working on version 4 of the Mikogo software which will include greater features. When the time comes, we’ll announce this via Twitter, our blog and our newsletter – stay tuned 🙂
Regards
Andrew Donnelly
The Mikogo Team
Twitter: @Mikogo
I miss Phrase Express from that list. Seems to single-handedly make up for three from your list. Then Ankh-SVN does a better job indeed. Time Panic is a nice tool for time tracking. HeidiSQL is my favourite SQL database editor. Oh and did you try Team Viewer? Could go on for ever. Would like to know why you don’t mention a tasklist tool?
haha – great starting point to find out what people like, but… meh, I’ll stick to my emacs, valgrind, …
while we’re dwelling in nostalgia: my first experience with (MS)DOS was ok for the first hour – until I was trying to find out, how to re-configure, modify and understand the code.
You get the hint.
I agree that MS has learned a lot over the years. Having free tools available and allowing non-programmers to click through VB and make something reasonable, is a great accomplishment. I personally still would like to see a new, leaner CLR for you guys.
Otherwise: tools depend completely on where you work and what you have to do? I would say Intel Parallel Studio might be essential as is VTune for x86 and x64? these days? 😉
Yeah, change the title to “12 Absolutely and Insanely Essential Utilities For WINDOWS ONLY programmers”. Just wasted two clicks on you……
Great Post!
linqpad is no1 by miles 😉
Thanks for the mention of Fiddler, Jesse. (“Programming C#” was one of a number of books I had on my desk while developing it.)
One key feature in Fiddler that some developers find invaluable is the ability to create breakpoints in Fiddler to modify the outbound or inbound HTTP traffic. You can learn more about this and other features here: http://www.fiddler2.com/fiddler/help/video/default.asp
Also, some developers are big fans of FiddlerCap (www.fiddlercap.com) as it allows normal end-users to collect web traffic logs “from the field” for later analysis by the developers.
Nicey! Thanks for sharing!
@VictorP
As someday it may happen
That a programmer must be found
I’ve got a little list….
StickyNotes – Windows 7, great for quick memory dumps (i.e. mine)
SimpleTimer – Adobe Air app, tracks the amount of time spent on any project or task. A bit clunky for the UI, but at least it tracks the time right.
Great article! Small note: You’ve mixed up the spelling for Mikogo a couple of times and called it Mikago instead. Confused with Mikado? 😉
I add one more: Doxygen (http://www.stack.nl/~dimitri/doxygen/). Generating code documentation is a heavy task that becomes automatic with this wonderful tool.
Great list!
Like others have mentioned, you should try Beyond Compare.
Gr8 article, thanks a lot !!
Gr8 article , Thanks a lot for this list of utilities .. specially TimeSnapper, AutoHotKey & Evernote
When is your next c# book released? I am going to download the lates compiler (preferable the one for professionals even though I am using this to get into software engineering as entry / junior level). Do you have a link or webpage on just the debugger? Ch 9 of the last c# helpped alot and I even use it for C/C++.
Thank you
Damien
PS My law of Energy: “Energy is neither created nor destroyed: It is wasted, Over priced, and traded wastefully by the Entire Edison Company on the energy stock market”
+1 Beyond Compare – it’s truly beyond compare
+1 Evernote – I didn’t know it analyzed images like that !
Re: Mikago – what other tools did you compare it too ? It’s good to know so we can suggest otherwise if need be
Good post btw 🙂
Great list but would be cool if there are some tools for Linux platform :).
@SteelToad
Fiddler and Coderush links fixed, with apologies.
Wrong link for Fiddler
@Jesse Liberty
Thank you very much Jesse
I use Beyond Compare for the file diffs – new versions also allow excel side by side comparisons which are helpful.
For running NUnit Tests in the IDE I use TestDriven.Net. I like it better than the built in Test options from Code Rush and Resharper and it appears to be more accurate in terms of false test results.
Not a developer tool but Fences from Stardock. This is a great tool to organize your desktop. I also use object dock as well.
@Valdimir
Next videos will be a series on data validation and the series on MVVM. I’ll move MVVM up based on your note. Thanks!
@Bid
Can you help with a comparison of the two? Why is one note better? I love one note but last time i looked it didn’t run on macs or phones or the web .
Great collection. I would add T4 or CodeSmith to the list. If T4, then Tangible’s tools giving you intellisense. If CodeSmith than the studio version.
Believe what version of Visual Studio also matters. At least Professional edition is a must because of all the extras you get. There are a long list of extensions also that I use.
Agree that Resharper or CodeRush should be #1.
OneNote 2010 is surely better than Evernote.
You only need VirtualBox, so you can install Ubuntu (or your favorite Linux distro) on it, and you get a serious platform for development.
Jesse,
Nice article, First thing after getting into my pc i check ur website. Do you have second video release on MVVM (MVVM light) eagerly waiting. please post it sooner jessee, entire company is eagerly waiting for that video
Just want to tell you, I think you mistyped the hyperlink for Fiddler, but a great article nonetheless! 😀
Instead of VisualSVN I use AnkhSVN, it’s also free to use.
http://ankhsvn.open.collab.net/
I find it funny that the links for Resharper & CodeRush both point to the JetBrains website. Or was that the point 🙂