November 25, 2007
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.
Posted by Jeff Atwood
The sad thing is that I find myself switching between the 80% and the 20% depending on what is going on in my life. Do I feel like delving into the guts of some process or algorithm? Do I have the energy? Does the company I work for reward 20% types or punish them for their energy and creativity? I find it easy to slip into "vocational" habits, particularly if a company I work for tell me they want me to solve only the problems they give me to solve and think about what they want me to think about. This is especially grivous when one knows that better can be had. This can last for a while until I reach a breaking point and change jobs or start exploring some new goodies on my own-- and then change jobs (or something else happens with the company).
One of the things that irritates me to no end is a company that is all talk about recruiting the 20%-- seeking to hire the best and brightest, and then driving them away because in all honesty the 80% are less threatening and easier to manage or control.
Do I have to be able to spell to be in the 20%? Sheesh. Sorry.
"Not even one reply to all this Jeff?"
Apparently Jeff doesn't like to discourse with us unwashed masses as much as he tries to pretend to. What makes it worse is all the idiots out there that have taken Jeff's post as gospel and started blogging about this and preaching about how "stupid" the supposed 80% are. Yet Jeff stays silent and oblivious to the damage he has done with his blogs popularity.
I wonder how old are the 20%ers and 80%ers.
I used to be a 20%ers way back when VAX was king. But then there was nothing out there to do the job so we had to make our own.
Now I grow older and would much rather spend my time with my family. .NET is great, get my job done for me. Maybe this is an age issue?
BTW I am almost 50.
I just turned 50, and my attitude is pretty much the same as yours. When I was younger, I thought the world revolved around work and computers. Now that I'm older, I like to think that I have a better perspective on things. All that time spent on weekends reading computer books and learning new computer skills never really seemed to get put to use. Now I spend my weekends doing other things, and at work I watch the younger programmers fall for the same software development myths that I used to fall for (like what kind of characteristics make for a good programmer); and make the same mistakes I used to make.
Jeff, another great post.
As a company, you should try your hardest to make sure that your recruitment techniques get you one of the 20%. Because, in this global market, having a superstar product pays serious premiums. And you can only get a superstar product with alpha coders.
I love to develop Java, I love to write a quick script in perl, I now Csharp and I don't hate it and you can ask me anything about Linux and work full time (for my job) with XP.
So, or this article is confusing and grabbed out of the air, or I'm a part of that bridge where you talk about.
I really believe that bridge already exists for a long time, look at apache, eclipse or mozilla, but only a small part of lazy people don't like to see it and write articles about it.
I wonder if I qualify as a 20%er, I've been in college for a semester and in that time I've been learning basic C++ in class, and learning FreeBSD out of class. Most people on my class don't even comment their code, because the teachers don't check, at the same time, I'm considering implementing a more descriptive style of commenting.
I don't think the eighty percent are bad, yet the twenty percent can hurt too. The idea I get from this that you can't try to stick yourself into the same hole as everyone else, experiment and try to find the best fit for yourself. Maybe C++ is not for me, I'll try Python, Pascal, etc. I'm not going to try and hop around from one thing to another every week and make other people follow me, but I will try many different things until I find the perfect solutions for me.
Jeff, I have to say that I found your posting (and that of "BenH") to be nasal. I mean that in the most arrogant, smug, and elitist sense of the word. Certainly, your take is not the most repellent nor the most hardline, but it reeks enough as it is.
I am not a programmer. But I am interested in the mindset of programming as it relates to other areas of human interaction. It helps to have various angles of human endeavor to get a better, wider picture of where we're at and where we're going wrong or right in life. This is mainly why I subscribed to your newsletter. 75% of the time, you are sending me compelling reading material, though it is written from a programmer's perspective (or let's say, a programmer's sensibilities and experience.
If I were a real jerk, I could turn that 80 / 20 figure around on you totally; as my main thing is music, and yours obviously isn't, I could lump you in that 80% of passive, unwashed, music listeners who maybe pick up an instrument sometimes but are otherwise happier to just listen to others play.
By the way, I am a big fan of Windows, currently XP. In a couple of months, I will be getting a new laptop with Vista on it-- not OSX, not a *nix or *buntu, but Vista. I feel that some very smart people are working (and have worked) to bring out an operating system that I respect and insist on having on my computer. I suspect that a lot of the people putting their time and talent into Vista, are not fans of or delvers into things Linux or open-source in general. But your tone (and that of this "BenH") pegs them as buffoons because of their association with MS and other so called "closed source' entities out there. Please ditch this kind of thinking.
Thanks for the newsletter.
I think I am in 80%. I am not a shame with this situation. I keep learning a new technology that will help me out on or I can use in the job, but i'm not interested on writing a compiler. Do I have to? I don't think so because I would rather use my time wisely these days. Good luck Jeff.
oh, now I understand it all..... i'm an eightypercenter...
I am happy to admit that I belong to both two sides of 20% and 80%.
I'm sure I'm in the 20%. But I don't know which one.
Strangely enough, it is not true for my blog. Most of its’ readers are not even technicians.
Your hypothesis abou 80%-ers
"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."
80%-ers according to your hypothesis seem to be a lazy bunch of people because they are not programming on weekends, or because they use tool like VS or Eclipse (unlike the super macho vi, and gdb for debugging). How dare the 80%-ers use tools with a good UI, a smart IDE or Microsoft tools. They should be spending endless office hours setting up open source tools which come with poor instructions and customer service. They should spend their weekends like the 20%-ers understanding these open source tools or completing office work which they would have otherwise completed if they would have used the right tools.
The bulk of programmers are using the OS, the development tools (read VS, Eclipse etc) over the others for a reason - they are user friendly.
Also it is incorrect to categorize non open source contributors as lazy. They simply have more enjoyable things to do on weekends
Well, I guess my spelling and things like gramar have been sacrificed over the years. I reread my post and was embarrased. None the less, my point is still the same: getting the job done is far more important than the vehicle I used to do it.
This post is amazingly high-browed sounding for you Jeff. I'm disapointed.
I didn't read that huge amount of comment.
I think there are everywhere 2 type of "workers", in every branche.
One type will work to earn money, and the other will do this because they love it.
That ist the difference, and it isnt hard to answer which type will produce the better work ( code ).
This brings to mind that old adage that says that you never hear anyone complain on their deathbed that they wish they had spent more time at the office. When you're eighty, do you think you'll wish you had spent more time sitting alone staring at a terminal? If so, then I feel kind of sorry for you.
I've got you pegged in the lowest one percent. Sorry. Don't try to interview with me unless you can hide your underlying ideas really, really well.
Oh, by the way. Don't show up in smelly unwashed clothes and flip-flops. I tried that once, but it didn't work out.
Personally I think the 20/80 rift does exist... I know this because I used to be a 20 and now I'm an 80. I used to read thru lines of source code for RSTS 9.0 for a PDP11/44, I used to work with this little software program called 'video toaster' long before Pixar became a household word. I played the real 'Space Cadet' pinball machine at the Microsoft release party in Redmond for Windows 98. I used to spend my days writing vector graphic programs just to push little pixels around 'because I could'.
Then I got married and became an 80. Funny how life throws little curves at you. I went from being a 19yr old kid being paid $3.60/hr to manage a pair of DEC VAX 11/780s and writing code for fun to being married and having every commitment in my life regimented and segregrated. Now at 38 I've forgotten more about programming than alot of folks will know but I can no longer commit to being in the 20s group. It was work, it just didnt seem like it at the time because I didn't have anything else to do.
The 20%'ers are pretentious people who think they are so much better than the rest of the world. They may be great programmers, but they lack the social skills to actually create great profits themselves. They'd probably write an awesome bit of code and then deletes it like some self-flagellation practicing starving artist.
Note to people that are really smart programmers: Please keep writing and I'll keep reaping the rewards of your work. Sure, I'll give you credit if I have to, but otherwise I'll just CTRL C / CTRL V my way to another completed project and another satisfied client.
It may take talent to be a great programmer, but it takes real talent to maintain your balance while standing on the backs of others.
Somehow, I don't wobble.
Really, there are three types of programmers: those that can count, and those that can't.
Great reading all these comments... also been in this industry long enough to have "cycled" between the 20 and 80 mentality a few times, which is what it is, a mentality.
I think that is probably a healthy thing... we have to balance work with personal/family life, and even within work we have to balance the desire to create and innovate with the need to comply, standardize and compromise.
To the extent that the culture of 20 percenters are advancing the craft and challenging us to collectively "raise the bar", I am happy they are there. The challenge for me is filtering out all the noise. Too much information, most of it rehashes of the same old ideas. I think most of the folks who consider themselves 20 percenters are really just tinkerers trying to build better mousetraps... which is fine and sometimes necessary for personal development... but to call that "trailblazing" is an embelleshment I think.
If you don't get the time to learn new stuff in your job, you just hack everything together. make it work, somehow. after fixing a few dozend bugs, explainig customers they have no idea about my problems and explaining the same thing to bosses how have absolutly no idea about what going on and how much more i get done that they do, well, you just want some time to relax.
there are companies which give you time to try out stuff, because they know the software buisness is always moving. got to find one soon..
I've never thought about this, but for the most part I agree. I work in a government shop and most of my co-workers do no techie computer related stuff outside work.
However, where do I fit in this scheme? As an 80% type I do what must be done at work, but I also go home and spend part of my weekend playing to see if I can come up with better methods, or neat tricks. I then take some of the results back to work. On the other hand I do not think I am a 20% type. I do not have linux, I do not have a desire to play with asp.net (well, I am playing with php if that counts), I do not use version control (maybe a bit at work), I am not a trail blazer, etc, etc.
Richard (who loves MS Access!!!)
Here's my view on classifying programmers -
+HBD: Hearts, Brains, Degrees.
MVPs, "Professional" FLOSS programmers.
These have have all three - H,B,D.
BD / +BD / +BD-H: Brains, Degrees, but no Hearts.
Engineers working without love for their art or without concern for the development of their field of knowledge or industry. They typically use illegal or unethical means to gain control of the industry. Engineers with only monetary incentives in mind.
H / +H / +H-BD: Hearts, not all that brilliant, but lack official Degrees.
These are layman users who donate happily to both FLOSS projects and/or individual programmers who make good freeware on any platform or in any language if they like the program or benefit from using it. Good netizens.
HB / +HB / +HB-D: Have Hearts and Brains, but lack official Degrees.
Self-taught programmers or knowledgeable users who donate both effort and money to FLOSS projects or individual programmers who make good freeware on any platform or in any language. These people help social initiatives the most. People with hard work, dedication and a sense of purpose in life. Not to be considered inferior to +HBD, but do lack certain advanced knowledge or skills not taught freely on the www.
HD / +HD / +HD-B: Hearts and Degrees but not exceptionally brilliant.
The large majority of employed programmers who have degrees, but need to be alerted to the latest socio-entrepreneurial or innovative companies or products known on the www. Once alerted and educated sufficiently about these revolutionary changes, they become +HBD easily.
B / +B / +B-HD: Brains only, no Hearts or Degrees
For programmers working alone or in small or big companies
sometimes (or often) using illegal or unethical means to get an income or run their small business. The absence of Degrees prevents them from becoming +BD-H.
D / +D / +D-HB: Degrees only, no Brains or Hearts
Degree holding programmers who have neither a heart, nor very intelligent. These can go anywhere, depending upon the situations they face in their profesional or personal lives.
None of these definitons are intended to be misused by people to slander or defame others. These are a prod to the mind to see for oneself, where he/she stands in the software development or user ecosystems.
hi, nice post, I think i can be one of the 20 % programmers, but i am adicted to 80 % , due to lack of resources, if all the 80 % can think like the 20 % of them, this world will be greatly modified, new technologies, etc...Intersting World...
People who write bad code so they can spend time with their families - You better get that, I hear the support phone ringing.
hi, for newbie like me, interesting very interesting, i thing education system is to blame, as most of institute can not teach s/w engg properly.
I did like most of the comments, by the way do we use all the resources properly which is available to us, why are we running after new technology .
IMO, one good way for anyone "in the 80/90" to "convert to the 20/10" is to apply a system based on this thinking:
The human brain, although being totally different in constitution and organization from the muscular/circulatory system, has one thing stongly in common - you can think better when you frequently think properly - just like you stay fit when you exercise your muscles.
So, if one thinks about his own problems only, he only solves a fixed set of problems. The majority of the constraints that one's own life and habits produce, do not vary in quality or field of application. For example, a single-track VB programmer will feel that mastering manipulation of classes and ADO* connections is attaining a high level of expertise. Only when he reads Jeff's blog, and those of many others like him, will he find that people also embed custom scripting engines in their programs for their customers' IT team to program in.
This applies to life in general as well:
If one thinks about his own problems only, he only solves a fixed set of problems and therefore has only a small subset of skills that might be needed somewhere down the road.
Instead, if one thinks about others' problems, one realizes that one is capable of producing either complete, impressive solutions or at least, intermediate but useful workarounds.
Workarounds often save the day. That is a real-world statistical fact.
So, whether in programming or in life, if you think about how to solve others' problems, you learn the very many more parameters required to be considered to solve complex problems, or problems that seem simple initially, but are actually quite complex.
Most relevantly, when you solve many such problems in your mind, (without probably implementing the solution, which may be beyond your powers in the said situation) you are better prepared for a problem in your own life that significantly overlaps others' problems you solved in your mind, thereby equipping you to handle your own share of them better.
How relevant is this to programming? If you're a VB programmer, but you read about object-oriented design in C++ or Java, you can apply good points from there in your code. Going the other way round, if you apply the RAD principles of the VB IDE, you can make your PHP or Java programming easy in several situations. Who does not like the dot-notation popularized by VB? And most all IDEs today copy the layout principles that Visual Studio first popularized.
It's a good idea to never shy away from thinking out the solution to any problem. You don't have to place your dignity or your ego on the line, on your success or failure to solve a problem.
That's as much a cardinal sin as trying to optimize a program while writing it the first time (Turbo C/C++ environment of 90's).
Going 60% towards the solution is 60% as good as 100%. It is.
(Of course, that's good when only 0% is the expected progress)
So, in pseudo-Biblespeak,
Fear thou not to think for thine neighbor's problem, for in that solution too lies a half of thine own.
those 20% people are the GENERATION "Y" aka JAVA BOYS..
JAJAJ REGARDS FROM BUENOS AIRES...
I'm definitely a hippie programmer.. no doubts there.
The truth is that there are big differences in techie types. The hardware people are radically different from the software people, and on the software side alone, there are at least three subspecies of programmers.
Forget about the first subspecies, the lumpenprogrammers, who typically spend their careers maintaining mainframe computer code at insurance companies. Lumpenprogrammers don't even like to program but have discovered that by the simple technique of leaving out the comments--clues, labels, and directions written in English--they are supposed to sprinkle in among their lines of computer code, their programs are rendered undecipherable by others, guaranteeing them a lifetime of dull employment, like me working at http://www.softorbits.com/ company.
The two programmer subspecies that are worthy of note are the hippies and the nerds. Nearly all great programmers are one type or the other. Hippie programmers have long hair and deliberately, even pridefully, ignore the seasons in their choice of clothing. They wear shorts and sandals in the winter and t-shirts all the time. Nerds are neat little anal-retentive men with penchants for short-sleeved shirts and pocket protectors. Nerds carry calculators; hippies borrow calculators. Nerds use decongestant nasal sprays; hippies snort cocaine. Nerds typically know forty-six different ways to make love but don't know any women. Hippies know women.
I like the idea but I don't know where I fit.
Hmmm... I'm certainly not brillant enough to be the kind of guy Google try so hard to hire. I couldn't write a compiler, I sure did spent a couple week-ends on Haskell but certainly not "learned" it (at most got a feel of the language), I more or less actively participate to a couple FOSS projects but on a very minor scale.
OTHO, I'm definitively not in the other part: I'm self taught, I run gentoo/linux, edit my code with emacs, have all my code under svn, and wouldn't touch Java code with a ten foot pole.
There must be some other 'category', definitively...
Am in the 20%. Well it seems like your saying the 20% don't know what they want in life?
Hmmmm I agree with you folks 20% and 80% or even call it 10% and 90% ... for me I am can fit in 80% in the day the i move to the 20% in the night ...or vice-versa ....
Sometimes u have to do one night C#.NET windows APP and bag $10,000.00 .. You have to be flexible to rich ...
Can't programmers just blend into mainstream engineering? There is just so much talk on arrogant programmers, good programmers, bad programmers, etc etc. I wish that programmers would accept themselves as part of the mainstream engineering discipline.
I have never seen robotics engineers tell people how to live their lives (I'm thinking of 37signals and their post telling people to get a life). Aeronautical engineers happily do their job without bitching about who is better/more arrogant/incompetent etc.
For christ's sake.
Who is the fool here? The alpha who dedicates his life to a craft, but whose only reward is intrinsic, or the others who have come to realize that their only reward will be intrinsic, and choose to devote at least some of their energies to other pursuits?
Maybe neither -- depends on what you want to get out of it (whatever "it" is).
Great post! I'm glad to see I'm moving from 80% to 20%!!!
Greetings from Italy!
This post irks me on so many levels. Let me count the ways. Funny how no one who responds claims to be in the 20% catagory. Looks more like 100% of programmers think they are in the 20%. Generalizations, are bad whether your talking about Software Engineering or minority groups. I've been a software engineer for close to 20 years and I would be happy to test my knowlege of RLE compression algorithms, The Huffman Tree, Fedora Core, Suse, Ajax, Binary Search algorithms, Multi-Threading,etc with anyone. And yes I am a C#/C++ programmer but I don't think about coding 24/7. When I'm on vacation with my kids I think about ice cream and Micky Mouse and going to the pool or the beach. I have many interest outside of coding and not only do i not think this is a bad thing but I happen to believe it improves my code.
Software development is a fulfilling and challenging career, not a religion. And yes it is possible to be a good developer AND have a life. I don't consider myself part of your 20% or 80%. Let's do away with the catagorization and except people individually.
And another thing, lets do away with the concept that you're not a good programmer unless you use open source tools. I've used IIOP.NET and CORBA but I just happen to think .NET Remoting is better. Why does something have to be complicated to be good. Frankly I have enough complication in my life. I welcome ease of use and simplicity.
That's my two cents.
you said wron, they folks , had also been a 80% programmer, they got experience , and entered in 20%. the problem with programming , even a genius can never be in 20% group because this require a long practice set.
By reading this maybe you can categorize were you at in the world of programmers. But there is no exact basis if you really belong to the 20% or 80% group.Whats important is you do it RIGHT.
However passionately you write people will feel your emphasis and thus be more likely to remain interested in your words long after they've long been away from the computer, and that in itself proves mysterious.
Many blogs are truly worthless even though the information located within that particular domain is gold to the new age programmers/developers/etc... like myself. I've been gradually taking on computers since I was about 11. I've always wanted a deeper knowledge of networking, hardware, firmware, software and perhaps even photography to then blend with my web design skills I've adjusted over the years.
That being said blogs, or websites, in general aren't about admiral content, unfortunately it boils down to how much it's going to cost to keep up lengthy code or the repetitive aggravation of explaining everything so simply you would hope a child could understand.
So to better clarify, I wouldn't agree entirely with your 20/80 Theory of people, but I don't disagree either. Fundamentally I think the division is more primitive than that. I think those people who heartily accept the loss of time or money for the knowledge that enlightens, while others feel they're more comfortable spending time else where. Perhaps a lot could be better understood by looking into the neophiles and neophobes.
I am sorry, but I have to take out my bs detector on this one. If only that the 20/80 distinction is arbitrarily made to justify differential semantic distinctions to allude to some profuntity of software engineering accumine. Guess what ? This is not all that profound at all. As matter of fact, this just makes we want to projectile vomit. Yes there are extreme programmers, extreme hardware people, extreme networking people, extreme without lives
people, etc.. make up some career name.. Build a bridge to them ? Oh please, the exalted 20's can't speak to 80's and bring them and the entire industry up to snuff ? I've programming back since my first PET CMB-2001 and playing that bong game, so what ? I went and got me a the software engineering degree, so what ? Guess, I much better than some, and some much better than me. Still learning what is valuable to corporations, governments, people, and learning new techs all the time. Software engineering is not magic nor rocket science, sometimes hardly a science at all.. hardly enlightenment in and of itself. Gawd, children are precious, software is not. What a load of horse dung.
I think You forgot the second 80/20: 80% of programmers think, that they are in 20% group.
I would agree with the 80/20 concept, but I think there are some fundamental errors in the logic with this and that is there is another % which cross over between the two. A lot of us are interested in new technologies, but are forced to work with the old stuff that everyone at the office is using.
you are def part of the 80
Great post jeff. i wish there was a third category.. because i somehow feel i am a mix of both the 80% and 20%..
I would have to disagree with you on the 80v20 rule. I know it sounds nice and it fits in with the good old 80 20 rule of business, so its catchy, but I really think there is another type of developer you are leaving out. Arguably a subset but I believe should be it own category...
the 'alpha' developer/architect who does all the things the (to your vernacular) 'alpha' does, but does it all in his/her domain and lives a bit outside 'the real world'.
I believe in your blog on two types of programmers - the statement regarding alphas:
...and then are confounded about why they can’t get their office to start using it
... says it all.
I have been around too many 'alphas' who just dont 'get it' - they get the work done, but are not in touch with the business, and constantly have opinions on how things should be done all in theory of course because the alphas have only implemented what they preach in the confines of their home network - usually by themselves without team interaction. Most of these people are a nightmare to work with and are the '5' star developers who make all your 3 and 4 star developers turn into 2's.
The so called alphas have to remember, technology is just a tool to assist in the productivity of other work. Technology is a means, never an end and alphas that you describe rarely ever get this. Perhaps the ones who get this is really the rare breed... a lot more rare than your set of alphas.
Its more like standard deviation - the first deviation - a majority - 68.x% are the worker drones (your 80%), the second set encompasses the first deviation, but expands into the second deviation (27.x% - which now totals, 95.x%) - these are the drones who care - research, come up with ideas, own or read books or blogs, but cant always see the forest through the trees. They wonder why their uber cool AoP enterprise app is so slow because it worked so great at home. Or why the database can be such a bottleneck with their great ORM mapping tool.
Finally - you have the 3rd+ standard deviation and remaining 5+ percent who actually think within the context and constraints they are given, and provide real solutions that work. I have been in IT for 12 years, and have only met maybe 3 or 4. I have worked in the NE, the PacNW, and now the SouthEast.
Perhaps you just live in a geographic area where your alphas are saturated, so your data is slightly skewed. You are giving 20% of the people out there, too much credit.
It's interesting to examine the opposite of the bad apple effect, i.e. the good apple effect. Having a good apple on your team will dramatically change your team's dynamic as well. It basically mirror the effect of an bad apple but positively. If you have a team member that's extremely motivated, hardworking, passionate, and/or helpful, you'll find that these positive behaviors / characteristics tend to spread across the team as well.
What's more interesting is when you have both a bad apple and a good apple on your team. In my experience, the bad apple will pretty much ruin the team chemistry. And it will become the lowest common denominator over time. After all, I guess it's much easier to be negative than positive.
I think 100% of the 20%ers aren't getting laid!
Bang on! I couldn't agree with you more!
I'm trying to jump to the 20% side, but it lately feels a lot like a vertical climb.
Ironically some of it can be made easier by doing something the 80% wouldn't do but the 20% did a long time ago -- like talking about new language features out of your own volition.
I'm doing that in a few days (talk about C# 3.0, that is) and it helped me tremendously already -- because I had to learn new stuff like lambda expressions, for example, has already expanded my horizons.
I don't think you can evenly divide programmers into these two groups. I have known a few people that I would have to squeeze between the 20% and the 80% described above. These people make their bread n' butter money programming internal apps as you mention, and they are the trailblazers inside their organizations. If there are 50+ developers working at a company, you better have some high-end people leading the technical push. These people may just be the same 20% written about above, so maybe I am just being picky with the way this group of individuals is described. But I have meet some very smart, passionate people that program to program, yet have never written a compiler (except maybe CSC 370), have never contributed to open source, and have never posted at Slashdot, but are on the leading edge inside their organization. Yet these individuals are always the ones bringing in the new ideas.
I guess I just look at almost any situation and try to fit a bell curve onto it. The people writing compilers are probably more like 2% of the programmer population, on the far left side of the bell. On the far right there is the 2% that don't know what a compiler is.
Two points. Preface: I wrote one of those "24 Hours" books.
Specifically, the "Teach Yourself Perl in 24 Hours" book. Go look it up on Amazon. Yeah, that's me.
Before I wrote the book, I taught Perl to hundreds of people. I taught it to some people whose "programming experience" was HTML, and those that had 20 years of COBOL programming and needed to get the hell out before Y2K hit. Almost all of them could have learned it on their own, but needed the time set aside and a mentor.
And I'm not one of those "seminar" or "conference" teachers either. Let's get that straight. That's not teaching, that's just lecturing and any charming person with a PowerPoint presentation can do that. I taught small classes 12-15 people each, sitting beside each one of them at some time or another fixing bugs, refactoring code, and pointing them down the Right Road. And I've been teaching programming formally or informally since I was a teenager.
When I was approached for the book, Laura Lemay's "Perl in 21 Days" version had been out there for a while. Selling well. It was shit. (It still is shit.) Awful teaching technique, useless examples, and un-idiomatic Perl.
The 24 Hours thing? A gimmick. A brand. A hook. I re-arranged my lesson plan into 24 segments, re-ordered them a bit, and that was it. In the preface I even tell the reader there's almost no way to actually learn the material in 24 hours.
Better still, months before publication I invited ANYONE on ANY Perl mailing list, newsgroup, or chat channel to tech edit the first edition. (Didn't pay them all cash, but paid some!) I had lots of respondents, lots of comments, and lots of edits. [Notably, there was one fewer than expected, but that's a not-for-public discussion. Buy me a beer.]
Point one: not all of those numbered books are crap. I submit mine as a counter-example. (90% of them are, for sure. But 90% of everything is crap.) But they have such wide exposure, it's a wonderful opportunity to reach a HUGE audience. The book has sold a load of copies and is still selling really well today -- thousands of copies/month, 7 years after initial publication. I get nothing but positive e-mail about it.
Point two: I don't think there's two tiers, I've got to say there's three. The 20%? I'll go with that. The 80%? I'd break that into 70% and 10%. The 70% being those people you described fairly well.
I also think there's a bottom 10% who manage to be completely incompetent, drift from development job to development job, hiding in "training" classes, project startups and shutdowns, department shuffles and absorbing nothing. Their resume says "5 years of experience" but it's the same 6 months 20 times over again. They honestly DON'T know how to program a computer, but manage to stay in the business anyway. I think it's a statistically significant number, especially in larger companies.
In one of my classes there was a giant checklist of debugging tips posted on the wall. One was "Wrong career choice". Some laughed. Some had that suggested to them by me. A few even appreciated the suggestion later. Some didn't take the hint, and eventually had it imposed on them.
If I was ever close to the 20%, having a child certainly changed it.
There are different levels of programmers. Maybe its not 80/20 but every programmer has a different realm.
Some write compilers
Some write device drivers
Some write business applications
Some write internal applications
Some write web pages
Some write scripts
Some write games
I don't think the 80% needs help we are doing just fine. I think the 20% needs help.
Not everyone is born to write a compiler. Making a general statement that programmers that write compilers on weekends are better than those who program business application from 9 to 5 is totally absurd.
And another thing, since when is learning something new over the weekend make you a better programmer? I'd say that would make you a novice at the new thing that was learned.
Sometimes it is better to stick with something for a while to get better at it and become an expert at it.
I've seen many times in the workplace. You don't know technology X or Y so you couldn't possibly understand what I am doing. Ah yes, elitism at work. Come down from thy ivory tower o programming master.
Maybe if the 20% treated the other 80% as equals there wouldn't be such a gap, but the 20%'s social skills are near zero percent so I guess that will not happen anytime soon.
Nice point of view, but I am going to make it more simple:
You cannot trust that there are some gurus among your programmers who introduce new technology once in a while.
There is only one kinds of programmers: Programmers. Some programmers study programming more than the other programmers, but they are still both programmers. Its not the job of a programmer to be a trendsetter. If you want to be a guru/trendsetter, you might be eg. a "leading software architecture manager". I mean, its not the job of a programmer to bring new technology into the company. Its not the job of a programmer even to design the software. Programmers may help trendsetters and designers, though.
Normally every single programmer play hero and do things according their own bright mind and the code is hard to read by other programmers. That's bad. Instead you need to separate trendsetters, architects, designers, programmers, and all from each other.
And if people start expecting more and more from the programmers, it is hard to set any limit. Then the programmers might get bewildered which way to go or something.
People can be a designer _and_ a programmer at the same time. In smaller companies a person can be a sales person, project leader, analyst, database administrator, designer, programmer, tester, deployer, server farmer, and a maintener in several projects. So he doesn't have the time to learn Lisp at weekend when he has to widen his knowledge in problems at hand that occur in all of his fields. In big corporations you can divide the tasks more.
Also, if few alpha persons already studies tools that will be taken into the organization, why the rest of the people should waste their time inventing the wheel too? Its just lack of communication and lack of differentiating tasks, if all of the people try to invent the same thing. It might go so, that the most energetic extrovert nerds find each other and start inventing things without telling anyone, because the organization doesn't have a proper division of tasks.
And if some ordinary person tells about an invention beforehand, then starts the competition when all the extrovert nerds catch fire. Starts the inventing of the wheel simultaneously, which is plain stupid with all the overlapping work. Also the "gurus" want to do everything by themselves, because all the "lesser guys" of course cannot do as good job as the alpha persons.
There are different kinds of people. Others are extroverts and do a lot of stuff and do huge experiments that get wings in the organization. But the energetic extroverts could be put into RD, if they really hate the tedious parts of programming. Introverts are suitable for any task, except if you need smiling smalltalkers. Introverts can talk a lot too, but they are not as good as extroverts in creating new contacts artificially.
Now, if we want the rest of the people to study more at freetime, we should put everything into order. Then when people know where they are or where they want to go, they can start building their career based on some solid frames without alpha gurus running over them all the time. That way people don't have pressure to study more than they can etc..
We also need to keep in mind, that when RD trendsetters come up with new technologies, those technologies should have real solid grounding into everything in the corporation.
Trendsetters cannot just declare that so and so technology will be part of the company strategy. Trendsetters cannot just do initial linking of the new modules into the system and write few guides how it all works. You need something more, you need to make sure that the rest of the people becomes familiar with the new technology. And you have to understand that you need to take system architects along, then the designers and then the programmers and all the others. Plus you need to make sure that every level is connected to each other and traceable and testable. If you just hope that programmers got it and that they study some more at freetime, you are in deep trouble.
When new technology has been taken into projects and implemented, you need to trace and test it too. That is the task of the trendsetters' assistants. Everything needs to be under control. You can't just throw new technology into the projects and hope everything goes well.
Finally, if you write simple code, but it works, its better than complex code that doesn't work. Complex code can waste your life studying and debugging the complexities. And there are different kinds of screwdrivers. Kids' plastic ones and professional steel versions.
I don't know if I'm part of the the 20%. All I know is that I like refactored code better than non-refactored code, and I like fooling around with esoteric programming languages like Euphoria.
I'm an 80% progammer (though my experience is Delphi and Perl rather than C# and ASP.net) and I read your blog. I tried Teach Yourself C++ in 24 Hours when I was a teenager. I think it cheapened the field because it had mistakes in the code listings and overall it just wasn't that well written.
I've been to a presentation by Jeff Atwood in Fresno at the Central Cal Dot Net Users Group. It got me excited! While I'm probably in the 80%, I do make forays into the 20% camp on occasion. I've installed Linux several times back in the 90s, switched from Win 95 to NT Workstation SP2 when it was available, have tinkered with AJAX, drupal/joomla, etc. I'm not an alpha programmer by any stretch of the imagination, but I like to think I'm an alpha geek. :)
I agree with most of the other critical posts here - I find the 80/20 generalization completely out of touch and elitist. This is usually one of my favourite blogs, but I am very disappointed to see that Jeff subscribes to this nonsense.
I think there are a certain number of bloggers who have created this image of an elite group of "superstar" programmers working above and beyond the abilities of the uneducated masses. Frankly, most posts of this ilk are offensive and elitist. I am not writing compilers in my spare time on the weekend. I'm not contributing to open source. But I'm not some docile idiot doing the bare minimum to stay afloat, as this post and many others imply. Nor are my coworkers, most of whom almost certainly have other priorities than re-installing the latest and greatest linux distro for the umpteenth time. Shame on those who spread this nonsense.
Scott Mitchell is great. I won an ASP 3.0 book on his website years ago and am now leading a startup! :)
I am still developing in COBOL - I'm not quite sure where that puts me!?
A rebuttal to Gord the musician: your remark about turning the 80/20 thing around by relating it to music makes no sense!
The 80/20 related to programmers is that the 80% MAKE A LIVING doing it. Your comment about music makes the 80% the unwashed listeners who pick up an instrument every now and then. This is NOT the same thing! The average unwashed music listener doesn't make a living by playing mediocre music!
There's nothing wrong with the 9-to-5 coder grunt mentality - there's LOTS of code out there that's rote work to be done once the interesting design is finished. We need the coding grunts to get that bulk of drudge work done!
I am one of the 80% definitely. I love playing music, so much in fact that I would never waste a weekend studying computer stuff and isolating when I can be mingling with girls and playing music.
Life is way to short to waste is on computers, I waste forty hours a week coding anyhow.
The weekend comes and it is time to:
A: Try and have sex as much as possible.
B: Drink copious amounts of whiskey.
C: Have fun.
Doing what I do at work all weekend != fun.