Every one of us has a set of tools we use. They tell a lot about us - where we are right now, where we were yesterday and where we’re going tomorrow. Let me talk shortly about my choices.
At the current point, I am primarily a .Net developer, my professional work in the past several years has been in that ecosystem as a software engineer. I mostly enjoy creating applications and working on the architecture and logic, unbound to the media the application will be consumed through. Still, I’m mostly tied to web applications, so the toolset I will talk about will reflect that fact.
Being a developer in a .Net world is a bit ambiguous thing today, because it means one could be doing anything from Windows and Web Forms, ASP.Net MVC, to the Silverlight or WPF. Also, one can use pure Microsoft stack, or can look around what’s out there in the community space. I’m the latter one, building on top of the MVC, but reaching for better tools when available.
The liberal ASP.Net web stack
The basic application stack I use consists of the ASP.Net MVC framework, powered by the great S#arp Architecture application framework on top of it. For the data access, I use NHibernate + Fluent NHibernate combo, and for the view engine there is a brilliant Spark View Engine that makes working on HTML a real joy, with jQuery powering my client-side.
Even with the new Razor view engine, Spark is still a much cleaner experience and less mixing of code and markup. That should be the goal of a good view engine, and as much as Razor is a great improvement over the WebForms view engine, Spark still has the edge here.
Although NHibernate makes it indifferent, the standard database I use is Sql Server. In its several flavors, from CE, over the Express edition to the fully featured Sql Server editions, it covers many different needs. Sql Server has really grown into an excellent piece of database software over the years, with great tools around it (yes, Oracle, I’m looking at you!).
I actually like to dive into SQL when needed, nevermind if it’s Sql Server, Oracle, PostgreSql or MySql... Let’s just keep it standard.
As for the testing tools, this is the area I’m still exploring. Currently I’m at the xUnit for unit tests, and SpecFlow for BDD-style testing, and Rhino Mocks (but looking into trying something simpler like FakeItEasy). Still missing the nice out-of-the-box automation of Rails testing directly from the command line and through the interpreter, though. Too much overhead to set everything up in .Net.
For the working environment, I use Visual Studio IDE and Sql Server Management studio, but also kinda like the new WebMatrix for quick web stuff. There are also light text editors like Notepad++ or Geany lying around. For Rails development, I use virtual machine with a Linux environment (currently Mint 10), and Geany as the editor.
For the VCS, I used to work with Subversion, but I’ve switched over to Git around summer 2010, and really never looked back. Even for a .Net development environment, Git is a really nice experience with the tools available today (will write about the tools, and reasons to switch soon).
I’ve had a chance to see Microsoft’s TFS, but no, thank you. It may be a nice corporate product lifecycle management tool (with all the corporate maintenance overhead included), but for the VCS it’s years behind the open source solutions.
And about the servers - in production, I’m running a Windows Server, and there is one Debian machine used as a file server and a repository server with some internal tools like DokuWiki and Trac. So, I can say there is one truly diverse environment around me.
Choosing your tools thoughtfully, and being ready to replace them when a more productive tool comes around is the key to self-improvement and the value provided through increased productivity.