This is great. I can pretty much put a timestamp on each of these of "when I started acting like this", "when I realized I was acting like this", and "when I made a conscious effort to stop acting like this."
I'd add the Doomsayer: The programmer who is constantly pointing out the ways in which any design could fail, no matter how likely or relevant to the task at hand such failure scenarios might be.
Healthy skepticism is beneficial, but I've seen teams paralyzed because one member has perfected the technique of raising unanswerable or irrelevant objections, often seemingly to present the appearance of being the smartest guy in the room.
> When a Human Robot is confronted about an issue with his or her work on the product, they will respond with the following sentence every time: “your requirement was not found in the specification for this project. We require additional pylons.”
> Human Robots often tend to be conference organizers (see PyCon 2013) and moderators on StackExchange.
That literally made my day.
The ability to read other people's code and understand the intent behind it is one of the highest attainments for a professional programmer. It requires two difficult, but important and related capabilities: first, that one be dispassionate enough about one's own views to even accept that other views exist, and second, that one be capable of understanding how code works from reading it (and perhaps interacting with it with a debugger or logging statements).
So, rather than lambast people for not being able to read code, perhaps we'd do better to praise those who are particularly good at it, and encourage them to share their insights, if they have them.
My God that is brilliantly written. Parts of it sting, but I feel better if I focus on the parts that don't apply to me.
I like how MongoDB has become the go-to joke for using the wrong tool.
Reread yourself next time. There's many typos and places where you used the wrong h̶o̶m̶o̶n̶y̶m̶s̶ homophones. It's hard to take you seriously when you write "left in piece"...
I've noticed a lot of Python coders to be pet technologists. They simply can't let go of their beloved Python, no matter what. It's as if to mask their incompetence.
I don't really see why the "Illiterate" is necessarily a terrible programmer, though. Code is the very opposite of literature: hard to read, easy to write.
OK,
This is a fine discussion.
I would add that I think that, a favorite of this board, the mythical "(top) 10% or (top) 1% programmer" is not so much a real thing as just an average programmer who happens to avoid each of these (and related) pitfalls in the particular job he or she is working on - well, and stays reasonably education in current tech and intermediate to advanced math and cs.
And the nice, the reasonable thing, about these description is that they make it clear these people are the product of particular environments.
Shoot, too bad non-gendered pronouns in English can be awkward. At about the 5th example, when imagining the roles, I was wishing for some women! Some variety would be appreciated probably :)
I think I've been almost all of these at some point in my career.
Seems to me like none of these descriptions is an actual terrible programmer (well maybe the "illiterate" or "stream of consciousness").
Actual terrible programmers write incredibly bad code. Their motivations are generally not the problem. I'd probably come up with a taxonomy like this:
The approximationist -- writes code that kind of does what was intended, and then writes more code to get closer to the intention, and then more code to get closer to the intention, and then more...
The design patternist -- writes implementations of design patterns instead of implementations of the specification.
The classicist -- related to the overnormalizing database designer, breaks EVERYTHING down into classes.
Etc.
And that's just covering terrible CS graduates.
I would note that being "the Island" in combination with "the Hoarder" is probably symptomatic of Social Anxiety. (Speaking from experience.)
Yet ironically, perhaps a great programmer is a hybrid of all of these archetypes?
Reminded me of the classic flame warriors, but lacking the artwork.
This can be re-written almost as "the development of the young programmer" where the external forces exert themselves and you get forced into some of the roles... - sometimes the pressure is speed of project completion - sometimes the pressure is production quality - sometimes the pressure is code quality / reusability - sometimes the pressure is following specs - sometimes the pressure is "looking modern" - sometimes the culture is whack and needs to be changed - sometimes the pressure is team communication - sometimes your tech stack only includes an AS400
Whatever the pressure you can seemingly get pidgeon-holed. I think this is where experience comes in and can guide you to the happy medium where external pressures are ignored and you balance the best you can.
"The Futurist cares not for quaint, passing concerns about stability, maintainability, or teachability – it doesn’t matter to him if it’s impossible to hire Erlang developers. New is everything."
Really? Lol. You chose a language that's stable, maintainable, and easily taught. Not only that, it's not a new language either. At least go with something that fits the description, like Rust or something (N.B. I like rust, where it's going anyways).
I want to know what the category is for someone like me where the process goes:
1) Code
2) Ask people why their methods are broken
3) Code some more
4) Realise what they had worked perfectly and I suck
5) Repeat
This blog piece is not a taxonomy. A real taxonomy would provide sample taxa living or stuffed in formaldehyde.
At most, this piece is just a literary exercise that provides no solutions for the imaginary problems it suggests.
I would definitely change my opinion if facts were pointed to of actual projects and persons.
I can almost hear the battle cry: extremism in the defense of ones work is no vice! Good read :)
The Arcanist is probably the closest to what I can see in myself. I tend to be protective over the systems I design in order to preserve them. This comes from years of geeking out about things like memory allocators and networking stacks, so when I catch a whiff of someone talking about introducing a terrible inefficiency or unreliability into the system I helped put together I put up the defenses. This post is a good satirical look at this aspect of my work, and probably a bit of a wake-up call.
I was feeling pretty good that I wasn't a stereotype, until I got to the Agitator.
I'm just really tired of people putting junior devs as team lead over me. I'd really like a lead that has tried different tech stacks, project management methods, and programming language paradigms. It's hard to respect someone making a novice decision based on their limited experience.
I don't think I am curable. I don't see how telling my manager and team lead why they are wrong, is something I should change.
When I first read this, it stung a bit as I know I've fallen into these roles at some point or another in the past. I came to the comments here expecting to feel even worse about myself, but I was pleasantly surprised to see other people noting that they too have fallen prey to these bad habits. In the end, this has actually made me feel a bit more comfortable with my skillset as a programmer, and I now have some goals to strive towards moving forward with my career.
Context plays a part. The last company I worked at was so arcanist that the majority of new developers were relative agitators or futurists. They wouldn't have been elsewhere. They never stuck around beyond a year, and as the second longest serving, 2.5 years was all I could stand. Interviewing after working in an arcanist environment is depressing.
I wonder what other conclusions I can get from people that are more of a type? For example a Arcanist is probable to also be faithful and a Futurist a cheater. I'm just giving examples, I don't really know anything, that's why I'm asking for someone that knows more than me. (:
This is great. As I develop as an engineer I feel more and more confident about my abilities; great to read something like this blast away the Dunning-Kruger effect and help me recognize I still have a lot to learn. And not just about particular technologies. Very humbling.
Into which group would the person who is genuinely very technically smart, but thinks they're too smart comprehensively to even be bothered checking in with the actual users to see if their vision meshes with the actual requirements fall in this analysis?
I had penned my thoughts on this a while ago http://priyankasriraghavan.blogspot.in/2013/10/the-evolution...
> he can find (and patch himself!) the subtle race condition created by minor JVM differences on your particular version of the Linux kernel
He can do this, but is terrible programmer?
"Guy", "dude", "him", "he"...
There are many kinds of programmer, but apparently they're all men.
Edit: upon re-reading the post I see a smattering of "he or she" references at the beginning. They quickly give way to nothing but male nouns and pronouns. I wrote my comment after finishing the article, at which point I'd forgotten about the brief nod to the existence of female software developers at the beginning of the post.
he missed the "righteous thou", ie. ones who are able to ignore their own shortcomings.
By the way, "Software is a team sport and does not suffer those who do not play by its rules." I hope his team/company isn't an English speaking one.
Wow - I'm each one of them - on different days, teams, jobs, etc.
The Stream of Consciousness made me die. Been there too often.
Mongo.
>The past is the future in the Arcanists’ worldview [...]
Hahaha, loved that!
It's like an all-inclusive guidebook for how to look down upon others and discredit them internally without any of the messy business of actually communicating with them about "their" issues. Why improve when you can label, isolate, mock, and ostracize?