Welcome to our continuing series of Code Project interviews in which we talk
to developers about their backgrounds, projects, interests and pet peeves. In
this installment we meet Howard Dierking. Howard served as steward and Editor in Chief of MSDN Magazine for several years and now works on the ASP.NET team at Microsoft.
Who are you?
I'm Howard Dierking and I work as a Program Manager in the Web tools group which includes products like ASP.NET MVC and Web API. Specifically, my focus is on Web API along with some cross-product concerns like security and cloud experience. I also enjoy speaking and blogging on distributed architecture topics like REST and complex event processing (CEP). I work at Microsoft's main campus in Redmond, WA, and live just east of the campus.
What do you do?
I started with Microsoft about 5 years ago at Microsoft Learning, where I worked as the planner for developer certifications. It was actually a pretty funny interview because, at the time, I had 0 certifications. The interviewer (the guy who would become my future boss) asked me, "do you think it's a little odd that you want to run a program in which you have never participated?"
My response was simple: "I've never found a ton of value in having a certification in my own experience. I'm happy to tell you why that is and help you change the program such that others won't come to that same conclusion."
Apparently that response touched the right nerve because I got the job and spent the next year planning and creating exams and certifications. I'm not naïve enough to think that we perfected the program, but I like to think that we improved things.
After the developer certification program, I joined MSDN Magazine, where I spent the next 2 years as Editor-in-Chief. To date, this has probably been my favorite job at Microsoft. I was able to have a hand in every aspect of the magazine's creation, from content acquisition and author relationship management, to editorial responsibilities, to writing the monthly editor's note, to regularly speaking with readers and advertisers about the magazine. Most importantly, for the first time in my career, my deliverable was something that I could show to my mom and she would understand what it was.
After the magazine, I stayed at MSDN and moved over to the platform side of the world where I drove a bunch of features related to the MSDN and TechNet Web sites as well as drove the early thinking, planning and prototyping for a new CMS effort. In that time, I also created the MSDN Magazine Pivot viewer, bringing together my love of business intelligence and data visualization with my knowledge of MSDN Magazine content.
I then transitioned over to the Web API team to work with longtime friend (from Microsoft Learning) Glenn Block.
Program Manager is job description that I've heard best described as "filling in the whitespace". Put another way, dev's job is to write code, test's job is to test code, and PM's job is to fill in everywhere else. As such, I don't have a lot of consistency from day to day relative to other jobs. That said, I try to divide my day into the high-level chunks of project management, interacting with customers (via blog, Codeplex and so on) and prototyping. Naturally, there's a lot that tries to get in the way of that structure, but that's the idea anyway.
We're currently driving towards our first release in the spring of 2012, but we've already released several preview versions on Codeplex and Nuget — see the WCF site on Codeplex for more information.
What is your development environment?
It seems like at work, I do almost everything on my laptop and use my desktop to basically host VMs of non-released environments. My laptop is a Lenovo 510w with 8gb RAM and an SSD — it's a beast and I love it.
I do most of my development in C# and as such spend most of my time in Visual Studio 2010. That said, I don't think that I could survive my time in Visual Studio without ReSharper.
Other frameworks that I tend to use in almost every project are the MSpec context specification framework, Castle Windsor (though more recently, I've been using Ninject) for IoC, and NHibernate for ORM.
In addition to .NET based development, I've taken a recent interest to Erlang, particularly for my research into complex event processing. For that, I'm just using the out-of-the box Erlang console.
What new tools, languages or frameworks interest you?
Like I mentioned, I've been learning Erlang to further my research interests in CEP. I also have a list of things (some tech, some patterns, some other) I want to explore including neo4j, CQRS, Node.js, and CoffeeScript. I'm also very interested in audio production and so I spend a fair amount of time sharpening my skills in ProTools (in fact, I just got ProTools 9 and will soon be upgrading to 10).
What is your coding pet peeve?
I tend to get annoyed by coding styles that make for more verbose code. I don't fancy myself as one of those C guys who things that the entire program should be on one line, but I also think it's a little ridiculous when every brace requires its own line and every local member reference needs "this" in front of it. Maybe that helps some people read the code better — it just reads like unnecessary language ceremony to me.
I also tend to see designs that make extensive use of inheritance as a smell in that generally – though not always – such designs end of violating principles (such as the single responsibility principle) that I care about. Not to mention, they end up being nearly impossible to unit test.
How did you get started programming?
I got started in a 5th grade summer computer camp at my school. We were programming in BASIC and also learning our way around DOS (though I don't remember what version). My first "program" was a password application that I proceeded to install in autoexec.bat on all of the computers in the upper school computer lab. Needless to say, nobody was very happy about the fruits of my labor — but nobody thought to blame a 5th grader. It felt ... awesome.
How has the developer community influenced your coding?
Public forums were probably the most influential online community for me as I was starting out. These days, though I actively use Twitter, the role that forums once held has been filled largely by emails to contacts that I've made over the years in various subject areas.
That said, I think that sites like StackOverflow bring together the best of the old forums along with many new cool capabilities, and I wouldn't be surprised to find myself spending more and more time in communities like that as time goes on.
What advice would you offer to an up-and-coming programmer?
There's lots of dogma out there — and it's easy to get caught up in doing things one way or another just because someone that you respect does them that way. Don't fall into that trap. I'm not trying to say that those people you respect are not promoting good practices or tools — just that if you follow them blindly, you're doing so without actually understanding the problems that they are trying to solve, and as such, the tradeoffs that they were willing to accept for the benefits that they gained.
On a somewhat related note, don't pursue architectural choices in the name of *abilities (scalability, reliability, perf, etc.) that you can't test; figure out how to measure before you figure out how to implement your design.
When I got married, my uncle gave me this sage piece of wisdom that I think is applicable here: "remember that 99% of the advice you will get is good advice, but only 50% of it is relevant."