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
#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
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.
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.
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@example.com (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:
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.
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).
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.
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.
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.
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.