I’ve been working at software companies for the last 15 or so years of my life. In this time, I’ve worked with a lot of people who call themselves software engineers. The following is a collection of shallow, unfair, insulting and overly general classifications of the types of people you will run into if you get into this business. It’s up to the reader to figure out which category I fall into.
1. The Genius
Sits down every day and writes beautiful code that does just the right thing in just the right way and as efficiently as is possible. Hits all the reachable deadlines, fixes all the hard bugs, and is also easy to talk to and personable. Plays well with others, and tends to have an intuitive understanding of just the right amount of give and take between engineering and the rest of the organization. I’ve met two people who fit into this category in my life. I think there are probably only about five or ten working at any given time in any given area. You want to hire one.
2. The Prima Donna
Thinks he is a Genius, but is really just pretty smart but much more anal retentive than normal. Likes to make like every day is full of Thinking Very Important Thoughts and solving Very Interesting Problems. Never fails to provide and endless stream of whining about how the rest of the organization is brain dead and doing everything wrong.
A subclass of Prima Donna that is specific to Engineering consists of the people who just cannot abide the idea Engineering serves the rest of the company rather than the other way around. These people are always shocked, shocked that anything would happen without direct input from the engineering team as to the impact on the implementation and whatnot.
3. The Zealot
Always Right. Always. Never argue with this person. Will sit through 9 hours of the Lord Of The Rings and point out to you that some minor plot point comes around backwards in the films and thus completely ruins the entire devleopment of the story, and so Peter Jackson is just a worthless HACK.
It’s not good to have a zealot as a client of your code, because your interfaces will always be wrong. It’s not good to have a zealot providing you with code, because then you are always using his code wrong.
Various subclasses here include the Language Zealot (non-functional languages are for the morally weak), the Design Zealot (anything that you have not diagramed in UML isn’t worth building), the Process Zealot (no code will ever be shipped without unit tests), and so on.
4. The Craftsman
Not as good as a Genius, and might not be as smart as a Prima Donna, but is reliable, careful, meticulous and always ready to do whatever is needed to get the job done. Is able and willing to work at any level of the system from design to the grimiest parts of the implementation. Is able to work with others in the organization without becoming physically ill and understand the tradeoffs between time, beauty, and completeness in the code base. The better ones can also talk on the phone in complete sentences and write a decent document about something complicated if they need to.
5. The Moron
Checks in code that doesn’t build and then when it does build it doesn’t work and causes regressions in other people’s code. Will change, and break, other people’s code. Constantly three steps behind in the design meetings but take 45 minutes to get caught up because they have to explain all the points that everyone understands to everyone else. Not the guy you want to give a vague specification to if you want the code to have any chance of being right.
6. The Slacker
Always giving work to other people. Gives away all his bugs because they are in other parts of the system. Argues away new requirements because workarounds exist that give you “the same effect” using code that he has already implemented, although it doens’t really work yet. In extreme cases, just doesn’t do anything at all.
7. The Bad Estimator
Never gives an estimate that is too short. Never gives any estimate at all. Never thinks any estimate is long enough. I’m generally guilty of this.
8. The Tools Geek
Spends all his free time playing around with useless tools that don’t really help anything but are shiny to look at. Likes to spend a whole day reconfiguring his X11 window manager customizations or writing perl scripts to automatically classify mail using Bayesian classification. Never gets much real work done.
9. The Intern
Interns tend to fall into all the above classes, they are just less developed than the full blown adult version. The exceptions are the Prima Donnas, who seem to come out of the womb that way.
Tomorrow, we will discuss commonly used software engineering terminology.
I’m pretty sure I’ve been all of the above (er, except “the genius”) at different times. I suspect that which you are may vary depending on the specific project you’re working on (eg, a Perl Zealot might turn into a Slacker or Moron if forced to work on a Python project, but if put on a Perl project would turn into either a Craftsman or a Prima Donna.)
Today’s Dilbert is appropriate… http://www.dilbert.com/comics/dilbert/archive/images/dilbert21220170040607.gif
I have never ever met your #1 Genius type at all. Software engineer, 17 1/2 years (Oh my, that’s a long time).
I have called many current and former coworkers geniuses, but that’s mostly a term I use for the very smart yet completely impractical. Not as snotty as the Prima Donna, but needs a Craftsman around to keep them focused and to prevent over-engineering. The Prima Donna and Zealot are frequently the same person in my experience, but both of them make me batshit crazy.
I like to think I am a Crafts(wo)man.
That’s what I get for hitting Post without a Preview. My first two sentences are in reverse order (software engineer, yet can’t manage copy/paste).
I’ve been working in software for about 10 years. I agreee with Vanessa, I’ve never seen a Genius. When I first read it I thought it was a joke. Also, she’s right, Prima Donna’s are usually Zealots in my experiance.
Man I hate estimating.