To the world at large, computers are scary machines that are impossible to understand, and programmers are the mysterious geniuses who know how to manipulate them even if they are never able to fix yours for whatever reason.
Anyone who has worked with the machines knows that programmers aren't just one undifferentiated group, but a club with a wide variety of subspecies. From those who will go to any length to avoid documentation to those who deploy code like duct tape, refuse to use libraries, or can't help but rewrite their apps in the latest experimental programming language, programmers are a colorful lot -- particularly in their perspectives and habits -- though collectively comrades in code.
[ Find out which 11 programming trends are on the rise, verse yourself in the 12 programming mistakes to avoid, and test your programming smarts with our programming IQ test: Round 1 and Round 2. | Keep up on key application development insights with the Fatal Exception blog and Developer World newsletter. ]
Here we've compiled the 13 classic programming personality types you're likely to find in almost any IT or development shop. Together, they keep the machines feature-rich, despite steadfast differences in their approaches to programming.
Programming personality type No. 1: The Underdocumenter
They offer plenty of rationalizations, some of which may even sound reasonable. Comments take longer to read than good code, they might say. Or they will claim that Lisp or Java or whatever is self-documenting by the very nature of its structure. Or that the search capabilities of modern IDEs can parse the code itself. After all, human-written text requires artificial intelligence to discover its semantic meaning, whereas good code is immediately understandable to the parser. Whatever the reason, shirking documentation sounds perfectly good to them because they read and write programming languages with more ease than they do English.
The Underdocumenter will go to any length to avoid being shackled by management's foolish requirement to write text about that function. The droll ones will create functions like queryDatabase, then add a comment that says, "Queries database."
The cleverest Underdocumenters will even write their own code to save them the trouble of writing English. I know someone who hooked up a version of Eliza to Emacs so that he could add Eliza-grade comments to his code with the push of a button. No one noticed, he said, because even his manager had written scripts to count the words in the comments of the developers he managed. Eliza always had him near the top of the documentation pecking order in his department.
Car: Vespa Relationship status: Living with the same person for 15 years without getting married because they don't want to fill out the forms Household chore: Rewiring the house without labeling the breakers Role model: Guy who hid the Ark of the Covenant before "Raiders of the Lost Ark" Pet: "Around here somewhere." Favorite programming construct: Lambda Drink: Anything with an "XXX" on the bottle
Programming personality type No. 2: The CYA Specialist
For some programmers, documentation is a talisman for warding off middle-management evil. They write paragraphs and paragraphs about mundane routines like queryDatabase. Did you know that the routine will work for Oracle and Postgres 8.5 but not MySQL or Postgres 9.0+? It doesn't matter if you're running only one database, the CYA Specialist has you covered.
If you're lucky, your CYA Specialist will be a frustrated novelist who is happy to inject a pun or two into a boring pile of code. But the worst kind is the one who lords their documentation over others during code reviews. If a bug appears, the CYA Specialist says it was a limitation that was "well-documented in the 17th paragraph of the method's comment."
Some CYA Specialists perform job security by obscurity, handing over a binder full of printed-out code, as if you're going to leaf through 700 pages of monospaced, unsearchable type. They know that if you measure the work product in pounds, there can't be any debate over what they've done.
Car: Stack of Chilton manuals Relationship status: Married to a 48-page prenuptial agreement Household chore: Relabeling the spice rack Role model: Wikipedia editor of the year Pet: "Come over to see the photo montage of Scrappy that used to be just a wall." Favorite programming construct: The comment block Drink: Triple-filtered water
Programming personality type No. 3: The Future CIO
They can write code if they have to, but a PowerPoint slide about UML documents is their genre of choice. And you'll know you're in a meeting with one because your smartphone will beep with a LinkedIn invitation from them within five minutes of sitting down.
The Future CIO is keen to always seem ready to help, but if you push for more than a quick scan of a document, they'll resort to their favorite programming pattern: delegation. "This is probably better handled by Chris over there."
For the Future CIO, everything is an organizational argument made up of subpoints about skill sets, procurement, and process.
Car: Expensive lease Relationship status: Applying Kanban principles to stalking the boss's daughter Household chore: Recharging the iPad Role model: Steve Jobs Pet: "You think my hair just does this itself?" Favorite programming construct: UML Drink: What the CEO is having
Programming personality type No. 4: The Old Guard
If a problem comes up, they say, "We solved that years ago with Multics" or some other long-dead pile of code. They too often reminisce of the days when there were only one or two bugs because the entire program was just a few bytes long. And how they could toggle in their code in less time than it takes your fancy machine to boot and churn through all of the startup code and virus checks.
The real Old Guards like to point out that their favorite computer didn't need to boot because the iron-core memory didn't shut down when the power disappeared. They can talk for hours about how they would take a 2KB array of iron core over a 2GB stick of RAM any day. After all, most hassles that database programmers endure are problems simply because the RAM fails when the power disappears. The old iron-core machines never needed to worry about transactions or synchronization algorithms because iron-core just worked.
Car: Pacer Relationship status: Married to high school sweetheart Household chore: Studying a home's history by looking at the molding Role model: John Adams Pet: "Those are Fido's ashes next to my grandmother's on the mantle." Favorite programming construct: JZ EQU Drink: Old Fashioned
Programming personality type No. 5: The Dynamic Typist
If really pushed, lovers of dynamically typed languages will admit that, yes, the troubles of the Middle East and the potential dangers of climate change are worse than having to specify the type of data that will be stored in a variable. But they really would like to avoid being pinned down or constrained. Choosing a type closes doors, and closing doors brings them that much closer to death.
The Dynamic Typist don't see a variable that's now half full because everyone knows it requires a float and an int; they see it as half empty because maybe, just maybe, you'll want to stick a string or a self-balancing B-tree with invertible index. You never know when that might come in handy, they'll point out.
Car: Anything from Zipcar Relationship status: Open for anything Household chore: Adding X-10 Role model: Inventor of Swiss Army Knife Pet: "Whatever finds its way into this terrarium, we'll call it Foo." Favorite programming construct: Creating variables on the fly Drink: An empty cup to fill themselves at the fast-food restaurant
Programming personality type No. 6: The Faker
They got through college snarfing open source code and flirting with the competent TAs. When it was time for group projects, they showed up with cookies or beer, just to make sure no one noticed how many bugs were in their code. Now they've turned that degree into a real job with responsibilities, but they're smart enough to recognize that a bit of smiling and political savvy can keep the winning streak running.
Maybe they volunteer to take over the thankless jobs, like keeping the build tool running. Then they can scold the other programmers and maybe get them to take over their own tasks. Or maybe they just talk about configuration and the right names for the methods -- anything to avoid actually writing the instructions inside the methods.
Car: One of those Hyundais that looks like a Jaguar Relationship status: Living with long-term secret significant other Household chore: Cleaning by dumping everything into a heap in the closet Role model: Guy from "Catch Me If You Can" Pet: "Stuffed animals don't shed." Favorite programming construct: DLL Drink: Iced tea in a scotch glass
Programming personality type No. 7: The Multitasker
They won't look you in the eye during the meeting because they're busy answering an email, chuckling about a tweet, and ordering something from Amazon. But through it all, they claim they're able to listen to what you're saying. They would never pull this stunt with the boss, but you're not the boss, are you? So they play time-sharing system with you.
The Multitasker usually does a passable job with the simple requests. If asked about joining the gang for lunch on Friday, the Multitasker can answer yes or no with enough accuracy. More complicated requests, however, will receive the same cursory response, which may or may not be remotely correct.
As you would expect, the Multitasker is more than happy to work on several projects at the same time. Indeed, the biggest problem is keeping the Multitasker from volunteering for more projects before completing their backlog. The Multitasker is confident they can repurpose some code they have somewhere on their machine and perhaps even write the same code for multiple projects simultaneously. Nothing to it, they say.
Car: Anything with heads-up display, hands-free cellphone, and OnStar running at once Relationship status: Group-texting a booty call Household chore: Folding laundry with a spatula while flipping pancakes with a smartphone between texts Role model: Squad of ninjas Pet: "Which of you cats ate another gerbil?" Favorite programming construct: interrupt Drink: Boilermaker
Programming personality type No. 8: The Duct Taper
When some people rewrite code, the Duct Taper knows how to wrap some glue code in a proxy and translate the output to whatever format you need. Why get rid of a perfectly nice set of APL routines when a PHP proxy can turn the data into JSON?
Car: Frankentruck Relationship status: Gone fishin' Household chore: Piling yet another perfectly serviceable appliance part in the backyard Role model: Tim Taylor from "Tool Time" Pet: "We had to get her a hip replacement after the ACL tear." Favorite programming construct: Emulator Drink: Sterno
Programming personality type No. 9: The True Believer
Did you know that the best way to run Ruby is with Java? The Java devotees will tell you this in case you're thinking. The C lovers know that it would run faster than a Ferrari if someone would rewrite it in C because that's the only way to "get close to the metal."
It usually seems moderately funny to set up a lunch with a Python lover and C devotee and watch them snipe at each other for an hour.
Car: Anything with a sticker showing Calvin peeing on the competition Relationship status: Married to the one who should have led the homecoming parade Household chore: Putting up flags for holidays Role model: Richard Stallman or Steve Jobs or .... Pet: "He won 'Best in Show' in 2009 and 2010." Favorite programming construct: Sit down first and ask Drink: It's tattooed on their arm
Programming personality type No. 10: The Hand-Coder
They could use the data structures that come with that library, but then they wouldn't be able to optimize the code for their particular subpattern. And they're able to deploy at least three arguments about how they're saving the company so many millions because of the inherent limitations of the library. Perhaps it won't scale to 3 trillion users. Maybe the library uses method names that weren't certified by the ISO. Or perhaps they're just worried that support for the open source library will fade in seven years.
The best Hand-Coders actually deliver the performance boosts they promise, but all too often they triple development time for a modest gain of 2 or 3% -- all the while ensuring their own job security supporting their hand-polished masterpieces until retirement.
Car: Built from a kit in the back of Popular Science Relationship status: Working on home-built robot that says, "Yes, dear" Household chore: Cutting down trees to build a new wing for the house by hand Role model: Dr. Frankenstein, Robinson Crusoe Pet: "A mutt? No, this is my own custom cross-breed optimizing personality with disease resistance." Favorite programming construct: compiler Drink: Bathtub gin