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 Phil Haack, self-described “megalomaniacal software developer with delusions of… well, uh, just delusions.” Read on more to learn about these delusions and what they mean for coders today.
Who are you?
My name is Phil Haack. My last name is pronounced "hack" which describes what I like to do: chop wood. And code.
I live in the great city of Bellevue, Washington, 2 miles from Microsoft. By day I work at Microsoft as a Senior Program Manager with the ASP.NET team. By night, I continue to work as a PM with the ASP.NET team, once I put my kids to bed for the night.
I'm passionate about all sorts of technology, as well as how people interact with technology and each other through technology. I'm also passionate about open source software as a means of developers collaborating and sharing ideas around the world. I'm not so passionate about ciabattas. I think they're just okay.
What do you do?
Until recently, my primary responsibilities at Microsoft included ASP.NET MVC and the NuGet package manager.
ASP.NET MVC is a framework for developing web applications that emphasizes separation of concerns and writing testable maintainable code. It's an alternative approach to writing web applications than Web Forms. The source code for ASP.NET MVC is available under the MS-PL license, an OSI certified open source license.
NuGet is a package manager that both integrates with Visual Studio, but is also usable outside of VS. It's a relatively new project (under a year), but we're already at 2.5 million package downloads and 3,400 unique packages. It makes it easy for developers to share libraries with each other as well as for Microsoft to distribute its own libraries. The great thing about NuGet is it's open source and accepts external contributions.
I've also worked on ASP.NET Routing, the updated standards-based Menu control in ASP.NET 4, Data Annotations, and Simple Membership for ASP.NET Web Pages and probably a few other things that I either can't remember, or don't want to be blamed for.
Pretty much my role was to try and make sure we shipped these products I was responsible for on schedule. I worked with the developers and testers to define a design and schedule for the product. I worked with lawyers to do lawyerly stuff that inevitable involved reading tomes of legalese, but resulted in shipping products under a brief EULA and the source code under an open source license.
I also traveled to conferences to speak about the technologies my team built. That was a lot of fun for me as it provides an opportunity to rub elbows with customers. It's an odd custom, for sure, rubbing elbows. The productive part comes from the discussion and the elbow rubbing seems counterproductive to that. But I try to fit in.
In the end, I just tried to make sure nothing falls through the cracks. And when stuff inevitably did, I tried and cover it up and point a finger at the next guy.
I recently joined the team at GitHub where my title is — believe it or not — "Windows Badass." I'm a big fan of the way GitHub has made open source programming accessible to programmers of all stripes, and my plan is to help GitHub appeal to more developers who code for Windows and the .NET platform. How that all works is part of my current adventure and you can read more about it in my blog post about the job.
What is your development environment?
As a PM, my primary responsibility wasn't coding. The developers joked that my IDE was Outlook, but I also wrote code in PowerPoint and in the browser on our wiki. So there!
Actually though, I have been writing a lot of code for the NuGet Gallery website. It's been a lot of fun because the gallery runs on ASP.NET MVC. It's really eye opening to use your own product to build a production website. I think the experience will help provide insight into what we need to do to make ASP.NET MVC 4 and 5 great!
When I do code, I use Visual Studio 2010 on my Dell Latitude E6410. When I'm in the office, I switch to my desktop which I don't actually remember what it is right now. I think it's a dual or quad hamster powered machine or something.
For unit testing, I use xUnit and run my tests using TestDriven.net.
I've been getting really cool results with Knockout.js and SignalR lately. Those have been fun to use. If I had infinite free time, I'd want to explore Node, Ruby, Clojure some more.
What is your coding pet peeve?
Untested code. Submitting code you haven't tried really gets on my nerves. Also, being overly inflexible about crap that doesn't matter. Allman? Sure. K&R? Fine with me. Doesn't really matter in the end, as long as you're consistent in a single code base. If you're flexible, you'll learn to be fine with either. Though I draw the line at tabs over spaces. Use spaces for indentation. I won't be flexible on that point.
How did you get started programming?
My first computer was a TRS–80 Color Computer. I was a young kid at the time, maybe five or six, I can't remember. My dad and I would take turns entering line after line of BASIC code from books that we bought. Then we'd spend hours double checking all of our typos since each program ended with pages of binary data you had to type in by hand and couldn't easily debug.
At the end, we had this silly driving game. It was a blast!
From that point on, I dabbled in programming here and there, but was more interested in playing computer games. I wrote some silly programs, but it wasn't till college that I got more into it by taking a C class. Then I got really serious when I graduated with a Math degree and a large amount of student loans to pay back.
The usual path for folks like me then was to go straight to graduate school and study some esoteric area of mathematics that nobody cared about. I decided I'd take one year to work and make some money before applying to grad school. 14 years later I'm still working.
The first language I used professionally was VBScript in classic ASP, not long after it came out. I'm pretty sure I'm responsible for a ton of spaghetti making at that time.
My coding has been influenced in mostly positive ways from the developer community. It's where I first learned about SOLID principles, dependency injection, unit testing, etc. And hearing about these things from the community led me to study up and practice these things on my own. It's a continuous learning path and I'm still on it.
What!? Are you kidding? I like everything about the developer community. I think the only thing I dislike is probably something that applies to any community. Inflexibility. I'm a bit bothered when folks can't possibly imagine a context where their way might not be the best way. As if their way applies to every possible context.
I'm pretty active on Twitter, StackOverflow, and Github as well as my blog. Those are great ways to engage the larger development community and show off my stupidity.
What advice would you offer to an up-and-coming programmer?
Keep an open mind. Don't wrap your identity in your technology stack. We're all developers and it's good to share ideas more broadly than fight pointless religious wars about technology stacks. Also, learn to communicate effectively and write well. That'll take you a long way.