DadHacker has a most excellent post about the
joys fun greatness use of makefiles and buildscripts. Most of what I do nowadays is in the wonderful and mysterious land of C++, so this article is DadHacker reaching into my chest and plucking on my geeky heart strings, strumming my pain with his fingers and singing my life with his song. It’s very much a great read.
There’s honestly too many parallels between his article and my work here for me not to think he sat over my shoulder and used me as a guinea pig. The builds that succeed but then report broken (those are my favorite emails), touching common structures/headers (I’m looking at you, Shared), build time escalation (here we just threw more hardware at it… my old machine would take 1-3 hours for a full build, the current one takes 30 min to an hour). It’s all there. And if you happen to use Visual Studio to manage all your builds, you might be using MSBuild, NMake, or none of the above. MS even removed the option at one point to export solutions into makefiles (I think in 2003? 2005?), so for consistency’s sake you end up calling devenv.exe from the command line and the do builds using the solutions themselves. C# helps some, but Visual Studio in its infinite wisdom likes to build all the managed code every time even if you didn’t touch it. It makes me miss Java and Eclipse, if it weren’t for that damn classpath (mmm… being able to just change things in the debugger and getting no complaints… stupid mixed-mode).
What do people in “sane” languages/environments (cough cough Kyle cough cough) do about this stuff? Some days I feel like I’m living in the “programmers eat each other here” part of the map. I had to add a default parameter recently to a pure virtual function, and my eyeballs started to bleed.
I stumbled upon this Coding Horror post today which included a video that really intrigued me. Not so much from a “holy crap, I’ve never heard this before” perspective, but more of a “wow, finally some science to help middle management.” I hope that people who are in leadership situations think about these sorts of questions more often than they do. It has some interesting connotations when it comes to OSS, too.
I showed this to my buddy Spence, who had a good point to make — most of the incentives they talk about in the video assume that you’ve taken care of the basic need of “I am doing what I want to do.” I can try to be more purpose driven/self structured/masterful all I want, but if I’m doing something I don’t like doing I won’t have enough base motivation to get there.
Hooray for the new location! It even comes with a fresh pine scent and clean carpets. Hopefully I’ll keep from breaking anything so I can get my security deposit back.
Kudoes to WordPress.com… even though this is hosted, most of the configurable fanciness is still available. I just needed to pick a new theme, and everything else I was able to just move over. Woo!
Today I want to talk about the difference between going to the bathroom and causing armageddon.
Take this Visual Studio build menu. I use it all the time. It has some pretty options:
- Build Solution: build any updated code in this solution
- Rebuild Solution: completely clean all my built code and rebuild my solution
- Clean Solution: completely clean all my built code
Replace Solution with [subproject name] and you get the rest of the options. An important thing to note here, too is that none of these options come with confirmations — I click, and it happens.
This menu is a horrible, horrible thing because it places two options which vary greatly in their impact right next to each other: “build” and “rebuild/clean”. I use “build” all the time — I update some code, and I need to build the project so I can test. It’s nice and helpful that it comes with a keyboard shortcut. No real difficulty here. Well, what if I’m only working in a subproject and don’t need to go through the full build script? Well, there’s no keyboard shortcut for that (I might be able to define one, and I haven’t looked, but the principle is still the same), so I need to click the menu option. That’s no biggie. Wait. I misclicked on “rebuild”. Oh, I’m still good, it’s only going to rebuild my project. Phew. Wait. What are you doing? Why are you cleaning everything? What the hell is going on? CTRL-BREAK! CTRL-BREAK!
See, the glory of this menu is the other option: the “Project Only ->” submenu. If I click “rebuild” or “clean” on the sideproject that’s displayed, Visual Studio goesand will rebuild/clean not only the project itself, but all of its dependencies. If you have a lot of shared code (like the solution I’m working on does), it all gets blown away and rebuilt. If I want to rebuild only the project I’m in, I have to use the “Project Only” menu. This misclick can cost me anywhere from one to three hours of my day (depending on how long it takes to build everything from the ground up, or how quickly I can mash CTRL-BREAK).
In a fit of rage after doing this again about 20 minutes ago, I likened this menu to putting a “launch nuclear weapons” button right next to the “flush the toilet” button. I flush the toilet all the time. I’d imagine other people who use the same restroom as I enjoy the fact that I don’t leave the toilet unflushed. I don’t, however, want to cause global thermonuclear war. And even if I accidentally pressed the button, I’d expect to be asked again, just to make sure I really wanted to end the human race.
Anybody have anything to keep me busy for another two hours?
They passed these out for free at work on Friday. I will conquer it!
This is indeed my life story.
Star Wars fans hate it when previously-deceased characters are brought back to life, but we also hate Timothy Zahn for not bringing his characters back to life. Star Wars fans did not hate Grand Admiral Thrawn, but we do now, because he is always dead.
Also, if you don’t understand the irony in the placement of Bill and Ted’s Excellent Adventure in this list, you need more culture in your life. As an aside, it’s the list of the 100 best rated sci-fi films of all time according to Rotten Tomatoes. YMMV.