Archive for December, 2008
A lot of people who know me knows that I use a bunch of productivity tools (I’ve blogged about many of them several times). I still hear all sorts of comments on why NOT to use tools like that. I haven’t bought into any of those arguments, and probably won’t. 🙂
Here’s one of the ways I look at it:
I hire some guy to do some work at my house. I want the work to be done quickly and with quality. Part of the work involves loosening and tightening up a bunch of screws, but that’s not the core of it. I see the guy using a regular screwdriver. It’s obvious the the work is going to take a lot longer; using a power driver would make it a lot faster. All I know is that the next time I won’t hire this guy.
What does that have to do with software development? Well, if I were to hire some company to write software for me, I’d like to go see how their developers work. If I see them building software without using any “power tools”, I’ll have a tendency to think they aren’t going to be productive working on my product, so I would be an unhappy customer.
Let’s take a Visual Studio power tool as an example: it could be either CodeRush/RefactorPro, ReSharper, or any other similar tool. I hear the following comments from people not willing to use something like that:
- It is not free!
At PDC, DevExpress/Microsoft announced CodeRush Xpress for C#, which is free. It’s a subset of the features available in the commercial version, but still, it gives you a lot more than what you get from VS out of the box.
Regardless, those tools cost something like 250 bucks. That gets paid off real quick for a developer that uses the tool effectively. If I worked tightening up screws, I’d buy a power driver in a heart beat.
- It gets in my way!
Like any other tool (such as a power driver), one must learn it in other to use it. Some of these tools try to predict your next move, and it’ll take action for you (like moving the caret – the blinking cursor – to the place you’re likely to go next). Of course, not knowing about this behavior, one may start to struggle with the tool, defeating its purpose.
My suggestion is: take the time to learn it! But don’t do it all at once. Try learning one thing a day, or a couple every week, and make sure you use the things you’ve learned. You’ll get to a point where you’ll do things without even thinking about, which is great because it allows you to concentrate on the task at hand (say, create a Customer class), as opposed to thinking (type “public class Customer”, press enter here, move the caret there, don’t forget the braces, etc.).
- I won’t use it because sometimes I work at a machine that doesn’t have it
Yes, I know, it sucks when you use these kind of tools and have to sit at a machine that doesn’t have it. I know I feel like that. Am I totally unable to work in such a situation? Definitely not; I’ll just have to work slower than I do in my normal environment, and that’s fine.
With that being said, here’s something that has happened to me many times before: if I have to sit at somebody else’s machine for a long period (say a day, or a week…), and the machine doesn’t have the tools I use, I’ll just tell the owner: “hey, I use a bunch of tools in my regular environment that allow me to be more productive. Do you mind if I install them on your machine? Some of them are free, and the commercial ones have trial versions. As I use them, I’ll explain to you how they help me save precious time; before leaving, I’ll remove all of them, unless you tell me not to because you’d like to play with them yourself.”
A lot of people who I’ve done that with ended up embracing the same tools I use and they thank me for having brought that up.
Part of my work duties include mentoring developers and general consulting. Say I didn’t use any tools and I get to a client who happens to use them. The client sees me being unproductive on her machine, spending her time, and probably thinking “why have I hired this bozo? He’s supposed to save me time; not to waste it…”. I can’t tell you how good I feel when I come out of a client and they tell me a lot has been accomplished while I was there.
Just finalize this though, my common answer to the “I won’t use it because sometimes I work at a machine that doesn’t have those tools” is: Well, that’s like working at the 102nd floor of the Empire State Building and taking the stairs up and down every day, just because “sometimes I go to buildings that don’t have an elevator”. Of course, that may suit you just fine (that is, if you’re King Kong!).
I’m glad to see that Visual Studio 2010 is going to get a couple of features available in tools such as CodeRush/RefactorPro and ReSharper, such as features that makes code navigation easier, as well as features to better enable developers who practice Test-Driven Development. You can read more about that here, and there’s also a video showing off these features here.
I while ago I’ve run across this post by Ayende regarding performance implications when creating objects. I’ve decided to play with his sample code in order to learn some of his techniques regarding IL generation and DynamicMethod. I’ve also found this post by Roger Alsing, which adds another variation to Ayende’s original post. Please, read both posts before reading the rest of mine.
When I was messing with that, I’ve adjusted the samples just to get the benchmark results more easily, so that it displays like this:
I’ve also refactored the sample code just to make it easier for me to try out different approaches (like Roger’s approach using Expression Trees), plug in the benchmark logger, etc.
If you’re interested, you can download a solution containing the full sample code here, so you can try it out yourself.
I’ve just posted the material from my presentation yesterday at the MDC Houston. It can be downloaded here. The presentation covered the new DataGrid control released with the WPF Toolkit, as well as the new Ribbon control (release as a CTP at this point), and a glimpse at some improvements on VS 2010 regarding wiring up data binding.
Thanks to everybody who attended to my session.
The event was fun, and they even had a RockBand kit there, so of course I had to jam a little bit at some point. 🙂
After some back and forth, it’s been confirmed I’ll be speaking at the MDC (Microsoft Developers Conference) in Houston next Tuesday (Dec 9). This event is a regional rerun of core presentations from the PDC 08. I’ll giving this talk:
Developing Data-Centric Applications Using the WPF DataGrid and Ribbon Controls
Business apps live on data. In this demo-focused talk, we’ll show how we’ve made building data-centric business applications in WPF easier with the new DataGrid, Ribbon, and Calendar/DatePicker controls. As we build the application, we’ll also give you a sneak peek at how building data-bound apps will be significantly easier in Visual Studio 2010.
If you come to the event, stop by and say hi! 🙂
It was fun doing the presentation last night, but boy, there’s a lot of ground to cover. I tried to focus mostly on key concepts such as dependency injection, containers, the presentation patterns, etc., and couldn’t get much into code, other than showing some syntax.
I think I could have gone a different way and built a very small app from scratch, but doing it that way, I wouldn’t be able to cover more of the bigger picture, so the attendees could know what’s actually there. Fortunately, the Prism team has done a pretty good job at documenting things, creating quick starts, reference implementation, etc., so I’m pretty sure people can dive on their own into more details after seeing the big picture last night. 🙂
You can download the slides here. A big thank you goes to Brian Noyes, who was very kind providing this material to me; otherwise, I wouldn’t have had time to put material together for this presentation.
You can learn more about Prism in the latest CoDe issue.
I’m pretty much done reviewing the material for tonight’s presentation. The more I mess with WPF/Prism, the more I like it. Granted, there’s the learning curve and all, but I believe it got easier than it was in the past.
I’m prepared to do a 1:40hs presentation, but that may stretch up to 2hs!! 🙂
I’m also planning on blogging more about this topic, since I’ve been working with these things over the last few months. Just have to find time to collect my thoughts and write it down. 🙂