Printer Friendly Version      Send     
Click to Rate and Give Feedback
Related Articles
This article presents an overview of the motivation behind new techniques that decompose problems into independent pieces for optimal use of parallel programming.

By David Callahan (October 2008)
We take a look at planned support for parallel programming for both managed and native code in the next version of Visual Studio.

By Stephen Toub and Hazim Shafi (October 2008)
Here we describe some of the more common challenges to concurrent programming and present advice for coping with them in your software.

By Joe Duffy (October 2008)
Here is an ASP.NET AJAX data-driven Web application that takes the best features from server- and client-side programming to deliver an efficient, user-friendly experience.

By Bertrand Le Roy (October 2008)
More ...
Popular Articles
Kenny Kerr sings the praises of the new Visual C++ 2008 Feature Pack, which brings modern conveniences to Visual C++.

By Kenny Kerr (May 2008)
This article presents an overview of the motivation behind new techniques that decompose problems into independent pieces for optimal use of parallel programming.

By David Callahan (October 2008)
ADO.NET Data Services provide Web-accessible endpoints that allow you to filter, sort, shape, and page data without having to build that functionality yourself.

By Shawn Wildermuth (September 2008)
If you're unfamiliar with Windows Presentation Foundation (WPF), building that first Silverlight custom control can be a daunting experience. This article walks through the process.

By Jeff Prosise (August 2008)
More ...
Read the Blog
Well designed code keeps things that have to change together as close together in the code as possible and allows unrelated things in the code to change independently, while minimizing duplication in the code. In the October 2008 issue of MSDN Magazine, Jeremy Miller shows you some design ...
Read more!
The process for ink capture and analysis on the Tablet PC is straightforward in managed code. To the uninitiated developer, however, creating unmanaged Tablet PC applications can be rather daunting. In the October 2008 issue of MSDN Magazine, Gus Class a quick introduction to the Tablet PC ...
Read more!
Multicore systems are becoming increasingly prevalent, but the majority of software today will not automatically take advantage of this additional processing ability. And multithreaded programming, for anything but the most trivial of systems, is incredibly difficult and error prone today. In the October 2008 issue of MSDN ...
Read more!
Concurrent programming is notoriously difficult, even for experts. You have all of the correctness and security challenges of sequential programs plus all of the difficulties of parallelism and concurrent access to shared resources. In the October 2008 issue of MSDN Magazine, David Callahan describes ...
Read more!
A major advantage of AJAX and Silverlight applications is that they can transparently and continuously interact with a back-end service. The problem is that they run over HTTP, which wasn't designed with security in mind. In the September 2008 issue of MSDN Magazine, Dino Esposito shows you ...
Read more!
Unhandled exception processing shouldn't be a mystery. It's actually quite useful since it gives a crashing application an opportunity to perform last-minute diagnostic logging about what went wrong. In the September 2008 issue of MSDN Magazine, Gaurav Khanna discusses how ...
Read more!
More ...
{ End Bracket }
Passion for the Craft
Scott Hanselman


A recent discussion in the blogosphere stirred my interest more than usual. The term "5:01 Developer" was used disparagingly to refer to a kind of developer who basically turns off his brain at 5:01 P.M. and heads home. Many developers took umbrage at this term and began to defend their positions by declaring how many hours per day they work. Others suggested terms like "uninspired developers," and there were those who rejected labels of any kind.
To me, the label "5:01 Developer" has nothing to do with time on the job or hours logged. It refers to the lack of passion. Labels or not, I believe that to really excel in the field of software—or any field, for that matter—requires a high degree of passion/inspiration/concern/commitment/enthusiasm/excitement. Your job might involve turning a crank or designing a great new crank that will take the world by storm, but if you want to succeed—whether you're compared to your peers or not—then passion can go a long way.
I'm lousy with wood. Seriously, I'm not handy. If I attempted to use a power saw, I would very likely hurt myself. More importantly, I have no passion for woodworking. I enjoy looking at other people's work and can appreciate the effort to a point, but if I were forced to make my living creating things with wood, I'd certainly be punching out at 5:01. This lack of satisfaction creates the anti-craftsman, who is just slapping two pieces of wood together and hoping the chair won't break. And a sense of craftsmanship is just as important as passion for a job. There's a big difference in semantics between the word "job" and the word "craft." Craftspeople begin as apprentices, learning alongside a master, working their way through as journeymen. When software is built by a craftsman—a person with passion, talent, and a sense of stewardship—you can tell right away. A software steward takes personal responsibility for another person's affairs; in the case of software, this is the user's experience from install to run.
I posted my thoughts on this topic on my blog, and, as is common on blogs, the real gems were not in my own post but in the comments of others. Max Pool nailed it immediately when he said:
Some people, when asked what they do for a living, say, "I AM a software developer," and proudly interlace their persona with their career. This simple reply tells a lot about the amount of passion that someone carries with them every day.
Paul Brazelton shared his thoughts on balance:
I'm a father, a runner, a rower, an environmentalist, a human being, and, yes, a programmer. I'm a lifelong learner, and I love to learn everything, not just programming languages. I love technology, but there are so many other things in this world to love, and we have such a short amount of time.
Clearly, passion, craftsmanship, and stewardship should be part of a larger work ethic for any software engineer (or tester, or manager). Sometimes folks blame their lack of passion on the number of years on the job, or the kind of work, or the quality of the tools. Undoubtedly, when the tools get in the way, the work suffers. I'm particularly excited about software right now because it's becoming easier and easier to get more done faster than before.
I think what keeps things fresh for me when working as a developer are the choices. Not only is there always something new coming out, but there's always better techniques, new thinking, even new people exploring classic technologies. In the coming months, I'm going to dig into IronRuby and the flood of new Dynamic Languages being enabled by the CLR. I'm going to look at Model-View-Controller (MVC) Web Frameworks running on ASP.NET and at code generation tools to create whole administration sites auto-magically. I'm creating games for my Xbox® and plug-ins for my Media Center. I'm even going to hack my old Ceiva Digital Picture Frame if it kills me. Of course, all this work will happen after work. Does it make me a better developer or just obsessed? Probably a little of both.
Can this kind of passion (or obsession) be taught? Should it be? I don't know if I'm a craftsman or just a geek. I do know that I'm still having fun, but I still take pride in my work, and I'm learning something new every day. If you don't have a passion for your craft, why are you doing it? I can't imagine walking into my job every day and not finding something to like about it. The basic question is do you care about your craft? Perhaps not about your job, but at least about your craft. James Curran feels this pain:
As a 5:01 Coder, I must protest—I am passionate about my CRAFT, just not about my DAY JOB. (My train ride home is spent on a laptop, working on an open-source project.)
Ultimately it's about finding your passion—and figuring out how to keep it.


Scott Hanselman works for the Developer Division of Microsoft as the DevDiv Community Liaison and aims to spread good information about developing software in any way he can. He blogs at www.hanselman.com, podcasts at www.hanselminutes.com, and contributes to www.asp.net.

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; reproduction in part or in whole without permission is prohibited.
Page view tracker