As a professional software developer the vast majority of my experience has been working on C#.NET WinForm applications. I started using .NET shortly before the 1.0 framework was released. I can’t remember if I ever did .NET development under Windows 2000; I generally use Windows XP. If you’re wondering why I don’t use Vista I have to assume that you’ve never tried Vista yourself. It’s not good. I’m waiting for Windows 7 and hoping for the best.
The tools that I use for C#.NET are pretty standard:
- Microsoft Visual Studio 2008 (with ReSharper)
- SQL Server Management Studio
- .NET Memory Profiler to chase down memory leaks
- AQtime to help locate performance problems
- Outlook and Skype to stay connected to coworkers
- Team Foundation Server (TFS) for tracking work items and for version control
- cygwin to make the command line in Windows behave somewhat normally

The one thing that is sorta strange about how I do my C#.NET work is that I do everything on a Mac Pro with XP running in VMWare Fusion. I’ve had a similar setup at home for a couple of years but I’ve only had this setup at work since January.
There are definitely a few quirks that I had to get used to, working in Windows running in a VM on OS X. But the benefits of this setup far outweigh any inconvenience. The ability to take snapshots of the entire VM is awesome! If a program screws with my registry and Windows starts acting funky I just roll back to the last snapshot!
The other huge benefit to working in VMWare is memory. Unless you’re using 64-bit Windows (which can be problematic for many reasons) you are limited to 2 GB of memory. Windows sucks at managing virtual memory so I always try to keep my open applications below that 2 GB limit. Since my Mac has 12 GB of memory, if I need to do something else, I can just boot up a second VM.
Most of the software that I’ve written for OS X has been personal projects. Nothing fancy, just various tools to scratch some itch. Since getting my iPhone I’ve been doing more work in Objective-C and Cocoa.
Because I’ve done so much work with managed and interpreted languages, it feels a little weird to work in unmanaged C/ObjC. But it is kinda cool too. Objective-C is a fairly simple language and Cocoa is a very nice framework. There are some things that I don’t like about Obj-C (not having namespaces and gimpy string manipulation come immediately to mind) but I really appreciate being able to actually use Cocoa controls for UI work. It is almost unthinkable to do GUI development for Windows without buying a set of third-party controls.
My must-have software for writing Mac/iPhone applications:
- XCode and Interface Builder
- Instruments
- MacPorts to install all of the software that is missing from the base OS X install
- Mail.app, Syrinx, Adium and Colloquy to keep in touch with other developers

And finally, a few additional pieces of software that are invaluable to me. These are helpful regardless of what type of software I am writing.
- OmniFocus to help me Get Things Done
- git for source control (don’t tell anyone but I keep my TFS repositories checked into git too)
- Terminal.app for a whole bunch of things
- PathFinder because Finder doesn’t always cut it
- GeekTool to keep an eye on logs
- vim
- screen
- Photoshop
- iTunes to help keep me in The Zone!