Ever since David Moutray introduced me to the concept of cargo cult programming, it’s been running round and round in my head. I’m actually coming to believe that this is a major issue in all walks of life. True or not, we’re absolutely seeing it in the data professionals space. Don’t believe me? OK. A few questions.
Do you work for one of the organizations that absolutely requires NOLOCK on all queries (even INSERT/DELETE/UPDATE)? Why? Because it runs faster? Why don’t you just use READ_UNCOMMITTED for your isolation level? What’s that? Never heard of isolation levels? I’ll bet you also don’t know what is meant by “dirty reads” then either. READ_COMMITTED_SNAPSHOT anyone? In short, you’re guilty of being in a cargo cult. You’ve got this form in your head of how things ought to be, but you don’t have the content that defines that form which will give you the necessary information to make good decisions about your code.
Do you shrink your databases on a automated basis? How about, do you have your databases in FULL recovery, but you don’t have log backups. Instead, every night you switch to simple and then shrink the database again? You’re operating from the bare bones of knowledge of how SQL Server works but without the fundamentals that, again, are driving you towards making uninformed decisions.
Do you do every single possible step of all parts of your database management with the GUI? You too are suffering from a cargo cult disease of form over content that is keeping you from getting to the underlying strengths that T-SQL (in combination with PowerShell) will allow you to automate your tasks, making you a more efficient and knowledgeable DBA.
Do you look at Windows Azure SQL Database with all it’s limitations (“Great Gu! You can’t take a backup”) and declare it unworkable and insane… but you’ve never tested it, you don’t fully understand how it works and what it does, AND most of your databases under management are less than 150 gb in size and you’re not operating under HIPAA requirements? In short, you’re a perfect candidate for saving money and increasing efficiency by taking advantage of WASD. You’re starting to sound like a cargo cultist to my ears.
Do you think that NOSQL means NO gal-darned Ess Q Ell dag-nabit, because that T-SQL set-based stuff is difficult to understand and slowing me down? Do you think that your ORM tool solves every single problem ever presented by your DBA because if you can just have an Information Persistence Layer instead of one of those dirty databases, then that relational dragon will be slain? Conversely, do you absolutely insist that there is no way, ever, that any ORM tool will sully the sainted purity of your databases because… Heck I still don’t understand why people are against ORM tools if they’re properly used. You just might be a cargo cultist (and yes, I realize I’m starting to sound like Jeff Foxworthy, minus the humor).
If you’re answering yes to these questions, or even thinking about answering yes to these questions, you might just be one of those cargo cultists. If any of these questions makes you angry, you are absolutely a cargo cultist. Nothing makes people angrier than having their faith tested.
I also think that this pervasive cargo cult mentality is what leads to my experiences while interviewing hundreds of people. How is it possible that you’ve worked with SQL Server for five or more years, but you don’t know the difference between a clustered index and a non-clustered one or what a recovery model is, or how to do a point in time restore? Why? Because, you’ve learned the basic forms of being a DBA or a database developer or a report writer in 6 months to a year, then you’ve just repeated those ritualistic patterns over and over and over. Heck, most of you who really, really need to get this message aren’t even reading this blog because you don’t even search for things on the internet until your data house is figuratively (or even literally) burning down around your ears.
I recently spent a day in Dallas at a SQL Saturday event (an awesome and wonderful time, thanks to all the organizers, speakers, attendees and my #sqlfamily, new & old) talking to lots of people. The people I was talking to are the ones that employers are looking for. Not because they’re the smartest or most capable, but because they are the most motivated to learn and expand. They’re the ones showing up, on their own time, not taking time off work to go to an event (paid or not), but using their own personal time to learn more. Great and wonderful people. But, talking to them made me despair. No, not because of those people. I started to despair because everyone I spoke with had a story about one, two, ten or fifty people back in their office that chose not to go to the SQL Saturday event. Those people back in the office either honestly believe they know everything they need to know or don’t care enough to expand their horizons when it requires some of their own time. This, despite conversations about managers requiring NOLOCK on all code because “it just runs faster” or companies that don’t want to set up log backups because “it takes up disk space.”
In short, for every single one of the people who got better at what they did on Saturday, there were a greater number who are still insisting on building the equivalent of a stick and leaf version of an airplane in the hopes that the great cargo gods will deliver to them good performing, protected databases that won’t cause their entire business to go under.
Surely, in the 21st century, with all the means of communication at our disposal there is a way to reach these people, to get into their faces, to scream WAKE UP! But, then again, as I said before, I’m seeing evidence of the cargo cult mentality everywhere. Maybe it’s just fundamental to the human condition, a coping mechanism that we can’t possibly get beyond. But, at least in theory, those of us smart enough to make computers work, surely, surely, we’re capable of seeing just a tad beyond the end of our own noses.
That’s my hope.
For all three of you that have made it this far, here’s your assignment. You know who the cultists closest to you are. For one of those cultists, find a good SQL Server article (or a programming article or a personal development/community article) that will benefit them. Print it out. Give it to them. Don’t try to send them a link. Hand them an article. Suggest that they pass it on. Ask them to make notes in the margins. We’ll try communicating using the old samizdat approach. Let’s see if that works.
If anyone else has any ideas for how to reach these people, post it in the comments. We have to try to make a difference.