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.
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.
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
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?
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
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 percent -- 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
Programming personality type No. 11: The Agilist
Agilists are easy to find if you can just remember the schedule for the five different scrums. They're usually by the coffee machine, but the database team is experimenting with scrumming on the tightrope across the quad because simply standing still wasn't enough to keep everyone on task.
The most devoted Agilists like to hold code reviews where they get the whole department in the room to rewrite the code. If two pairs of eyes are good, why not get every pair of eyes, including the receptionist and the landlord?
Car: Motorcycle with sidecar
Relationship status: Refers to spouse as co-family developer
Household chore: Rearranging the modular sofa
Role model: Siamese twins
Pet: "I try to emulate Noah with all of my animals."
Favorite programming construct: refactoring
Drink: Constantly mixing scotch with water
Programming personality type No. 12: The Paranoid
If one layer of encryption is good, why not put in 10? And throw in a few digital signatures for good measure. But it can't be a keystroke-based signature because the key loggers can compromise those passwords. This will use a combination of mouse gestures and a custom USB dongle.
The Paranoid can be very useful when you're under attack, but they often fail to stand down the rest of the time. Why, they're probably still talking about adding security layers to the PDF of documentation you deliver for free.
Car: Retrofitted SUV with armor plating and hermetically sealed driver's compartment with oxygen backup
Relationship status: Still waiting for clearance
Household chore: Rekeying the lock to the bathroom
Role model: Can't tell you
Pet: "Doberman Pinschers and Rottweilers get along very well, you know."
Favorite programming construct: AES
Drink: Why do you want to know? Do you want to poison it?
Programming personality type No. 13: The Cutting-Edge Coder
Sure, last year's buzzwords were great, but that was then, and the latest experimental code is already boosting efficiency or response time by 1,200 percent. Or maybe it's scalability. Let me check my Twitter feed.
The folks on the cutting edge are already working with the committee to name the replacement for NoSQL. They've already rejected SQL++, SelectSQL, and SQL3000. The code isn't even sketched out yet, but choosing the right name will set the tone.
Car: Concept car from auto show
Relationship status: Casual and seeking upgrade
Household chore: Upgrading showers to latest bathing instrument
Role model: Q
Pet: "Labradoodles are so 2011."
Favorite programming construct: Node.js for the next three weeks
Drink: Anything small-batch, artisanal, and handcrafted