Wednesday, June 01, 2005
Do You Want Smarts, or Do You Want a Laundry List?
I sat in on a security presentation from Alan Holub at last year's SD West and was very impressed by Holub's mindset. He's also stirred up several pots with provocative posts on how getters/setters and extends break fundamental aspects of object-oriented programming -- and scathingly pointed his critics to the article Unskilled and Unaware of It: How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments by Justin Kruger and David Dunning as a defense that some of the more vocal folks were just to ignorant to understand what he was getting at. Today I ran across an older article of Holub's, When Hiring, Smarts Beat Skill Lists on the Software Development Times site. (Registration required.) Holub makes some great points about how many companies really are clueless when trying to bring on good developers. "Required" skills are often laundry lists of often-conflicting disciplines -- are you really looking for a C++ developer who is an accomplished system and network admin for Windows, Linux, and Macs? Holub goes on to talk about how a company should go about looking for above-average developers: Have them show you code. Have them talk about core features of object-oriented methodologies. Have them talk about patterns, and how they might be used to avoid designing a procedural-based system instead of an object-oriented one. Much of his article hit home with me, but from the other side. I don't consider myself a great programmer (yet!), but I would place myself firmly above average in that I've got solid understanding of many of these fundamental, critical areas. Not long ago I had a frustrating months-long back-and-forth with a company I'd initially been very impressed with. They liked my broad experience, liked my detailed test background, liked my general approach to design and development. What fell through? It turned out their real, sole criteria for hiring was scoring rather highly on a certain online skills certification test -- and I'm brand new to .NET. No credit for design smarts, no credit for a solid approach to coding, no credit for critical thinking in solving problems, just points off because I didn't yet know a DataView's RowFilter property uses SQL WHERE clause syntax. From hindsight, it was pretty clear that this company didn't care about those fundamentals which I think make up above-average developers. Do you want smarts, or do you want a laundry list?