When I started my current position six months ago I was brought in to help with development of their new website application. Whether my boss knew it or not, that meant that I would be bringing a host of baggage with me. When I came I brought along of ideas and practices that were new to the development team. The usage of an IoC container (Windsor), ORM (NHibernate), a build server, unit-testing to name a few.
These tools and practices are often discussed both here on this blog and in the larger .NET blogosphere. Getting up to speed on them can surely be a daunting task. I’ve asked a lot of the guys I work with in terms of learning new tools and implementing better development practices. I wanted to take the opportunity to interview one of them and let him speak about his experience learning all of these ideas.
Chris is a developer with a few years of experience with .NET. His exposure and experience to the tools mentioned above begins six months ago, when I joined the team. He approaches development as a student and one of the things I appreciate about him is his openness to the ideas I’m bringing to the table.
I asked Chris to answer a few questions about his experiences over the last few months. The goal is to give some of you some insight into one developer’s journey to writing better software.
What has been the biggest change?
The biggest change is probably the learning curve that was involved in the new software, for example, using Subversion instead of Visual Source Safe. I had to learn new software, but once I felt comfortable in Subversion I realized that I really like it; unlike Visual Source Safe, which was a pain. I always treated it as a necessary evil.
Has it been difficult?
Some of it has been. Things like trying to figure out why NHibernate mappings are failing and why Windsor can't resolve a type. These are just things that you have to practice and familiarize yourself with to understand how they can break. It can get frustrating at times.
What's been the hardest part?
The hardest part is sticking with it and not going back to the "old ways". There have been times where I was puzzled with some unit tests and mocking and wanted to just give up; it seemed like the best option. More than once I asked myself, "Why do we have to do all this all at once?!?!" When that happens, I just step back, calm myself down and try again. There is always a solution, it just might take some time to figure out why I'm doing it wrong and fix it. Once fixed, it's great and I'm glad I didn't give up. If you're learning several new techniques and patterns at the same time, they can pile up and begin to overwhelm you. Patience is the best medicine in that case.
What's been the easiest, if anything?
I'm always amazed how much easier it is to integrate with other colleagues' code. Pulling a latest version from source safe and compiling, then pushing the code manually to the test server was a pain and caused countless headaches and stress. Not only the continuous integration, but the concepts promoting better abstraction really lend themselves to working with each other, not against each other.
Do you feel like this is the correct path? In other words are you writing better applications?
I think this path is very conducive to writing better code. It's visible by the unit tests and code coverage. To me these are readily identifiable measurements to the quality of the code. I know code coverage can be 100% even on bad code, but confidence in my tests creates confidence in my code overall. I now have little confidence in code without unit tests.
Any advice to someone who is reading this article?
I have a personal trait to never accept anything as a good enough answer. This is sometimes a good, and sometimes a bad trait of mine. I think in this aspect, development, it's a good thing. For instance, you could be comfortable with drag-and-drop web forms controls, they work. Are they the best way to build web applications? One could argue for them, but I would argue a resounding no. There are a lot of solutions to problems out there and just because you know it as the best approach, doesn't necessarily mean it is the best. Do some research; learn some new techniques and you'll surprise yourself how many great ideas there are out there.
I want to thank Chris for sharing his experiences here on this blog. You can check out Chris' blog at http://www.dumpsterdoggy.com.