Contrary to myth, there aren't fourteen types of programmers. There are really only two, as Ben Collins-Sussman reminds us.
There are two "classes" of programmers in the world of software development: I'm going to call them the 20% and the 80%.The 20% folks are what many would call "alpha" programmers -- the leaders, trailblazers, trendsetters, the kind of folks that places like Google and Fog Creek software are obsessed with hiring. These folks were the first ones to install Linux at home in the 90's; the people who write lisp compilers and learn Haskell on weekends "just for fun"; they actively participate in open source projects; they're always aware of the latest, coolest new trends in programming and tools.
The 80% folks make up the bulk of the software development industry. They're not stupid; they're merely vocational. They went to school, learned just enough Java/C#/C++, then got a job writing internal apps for banks, governments, travel firms, law firms, etc. The world usually never sees their software. They use whatever tools Microsoft hands down to them -- usally VS.NET if they're doing C++, or maybe a GUI IDE like Eclipse or IntelliJ for Java development. They've never used Linux, and aren't very interested in it anyway. Many have never even used version control. If they have, it's only whatever tool shipped in the Microsoft box (like SourceSafe), or some ancient thing handed down to them. They know exactly enough to get their job done, then go home on the weekend and forget about computers.
As I work with teams of programmers in the field, I'm consistently struck by the yawning abyss between that 20% and the rest of the world. It makes the divide between the open-source and Microsoft camps look like a shallow ditch.
Shocking statement #1: Most of the software industry is made up of 80% programmers. Yes, most of the world is small Windows development shops, or small firms hiring internal programmers. Most companies have a few 20% folks, and they're usually the ones lobbying against pointy-haired bosses to change policies, or upgrade tools, or to use a sane version-control system.Shocking statement #2: Most alpha-geeks forget about shocking statement #1. People who work on open source software, participate in passionate cryptography arguments on Slashdot, and download the latest GIT releases are extremely likely to lose sight of the fact that "the 80%" exists at all. They get all excited about the latest Linux distro or AJAX toolkit or distributed SCM system, spend all weekend on it, blog about it… and then are confounded about why they can't get their office to start using it.
Perhaps not shocking to me, but an excellent and important reminder for everyone, nonetheless.
I often think we're wasting our time writing blogs which are largely read by the same 20%. In my experience, there's precious little trickle-down effect from the alpha programmers to everyone else. And if there is, it takes decades. If you really want to change the software development status quo, if you want to make a difference this year, you have to help us reach outside our insular little group of alpha programmers and effect change in the other 80% of the world. And that is far, far more difficult than preaching to the converted 20%. It's why I admire people like Scott Mitchell so much, because he understands the importance of reaching out to the other 80%:
I like programming and really enjoy ASP.NET. I think it's neat and fun and interesting and cool how you can go from literally nothing to having a data-driven web application that can be used by people around the world in an amazingly fast amount of time. Furthermore, I want to spread that enthusiasm to folks. I want to say to those who may have never programmed, or to those who are using competing technologies, or to those who are just starting out - "Come over here and try out this ASP.NET stuff. Here, let me show you what it can do!" That's why I teach (which pays pennies compared to consulting). That's why I write (which pays better than teaching, but still is not anywhere near as lucrative as consulting). That's why I give free talks at local user groups and community-sponsored conferences here in Southern California. To get the word out!To me, saying that titles like Teach Yourself X in 24 Hours cheapen the craft is tantamount to saying, "Our club is full. Go away." It's not saying, "Let's welcome the newbies and get them excited about this technology." Rather, it's saying, "Newbies are ok, but they must first realize how hard this is, how hard we've worked, and how much more we know than them." I worry that such sentiment from the community will come across as pompousness to those very people whom we should be welcoming.
I wish this was easier for me, because I agree with Scott. I'm terrible at the things he's describing. I think the true measure of success isn't how many alpha geeks you can get to pay attention to you. It's how many typical, average programmers you've reached out to, if only in some small way. If you really care about the craft of software development, you'll help us build that bridge between the 20% and the 80%, too.
Update: This was a controversial post. See my followup to this post for further explanation.
You should be ashamed of your generalizations. This coming from the guy who recommends McConnell's Code Complete. You should do yourself a favor and go back and read the Chapter on Personal Character.
If you have that narrow of a view to see the programmers of the world as a 20/80 percent rule and what makes up those rules, you need to get out of whatever area you are in. Get out into the industry and explore the backwoods areas and I think you'll see it doesn't break down as nicely as some 20/80 percent theory.
Chris Drake on November 26, 2007 7:02 AMSo when your new blog coming out? the one which will build "that bridge between the 20% and the 80%" because ive learnt nothing from this!?
ponderer on November 26, 2007 7:03 AMWhile I disagree with the description of what makes up a 20%'er, I completely agree with the sentiment. It isn't tangible things like use of Linux or open source contribution that defines the border between the 20 and the 80, it's the attitude.
I think what I found most interesting were the comments. People seemed to miss the point of the article and started taking offense to their classification instead of asking how they can bridge the gap. I work with a huge number of 80%'ers, and I am frustrated by my lack of progress with converting them. I agree, I sometimes forget that they don't want to become part of the 20%, but I believe that they do really want to excel at their jobs. Being part of the 20% would do that. Any tips on how to help make that transition.
Josh on November 26, 2007 7:07 AMThat description of the 80% folks ("not stupid, merely vocational") does not match my experience at all. Sure, there are some programmers like that, but I think they make up the bottom 20%.
In my experience, the middle 60% are people who aren't programmers by primary vocation; they are engineers, secretaries, rocket scientists, accountants, and interns who use computers at their job and discovered they have a knack for it. They're the ones who friends, family, and coworkers come to and ask "Can you fix my computer?" They have no formal training in programming or computer science, they're mostly self-taught. They are very, *very* smart.
The programs they write get the job done, although their code is often laughably bad. Once they see or are shown a better way to do things, they usually laugh at it themselves. They are enthusiastic and learn quickly.
Joe on November 26, 2007 7:08 AMYou seem to have a theme in your posts of "I'm such a great programmer. Everyone should listen to me because what I say you should do is right and everything else is wrong." For the most part this isn't a big deal, it's your page and all, but then you go and make a post like this and I wonder why i bother to keep you in my RSS reader. Perhaps you need to reread the quote from Scott Mitchell that you claim to agree with
'Rather, it's saying, "Newbies are ok, but they must first realize how hard this is, how hard we've worked, and how much more we know than them." I worry that such sentiment from the community will come across as pompousness to those very people whom we should be welcoming.'
Like I said, it's your site and all, but if you are going to complain that you feel like you are only writing to this so called 20%, then perhaps you should figure out why. You might think that you are only trying to educate people, but if so, you'd be writing to more then that 20% because others would be seeking you out as you serve a need. If you are writing to show off how smart you are, then yeah, you're only going to attract those people who also think that they are that smart and want to feel superior.
As much as a joke as my professor meant it, there is a sad sad truth to the comment he made years ago. To paraphrase, Linux got popular in academic and "nerd" circles for one simple reason, MSFT made windows such that everyone could use a computer and the geeky types needed a new way to feel superior.
Blind on November 26, 2007 7:14 AMI think the 80% should be split again into 5% and 75%. 75% would follow the description you gave for the 80% but the little 5% block, which I think I belong to, would be described as 80% but striving to become part of the elusive 20%. I love programming, I like reading about it and doing it, I try to keep up with the latest finds but i find it hard, but i like to think this puts me in a different group to the 80%!
FooHoo
FooHoo on November 26, 2007 7:15 AM80 - 20? I don't think so.
I wouldn't consider myself one of the unwashed 80% that isn't passionate about computers. However, I definitely wouldn't consider myself one of the 20% that dates his computer either.
Maybe the fact that I said that makes me an 80%. However, I know from experience that having a healthy balance of computer vs non-computer interests is far more healthy than spending all weekend on your computer. If I'm an 80% because I don't date my computer well... I guess I'm happy to be the 80%.
This generalization is inaccurate and potentially harmful in my opinion. I think there are far more than two levels of programmers.
Cecil on November 26, 2007 7:16 AMI've never thought of myself as elite (1337) or anything but slightly above average. This post made me think of why I'm in the software engineering 'vocation.' I realize that this is something that I do well and makes me some cash. My heart really isn't into the next greatest thing and that's ok. We 80% are keeping the world spinning for the most part.
By the way, thank you 20%ers that keep pioneering. If it wasn't for you we wouldn't be moving forward. You have my admiration and gratitude.
I work to live - not the other way around.
Put me firmly in the 80%. Hell, put me at the bottom of the 80%. Frankly, I couldn't care less.
I'll take the time with my wife and kids, the time to officiate athletic contests, and any other time I can get to do the any of the multitude of things I consider more important than writing code.
Could I innovate? Sure.
But, my time on this rock will be spent working on improving my life not yours.
20/80 is clearly an over-generalization.
The more interesting question, which you have written about many times before, is: How do we distinguish excellence from competence, and competence from incompetence, in our field? What are some well-known, measurable, objective criteria?
You've written about fizzbuzz, a good acid test IMO. I use many others, and I'd like to hear your view on more.
John Pirie on November 26, 2007 7:19 AMIMil:
I believe I am part of the 64%
But to tell you the truth, I spend tons of time learning various technologies, but I never apply half of them for commercial applications. Hell I'm happy with the drag and drop nature of todays world. I started with VB 4 on Windows 95, the moved up to VB.Net and then to C# with short weekend affairs with various languages on the way. I still play with linux (mostly just as a web-server, because Visual Studio is just to hard to replace), but I still have never done any of the uber-geek things that 20%-ers do... So I am stuck in the 64% area, thinking I CAN do that, but I DON'T do it.
Jeremy on November 26, 2007 7:22 AMI've noticed this divide (maybe more of a gradient than a clean line) is true for all other disciplines as well - for instance: business analysts, project managers; even artists. You are really just describing top performers versus the pack. Great read though, as usual.
repoman on November 26, 2007 7:24 AMI dont like the way you describe the 20% as 'leaders, trailblazers, trendsetters' because they generally are not. The top programmers I have met (10 years exp) have been people that are extremely intelligent hardcore programmers who can code something well and produce a solid system that has been well thoughtout implementation but these people are almost never leaders, or trailblazers or trendsetters. They are extremely good programmers who know their technology and perform their part well. They can be difficult to deal with but when you have their respect and they have room to work freely, they can be invaluable, but not in the ways you described.
The generalization is terrible and a poor showing for you.
Part of the problem is the "my kung fu is stronger than yours" attitude a lot of the 20%ers have towards the 80%ers.
PaulG. on November 26, 2007 7:27 AMI'd say there are 3 types of programmers. There is the 80% that are just there to do the job and put in their eight hours a day. Then there are 18 percent that are passionate, competent coders, but they prioritize their lives above their coding and rarely touch it outside of their job. Then there are the elite 2 percent of programmers that love it so much that they take it home with them - even turning away sex for code.
Justin on November 26, 2007 7:27 AMOh good grief! "There are two types of programmers." That's just total baloney. Few things in life are black and white like that, especially people. And programmers are people.
programmer grrl on November 26, 2007 7:27 AMI agree with "crock of poop". Your message is completely lost because of the nonsense of the 20/80 quote. You should just flush that quote down the drain and more people would listen to what could have been a good blog post.
Matt on November 26, 2007 7:29 AMI hate Linux and find it is worthless crap. Does that mean i'm 80% ? I like things like Visual C#/.net3.5 because they have no need for hardcore developers who are maybe goog at programming, but understand nothing about what a customer wants or needs. You can put someone in the job who does not need to be a "opensource"freak. You can put someone in who gets the job done. And that is the most important thing.
Wolfgang on November 26, 2007 7:35 AMHaha now I know that I belong to the 80%, not like my co workers that are belong to the 20%.
Freddie on November 26, 2007 7:39 AMCrock of poop.
I'm as interested and driven as your 20% but unfortunately, I'm not even as intelligent as the 80%. Incapable of learning.
BOBO on November 26, 2007 7:41 AMYou forgot the third type.
The 80%ers that do not have the time/disposable income to spend tinkering with Linux enough to maintain their 20% status. They are current and aware but their research time falls largely within "company time".
Oh.. i forgot one thing: where do you find a programmer who has to work only 8 hours bevore a release date?
Wolfgang on November 26, 2007 7:55 AMJeff, you missed big time with this post.
I'm not a 20 percenter, but I'm not an 80 percenter as you described either. I don't program in Haskell; haven't even bothered to look at it. I had a Linux box for a year or so because people were talking about it, and I wanted to check it out. I dropped it because it was such a pain in the tail to get anything done, and because I write code for a living and none of my employers or clients were doing anything on that platform.
I taught myself to program back in the mid-80's, starting with Clipper. I added C later (again, self-taught) when I needed apps that were smaller or didn't do database stuff. I worked in Visual C++ 1.0 from MS, working on Federal and State income tax forms for a major tax company. I developed a multi-machine build process using Opus Make, PVCS, and 4DOS batch files so that 10 machines could work together to do a nightly build on 386 machines.
I dabbled a bit with Python, because it looked like it might be interesting, but dropped it because, again, there was nothing I could use it for. Same with Perl and PHP; any web development I do my clients want done with ASP.NET. I work in C# on occasion, but not because it's Microsoft; it's because it's what works for what I need to do. I primarily work in Delphi, because it's absolutely hands-down the best and most productive Win32 development environment; I turn out work in days for my clients that other people have struggled for months to accomplish in VB or VC++ or Java. I work on stuff on the weekends when I have time to spare and the interest in doing it.
Where does that fit in either 20% or 80% as you've defined it?
Your post is another example of why idiotic stereotyping is a bad idea, and making up statistics doesn't work. It's a real disappointment coming from someone whose work I've always respected; I would have thought you'd know better.
KenW on November 26, 2007 7:56 AMSome small percentage of the world is 10x more productive than the rest. They are productive because 1) they can understand what the problem REALLY is, and 2) they can find the easiest way to solve it.
Usually they have a large and varied toolset that can be applied to the problem.
But they don't all use
mihondo on November 26, 2007 7:57 AM I often think we're wasting our time writing blogs which are largely
read by the same 20%. In my experience, there's precious little
trickle-down effect from the alpha programmers to everyone else.
Well, don't feel that way. Speaking only personally, I don't really fit in either the 80% group or the 20% -- I'm passionate about my craft, but I don't have the skill of the real leaders. I am, however, trying to get there. Blogs like this one have been very helpful, and have kept me connected with larger development issues, and have given me much food for thought and fodder for further research.
Even when I disagree with you, you make me *think* about many issues that I wouldn't otherwise encounter in my little isolated "80%" shop.
If you really care about the craft of software development, you'll
help us build that bridge between the 20% and the 80%, too.
And speaking of disagreement...
I don't entirely disagree with the 80/20 assessment, but I do disagree with the characterization of those classes -- it's pretty clear the idea was created by an "alpha" developer.
The difference between the two types of developer is *not* one primarily of skill -- the skill difference is only a *symptom* of the difference, not it's cause. Rather, it's a difference of motivation. The "80%" programmers got into technology partly because it's mildly interesting (perhaps they even had some talent), but mostly because it's a decent paycheck for a respectable profession.
The 80% simply don't *care* about the latest trends, the state of the art, or anything except getting their work done well enough to avoid getting fired -- the best of them may even try for a promotion.
The 20% are impassioned -- they would learn about and practice software development whether there was a paycheck in it or not. The fact that they get paid a pretty decent wage to do something cool is just gravy. As a result, these 20% want to understand -- even advance -- the state of the art, want to have solid tools and processes in place, etc.
Yes, you can reach out to the 80% and try to convince them to be excited the same way you are, but you'll be wasting a lot of energy, because at the end, most of them just don't care.
What the 20% *should* be doing is reaching out to those that have the passion, but not the skill.
Darren Meyer on November 26, 2007 8:01 AMThere's an interesting post on The Onion called "80% of the world makes up 20% of the percentages"
That sums up your latest post.
I think there's a confusion between enthusiasm and talent. I love programming and I am very enthusiastic about new technology. However, I wouldn't consider myself in the 20% because I don't think I'm talented enough. I couldn't write a compiler in a weekend or learn lisp in a weekend. But can 20% of programmers do this? 1 out of 5?
I also don't consider myself a 80%. I like what I do to much and I know more than you said an 80% person would know.
So I must live in the spot right between 80% and 20%. :)
Brian on November 26, 2007 8:03 AMJeff,
Like many others here, I have come to respect the things that you say, going so far as to save the actual posts in my aggregator. I find your writing to be poignant, insightful, and well-written.
Unfortunately, I have to agree with most of the other people here in that this post was a total, steaming pile of dung.
I do agree that there is some sort of a divide. What the number is is irrelevant, I believe, but there is a divide. There are those that are vocational, that draw the line about how much they want to learn about their profession, and don't really go the extra mile in it.
That's pretty much applicable for any profession there is. There is nothing wrong with that. Some people don't have the time or the desire to explore their vocation beyond the time they are being paid to engage in it.
But to go so far and to link a person's passion in this field with a certain set of technologies or by who they work for is absolute hogwash. I am one of those Microsoft guys, I mostly use tools that Microsoft hands down.
I'm also an MVP. I post on average 300+ responses in newsgroups a month. Responses. Not questions. Answers. I help people.
Now, I am not saying that this makes me an alpha programmer. But to think that I "know exactly enough to get their job done, then go home on the weekend and forget about computers." based on the fact that I use primarily Microsoft tools, well...
Let's just say that I hope that you resume adhering to whatever standards you had in place before this post, because this one, IMO, does not.
- Nick
Nicholas Paldino [.NET/C# MVP] on November 26, 2007 8:21 AMI agree with the ones who say that the 20/80 rule is an oversimplification.
Anyway, even in that case, it's kind of clear now fitting in the 20% seems like something to be proud of. However, in my own experience (consumer industry, small companies), I found that people that fit in that category are usually very good at HOW and less at WHY.
Most of the time, people following the cutting edge of technology are very bad decision makers when it comes to find the right fit for a problem.
Pretty much like knowing the inner workings of a car and being unable to drive.
On the other end, you could not ask to the 80% to do that since, following that definition, they are technologically dumb.
So there got to be some other type of people somewhere lost in the count or we have to come to the conclusion that the tools we use or the services we get from computers are way more complicated than they could be just because somebody wanted to try something new when they designed them... ouch.
Straficchio on November 26, 2007 8:25 AMI like the idea but I don't know where I fit. I meet the requirements of each category fairly evenly.
Arron on November 26, 2007 8:26 AMI think I'm somewhere with the boat of people disagreeing with you Jeff. Maybe for different reasons though:
http://conservativgeek.wordpress.com/2007/11/26/our-obsession-with-lists/
Chris on November 26, 2007 8:27 AMI think I am in the 20% of the 80% and in the 80% of the 20%. Both at the same time
8-)
Jorge Diaz Tambley on November 26, 2007 8:31 AMDear Jeff,
A great article!
Thanks for sharing your knowledge and thoughts about the industry and it can certainly help ones like me.
I am in 80%, but going to be 20%. I like reading news and blogs on software updates and other happenings, new software releases and like to attend Microsoft events here in Mumbai, India.
I work in MS technologies but very very curious about open source apps, usually try to find out one that can help me speed up my work on Windows OS :D.
I'd like to think I'm one of the 20%; prior to ten years ago I was active in a number of open source projects (Python's stdlib, innd, and Apache most notably). I installed Linux on my desktop in 1992, and just this weekend I played with getting Rails and C# to play nice together, so I guess I'm not a "routine" programmer.
On the other hand, I'm a parent, and have been for ten years. I don't have time to tinker. I definitely don't have time for the brain-deep sessions of obsession and flow that characterize the 20%ers. By the time I earn the right to spend my weekends without having to worry about my kids, the industry will probably have flown right past me.
The thing about "shocking statement #2" is that you can go to companies full of 20%ers, and still end up at a company that, for one reason or another, has absolutely no geek culture at all. I've never understood that.
Elf M. Sternberg on November 26, 2007 8:42 AMHey Now Jeff,
Nice post, can anyone figure out why people say 'When I go home the last thing I want to do is look @ a PC'? I can never understand that from people in the 80%. Personally I enjoy when I'm home can work on personal projects on my PC.
Thx 4 the info,
Catto
Actually, there are 10 types of programmers. Those who understand binary notation, and those who don't.
MrSquirrel on November 26, 2007 8:47 AM"Another vote for crock of poop. Probably the poopiest post of the year. I work in a firm of 80 percenters. We don't write Lisp compilers at the weekend, etc. Frankly I prefer to spend the weekends with my family, and going up my allotment where I grow vegetables. My eyes can't take more than 8 hours for 5 days a week in front of the screen."
I also don't write Lisp interpreters (Lisp is an interpreted language most of the time btw), but I do recognize what was meant with the 20% group. Since 1986 when I purchased my first computer, I've spend probably the majority of my spare time writing code. And I still do that. For example: when you did your first Sudoku, what did you think: "Oh, cool, a puzzle, let's see how good I am at it", or did you think: "Hmm, a computer program can solve this much easier" and you started hammering out code?
I do agree that the numbers are probably cooked up while writing the post, but that doesn't mean the categorization isn't true. (for whatever numbers. To be honest I think 20% is rather high)
"Yet despite being in the 80% we are professionals, know what we're doing, read books and blogs, use Vault or Subversion, attend DevelopMentor training courses, have Linux on VMs on our home machines (in some cases), and are interested and passionate about programming - especially about C# and .NET. The moment VS08 was released we were requesting our IT admins to download and install it for us. And we do think about our jobs over the weekend - even though we may try to switch off. This does NOT classify us as 20 percenters. We are not leaders, trailblazers and trendsetters."
I don't think the 20%ers are 'leaders'. I mean, is it in the ubergeek's nature to be a true leader? I'm not sure, but I don't think so ;).
What I do think is that the 20%-ers think deeper about subjects related to software engineering than the 80%-ers, but that's not the only criteria. If I look at myself, there's no other profession than software engineer for me. It's not my job, it's my LIFE.
Is software engineering for you your life too? You then might belong in the group which was categorized as 20%-ers. If not, no sweat, you're not a lesser human being. You just look different at Software Engineering. You see, that's the problem here: when someone makes this categorization, you always get a group of people who think they're in group B while they THINK being in group A is much better and therefore find people who recognize themselves as elements of group A arrogant, and/or find the whole categorization pretty stupid.
"The attitude of the likes of Ben Collins-Sussman and Frans Brouma strikes me as being terribly arrogant and rather blind."
Hmmm. So, by recognizing yourself as a 20%-er, you're arrogant when you say so? What I said in my first post does bug me, a lot. Software engineering isn't the same as being a state employed social worker, you're a software craftsman, you need to feed your brain every day with new insights, read new papers, new research, so you can do better today than you did yesterday. Software engineering isn't about clicking buttons in a designer or pulling controls on a canvas. It's also not about joining ALT.NET or using unittests just to be elite or hip. It's about the mindset that you can create software which truly resembles the best solution for the problem recognized. That doesn't mean you should use the latest and greatest or you'll be in the 80% group otherwise. It does mean that you should think deeper than the average human code generator. I think that's what makes 80%-ers be 80%-ers: they react on impuls, not think deeper and be creative and find a better solution.
But admitted, talking about other people like that can be considered arrogant. So be it.
Frans Bouma on November 26, 2007 8:48 AMI am an 80%! I take my work seriously during the work day but forget about it (more or less) after business hours (strict 40 hour week). I may still read the occasional ACM journal or talk shop after work, but for the most part I don't code after hours. In college I probably was one of the 20% though, or maybe I was just one of the few that groked it. Like has been said before, life is too short.
Bill on November 26, 2007 8:52 AMI'm one of the 80% and frankly, I'm sick of this field. The 20% go off on their own and write overly complex programs to show off their knowledge and then try to force everyone else to program inside their box because, they're an "expert".
I'd much rather switch to another field where people with my talents are few and far between. There I can help to actually make a difference instead of wasting 8 hours of my life everyday pumping up someone's ego by following his "brilliant" code design.
Meanwhile, he's probably contributing to the pompous comments strewn across forums and comment pages just like this one.
John on November 26, 2007 8:53 AMYou are absolutely right about the chasm. I don't know why everyone is getting so upset about the 20/80 split - it's merely a simplification to get the point across.
I'm intelligent, good at my job, like writing software, try to keep up with the trends, and yet I'd put myself in the 80% category. The ideas and techniques described by the 20% group sound like tremendous fun, but often it seems like there is a huge disconnect between the environment and jobs they work on vs. the more old-fashioned environment that I am in. I am 100% busy at work already and 100% busy at home - I'm not going to contribute to an open-source project, learn 3 new languages, and read some one else's source code every week. Agile methodology, pair programming, daily code reviews, pure test driven development, 3 matched monitors, and Aeron chairs just aren't going to happen in my situation.
I learn a lot from your blog, other blogs, podcasts and books - I'd like to thank all you 20%ers for the hard work you do. I would also appreciate it if you kept in mind that your audience includes some of us 80%ers who are intelligent and care, but we work in a different universe than you. And I think that was the point of your post.
Elena on November 26, 2007 8:54 AMDear Jeff,
A great article!
Thanks for sharing your knowledge and thoughts about the industry and it can certainly help ones like me.
I am in 80%, but going to be 20%. I like reading news and blogs on software updates and other happenings, new software releases and like to attend Microsoft events here in Mumbai, India.
I work in MS technologies but very very curious about open source apps, usually try to find out one that can help me speed up my work on Windows OS :D.
80% of all students over the last 10 years know only about Linux and Lisp, Haskell or such things. They never seen a database, or made a 100klines program or bigger.
Of course, every student thinks he is great, because he uses Linux.
And they hate Microsoft, because it's so evil. And they program 16h a day, and ride all kind of shit, thats driven through the street this day.
I know that, because 20 years ago, i was such a student.
Now i'm part of the evil empire, and proud of it - writing programs, that are really used, and earning money for that is so much better than writing open source-software.
The problem is only 20%ers will understand this post and 80%ers will whine about how numbers are wrong or it's oversimplification/overgeneralization or try to find their place in one of these "classes". (It's a joke)
It's not about numbers, writing compilers, installing linux, opensource or spending all the time with computer. There are great programmers and there are programmers. Many sources (books, articles, posts) and sometimes personal experience show that great programmers are orders of magnitute more productive than other programmers. It's nothing new and nothing to be ashamed of. Some kids are better at maths than others. Some kids are better at languages, some are better at sports. Somehow they all manage to happily live their lifes so why should we be unhappy about being not so great programmers or being classified.
Aivars on November 26, 2007 9:02 AMI've never heard the truth put so simply, brilliant!
I would add that out of the "alpha" developers that can reach the majority, there is even fewer that understand business who can make a living doing the things they love - not being dictated the direction of their projects.
Marc on November 26, 2007 9:02 AMI find your view rather simplistic and insulting. Insulting cause I consider myself somewhere in the middle, which exists and you ignore.
I don't know your work but you obviously assume you are in the 20%. Let's hope you right
Johannes
Johannes on November 26, 2007 9:10 AMIf only I'd installed Linux sooner, I'd have fitted into the 20%. Unfortunately I was playing with my Transformers (i.e. Robots in disguise and they're not even electrical!) in the 90s. So I'm not quite fitting into either of these sweeping stereotypes.... Damn, where do I belong?!
bloop on November 26, 2007 9:12 AMmy kid has a poopy diaper and i don't care. what's more important is cranking out a 1000 page volume on ".net for the 20%".
stop crying kid!
JRock on November 26, 2007 9:13 AMThere are only 10 types of people in the world. Those who understand binary and those who don't.
Nerd on November 26, 2007 9:19 AM"If you really want to change the software development status quo, if you want to make a difference this year, you have to help us reach outside our insular little group of alpha programmers and effect change in the other 80% of the world."
And by making sweeping, condescending generalizations you just failed again to reach out to that "80%" that you so obviously look down upon yet try so hard to make us think you don't. You might want to rethink your self categorization as a so called "alpha", you and Frans Bouma both. You apparently didn't learn anything either. Your blog post today is tantamount to saying "hey we need to reach out to those lazy unwashed bastards and teach them"...probably not the best way to reach people.
Mjoyal on November 26, 2007 9:26 AMHey, I would say I don't fit into either category above. I'm a third type of programmer.
I don't seek out all the latest languages just for fun. And I don't geek out on all the latest Linux releases. What drives me is creativity and finding good solutions to problems. I did a lot of programming for fun as a kid, from 3D engines to shareware Windows programs. Honestly, I think an incredibly good criterion for seeking out good programmers is whether they started as teenagers or kids. Maybe I say that because my friends that did are good at this stuff.
When it comes to the tools I use, I prefer IDEs because they minimize the amount of menial work I have to do and maximize my productivity.
I come from a mathematics background, so I prefer to "cut out the memorizing a bunch of crap" and just work with straightforward tools. If I can avoid typing a command line 20 times, I will try to do it. That is why I prefer to write in languages where I know at least approximately what is happening under the hood. I intuitively catch logic errors, and identify bottlenecks, just by thinking about what is actually happening. Theoretical beauty is fine and cool. But for real applications, this is important.
That is why questions of algorithm complexity, database schemas, access and security, etc. just naturally arise and are solved in the course of my programming. I don't just get the job done, but I make sure that it works correctly.
Now, that's not enough, though. When you're writing code for a client, you need to help the client come up with good specifications, and show them prototypes as you go along, so they can evaluate what works and what doesn't. These days, I write software for no client other than myself, because I run a company, but whenever you do that (shareware, indie software, web applications, or whatever else), you must keep the user experience in mind. Even though you should always keep it in mind, here it is especially important. It usually suffices to keep a single user in mind (and not an entire group of users), but you have to craft how every TYPE of user's experience will be. For example, if I was writing an application like WordPress (which I probably would not; that's a job for more than one person) I would think about the various roles and security and database schemas and so forth.
However, I'm not trying to toot my own horn, I'm just being straightforward. Here are things I suck at, compared to other areas:
1) remembering lots of command line arguments, programs, etc.
2) administering linux (mainly for the reason above), while really "getting" Windows.
3) administering any kind of configuration for a service, for the same reason of having to learn arcane new syntaxes for everything
4) getting up to speed on a new language with lots of keywords and possible new paradigms
5) learning all the features of a new graphical IDE (although much easier than learning features of a command line tool)
Every time I have to fill my brain with more ad-hoc knowledge, it really slows me down. Unfortunately, this includes learning new frameworks and libraries, like .NET . That's why I always try to skim a framework but learning it fully (especially a rapidly mutating, open source one) is a skill that frankly I could use a lot move practice on.
So am I a good programmer? Well, I can most likely get the job done, whatever it is, from helping you figure out what features would make the most sense from a usability and business standpoint, to designing while we're at it, to sitting down and really mapping out every single part of the app, to coding it. But I choose the platform I'm already familiar with. These days it is PHP/Apache/MySQL/HTML/Javascript/C++. Tomorrow, it will probably be Flash/Flex/FMS/Apache/some kind of custom comet-like server.
So there is a third type, I think. The "practical-mathematical-logical" programmer. I don't just use the tools, but in a corporation my approach might be a little annoying. That's because I try to find out how things critical to the success of my piece of code are working, so that I can make sure it works. I feel a responsibility for making the product work, and I've learned that, in many companies, it seems if you just do your job and don't give a crap about the big picture, you will live a much more peaceful life, and so will your manager. Thoughts? :)
Greg
Greg Magarshak on November 26, 2007 9:28 AMI found it interesting that in order to make your 20% group, you have to be very interested in Linux and the 80% are "windows shops".
The companies I work for don't run Linux, so spending my time getting LAMP up and running on a home server so I can play around with it isn't high on my list, espically when there is so much in the .net world to learn if you want to really be an expert in that area.
Chris May on November 26, 2007 9:34 AMMe? I'm in the middle. I explore technologies on my own, but I know people in both groups.
The difference I perceive is as follows:
1) The "80%" see software as a practical tool to get work done. That's their main interest.
2) The "20%" see software as a really neat kind of crossword puzzle to be worked endlessly.
Results: The "20%" may be fantastically more productive, sometimes, in some areas. I've also seen them travel up fantastically intricate, pointless blind alleys because the concept was so "neat." (When was the last time *YOU* used Haskell to make money?). Coding discipline is often not their foremost personal attribute.
Quite honestly, I'd rather have one "20%" guy as a consultant to whack the few thorny problems we run into and a herd of "80%" guys who will simply do what the *^)$%! I tell them to do, than a company full of unherdable "20%" cats.
Software is either about money, or the mental equivalent of that other most pleasurable solitary activity I could mention. And I have no interest in paying for *THAT*.
Cheers!
Ian on November 26, 2007 9:34 AMInteresting generalization on the skill discrepancy in our industry. It does not leave room for the shades of gray in-between the black and white dichotomy. However, I agree there is skill divide regardless of the percentages. This is something which has been around for a long time.
Unfortunately I do not see it changing any time soon either. As in most fields there is always a mix of people of varying aptitude, varying skill levels, and varying interest in the field.
As for the Alpha-geeks in our field reaching out to the other group... Most Alpha-geeks are somewhat self-absorbed, elitists and apathetic towards the other group -- I know I am. I'm content to fraternize with my limited circle of other Alpha-geek colleagues. And I am usually not interested in evangelizing to the other group -- that would take me away from my interests.
To be fair though, I may be more jaded than the average Alpha-geek. It comes from years of having to deal with the consequences of the other group: namely really bad code, and a market which is slowly devaluing. It's very frustrating having to work with programmers whom should not be programmers in the first place. Programmers whom lack passion or the proper training. Especially if they got into the field just to get out of their country.
Around 4 years ago, I was consulting for a telecomm company when they asked me to participate in technical interviews. This is not uncommon -- consultants occasionally conduct interviews for clients. I asked one particular applicant if he was involved in any open source projects, if he read any trade journals or blogs, if he did any programming in his spare time. He answered "no" to all of the questions and was not asked back for another interview since he lacked passion.
A few months later I ran into him at the local .NET user's group where he said I help him have an epiphany. He said that he joined the user group, got involved in the DotNetNuke project, and subscribed to MSDN magazine etc. This was all fine and dandy, but for the next few months I would run into him at the user group meetings and local MSDN events where he would follow me around and practically harass me. That's when I stopped going to the user group meetings. And it was also the last time I tried to inspire someone from the so called 80% group.
Edward J. Stembler on November 26, 2007 9:35 AMInteresting to see so many people get angry or insulted by this. Much more interesting than the post itself, I'd say.
Regards
Fake
Am I stuck in the 80% group? Hell no!
Do I want to be in the 20% group? Hell yes!
What am I going to do about it? I don't know, I'll think about it later.
I don't agree with the content as most of the people have already expressed. Sorry Jeff I read your blog every day (not only yours actually many of them). I also have pride and passion for my profession, and I know every year that goes by I am a better programmer, but that doesn't put me in the 20% group. I don't care about linux, or compilers I care about solving the customers problem and I can assure you they REALLY DON"T care if your solution is written on vb.net, ruby or python, ideally they just want to make one click to process everything so they can go and have a life, the same with me. I keep updated on those technologies that add value to my work, saving my hours, provinding useful abstractions, I would better be dead than programming in a command line or notepad ever again. Read the article about "Programmers vs Developers" in Eric Sink's website, it is a much better view on what is to be a professional software developer.
Esteban on November 26, 2007 9:39 AMThis is true of anything. It isn't tied to programmers. 20% of the people do 80% of the work, etc.
Big Dave on November 26, 2007 9:41 AMOkay, after having looked at that blog, I can say quite confidently I'm the closest to a
a href="http://undefined.com/ia/2006/10/24/the-fourteen-types-of-programmers-type-4-lazy-ones/"
lazy programmer
/a (hope that link appears as a link). I always get lazy about learning more ad-hoc stuff, unless it really helps me. I like elegant, beautiful code, except when I need to optimize.
Greg
Greg Magarshak on November 26, 2007 9:43 AMOh for crying out loud. "they're always aware of the latest, coolest new trends in programming and tools" is the most ridiculous criterion for dividing hard-core programmers from the rest of us I've heard in my life because it mistakes Zeal for Competence in determining Quality. (Okay, correction, I had to fix this same mistake when my company wanted to re-write the Programmer's job descriptions a few years ago, too.)
The only thing that particular vein of Zeal determines is Amount Of Output. Competence and Zeal tends to create lots of good output, Incompetence and Zeal tends to be the Bane Of Your Existence. (Of course, if you view all code as a liability then the last thing you want is to have somebody, no matter how competent, zealously unleashing creeping features into your project.)
Oh, and the use of the 80/20 rule to create a hasty generalization with no backing statistics (particularly when the few criteria are so wildly non-conclusive) is a very sloppy logical construct -- the result of Zeal and Incompetence, except for the fact that it appears, prima facie, that the original article was actually talking about using Version Control rather than trying to make statistically relevant claims about who's doing what. This post takes what Ben freely admits are "oversimplified stereotypes" with mere "grains of truth" and presents them without those disclaimers as if they were as sincere as any deck of PowerPoint slides.
Sloppy, Jeff, very sloppy.
JMiller on November 26, 2007 9:44 AMJeff, yours is the only programmer's blog I read (I tired of Joel about 18 months ago). I have a lot of respect for your insight and writing.
You have either Screwed the Pooch or Jumped the Shark with this post. I hope it's the former.
I could go on for kilowords what I found wrong with this post. Instead of listing all my objections, let me state the overarching one:
Not only do you try to force all programmers into a dichotomy, you conflate multiple skill sets in a futile attempt at creating the taxonomy (some of the sins are Collins-Sussman's, but you endorse his article without reservation).
There are big differences between programmers, and those differences manifest themselves in great variance in programming efficiency and code quality. Placing them in two categories is horrid use of the Pareto Principle. Consigning people to the Epsilon-minus caste because they don't read "the right blogs" or engage in Slashdot Onanism or monkey around with functional programming languages is arrogant and dangerous.
Yes, the thrust of your article is inclusion ("I'd love to teach the world to sing, in perfect harmony..."), but it is the condescending form of "inclusion" (not to mention identity politics) that fogs much of our politicial and cultural thinking today (think "Nanny State").
Oh, and my compliments on quoting "They use whatever tools Microsoft hands down to them" and "Come over here and try out this ASP.NET stuff" in the same article with utterly no hint of irony.
BTW, when did Microsoft take over Eclipse?
Zasdad on November 26, 2007 9:54 AMTwo classes, Real Programmers and !(Real Programmers):
Real programmers don't comment their code. It was hard to write, it
should be hard to understand and even harder to modify.
Real Programmers don't document. Documentation is for simpletons who can't read listings or the object code from the dump.
Real programmers don't write in BASIC. Actually, no programmers write
in BASIC after reaching puberty.
Real Programmers don't write in COBOL. COBOL is for COmmon Business-Oriented Laymen who can't run a business, much less write a real program.
Real Programmers don't write in COBOL. COBOL was designed to be read, not run. Unfortunately it is often run anyway.
Real Programmers don't write in APL, unless the whole program can be written on one line.
Real Programmers don't write in LISP. Only idiots' programs contain more parenthesis than actual code.
Real Programmers don't write in PASCAL, BLISS, ADA, or any of those other sissy computer science languages. Strong typing is the crutch for people with weak minds.
Real Programmers don't write in PL/I. PL/I is for programmers who
can't decide whether to write in COBOL or FORTRAN.
Real programmers don't write in FORTRAN. FORTRAN is for pipe stress
freaks and crystallography weenies. FORTRAN is for wimp engineers who
wear white socks.
Real Programmers don't write in RPG. RPG is for gum-chewing dimwits
who maintain ancient payroll programs.
Real Programmers don't write applications programs. They program
right down on the bare metal. Applications programming is for the
dullards who can't do systems programming.
Real Programmers don't write specs. Users should be grateful for
whatever they get: they are lucky to get any programs at all.
Real Programmers don't read manuals. Reliance on a reference manual
is the hallmark of the novice and the coward.
Real Programmers don't believe in schedules. Planners make up
schedules. Managers "firm up" schedules. Frightened coders strive
to meet schedules. Real Programmers ignore schedules.
Real Programmers consider "what you see is what you get" to be just as bad a concept in text editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous.
I like the concept.
The problem gets shed in a new light if you read some of the replies.
80 v 20
(1) Real Programmers are Merc's versus Anarchist Geeks
(2) I dont like being identifed as the 80%
I wont list all of the replies... But good for you Jeff, are you now going to drop the evil empire and join the rebel free source ?
One more thing, and this is not meant to be a critic, actually it is what I like about this blog, you regularly post about useful stuff, with great links that helped me discover other authors and blogs, and I am a better programmer because of reading articles like yours, but I am sure THIS BLOG is NOT focused on the 20% alpha geeks, if it would, you will be posting about pointers, compilers, haskell and linux, for example, and you would have never EVER admitted that you program in .Net.
Esteban on November 26, 2007 9:55 AMI think Jeff is just testing how much load his blog comments code can take :)
It's awfully hard to "lead" the 80% when you are busy looking down on them. When they ask questions in newsgroups, the 20% often spend their time flaming the 80% for such a stupid question that they're known the answer to for years.
One of the reasons we won WWII air superiority over the Japanese is because we set our best pilots up as mentors while they set them up as Kamikazes. Our best taught the 80% how to be a 20%. Their 20% crashed and burned brilliantly while gaining "honor" among their 20% brethren.
Keep up with the flaming and you will most likely win the battle with the 80%er and look cool to your 20% friends, but you've made the 80%er even more of an 80%er. Take the time to say "Come over here and try out this ASP.NET stuff. Here, let me show you what it can do!" and you might gain some ground.
The 80% believe there is life outside of the 1600x1200 box.
james on November 26, 2007 10:01 AMI've always joked there were three kinds of programmers in the world:
1) Those who Google for code solutions, and blindly copy what others have done, without any interest in improving or understanding it.
2) Those who try to get as far as they can on their own, and when they get stuck, Google for an answer, then try to improve on the solution and put their own touch on it.
3) Those who look at groups 1 and 2 with a smile, and simply say, "You're welcome."
The 1's are usually people who program almost entirely out of necessity.
The 2's are equal parts necessity and a drive to improve.
The 3's are primarily curiosity and a drive to improve.
I realize these are generalizations, and I fully accept that there are shades of gray along the way; some people could call themselves 2.5s, or 1.72s, and that would be totally accurate.
(I'm a 2 for sure...as an English major with about 1 year's worth of formal training, I lack the theoretical understanding and the discipline to really be a true 1. But I have just enough curiosity and desire to do better to settle for being a 3.)
Geoff Lilley on November 26, 2007 10:16 AMNice post Jeff. Judging by the replies this is a passionate subject for a lot of people. It is interesting to view the wide range of interpretations of who exactly comprises the 20/80 split.
I am an eighty percenter with no ambitions to be anything else. But that isn't to say I'm not passionate about the quality of my work or disinterested in "sharpening the saw". It's just that at the end of the day I view software construction as a vocation rather than a calling.
I would hope that the brilliant people out there who dedicate their lives to mastering the art and science of software development do schedule some time to develop the understanding that their value as "gurus" is extremely limited if they cannot find some way to share their knowledge with the rest of us. People like myself are very likely to end up in management positions one day, and we will make our decisions based on the best information we have available to us. If the gurus wall themselves off in a heavily guarded ivory tower then we're going to go on making our foolish decisions with reckless abandon because it is the only thing we know how to do and a decision needs to be made NOW. But if they do have a passion for their craft and wish to maximize the productivity of their expertise, then they will struggle to find ways to consolidate the fruits of their labor into a form which can be communicated to those outside their peer group.
Perhaps this is how a twenty percenter becomes a five percenter.
Karl on November 26, 2007 10:21 AMI'm an 80%'er and I'm proud.
While you 20%'ers are spending your time playing and experimenting, my group are actually getting the project done on time so the company can make money. While you 20%ers are working day and night for 3 weeks to whip out some new whizbank, cool solution my group are the ones that wring the bugs out of it, get it into production and maintain it, again allowing the company to make money and stay in business. And finally, while your group is downloading, coding and blogging about computers in their spare time, my group is spending time with our spouses, children and friends and living a well rounded life.
Software engineering will continue to move forward over time - and yes it's the 20%'ers that are the driving force - but I am a human, Christian, husband, father and citizen first, and software engineer last; and I intend to stay that way.
William on November 26, 2007 10:23 AMThis isn't an 80/20 inferior/superior issue.
In part, it's about Information Systems vs Computer Science. Hopefully, the computer science majors do technical programming to provide tools, libraries, utilities and frameworks that can be used by the Information Systems majors providing business applications and systems.
Hopefully, both groups use tools as permitted by their organization's standards, and influence their selection.
Often, the technical programmers eat their own cooking, so what they develop has the features and interfaces they want and documentation they deem adequate. Sometimes they have the foresight or are influenced to make their creations palatable and desirable for the IS consumer as well.
Sometimes the CS people play with IS tools. For example, Conway's Life is an example of a cellular automaton. Spreadsheets provide a matrix of cells. Can you do Life in a spreadsheet? without macros? wrap around top to bottom and left to right?
Sometimes the IS and CS people play together. An IS guy on a deployment team creates a spreadsheet that defines servers and workstations for branch offices with device names, IP addresses, SNA addresses, assigned switch panel ports and cubicle faceplate details.
The CS guy rights a shell script that parses a printfile of the speadsheets and generates machine provisioning scripts.
I think the issue that matters is about knowledge, competence and professionalism rather than CS vs IS. Professionalism and competence do not come from any academic degree. Professionalism and competence is what brings us solutions that scale, are stable and good as underlying technologies change, are built with foresight so that enhancements to the interface do not require change to existing applications. They give us solutions that survive device failures and site disasters. They give us solutions that are easy to use and easy to learn.
Among both IS and CS types some have more interest in their profession than others. Some of them are friendly and willing to share. They become the GOTO guys for those who seek help and advice.
The issue for these people is for their organization to recognize their value and provide time and $ for professional development (trade press conferences, classes their travel) and to allocate a portion of their time (if tracked) to design code reviews, mentoring, etc.
David
-
Orange.
Orange who?
Aren't you glad I didn't say banana?
-
I've known a lot of 20%ers and the problem with them is they normally don't function as humans and can't solve a problem in the real world for shit.
I'd rather have an 80% working for me that knows how to do the job that I employ them for well and can join me for a beer after work occasionally.
This post upset me, I'm almost tempted to remove my RSS feed.
A lot of touchy people here.
This could have been written in a lot simpler terms without offending anyone.
20% of the programmers would be programming even if they were not getting paid to do it. The other 80% would not.
Certainly there are people in the 80% group that are better than people in the 20% group, but we can say with some certainty that the 20% group, on average, is better. The best overall are also in the 20% group.
And, 80% of the people who read this blog are in the 20% group. Just showing an interest in this stuff means you are interested in programming beyond collecting your paycheck.
Matt
Matt Lentzner on November 26, 2007 10:42 AMI'm a 20%er fighting to be an 80%er. I love my family that much :)
CB on November 26, 2007 10:48 AMHmmm, let's see... On Saturday I can:
1: Play with my kids
2: Ignore the family and work
3: Play my drums/jam with my band
I'll take option's 1 and 3 thanks!
I'm making more than enough money being a "0%"-er (as described above) and am very productive during my working time. I WANT to do things other than twiddle bits all the time. That does not make me an "80%er". If I was in the 80% bracket, my independent consulting business would not be turning work down. I think people need to do things other than work (and installing Linux, etc. on the weekend IS work) to have a balanced life. Of course, if you don't want a wife and kids, friends, etc., by all means fill all your time learning new coding techniques and installing OS', etc... Now, where are my drum sticks...?
HugoDataway on November 26, 2007 10:50 AMGreat article! Truer words were never spoken.
Chyld Medford on November 26, 2007 10:52 AMGeneralizations make it simple to refer to groups in written or verbal communication, but they are usually not very realistic. Typically, most people fall somewhere in the "middle" of a bell curve, whatever the subject or situation may be.
In my opinion, the "divide" between the "20%" and the "80%" is just another artificial separation. It separates people into 2 groups, and for some people, one is perceived as "better" than the other. To ask one group to "reach out" to another is a scary concept. People trying to change others is happening in so many areas of life, whether it is religion, politics, or software development. To say one way of life is better than the other is very subjective and relative to the perceiver.
I was most likely destined to be a 20%, but took a turn towards the 80% while in college. I started programming at age 4 when my dad brought home the Apple II. He showed me the
10 Print Wayne is king
20 goto 10
thing and I started typing that everywhere I went if there was a command prompt on the screen (Radio shack stores mainly).
I started doing the exercises in his books. Basically just typing in what was on the page. At that point, I doubt I knew more than pattern matching what was on the page, but I was programming :)
My dad worked in the defense industry and I was probably the only 10 year old reading Electronic Defense magazine... also probably the only kid that knew what the Association of Old Crows was (old farts in the defense industry).
Anyway, the deck was stacked in favor of me being one of the 20%... But when I got into college, I wasn't just the computer geek from high school... I was a blank slate. So, after 2 years in the CS program I switched to Radio-TV-Film and that is what my degree is in... unfortunately, in Fort Worth, TX there aren't a lot of jobs for RTVF grads that are about to get married. So, I fell back on my ability to program.
Now, that is what I do. I write software. It's nothing earth shattering, but it allows me to pay the bills. Every once in a while, I still get a challenge that drives me nuts until I solve it and feel like a god. Programming isn't my primary passion... I would much rather play Bass in a Jazz/Blues band and teach Tae Kwon Do, but too hard to do that full time and have a family, so programming pays the bills...
Ok, so there wasn't a point to this... just thought I'd share. I've read through everyone else's comments so decided to add my own!
Wayne on November 26, 2007 11:02 AMI saved my response for my blog, but I'm glad you and Ben started this discussion. Unfortunately, I think too many people are missing your point (maybe I am too).
Greg on November 26, 2007 11:17 AMLOL, So what kind of tool did you use to arrive at the 20/80% measurement ? How do you know it's not 10/90 or 30/70. Or is your point just to create two categories (the masters and the minions) ? So you are saying that this there is not a continuum of values. Also are the 20%'ers always being 20%'ers or do they sometimes lapse into 80%'ers. This is the type of broad generalization that does not satisfy people who are more sophisticated. Well anyway, anyone can have an off day so i'll look forward to your next posting.
Cheers.
f. b. on November 26, 2007 11:21 AMI think your depictions of the two programmers were a little confusing. Instead of phrasing it like you did, I would have put it like this.
1. The type of people who do their job because they have too. If they didn't write code and get payed for it, they'd do it in their free time because they just _have_ to do it.
2. The type of people who do their job because it makes them money and gives them the freedom to do what they _really_ want to do. These people clock out at 5-6 and go play tennis, or play with their kids, or log 4 hours in WoW.
And this isn't limited to programming. Everyone falls into these categories. Think Beethoven and his passion and drive to write music. Beethoven would have died if he couldn't have written his music. On the other hand, there's Mozart, who did something he was extremely good at and made a decent amount of money. If he could have become famous making tables, I doubt he would have written as many symphonies.
Frank on November 26, 2007 11:22 AMTo those of you who get worked up about the 80/20 divide:
Would you agree that we are supposed to be "Professionals"?
If so, would you then agree that you have impact on the day to day work of your users through the code / applications you write?
Now, compare this to another profession.
Would you prefer a 20% or 80% physician?
Think about it.
CV on November 26, 2007 11:29 AM@CV
"Would you prefer a 20% or 80% physician?"
There are far more 80% physicians than anyone would like to admit. Having the degree does not translate equally to passion, desire, and care for one's work, let alone competency.
Ordinary Geek on November 26, 2007 11:37 AM
if you want to make a difference this year, you have to help us reach outside our insular little group of alpha programmers and effect change in the other 80% of the world...
how many typical, average programmers you've reached out to...
a bit egotistic, don't you think?
SK on November 26, 2007 11:41 AMAny possible offense taken to your article would be immediately washed away upon reading the article which you link to and quote from in context, side by side with yours.
Why are people so quick to get defensive?
Dan G. on November 26, 2007 11:47 AMI don't consider myself an "average" programmer, and I've never used Linux. Do you have to be an uber-nerd too, to be in that 20% ? I am goal oriented when I program. Quality programming for a purpose. Spending the weekend splitting your hairs on the latest undocumented Linux mod sounds nerdy to me and certainly doesnt mean anything about your skills as a programmer.
Fabrice on November 26, 2007 11:47 AM"A" students teach
"B" students work for "C" students.
I agree with those who call this post over-generalizing and worthless. To add to their eloquent arguments: being a damn good programmer and being a Linux fanboy are not the same thing.
CynicalTyler on November 26, 2007 11:57 AMI feel people who make generalizations like this show there true ignorance. If you were so smart and actually in the top 20%, you wouldn't need to write crap like this to make a statement. You would just know you were in the 20% and be happy. People who make judgmental comments like this do so to make themselves feel better.
We were given two ears and one mouth for a reason. You should try listening more and talking less if you are going to spread this kind of ignorance to the world. STFU and go read some more!
Haywood JaBlowme on November 26, 2007 12:03 PMThank you for NOT calling the 80% 'Mort' or '501 developers'!
Bob on November 26, 2007 12:06 PMIt seems strange to me that anyone would be shocked that '80%' of the programmer population comprises 'most' of the programming population.... it's obvious isn't it?
Red on November 26, 2007 12:11 PMI read through the post, and was left wondering where I fall. I suppose I would fall into the 80%, since I don't actively participate in Open source projects, nor do I do many of the things you mentioned "just for fun".
However, I do believe that there is some additional stratification in the 80% group. Not everyone in the 80% does this job just to get paid. We do enjoy our profession and enjoy reading about it (I regularly read blogs, and am reading new books on programming all of the time). However, I don't have time to do those other things "just for fun". I have other hobbies that I enjoy as well, and since I get my programming fix at work (and get to help set some direction of what tools we use at work), I don't have the motivation to do it at home as well.
If that puts me in the 80%, then I am happy with that. I just want everyone to realize, that just because someone isn't in the 20% it doesn't mean they don't enjoy/love their job, or that they are only in it for the paycheck (although I have known a fair number of people who absolutely do fall into that category).
I guess I'd suggest a 3rd type, those that love their jobs, but just don't have the time or energy to be the "industry leaders".
LadyCoder on November 26, 2007 12:11 PMAnd by the way, there are actually 10 types of programmers. Those who understand binary and those that don't
Red on November 26, 2007 12:12 PMAs Dave Barry said, "I know I'm generalizing here; but as usual when I generalize, I don't care."
While you can quibble the percentages, the world really _is_ divided into the two camps: the artisans and the manufacturers. Ignore the specific tools that Jeff mentioned; compare the attitudes:
* The artisans are not the one-tool-fits-all school; they may not be passionate about Linux, but they have enough exposure to multiple operating systems (different versions of Windows do not count) and programming languages to realize that the best tool for the job is not necessarily the one dictated by corporate policy.
* Manufacturers, on the other hand, are extremely well-versed in a narrow set of software tools; they are competent, but their world-view tends to be driven by what is available. As my old professor used to say, "If your only tool is a hammer, all problems look like nails."
Neither side understands the other: "I prefer to have a life" versus "I prefer to have my work be meaningful." It's a matter of priority, and also definitions. If your life *is* your art and your art *is* your work, then all else is fluff. If you do exceptional work so you'll be recognized and rewarded, you seek (and achieve) fulfillment elsewhere.
You don't have to be in the 20% to produce quality work. The odds are, you'll be keeping the company afloat. The 20% are the people that keep the company from being eaten by the circling sharks, but would sink on their own. The whole point of Jeff's article wasn't to disparage the 80%; rather to tell the 20% that they need to help the 80% grasp new technology in order to help *themselves.* A rising tide lifts all boats, remember?
The dichotomy is also important for management, because the different attitudes affect the evolution of a product.
During the early embryonic stages, the technical problems are rich enough that your project will have no problem attracting artisans. The ratio within will be closer to 99/1 than 20/80, which is good: the team will have a strong (if not unified) vision of the product and the initial product will be technologically *attractive.* Manufacturers tend to be focused on details rather than the gestalt view, and they produce software that people will use only under requirement.
The challenge here is to constantly remind people that "better is the enemy of good." Get something usable out the door, even if it means slicing off inessential features. Artisans will *hate* that, but it must be done.
Once you hit that first delivery, that's when all hell breaks loose.
Your artisans, being creative types, don't want to be hobbled by the chore of maintenance. They're after the next great challenge, and you'll be lucky if you can keep them within the company, let alone the project. Your executives, ignorant of Brooks, will demand you scale up the development team to shorten development cycles. The bulk of your new hires will be in the manufacturing realm, and your ratio will now be 40%/60%; however, the 40% with domain knowledge will be too busy to speak with the 60%, who will flounder.
If you're a strong manager, you can explain to executives that this cycle will be delayed for training reasons; if you can't, you'll simply slip. In either case, you'll be forced to go through another hiring cycle. By this point, an artisan wouldn't touch your company with a ten-foot-pole, unless he has serious money issues. Churn has continued, and now you're at the aforementioned 20%/80% level. After the next round, 1%/99% and vision is effectively dead.
I have gone through that cycle a half-dozen times, and am going through it yet again. If there is no knowledge transfer when the manufacturers first come on board, then the product becomes an ineffective bricolage of technology and vision.
There is clearly a division between the top coders, architects and engineers and the vocational types, but I do not think that the descriptions provided embody the parts of that division with any accuracy; frankly, they sound a bit daft. I do not think that a great developer, for instance, who knows his field through-and-through and keeps abreast of all new developments, fosters some, participates in many, would remain an exceptional developer for long if he also spent all of his week-ends and down time focused on this passion and trade. There's life away from the keyboard, and well-balanced people are no less exceptional for having found equilibrium, the means and time to enjoy their short existences. Given the choice between equally talented people, I'd rather work with a balanced person who works hard during work hours and remains intellectually voracious at all times, than with someone who still needs to limit his interactions to talking about the limited domain of code throughout weekends and social events.
Why ?
1. There is much to learn about the structure of problems and their solutions away from the protective confined of the coding sandbox; versatility enriches every domain of existence. Cross-pollination is essential for a creative mind not find itself trapped in too narrow a silo.
2. Coders with friends and families know not to obsess on the merely theoretical when excellent solutions can otherwise be implemented in the very same time.
3. Coders who understand balance respect other coders' need for the same. They do not drag them back into the coding pits when they need well-deserved rest. I;d rather work with people who know they can work hard when it is required of them, knowing that they'll be free to rest too once they have made those sacrifices. Taking care of one's own matters a lot.
4. Unbalanced people will burn out.
Louis-Eric Simard on November 26, 2007 12:30 PM@Jeff -
Great post. I think I could summarize further though.
20%: Have no life. Rarely get laid.
80%: Actually have more than a cyber-life. Get laid regularly. Possibly even procreate.
20%: Use C#
80%: Use VB
When are you coming back home to VB now that you want to "reach" out to the great unwashed masses? ;-)
Geeks are so egotistical: just look at the number of comments. This must be an all time high for your blog, ey?
VBMan on November 26, 2007 12:35 PMI really liked this post. I added some of my thoughts in my blog post here.
http://benhblog.com/2007/11/software-developers-lifecycle.html
BenH on November 26, 2007 12:47 PMI am in the same boat as JonC. I know that I started out in the 20% camp. As time goes on I find myself slipping more and more into the 80% group. I miss the passion I used to have for it, but I guess that long, long honeymoon has finally ended.
Jim B-G on November 26, 2007 12:47 PMI was about to follow up when I read RealityCheck's comments. They are my exact thoughts.
And with that, I leave the playground.
AaronZ on November 27, 2007 1:00 AMok, i've read this entire thread, and have contributed twice so far. I'll just add 1 more thing, and then i think i'll just watch. here's my last point. I LIKE TO WRITE SOFTWARE!! That's why i do it. I also get paid for it, and that's very nice. the 80/20 notion is quite over-simplistic, and i just don't buy it. i think most folks out there have a similar feeling, so i'm not delving any further there.
i will say this about a side topic that has arisen: building software from scratch for the heck of it is kinda pointless. if you think that doing so shows what a great programmer you are then go ahead. i'll spend my free time elsewhere. all progress comes because we innovate on the shoulders of those who came before us. Einstein needed his predecessors to get where he did. so why bash the tools that can give you more ability? it's like asking the doctor who is going to perform heart surgery on you to not take every advantage. so what if he doesn't know HOW that medical device works on the inside? he has his job, and the device maker had his. you can't learn about every detail of every last thing. you take the tools that are good, and you use them. calling them inferior because you didn't create them is just foolish. i developed unix apps for years, building all the components from scratch. then i started using VS to create web apps. WOW! that sure is nice. i appreciate the hard work of others to provide good tools. i won't poo-poo them because they are pretty.
RealityCheck on November 27, 2007 1:01 AMok, i've read this entire thread, and have contributed twice so far. I'll just add 1 more thing, and then i think i'll just watch. here's my last point. I LIKE TO WRITE SOFTWARE!! That's why i do it. I also get paid for it, and that's very nice. the 80/20 notion is quite over-simplistic, and i just don't buy it. i think most folks out there have a similar feeling, so i'm not delving any further there.
i will say this about a side topic that has arisen: building software from scratch for the heck of it is kinda pointless. if you think that doing so shows what a great programmer you are then go ahead. i'll spend my free time elsewhere. all progress comes because we innovate on the shoulders of those who came before us. Einstein needed his predecessors to get where he did. so why bash the tools that can give you more ability? it's like asking the doctor who is going to perform heart surgery on you to not take every advantage. so what if he doesn't know HOW that medical device works on the inside? he has his job, and the device maker had his. you can't learn about every detail of every last thing. you take the tools that are good, and you use them. calling them inferior because you didn't create them is just foolish. i developed unix apps for years, building all the components from scratch. then i started using VS to create web apps. WOW! that sure is nice. i appreciate the hard work of others to provide good tools. i won't poo-poo them because they are pretty.
RealityCheck on November 27, 2007 1:02 AMHmmm...I'm not sure how much I agree with this. I really don't fit into either of those groups. So either that means I don't exist or there are more than 2 groups. But I suppose if I have to pick one of the two it would be more twords the 20 percentile. I'm self taught and like to continue learning as much as possible, while I did help push our company into using subverion, I'm not obsessed.
Not Quite on November 27, 2007 1:28 AMThe comments to this entry are closed.
|
|
Traffic Stats |