November 29, 2007
Earlier this week I wrote about The Two Types of Programmers. Based on the huge number of comments, it seemed to strike a nerve. Or two. This surprised me, because it was never meant to be the inflammatory, provocative diatribe that many people interpreted it as. It got so out of hand that Ben Collins-Sussman, the original author of the post I quoted, was driven to post a followup clarifiying his original post.
Many of the commenters were offended that I somehow lumped them into a vast unwashed eighty-percent sea of vocational programmers. Here's what's particularly ironic: the very act of commenting on an article about software development automatically means you're not a vocational eighty-percenter. Trust me. I absolutely was not calling any of my readers inadequate. I don't say that because I'm a world class suckup; my blog isn't some kind of special case or even particularly good. I say it because if you're reading any programming blog whatsoever, you're demonstrated a willingness to improve your skills and learn more about your chosen profession.
Thus, if you read the article, you are most assuredly in the twenty percent category. The other eighty percent are not actively thinking about the craft of software development. They would never find that piece, much less read it. They simply don't read programming blogs-- other than as the result of web searches to find quick-fix answers to a specific problem they're having. Nor have they read any of the books in my recommended reading list. The defining characteristic of the vast majority of these so-called "vocational" programmers is that they are unreachable. It doesn't matter what you, I or anyone else writes here-- they'll never see it.
The problem isn't the other 80%. The problem is that we're stuck inside our own insular little 20% world, and we forget that there's a very large group of programmers we have almost no influence over. Very little we do will make any difference outside our relatively small group. The problem, as I obviously failed to make clear in the post, is figuring out how to reach the unreachable. That's how you make lasting and permanent changes in the craft of software development. Not by catering to the elite-- these people take care of themselves-- but by reaching out to the majority of everyday programmers.
That was my point. I'm sorry I did such a bad job of communicating it. But on the plus side, at least it got people thinking and talking about the issue.
Some people objected to the very idea of categorizing programmers into groups of any kind. But there's a rich history of doing exactly that, with interesting and sometimes unintended consequences. In early 2004, Nikhil Kothari wrote about three personas Microsoft came up with while working on Visual Studio 2005.
We have three primary personas across the developer division: Mort, Elvis and Einstein.
Mort, the opportunistic developer, likes to create quick-working solutions for immediate problems. He focuses on productivity and learns as needed.
Elvis, the pragmatic programmer, likes to create long-lasting solutions addressing the problem domain, and learning while working on the solution.
Einstein, the paranoid programmer, likes to create the most efficient solution to a given problem, and typically learn in advance before working on the solution.
These personas helped guide the design of features during the Visual Studio 2005 product cycle.
The description above is only a rough summarization of several characteristics collected and documented by our usability folks. During the meeting, a program manager on our team applied these personas in the context of server controls rather well:
- Mort would be a developer most comfortable and satisfied if the control could be used as-is and it just worked.
- Elvis would like to able to customize the control to get the desired behavior through properties and code, or be willing to wire up multiple controls together.
- Einstein would love to be able to deeply understand the control implementation, and want to be able to extend it to give it different behavior, or go so far as to re-implement it.
I can't quite date exactly when these personas came to exist at Microsoft. Wesner Moise has an even earlier reference to these personas, wherein he amusingly refers to himself as "used to be an Einstein." Wes, old buddy, I'm afraid you're the archetypal Einstein, no matter how much you might think otherwise.
These personas have been controversial for years; they've sparked a lot of intense discussion. Evidently there's a fine line between "persona" and "stereotype":
The Microsoft developer personas that include Mort, Elvis, and Einstein are ultimately an ethically bankrupt mechanism to pigeonhole software developers into the kind of overly simplified categories that a typical marketing staffer is comfortable with. While intended to help this particular parasitic segment of the corporate world to behaviorally model the psychological predispositions of software developers at their work in an unrealistically simple way, it has instead turned into a system of limitations that developers have begun to impose upon themselves to the detriment of the advancement of software development practice and industry. It appears to be a bid by developers to rid themselves of the capacity for rational thought in favor of tribal identification with corporate brands and software rock stars.
Personas, in and of themselves, are not a bad thing. I've written before about the importance of API usability, and personas let you get a leg up on usability by considering the different audiences that will be using your code.
But I can empathize. As a long time Visual Basic and VB.NET developer by trade, I truly resented being lumped in with Mort. I'm not just some clock-punching code monkey-- I actually care about the craft of software development. So what if I happen to write code in a language that doesn't brutalize me with case sensitivity and curly-bracket megalomania? My language choice is ultimately no more meaningful than the choice between caffeinated cola beverages, so it's an illusory difference at that.
Paul Vick works on the VB language team at Microsoft and he echoes some of my concerns:
The fundamental error I think most people make with the personas is that they see them as mutually exclusive rather than points along the experience spectrum. When I'm working on the VB compiler, I'm definitely an Einstein, thinking at a very high level. When I'm working on stuff like the VBParser sample, I'm generally an Elvis, thinking at a somewhat lower level. And when I'm writing batch scripts or ad-hoc data analysis tools, I'm definitely a Mort, hacking around to figure out what I'm trying to do.
The point really is that most people are usually Mort, Elvis and Einstein all at the same time, depending on what they're doing. And by building tools that target one or the other, we're artificially segregating people's work into buckets that don't really map onto their daily lives. (I would also argue that the past several releases of Visual Studio has emphasized some personas over others.) Finding a way to better serve people as they move through the flow of the day-to-day work is something that is need of some serious attention.
Mort, like the twenty percent analogy Ben originally came up with, is more than a persona or a stereotype. It's a call to action.
I think the solution is to quit pandering to Mort with our condescending paternalistic attitude, and instead demand better from Mort. If the capabilities of the average developer truly is as bleak as many make it out to be, we shouldn't just accept it, but work to raise the quality of the average developer. "Average developer" should describe an acceptable level of competence.
We have to realize that Mort is responsible for a lot of important systems. Systems that affect the general population. When I hear of recent cases of identity thefts at Choicepoint, especially those caused by lax security such as using default passwords for the database, I think of Mort. When I read that $250 million worth of taxpayer money has gone into an overhaul of the FBI Case File system, and the system has to be scrapped, I think of Mort.
Given this much responsibility, we should expect more from Mort. So Mort, I hate to say this, but software development is not like working the register at McDonalds where putting in your 9 to 5 is enough. I am all for work-life balance, but you have to understand that software development is an incredibly challenging field, requiring intense concentration and strong mental faculty. It's time for you to attend a conference or two to improve your skills. It's time for you to subscribe to a few blogs and read a few more books. But read deeper books than How to program the VCR in 21 days. For example, read a book on Design Patterns or Refactoring. Mort, I am afraid it's time for you to quit coasting. It's time for you to step it up a notch.
I firmly believe it is our job to leave the craft of software development better than we found it. If you're anything like me, you wrote horrible code when you started out as a fledgling programmer, too. But through concerted effort and practice, I was determined to suck less every year. I'll admit this is sort of painful, because us programmers aren't exactly known for our people skills. But we owe it to our craft-- and to ourselves-- to reach out and help our fellow programmers, at least in some small way.
Being a professional programmer is more than just writing great code. Being a professional programmer means helping other programmers become professionals, too. We're all in this thing together. Not everyone can be reached. But some can.
Posted by Jeff Atwood
Hey Now Jeff,
Leave it better than we found it. Great message.
Coding Horror Fan,
I fear that we are running up against the same wall other specialized professions did. Used to be there were many small electronics shops where you could have your electronics fixed, as they were made up of many independent components. The boards could be fixed, parts swapped, etc. Now consumer electronics are tightly integrated into the cases, with single purpose designs, with huge prices for replacement parts so that we are incentivized to just throw out something that is broken and buy a new one because servicing is too expensive. In the same way each new generation of IDE with more and more wizards and such built into it make it seem that the 20% of us who make like what we do is difficult are just whiners. Somebody with very little experience (sorry to pick on VB) can fire up VB, not have to know squat about why case would have any bearing, nor what a curly brace was for, and drag and drop a quickie application. When I look at the market I see recruiters who just pick and choose based on the alphabet soup of acronyms and plug bodies into seats. When I am recruiting people I ask questions like "what's the last programming book you read?" or "what development blogs do you read?" I get 90% blank stares. Four out of five go into vapor lock when I drop a fizzbuzz test in front of them. Without the whole IDE in place (80%'ers) they are totally lost. I fear that the days of GENERAL acceptance of the 20%'ers are drawing to a close, where the only work for them will be to build the tools for the code monkeys who slap together throwaway products because that's all that people want and are willing to pay for.
There is nothing wrong with any of those personas, but they are also very limiting. What about a prophet or evangelist? How about the pure researcher or other persona who is creating what never existed and perhaps publishing at a conference?
Personally I can see myself in of the 3 personas listed depending on context. What are the schedule pressures? How much coffee or Mountain Dew is available? Is there time to be an Einstein, or does the customer only want Mort? What persona does the problem actually call for?
i have to say it - if you get offended by this stuff, that's pretty sad. have some confidence in who you are, ffs.
What if you're a 80%er, and you read blogs like this? Granted, I'm a 80%er because I'm not a programmer, but I do create very messy badly written VB macros for Excel. I'm a bit of a Mort, with some Elvis thrown in.
Jeff, we all want to be in the 20%. However, I am not so sure that by being a reader, or even a regular reader, of programming blogs puts me there. I used to be a programmer in a large company, but for the past six years I have been out on my own. I have to read blogs to keep up, whereas, in the past, I could always ask someone down the hall or in the next cubicle.
It is really hard to keep up with what's happening in the software world and still have time to deliver stuff to your clients.
I want to be in the 20%. Hell, I want to be the best developer I can be. But sometimes it is all very hard. Lot's of fun, though.
I suppose the fact that I am in my office on Saturday means I have some passion. I would probably spend around 2 hours a day reading - blogs, software books etc. I read the stuff partly because I enjoy, but also because, if I don't I will be left behind. And I only program Windows forms, but there is still a lot of new stuff coming out for that. WPF, for example. It looks exciting for the future, but there is a lot to be learned. I have to read just to stay in the 80%.
Along with the two types of programmers, I think that there are also two types of software development, and they correlate with the two types of programmers. I've elaborated more on that at http://www.curiouschap.com/?p=26.
Articles like this keep me from burning out.
"I want to be in the 20%. Hell, I want to be the best developer I can be. But sometimes it is all very hard. Lot's of fun, though."
Surely just wanting to be in the 20% puts you there. It's not about the achievement, it's about the attitude. Sometimes you'll be rushed, and have to produce hackwork. That doesn't automatically mean that you don't care about your work. It may merely mean you care enough about the client to produce what they need now, rather than what they should need if they had more time/money.
To Quote Bob Kelso, "Nothing in this world that's worth having comes easy."
Hugs everybody? ;)
Really great points about personas being contextual and that *intent* has a big part of it. If you read blogs and *want* to be better, you're pretty much on the right road to improving the craft. Even if you're not a hot-shot at writing code.
You can only get better if you *want* to. If you're indifferent, then it only gets worse.
I want to be in the 20%. Hell, I want to be the best developer I can be. But sometimes it is all very hard. Lot's of fun, though.
Richard, the fact that you're *trying* to improve easily sets you apart from the other 80%.
I wasnt offended by the original post.
Interestingly, though, I think you have, in some way, described the ongoing battle between the open source community and those who develop using primarily Microsoft tools.
How often, in this blog and in others, have I read one calling the other a "Mort"? I dont want to get into fingerpointing, but quite honestly its the one thing that discourages me as a programmer in general. Rather than work to convince the other, we turn to generalizations and name calling.
We all care about our craft (at least, the readers here do). In the words of my man Rodney King, "Can't we all just get along?"
Well said (and saved). I think error in interpretation of the 20% is solely due to part of the quote:
"leaders, trailblazers, trendsetters, the kind of folks that places like Google and Fog Creek software are obsessed with hiring."
This makes the 20% sound more like the elite 1%, which most of us know we are not. There's a large gap between these elite 1% and the rest of the 20%, possibly as much or more than between the 20% and 80% of vocational (which I think is a fitting term) programmers. But I think your explanation sums it up well. Nice save.
Well I don't mean "solely" really, but it was something that really stuck out at me. There were other things too, but this one was early in the article and helped set the tone.
Well, I read your blog, and I definitely do not feel like I belong in the top 20% of developers. If I do, it is truly a sorry state we are currently experiencing as a group.
In college, I majored in Business Administration and Philosophy. I ended up developing because, like most of the monolithic flagships of capitalism, the large company (~300k employees) where I work is a good twenty years behind the times. I began in MS Access and made my way over to VB .NET and MS SQL eventually.
My programming style amazes me. I am amazed I have pulled it off for so long. Comments? None. Unnecessary redundancy? Oh yeah. Loads of views, stored procedures, and tables I am afraid to delete b/c I am not sure if they are used anywhere? No comment. Backing up and Maintenance? Uh...one day hopefully.
Basically, it is a mess. However, it does have two important characteristics: First, it adds value to the organization. Second, it (slowly) gets better with time.
I am not sure where I rank as a developer, but I do not feel like I am near the top 20%. Still, I like where I am, and business has a real need for people like me performing management, analysis, development, reporting, testing, etc...all for a super-low cost!
Honestly, we need mort. Mort is useful, mort gets things done. When I am managing and building a mid to large sized team, mort does all the stuff that is fundamental, needs to be done, but ultimately isn't that challenging or interesting.
Pieces of the system that are appropriate to elvis go to elvis, and if I need something difficult and/or wacky it goes to Einstein.
The interesting thing is in my experience (business applications/software as a service, etc) I find I have more need for Mort and Elvis than I do for Einstein. Einstein has to be careful not to slip into overcomplicating the domain and creating something that isn't maintainable by Mort. Because we all know that someday Mort is going to be responsible for what Elvis and Einstein leave behind when they get bored and move on to new challenges.
This is a facinating topic. I'm sorry so many people took it offensively. I briefly wondered if I fit into the 80% myself when reading it, because I tend to work 9 to 5. The difference is, I maintain as close to a 40 hour work week as I can so I have time to get home and code the things I'd rather be working on. Most companies I've worked for don't do anything even remotely interesting to me other than making software. Don't get me wrong, I learn the business, but cafeteria plan management doesn't really interest me the way, say, the new features of VS2008 does. I'd like to think I fall somewhere between Elvis and Einstein, but there are times when I have to be a Mort due to schedules.
The problem seems to be in motivating the 80% to strive to be part of the 20%. What might be useful is some tips in that area, since I, like probably most geeks tend to have rather limited social skills. "Go read a blog, loser" is probably not going to have the effect I would hope for. Anybody got some conversation starters?
I couldn't agree more with Jeff and the comments here. When I took my first job I was amazed that only a few of the developers actually programmed outside of their job. Those were the few programmers that like myself had blogs, read blogs, after work had interesting conversations about the best programming language to use for a certain problem and talk about compilers and web development stuff for fun.
I used to think that all computer people were like me - I LIKE computers. All of it. Even learning the quirks of Vista. Then I got a job doing it and met the other 80%. People who got into programming because it pays well - they don't have a computer at home, and don't even like computers. We talk, but they don't understand me, and I don't understand them. They think I need to get out more (I'm actually quite busy with other stuff - I have two kids) and I think they need to realize this isn't McProgramming for me, it's ME.
And thanks - my bookshelf has added Code Complete, Pragmatic Programmer and The Mythical Man-Month since I started reading your blog.
"The problem isn't the other 80%. The problem is that we're stuck inside our own insular little 20% world, and we forget that there's a very large group of programmers we have almost no influence over. Very little we do will make any difference outside our relatively small group. The problem, as I obviously failed to make clear in the post, is figuring out how to reach the unreachable. That's how you make lasting and permanent changes in the craft of software development."
Does it ultimately matter what a bunch of people who are not interested think or do? By definition, those 80% are not trend setters, they are followers. They are so disinterested, they'll continue to use the same stuff they have been no matter what they are introduced to: that's what puts them in the 80%. They may write software that is useful or does something innovative within its area, but they aren't writing the meaningful advancing the state of the art stuff. They can't because advancing the state of the art has to come from a dedication to the task that the 80% doesn't want, or is unable, to put in. It seems like it would be a waste of time to try to bring more of the 80% into the 20% fold: it would be wasted breath, they aren't interested: if they were, they'd be in the 20% already.
Has the art of cooking stagnated because a major portion of the population is merely interested in "eating to live" not "living to eat"? Has the popularity of fast food (in terms of "X billions served") kept chefs from innovating in the kitchen and pushing the limits of their craft? Are chefs meeting in kitchens around the world wondering how to get their message of better food out to the masses?
The number of people who work on the Linux kernel, or the various BSD maintainers, is some small portion of the 20%, and yet they wield significant influence over the direction of the industry. How much output of Microsoft, for example, has been a direct response to where open source goes? Of those 80% who use Microsoft are then indirectly influenced to use the tools they are provided.
But perhaps the goal is not get more of the 80% interested, but to use the 80% as another user type, another target demographic. Really, when the 20% push the state of the art, they are most likely going the classic hacker route of creating-tools-to-create-tools. Those tools then have applicability to what the 80% is doing. It's going to be difficult to engage the 80%, to make them realize that they should be passionate, but that doesn't mean they shouldn't have an influence. Part of the 20%'s passion is to make useful things, and the 80% can help determine what is useful.
The problem with trying to help other folks along is that the so-called teachers don't master their area either. The knowledge that's usually taught is a too ordinary one, which once mastered just makes you another so-called teacher at best. There's nothing wrong with that, which is the case for a safe course of action. It's not like you are going to find something super-duper at the end of the rainbow though, and that's my point.
Personally, I don't understand the need to bring the other 80% along. There are many areas of life and business where the 80/20 rule applies and the important thing is to reward the 20% and, from a management perspective, get the absolutely most you can out of them.
There will always be a chasm between the 80% and the 20%, its not the 20%'s job to close that gap - its their job to stay in the 20%. With the internet, though, the absolutely beauty is the tools and information to move from the 80% - 20% can be accessed when/where you have time for very little - and for that I would like to give a great big thank you for the 20%-ers that came before me. All I needed was the desire to get there.
If someone in the 80% can't even muster the desire to read a blog or a couple pages of a book once a week, well, then...I'm sorry.
Nice conclusion. However, I can't help but conclude there's a wide gap of capabilities between both edges of that 20% range...
I really wish that 40 hours a week would be enough to maintain a respectable level of programming skills, but since technology is growing faster than any one's skills, it appears only too normal to sacrifice balance for employability and peer respect. Sometimes, when I read technical blogs and I see all that work that has gone into them, I can only hope they're written on company hours by casually inspired developers.
Our time shouldn't have to be split between lousy professional work and great hobbies.
Telling the Morts of the world to "Get better, dammit," is not going to be very productive. And it's not because the Morts out there are a bunch of lazy programmers who are itching for Friday to roll around so they can stop this stupid programming thing.
The majority of businesses in the US have less than 100 employees and have, over the years, turned to computers to streamline their business processes and workflow. Many of these smaller businesses cannot afford to hire a full time developer, so they 'promote' Johnny over there who took a VB programming class at Fallbrook High and who, last year, created a brochure-ware website for his Aunt's scrapbooking supply store. So Johnny's spending 10 hours a week doing some VB programming, basically creating a simple data-driven application to track sales, or writing a script that converts the data saved by QuickBooks into more flexible reports that they can view through Access. Whatever.
The point is, Johnny doesn't have the time and his company doesn't have the resources to invest in his continuing education. He's a salesman for the company first, and just does these odd programming jobs on the side in his spare time. His passion is selling, not code, but his company has come to rely on the internal programs he's created.
Here we are, the 20% whose passion IS programming, who take the time to learn and foster our trade, our art. We expect that Johnny over there should have the same interest, the same drive to master this stuff, to "leave the state of programming better than where he found it." Try telling that to his boss who would rather have Johnny selling 40 hours a week.
No, programmers like Johnny should never be working on applications that have multi-million dollar budgets. And these types of programmers shouldn't be working on exterior-facing websites that store sensitive data. But the fact of the matter remains that there are many small companies that have these types of part-time developers, especially in smaller towns where the nearest "real" programmers might not be found. So give Johnny a break, and let him program in a crappy style. Make Microsoft work harder to develop products that Johnny can use to create programs that are "good enough," but don't demand that Johnny work harder.
"Part of the 20%'s passion is to make useful things, and the 80% can help determine what is useful."
great stuff, i totally agree. It takes Elvis and Einstein to create great technology, it takes Mort to make it ship.
I feel so validated.
"Here we are, the 20% whose passion IS programming, who take the time to learn and foster our trade, our art. We expect that Johnny over there should have the same interest, the same drive to master this stuff, to "leave the state of programming better than where he found it." Try telling that to his boss who would rather have Johnny selling 40 hours a week."
True, there's no helping the Johnnys who don't even consider themselves programmers, but what about the 9 to 5 guys who do? Perhaps it is a lost cause. I try to imagine people in other professions trying to reach out to their coworkers and inspire them to try to excel at their job, and I can't conceive a single scenario that doesn't make me laugh.
But perhaps, just perhaps, there's a small segment of the 80% that want to be better programmers, but don't know how. I'm sure most of us arrived where we are because we were driven to learn all we could about our craft, but those with less natural aptitude in this area might need a little guidance, someone telling them "This is what the developers who excel do. This is the difference between a programmer and a developer. This is the difference between a developer and an architect." etc. Then maybe we raise the bar for the 80% a little. Perhaps it's part of the developer psyche but I can't just leave well enough alone: I have to think "What can I do to help this get better?" It drives everybody I work with insane.
By the way, love your site, Scott.
Side note: why is my captcha always the same? Is it supposed to do that?
The Mort/Elvis/Einstein classification presumably encompasses valuable employees (as Microsoft has strong hiring practices), how about the rest of us who have to deal with Joe, who produces 100 LOC per minute along with 500 bugs, or Jane (let's not be sexist to exclude the females) who is not capable of transforming a slightly complicated flowgraph into code, or Jack, who thinks he's Einstein and writes amazingly complex code which can be replaced with something much simpler.
I think the three types are modes of working rather than stereotypes, and it's important that you get people who are good at whatever their role requires.
Regarding the 20/80 split, the 80% crows consists of a lot of people who are in IT for the money, but if the industry needs them it probably means that they are useful. Personally, I'm a bit of a perfectionist and if one day I have my own company I won't be relying on them. Looking objectively though, if they have a 9-5 job they'd have much smaller chances of having health and relationship issues.
Also, I find that the "passionate" 20% crowd often consist of people who almost always have too much passion and too little reason. The IT industry is built on a lot of fads. The real leaders are not the 20% crowd, but some of the big commercial players who ultimately care very little about anything else but their own profits. I wound claim that instead of raw passion, it would be much more beneficial if the 20% of the real geeks were more educated when it comes to real computer science and theory - they should be much more skeptical and critical of the new fashionable programming paradigms and tools.
If you have no idea what I'm talking about, you can read some articles from the late Dijkstra (e.g. the classic gem http://www.cs.utexas.edu/users/EWD/ewd12xx/EWD1209.PDF ) or Fabian Pascal.
I understand an idea of helping and improving the programmer community. It is really great thing.
I remember when I started with programming. It was 1992 and I was pushing to the edge my C64 coding in assembler.
There was no internet, there was no books, there was only one newspaper about C64.
To learn assembler we (bunch of people) had only a c64 memory map which the language keywords book brought by someone from Germany which we shared between us.
I don't speak german. I used this book... because I didn't have tu much choice.
Baci in 1992 I wouldn't even imagine that in 2007 will be just enough to WILL to learn. There is loads of different books, there is internet, there are forums and blogs.
What I am trying to say is that if somebody is in '80%' it is their personal choice... That's all.
Of coz it is good to do a step forward and try to "build the bridge".
To be honest, I read codinghorror and joelonsoftware mostly to be entertained. Kind of like news sites such as engadget and slashdot, but with a programming focus.
My opinion, the 20%, 80% thing no longer exists. It used to exist in the days of MS-DOS, when there were really some elite magicians who used clever techniques to conserve memory or write directly to the video buffer, while the rest of us just did conventional coding.
I think nowadays, the idea is more important than the code. Conceptualizing and creating the first youtube, or craigslist, or skype is far more impactful and rewarding than moving bits and bytes around. It's only code, so I don't get too worked up over it like before.
I have to say, your previous post got to me too. But for me, and seemingly a number of your other readers, that was because of your buried assertion that 20% = Linux, 80% - Windows.
Now obviously that's a small part of the issue, and not enough of an issue to actually make me want to comment before, but I think that you could simply have described the division in terms of passion and motivation.
Then, you could easily have mentioned that this is *exactly the same* as most other industries. There's nothing special about having some people who care and others who are just in it for the paycheck, and although your point was about communication between the two groups, since you never really justified the choice of 20/80 we couldn't tell if you thought there was something special about that choice.
First, I have concluded Mort exists because the market demands it.
Second, "There will always be a chasm between the 80% and the 20%..." I completley agree. I would restate Jeff's call slightly. we need to help those who are really 20%ers realize that they are and get them out of the 80%. the ratio still stays the same as new people come in at the bottom.
I know I have personally impacted at least two people to start reading blogs and thinking much more critically about this wonderful profession of producing software. Thank you Jeff and others (Phil, Hanselman). You are helping to find the true 20%ers. And thank you Er4tor for introducing me to codinghorror.
Finally, "When I am managing and building a mid to large sized team, mort does all the stuff that is fundamental, needs to be done, but ultimately isn't that challenging or interesting." I truly believe the field will mature eventually to such a point that there is nothing uninteresting about building applications and systems. And I'm not saying it will be easy or dumbed down. Instead, that eventually we will be able to express to the computer what it is that we want done in a much more efficient manner. I think there are some small agile consulting firms are starting to acheive this. I want to be there.
Thank you Jeff!
"I'm not a programmer, but I do create very messy badly written VB macros for Excel"
Rocketboy, I also know a guy who writes VBA macros, but unfortunately he is of the impression that he is a programmer. The fact that you are willing to say that you write bad code leans you away from the Mort category. Why don't you do some learnin and further you abilities? You sound like you have the makings of a good programmer.
Jeff, It's great reading your posts!
Isn't it ironic that the people who complained suffered exactly from the problem described in the (original) article; being that they were unaware of the fact that they are in the upper 20% and that there is a giant group of people much more ... let's say, unsophisticated.
you clearly broke the first rule.
The first rule of the 20% programmers is you don't talk about the 20%.
Thx for the great blog, code bless you.
"Don't worry guys, if you can read this, you aren't one of THEM... My readership would never be like that... you're all visionaries, geniuses, just like me! And good looking, might I add! So there's no reason to think that the categorization is bunk, since you're all on the 'good' side of it anyway! No need to be offended by the geniuses/slugs distinction, because anyone who would read this is surely not a slug..."
Here's what's particularly ironic: the very act of commenting on an
article about software development automatically means you're not a
Segueing away from the points you're eloquently making, you would maybe be surprised who your audience is. I've often been tempted to comment, but haven't. However, the mere fact that I do doesn't mean I'm even a programmer. I'm not -- I run a lowly application support team.
However it does mean I have a professional interest in the making and running of software.
It's apparent on a lot of programming blog that there doesn't seem to be much awareness of the fact that for any reasonably large and complex running software application, there's a slew of (hopefully) competent technical people who aren't programmers. Some are on the software engineers' radar (QA is, some bits of DBA may be, and I'm not talking about sysadmins, who have their own visibility). But the several teams of people keep the system running, diagnose things that are going wrong, make configuration changes, or work on resolving users' problems too often aren't.
And I see the quality of the software suffer for it. Because, thing is, we know stuff about the application the programmers don't even know. We know what real-live data our clients put in there, what exactly they do with the system, and some of it has never occurred to the engineering side. We know what exactly breaks if someone uses Ukrainian characters that are not in Russian cyrillic, and why, and can provide details, as needed, in technical jargon (codepoints and charsets) or for the business user. We know what part of the UI slows down for only a particular account and have a very good idea why. I see the system in action every single day, and know what it does well and what it doesn't, which low-priority bugs (because it's just a UI glitch, isn't it) are particularly galling to the user, where exactly an architectural choice multiplies the time I take on a maintenance task by 10. I also know what a buffer overrun error means when I see one.
Oh, I do write some code once in a while -- a bit of SQL, not more than 100 lines, for my own team's use, to check what's going on in the DB; reworking a web page we use with its DB backend; a bash script to munge logs; a simple front-end to an API. And I get code thrown at me by users who want to talk to the API and have to figure out why it doesn't work. But by no stretch of the term am I a coder.
"But for me, and seemingly a number of your other readers, that was because of your buried assertion that 20% = Linux, 80% - Windows."
I thought he meant to say those who actually at least tried Linux vs. those who are not even interested. What they actually use is not relevant. I would expect most of the "20%" to actually try a different OS "just for fun". Or at least something at all that goes beyond immediate benefits.
At least I will e.g. try Vista as long as I can get it for free from my university even if I have no use for it. Just as I did with .Net.
While some things said do not to apply to non-programmers, as an MPlayer (http://www.mplayerhq.hu) developer I can say I see some of that "80/20" stuff in "mere" users all the time, even in those who don't even know yet how to compile a program.
Like, those who really want to find out how things work (even if they think that they will probably never really understand it) and those who say "I'm not a programmer, I shouldn't ever see any code, go away!"
Great couple of posts - and even better comments!
One commenter rephrased the divide to be the Innovators (20%) and the Implementers (80%). I like that. The Innovators are the rabid enthusiasts playing with and writing about cutting edge technology. It's great stuff, but it can be very removed from what I, an Implementer, am working on. What I really want to see more of is great blogs written by the top 20% Implementers, talking enthusiastically about applications of mainstream technology - or even older technologies that many of us are still supporting!
or even older technologies that many of us are still supporting!
You mean like RS232 that a lot of people (including Sun with Java, thus Java has become irrelevant to me) decided to be a thing of the past while in the production industry here it is almost the only thing used (for control stuff, the full-fledged PCs of course use ethernet, the alternative being CAN which costs an arm and a leg in comparison)? :-)
I read your blog and I am one of the unwashed 80%. No problem being there because it pays well. Actually, I've moved to Configuration Management years ago, and haven't written a solid program in years. I use to be a user interface expert in C back when we interacted with our users via the Curses library.
I think of the division being closer to a 10 percent to 90 percent divide. The 10 percent are those with programming blogs that are actually read by a significant audience. (Sorry, guys, your Mom and Uncle Leo doesn't count as a significant audience). These are the ones who create new tools -- like Ruby on Rails, come up with concepts like AJAX, and are the ones who come up with all the Microsoft ideas (I am specifically exempting the person who came up with Clippy the Paperclip).
Nothing wrong with being the great unwashed. We're the ones who make all the stuff the other 10% think of come to life. We aren't the ones who came up with WebKit or Android (or because this is a Microsoft crowd) .NET, but it will be our job to make them work.
I'm in that 80% even though I read this blog. I make just as much or more money than those in the 20%.
Thing is, I work with lots of 80%ers but tell them about codinghorror and try to get them to read it. I wouldn't show it to them if it just spat in their faces. Maybe McConnell's idea is better, i.e. how to become 10X more productive than you are now, or just "Sucking Less Every Year":
Otto: Apes don't read philosophy.
Wanda: Yes they do, Otto, they just don't UNDERSTAND it.... Aristotle was not Belgian, the principle of Buddhism is not "every man for himself", and the London Underground is not a political movement. Those are all mistakes, Otto. I looked them up.
-- A Fish Called Wanda
Robert Stephenson Smyth Baden-Powell was the founder of the Boy Scouts. After his death in 1941, a letter of his was found, addressed to all Scouts, including the passage:
"Try and leave this world a little better than you found it."
I learned that phrase in Scouting, applied first to campsites, then life, when I was 12. If you could have only one guiding principle in life, that would be an awfully good choice.
@Reimar: This is a point I left out not to overload the comment, but of course I agree. I consider myself part of the 20% ... just not in programming. Also, your absolute experience level doesn't matter, but whether you're self-motivated to learn what's going on in the wider world is.
(Though you threshold for a competent user is a bit high. Compiling a program is not required. Being a specialist at what they can do BETTER than you -- telling you how they want to *use* the damn thing -- is.)
Loved the post, and the comments - much food for thought as always.
I split developers into starters and finishers. The starters have the vision, and write the "IF" part of the logic. The finishers haven the real-life experience and tend to add the "ELSE" parts that mature the product into something that is tolerant to most of the real-life exceptions.
For new work (rare) you need more starters, and for maintenanc work (common) you need more finishers - but to build a great team you will always need both types.
I work with armies of folks who really know the business. Their code works and the systems give the company a competitive advantage in the marketplace.
That said, I recently opened a 5,000 line Java class with most of the logic in one 3,800 line method with all the sins you could imagine present. I'd guess the people who dealt this mess have never been given one moment's guidance on what makes good code. They're well into the "uninterested in better programming" crowd. What's important to the company is they put their heads down and produce business value.
I agree they are pretty much "unreachable" re most of the topics we toss around out here. Maybe if management sees that code quality can have a significant impact on the cost, or even the possibility, of delivering business value in coming years they can try to affect a change in culture. I've had darned little luck from the bottom up. And the original author of that 5,000 line monster is now the boss. Not holding my breath for change.
I do consulting for several companies and so far I've only seen ONE guy who buys and reads books, and he's not into development.
Of course there are many who read blogs and books and we see them here, but there's a BIG bunch of people who just don't care.
So if the three personna are contextual states that can be wore (like disguises) by a single individual, Why the 20/80 is not? Why is it different to be disguised as Mort than to become temporarily part of the "let me pay my bills" 80%?, or maybe it's just I that can't see that this is kind of obvious by putting the two ideas together (actually I don't see nobody supporting/commenting on this).
OTOH, inspired by Jeff's first conclusion: Is there some place where the "true brave coders" throw snippets of code for the masses to rant, dismember and insult it/him? (maybe called "Bash my code"). I mean, not just a place like worsethanfailure.com where people show *other's bad code* to be bashed up, but where, "in an ultimate act of humbleness", you post *your own bad code* in order to improve yourself as coder more than to improve the code itself.
And finally, I don't know how you English speakers have transformed the "vocation" ("strong inclination or impulse to follow a particular activity or career" or "function or station in life to which one is called by God") into "vocational" being the definition of the people that is on the 80% that doesn't care and just wants to pay the bills. Quite a strange false friend for spaniards like me I think :-/
Please stop writing posts on this stuff. The comments are recursively depressing. The problem is not between open source and MS. The problem is not between full-timers and part-timers and the problem didn't go away once we stopped working in machine language.
What purpose does this kind of discussion serve? As an electrical engineer I have never experienced any caste system within my profession. The idea of looking at a colleague as a Mort ASIC designer or an Einsten ASIC designer seems childish. There are those that are more dedicated or more experienced than others as in any profession, but to assign degrading or belittling names to "80%" of your co-workers seems disrespectful and unprofessional.
For some reason this kind of techno-taxonomy is OK in the world of software engineering and I have never understood why. It seems almost pathological.
Given the projects I've seen, I'm wondering about the 80% of organizations that can't even begin to pass the Joel Test. No version control, no real project management, the endless and repetitive execution of McConnell's "classic mistakes." Maybe it's the folks we work for that keep the majority of developers in the average level. Or maybe I'm way off.
In any case, everyone falls into some place in the spectrum, whether it's their career, knowledge, IQ, personality, temperament, etc. So really, should anyone be offended by this notion? Consider also that at any given moment, individuals are rising from noob to novice to expert and beyond.
I think you pretty much nailed it.
In the days of little memory and processing power, no UI, etc., those people had skills (e.g., see grc.com).
Amen JS - Amen.
It seems rather odd to me as well. People seem to be interested in doing it, though.
The whole conversation is frankly is odd to me... I have better things to do than sit and ponder how I can reach people who have NO INTEREST in being "reached".
Been reading a while - never posted.
The question is: How would you class myself.
Used to write FROTRAN on IBM mainframes and VAXes - these days I don't write anything. But I like reading to see what is happening in the field.
Doesn't matter - just curious.
I'd say that the 80-20 analogy applies to just about any profession you would care to name.
You have a certain segment who are interested in learning new and better things, having interactions with others to hone what they know, and adding what they've learned to the collective wisdom. Some are more involved with this than others - there are always differing degrees of effort in this area.
Then you have those who only want to do their job. They don't want to learn something new, they don't want to add anything, they want a pay check so they can go out and do other stuff at night and on the weekend... maybe even just put food on the table. They are basically glorified "line workers" just like those who work in factories. Their work does take some brain power as they must do some thinking about what they're doing... but they want to invest the minimum effort.
I missed the original post because this was a busy week for me, but I have seen both these types of people, even in the small business I work for. I don't do much programming anymore - it's just the way the job falls. But I try to at least read and keep somewhat abreast of the new things going on. No matter where you work in IT - at least knowing or having heard of new developments gives one a leg up when doing your own job. Being informed seldom goes to waste and may help in unforseen circumstances.
"For some reason this kind of techno-taxonomy is OK in the world of software engineering and I have never understood why. It seems almost pathological."
Unlike Electrical Engineering, there are no barriers to entry for software developers. You can spend 5-6 years earning a masters in Computer Science, only to work under someone who never even considered going to college.
In a way we are like auto mechanics. Just as they are constantly hounded by people who think because they can change their beak pads they know something about cars, we are hounded by people who think they can design software because they wrote a script or two.
Imagine if every person you meet says, "I installed my own car stereo, so I know building a new dual-phase signal processor with 100X amplification and no fidelity loss is trivial."
We make these distinctions because the only alternative is yelling like Tarzan and throwing power-supplies at peoples' heads.
"The whole conversation is frankly is odd to me... I have better things to do than sit and ponder how I can reach people who have NO INTEREST in being "reached"."
Personally I think it is a waste of time, but I understand why we do it. In the end, we are stuck cleaning up the mess they make. In fact, these people are often our managers and we are forced to help them make the mess.
How about this analogy based on database, and not partioning on Windows-Linux divide?
Given a database and a query:
A 20% developer can look at a SQL statement and then write the tuple calculus/algebra behind the evaluation and the pseudo code for the query that generates the most cost-based optimized output
A 80% developer would just refer to a SQL book and then generate an SQL query, that just gets the required results, not even knowing what is cost based optimization.
I struggle with all categories similar to the 80/20. My main beef is this notion that you have to spend x amount of weekend hours doing things like installing Linux partitions, playing around with VS 2008 yada, yada. When I am at work, I try to make my programming and development skills better. When I am away from work, I try to make my personal, family, spiritual and relationship values stronger. (not that all these cannot overlap). Not sure...I have always felt a little lonely for the guy that spends his weekends and nights playing with his computer. We programmers need to get out more in general.
Coming back here catching up on the comments I realize that I was trained to be Einstein, seeking Elvis as a role model in a market where I was expected to be Mort -- on steroids.
When I read all of your comments about how Mort is a hopeless case with no will of his own but getting home after five, I feel obliged to point out that Mort probably knows more about good practices than you might imagine. It's only easier to think of him as horror incarnate.
If Mort didn't become a rockstar, it's due to a lack of standards. His first blame was to accept working the way he does. And because of that, he learned to grow within the constraints that were given to him.
I am guilty of being any of the three (stereo)types at various times, depending on circumstance.
Better than average blog post this time compared to the previous. I'd say it was in the top 20% :) /duck
Excellent piece. Really thought provoking. But after some thinking on the subject and I was wondering... Isn't it pretty much the same in any craft or profession?
Paul Vick is right, if we want to get anywhere we HAVE to stop pandering to Mort. The more hack-writers we have in the industry slapping together shoddy code, the worse the software industry as a whole will become.
I didn't start off cozily dropping controls into a WYSIWYG and slapping together websites, and I'm glad I didn't. I have yet to meet a good developer who started out that way. My first IDE was NotePad, and even to this day, I only use Dreamweaver because the code coloring makes things more pleasant and snippets make life much easier. I NEVER use the WYSIWYG.
I use VB, too. That's because my brother knew it and he helped me learn it(he helped very little, it was mostly me). I also like VB because it's actually quite CLEAN. I want to rip my hair out when I use C++ because it never makes any damn sense. There are like 500 different type libraries out there, and every time I use C++ I learn about a new one. The names of functions rarely make any sense, random functions have reserved variables that have to be a certain value. C++ is just too damn esoteric, and it frustrates me to no end. So I stick with VB, and it works, very well, and I don't waste my time trying to figure out what the hell an LPRANDOMNAMETHATMAKESNOSENSE is.
I'm venting, I know, I just had to write an ISAPI filter earlier this week, so bare with me. Back to the point, slipshod VB/Access/.NET developers are out there every day chugging away at really terrible code, and some day it's going to get so bad that whoever they're working for will have to call in the cavalry, the Einsteins or the 20% developers, to fix it all. I've actually done this myself, several times. Imagine how much productivity is being lost, how many new paradigms aren't being developed, how many blog entries aren't written, and how many killer apps aren't developed, because the good developers are too busy cleaning up after Morts.
Maybe that's why IE6 was around so long? Microsoft hired some new developers to work on Vista and the IE team had to be pulled to fix their work. Just maybe.
This has set off an alarm in my mind...
yes i do read this blog religiously(and jeff you get all credit for it...)
and yes i also do agree that i belong to the 80% of the crowd and i'm still in my earlier stages of my career...this has been an eye opener for me(or ego squasher for some)
what the best thing that can come out of this post, especially, is that we can expect the ratios to change a bit in future...lets say 3:1 from 4:1
what say Jeff??
i think becoming an elite programmer is a step-wise process.Honestly,you can't be a 20%'er just when you started programming or programmed a few months.You graduate from the 80%er squad to the 20%'er squad just as becoming a Mort then an Elvis and finally an Einstein,it's basically like this:when you get comfortable you are bound to seek new challenges.i bet you'll not be satisfied with "Morting" around all the time you'll certainly get bored and want to try doing stuff like an Elvis or Einstein.So don't be so pissed about where your conscience is placing you ,just console yourself with the fact that you'll graduate and move into a higher rank (only if you dedicate yourself to programming)and stop steaming at Jeff just because he provided a scale,your conscience weighted you and obviously you did not like what you saw :).
ps: Jeff, an 80%'er sent you an email (me = gogole = Donald) requesting assistance,don't you think it will be a good idea if you assisted ?
For me the question is - do we really want to reach this 80%? Or is it maybe a good idea to improve the performance of the better 20% to be enough to write all the software, and let the 80% do something where they are good at (I think everybody is good at something, it's just not always their job). I'm reluctant that we accept that we must live with people who suck at their job.
What about the fact the for the standard developer that codes a solution to a spec is doing the equivalent of factory work. There are thousands of programmers that are able and willing to to the job and most likely for a lot less cost.
I feel my major part of the puzzle is a full understanding of the problem along with how to code it. If I don't understand not only the business rules but the reasons behind them then I'm just blindly coding a solution.
When you create software do you not have an image of who you are creating the software for.
I am glad that the development tools were created with all these different types of programmers in mind.
How many programmers really try to imagine the people who are going to use the software that they create? What knowledge and skill are they bringing?
We can learn something from the persona approach.
Doug (not the previous commenter named Doug.)
As I was reading your post, I realized that the meat of what you are saying demonstrates the problem-solving mentality that makes you a great developer. You see a problem (Majority of the software development community is not trying to improve their craft in lines with the technology) and you want to try and find a solution. That attitude in itself, I would argue, is what puts you in the 20 %ers. I agree with the problem, but not necessarily with the proposed solution.
IMHO, there are 2 general ways you can try to motivate a person to do something: push them from behind or pull them from the front. Using my non-vast experience, I believe it is more effective to pull from the front. The main reason being is that it is important not to slow things down just because some people can't keep up. I agree that the majority of the people in the software development community don't care about this craft or even look at this profession as a craft. They simply want to collect their paycheck and go home. Going and trying to help them get to the same level as you are will only slow down your personal progress. It is very easy to become entrenched and swalled up in the political BS and excuses that arise when you try to "help" the other 80 %ers.
Instead, keep paving the path and widening the gap between the 2 camps and I believe that will have the desired result you are looking for. At some point in time, if the gap keeps widening, businesses/people are going to notice it and stop hiring the people in the 80% camp. This is, overall, a good thing. I'm not being cold-hearted here. The 80 %ers do not enjoy their job. Therefore, they are not happy with their lives because they are spending a significant percentage of it on something that will never lead to personal success. They should be pursuing something that they _DO_ enjoy and _WILL_ find success. The craft of software development is extremely difficult and if you are not dedicated to constantly improving the craft within yourself, you will be overcome with frustration and ultimately failure.
Anyway, I hope this does not sound too pompous, but ultimately, I want to encourage you and the other 20 %ers to keep doing what you're doing because it is significant and does improve this profession.
I've gotten 2 einsteins retrenched this year, taken over their code, now I get 5 callouts a week fixing the bugs I slipped in: an extra $270 a month for the mortgage. All the remaining Einsteins think I'm just imcompetent. Fooled them good. And... I've just been put on project managing a conversion from the legacy something-or-other system: been getting free lunches from reps every day. I get to pick my own Elvises too for the techie work. Even threw some contract work to some fellas from my old job. Should be able to slip some skimming code into the old system during the conversion, hidden in all the spagetti, while the coders and auditers are bogged down on the decoy, then I can that new system, get the glory and bonus for saving heaps of money. Those mainframers from the 60's created a Y2K retirement plan, so why shouldn't I create one?
I really, really, really want to belong to the 80% group. Always go with the majority. Blend in with the crowd. Don't stick my head out. Be mediocre with the rest of the gang. Cool instead of Geek. I want to belong to any club that would have me.
I’m not offended at all for belonging to the 80% bunch. Hell, I must be the laziest programmer out there, and get away with it.
Sorry, I’m just letting off steam. My evaluation came through this week. “People” don’t understand me when I speak; my speech is too technical (for her). Also, I’m the “bottleneck” of the department (being the only programmer) even though nobody gives me any work. And when they do, I normally solve things in five minutes. Being lazy, five minutes work is all right with me :-)
This year, I’ll be working on being mediocre and work one hour on five minutes jobs, and I’ll try to belong to the 80% crowd, and suck up to my boss just to get a really mediocre evaluation... Oh, forget about that. I’ll be looking for another job next year. There might be companies interested in hiring a smart person that gets things done (Joel do you hear me?).
Please stop writing posts on this stuff. The comments are recursively depressing.
This is the pinnacle of entertainment! I chuckle at some of the posts and comments just as if I'd fragged someone at close range with a rocket launcher in Quake! How can you get depressed with this kind of stuff flowing across your screen? There's more positioning going on in here than on the senate floor. I used to use comics to get a laugh, but the real thing is much more enjoyable. (I bet you all are getting a kick out of the feeding frenzy too)
Jeff, could you do some write ups touting some code dogmas like "Goto's are the sign of a bad programmer" or something like "Only morons do deep nested ifs"? That would be fun too. Maybe do some sensationalism like "Good Coders don't cry (or whine in my blogs)" or "Frankenstein looks better than most of the code you junkies put out there". Maybe even start your own version of the Java Ranch where we can submit our code and everyone can blitz us. Okay, sorry... I'll stop there.
I agree with the 80/20 post and think it's too bad that so many were bothered by the self-imposed 80 percent tag, even if 80 percent is not necessarily bad! Now on round 2 where we are dealing with personas and the message is being taken more in line with what it was intended for the discussion continued quite nicely with all of the expected humor. I refrain from citing those comments which have given me the most enjoyment since the sensitivity and insecurity behind them might get me stalked and killed.
Really though the nail has been hit on the head several times. I feel it is such a shame that so many people equate being "good" with a hefty income and/or an Alma Mater. Don't even get me started on those of us who claim some sort of viability because we have mastered a niche technology or market. If a person's drive is the paycheck and nothing more then that is a mission field I'm not interested in addressing, but if a person just doesn't know any better.... that is the audience that has a chance.
I'm betting most of the folks scanning these blogs are constantly trying to figure out how to become better. "Git R Done" just isn't enough and "Done Right" is the evolutionary process we are all moving through as our world changes. On your persona level, selfishly speaking, I need the "Mort" beginning/mid level technical folks around to do the mundane and tedious things that keep me from getting the big stuff done. The beauty is that the smaller tasks are usually a rewarding challenge to the inexperienced folks. (Being a small fish in the pond is sometimes such a blessing)
I appreciate your call for us to try pulling the unreachable into a reachable state and am thankful for all of those gone before you that in a similar fashion punted articles and appeals directed to the programmer or technology user that is caught up in day to day minutia, missing the big picture in front of them.
Maybe we should get in touch with our feelings here...
Some of us feel like a genius walking around in a flock of stupid sheep (Make a choice: be a wolf or a shepherd)
Some of us feel like a stupid sheep walking around in a flock of genius (Make a choice: get smarter or get lost)
Some of us feel like a genius walking around in a flock of genius (Make a choice: work together or get nowhere)
Some of us feel like a stupid sheep walking around in a flock of stupid sheep (Make a choice: get help or get nowhere)
RE: I firmly believe it is our job to leave the craft of software development better than we found it.
If the majority developers were less insular, less selfish and better communicators then I believe this statement would be more easily achievable – from my experience an agile\xp\scrum environment helps to address these issues.
In agreement with 'thatguyintheback on December 2' when he talks about money being the motivator. But if you're in the 80% group, remember that you will undoubtedly be fired and your work will be outsourced to some third world programming company. Why not? They can do exactly the same 'boring/repeating' stuff as you/me/we, but much cheaper.
Attention Management: I do my best work when allowed to work as Elvis. And I've written some real crap when forced to work as either Mort or Einstein.
Its always context that decide what function or behaviour that is needed to set a particular type of persona.
I am not suprised people try to fit one typ of persona into a simplified categorical organized subtype.
The risk by doing so which rarely is talked about is the following,
what happens when the programmer identifies with the stereotype?
And that will happen....count on it.
If they are in the 80% category that could be devestating but the 20% who do the same can create earthquakes and run satelites into the surfaces of Mars due to a progam error.
Its been popular to try to map peoples behaviours into some category, what isnt taken into acount is how we shift behaviour due to context.
The test profiles a lot of companies buy are working as far the enviroment is stable, when it shift due to economical or other variables they profiles goes out the window.
I'm fortunate, and I know it. Nearly half of my 20 developers fall into the 20% category. As for the others, I regularly share links to resonant Coding Horror, Bug Bash, Worse Than Failure or even Shark Tank articles, hoping to plant the seed of interest in habitual skills improvement.
Great article... and you are indeed correct, software development is more than a job, it is a craft, heck it is a life!! But my fear is that the better we get, the smarter all the IDEs get, then would there not come a time when even the average Joe can fire up an IDE and write software? And when that happens, where will our craft end up in?
Both of Jeff Atwood's posts on this regard aren't nearly as inflammatory or as divisive as they probably ought to be. Let's be blunt and clear:
**In the profession of software development, almost nobody has any idea what they are doing.**
Jeff is right that all of us who are talking and thinking about it are the only signs of hope, but there's a Coding Majority out there that just fires up editors and clickety-clacks away without another thought. No other technical profession in the world is so utterly dominated by unwashed amateurs. No other class of systems is as unreliable and poorly managed as software. We've got to do something about this. The question is, what do we do?
I personally teach new developers at a University course and try to impart a sense of scale and responsibility. What do YOU do? How do we stop this madness?
I think we need social networking sites for programmers where the "wisdom of the crowd" can elevate everyone's standards. I've become more active on IT Toolbox but its focus is too broad for developers. I'm also blogging on ASP.NET Weblogs which is a good way to participate in the ASP.NET community. I attended an Amazon web service developers meeting in Second Life just to see how that might work even though I don't use Amazon web services. Yesterday I found some YouTube videos on Visual Studio 2008.
"Earlier this week I wrote about The Two Types of Programmers." Rather, I'd say you commented on someones' post about 'The Two Types of Programmers.'
"a good start would be to stop calling it a craft and start calling it an engineering discipline!"
Software development is not an engineering discipline. I have a B.S. in Aerospace Engineering, and I develop Web applications for a living. "What is the best way to implement this feature in my application?" is an open-ended question. There is no criteria for judging the validity of any solution vs. any other solution. As long as that is true, software development is not engineering.
When you have a constantly changing ecosystem, there is no stable base on which to build an engineering discipline, i.e. "I know the melting point of aluminum will be the same next year" vs. "I have no idea what features will be supported next year in my programming language of choice."
Engineering would require a frozen microprocessor architecture, a frozen language, a frozen compiler... and obviously that will never happen. So, software development will continue to be a craft.
I have worked with each of those 3 kinds of developers and I can say the Einstein programmer can be JUST AS BAD AS MORT.
These guys can talk in circles and re-invent the wheel at every turn.
I see the three types of programmers more used to picture how Visual Studio is going to be used, not to indentify who is up to snuff and who smells of lazy.
I have bad news. Earlier this year, I taught a community college, a course called "Enterprise Web Development". I created the curriculum myself, and we looked (briefly) at scripting, standards like XHTML, CSS, databases, security, privacy, etc.
In a class of 24, only four students made anything more than a token effort. Some genuinely had difficulties (one older guy still couldn't, by the end of the course, use PHP to connect to a database and extract some data from it). Most, though, were apathetic and wanted only to be spoon-fed information that they could regurgitate for tests.
Meanwhile, the administration's only concern was having as many students as possible pass; the dean asked me politely (but firmly) to change the 40% project into a 40% in-class lab. And to make the final easy to offset the low (class average about 70%) marks.
In other words, the situation isn't getting any better.
These threads show a good deal of misunderstanding about those personas. These are not Mort=dumb, Elvis=average to good, and Einstein=genius. The original intention was for them to encode styles of problem solving. I'd claim the fact that they became so closely attached to languages was a great disservice, and a mistake.
Mort explores, is opportunistic, and trusts in the tools and solutions provided until betrayed by them. Elvis balances understanding the tools or solutions provided with making progress, and typically trusts with some verification. Einstein must understand before commiting to solution or tool, and extends no trust to something until completely understood. You can defintely have a 'dumb' Einstein, and a smart 'Mort'.
It's difficult to have an Einstein that does not want to learn, but it is possible. A lack of trust and understanding doesn't necessarily come with an open mind to learn. Also Mort's trusting of tools doesn't always mean a lack of curiousity, just that it is not necessarily directed at the craft of programming.
It should also be clear that different problems will have a most appropriate problem solving style. It's good to have a paranoid untrusting Einstein if you are working on a critical component. It's better to have an exploritory Mort if you are working on a fluid, changing environment, where a fast solution is the most important priority, or quick prototyping is king. Most software developers will reject the last statement claiming a careful pragmatic approach is always better than a 'fly by the seat of your pants' approach. Most software developers also don't run a business and fail to balance the business concerns with the software concerns.
The only saving grace to the current misunderstanding is that most people self categorize as Elvis or Einstein. At bare minimium that means they might understand their needs are not the same needs as Mort.
Glad I read this Jeff,
You went a long way to clarify from the first article. Thank you.
Good stuff as always. I agree with the assertion that you made the 20% sound like the elite. When, in fact, neither is holders of the keys. What I am warry of is technology for technolgy's sake. And the pushers who think they are making the world a better place by blindly pursuing that latest technological fad. I may be a very small contingent, but I still deliver a lot of DOS-based servo controllers.
It comes down to footprint, and 'good enough' I an deliver an entire OS and application in less than 1MB. My servo loop is running at 10khz with a 1usec jitter.
I've been oh so tempted and have even tried to port my stuff to RTAI, and of few other flavors of real-time, but I always end up concluding that DOS works better.
I'm not blind, and I know DOS is not keeping up (though I love my FreeDOS and swear by it), but this is again, an example of not upgrading for technology's sake. Windows and Linux can't do what I do easily from my DOS prompt with my little Borland and/or Watcom C++ compiler.
I work with a lot of junior programmers, and most insist are using the latest version of C#, which is fine, but if you are using the compiler to sum a long line of numbers, where is the benefit?
The two main factors should govern tool use:
Familiarity is obvious, though some times we need to 'invest' in learning new stuff. The benefits of the new tool outweight the learning curve.
Efficiency: now this one can be interperated a bunch of different ways. Is the programmer's time more important than the CPU cycles used, or drive space? Licenses, overall cost. Even beauty can be considered.
My take is that most shoe-horn familiarity into justification of a course of action without considering efficiency. This somewhat defines that line of 80/20 to me.
Thanks for the post
If programmers tools (aka. APIs, languages, frameworks, etc...) were perfect, we could all happily be morts and still get the job done.
Because this will never happen, we will always have to either depend upon an Einstein or be an Einstein ourselves.
I mean, not just a place like worsethanfailure.com where people show *other's bad code* to be bashed up, but where, "in an ultimate act of humbleness", you post *your own bad code* in order to improve yourself as coder more than to improve the code itself.
Isn't this what open source is about?
Please stop writing posts on this stuff. The comments are recursively depressing.
If we can't talk about it, or do anything about it, what do you propose?
Unlike Electrical Engineering, there are no barriers to entry for software developers. You can spend 5-6 years earning a masters in Computer Science, only to work under someone who never even considered going to college.
That's exactly it. So it's incumbent upon us, as peers, to cultivate the people that are good, and pray they eventually outnumber (or at least counteract) those that aren't.
Thanks for clearing that up Jeff. I really am amazed at the people who presume to get by without curiosity. They really are unreachable. But that is the American attitude. The majority of us expect to have everything handed to us just because we are Americans. Between that attitude and our President's war mongering, the face of America is changing for the worse right before our very eyes.
First impression: So what, what's wrong with that?
This clarification and the prior article are interesting, it makes us think about what we are.
I believe many people reacted on their first impression, like if it was wrong to be part of the 80%. And there is nothing wrong with that, I believe.
Software development is now an industry. As in so many other fields, there are "leaders" and "followers" (and many other qualifying terms in between, I dont't like black or white, positive or negative judgements, especially when speaking of people ...)
The so-called 80% "() know exactly enough to get their job done". Great! Who can blame them of having the competencies needed?
More than a century ago, while Gustave Eiffel was building the Tour Eiffel, his colleagues engineers or architects were building conventional housings, offices, straight bridges and train stations.
Not so interesting, nobody can recall their names, etc Was it useful? Of course yes! Family lived and still live in these housings. Perhaps many of these architects were passionate about their jobs too, go figure? At least, there was nothing wrong with that, these architects were needed. And we still need both types of them ...
What I wanted to say even for the previous post is that this situation is not IT-specific. There are 20% of people who are kinda creative guys, who design sites, advertise, draw, sing and play in the movies. Bohema. Other 80% work in mines, drive buses, wash cars, build houses. They create most of the things.
In the same time, most of the jobs have the same segregation. 20% of cooks work in good restraints and visit culinary workshops. Others work in McDonalds.