Slashdot Log In
Hiring Good Programmers Matters
Posted by
timothy
on Wed Aug 03, 2005 06:40 PM
from the oh-that-can't-be-true dept.
from the oh-that-can't-be-true dept.
Doctor O writes "Joel Spolsky (of joelonsoftware fame) has some good points and fun with numbers on the quality of programmers and whether it is more profitable to go with cheap or good programmers. His point is that a good programmer will simply create code of a quality that average programmers never can create. An interesting read."
This discussion has been archived.
No new comments can be posted.
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Full
Abbreviated
Hidden
Loading... please wait.
The answer depends (Score:5, Insightful)
Re:The answer depends (Score:5, Informative)
Parent
Re:The answer depends (Score:5, Funny)
Although, without bad programmers, we wouldn't have The Daily WTF [thedailywtf.com].
Sometimes a person's purpose in life is to serve as an example to others. What kind of example is another matter entirely...
Parent
Re:The answer depends (Score:5, Interesting)
Parent
Re:The answer depends (Score:3, Funny)
Re:The answer depends (Score:4, Informative)
Parent
Re:The answer depends (Score:5, Funny)
printf("Hello world!\n");
// 3 cheap coders x $0.05 = $0.15
A single programming Guru will write it as:
/*
* Hello world!
* Copyright (c) 2005 John "Code Guru" Doe
*
* This programme tells the computer to say hello
* to the world, using correct Engligh grammar.
* It should look like:
*
* Hello, world!
*
* NOTES
*
* The programme is limited to one way in which
* it greets the world. In version 2.0 we may
* include another variant of the phrase. We
* will need an advanced AI engine for the task.
*
* BUGS
*
* The punctuation is not entirely correct.
* The programme skips the comma between
* "Hello" and "world".
*
* TODO
*
* Needs more testing.
*/
// Greet the world. To do that, we make the
// computer say "Hello, world!".
printf("Hello world!\n");
// 1 guru coder x $80/hr x 8 hours = $640.00
Parent
Re:The answer depends (Score:5, Funny)
You need error-checking on printf and an error log for the error message, you need to internationalize and localize the string, you need both user and maintenance documentation, and you need a client-server architecture. Not to mention that you seem to have jumped into the project without written requirements, a specification, and usability testing.
This would take about a month at my standard rate of $200/hr.
Parent
Re:The answer depends (Score:5, Insightful)
Parent
Re:The answer depends (Score:5, Informative)
My pet theory - and I admit I'm talking out my ass here - is that managing new software development ought to go like this:
1. Decide what you are going to make. Get a reality check from the intended audience. Don't assume that everyone likes or needs what a super-programmer thinks is spiffy.
2. Design and mock-up all the static parts of the user interface and informally specify user-visible behaviors. Have someone who understands visual design and industrial psychology take the lead in directing the UI design with the programmers in a supporting role and management only there to back up the designer's decisions when requested. Get the best such person you can find, even if you think you can't afford her. This person is as important as everybody else on the project put together. Come up with as many radical variations as possible the first couple times through. Be bold and elegant and try to come up with things the user didn't even know she wanted. Have the UI design person get user feedback with the programmers present but with the understanding that they are there to find ways to make what the designer wants and the user needs happen and not to raise problems that programmers can solve on their own. The UI guy needs to be ruthless in excluding things that will get in the way, no matter how cool the programmers think the feature is. Repeat step 2 until the programmers start to lose their minds or the design converges in detail.
3. Formally specify all user-visible behavior by writing the complete user documentation before the first line of code gets written. Have the UI designer and the tech writer work together on the outline and have the programmers looking over the writer's shoulder as the bulk of the text is written. If there is no tech writer, get the UI person to do it, if possible. Check with real users again to make sure it makes sense to them.
4. Then let the programmers do their thing. Having hired good people, don't tell them how to factor or comment or code or what languages they should use. Let them add things only so long as it does not affect the user. (General solutions for specific problems, for example.) Before they start, make them hash out whatever rules they like to ensure quality and maintainability - but hold them to their own rules when things get hairy. Make a significant part of their pay (20%-50%) depend on matching the design and documentation to the UI designer's satisfaction, passing testing and meeting or beating target dates they agreed to when they got full control of the project.
5. Short of correcting a thermonuclear fuckup that would otherwise cripple the software, don't allow any changes, additions or deletions to the design by anybody until the whole thing is out the door as planned.
Is this a stupid or impractical way of doing things? What am I missing?
Parent
Re:The answer depends (Score:5, Interesting)
I've written projects with HIGHLY detailed specs. I've talked to people high and low. I've gotten signatures in triplicate.
And, those are the projects that BOMB QUICKLY AND PAINFULLY.
The last time I tried that approach, I was told on the DAY OF ROLLOUT after 1.5 months of full-time development that it "wouldn't work" and had to be "totally redone".
I screamed, bitched, complained, waved contracts, specifications and all, before spending another 2.5 months rewriting the application. (while people were using it!)
So, now I do things differently. I spend a bit of time, get a spec, and send out an email to all involved, and wait for 24 hours. Then I write it, knowing full well that it will suck upon delivery, and I make this knowledge apparent, obvious, and common.
Then, the comments come. The text is hard to read. It doesn't include N-ARCANE-FEATURE. When you click the button called "Save", it saves it, but it's not obvious what you are saving.
Whatever. The feedback comes in spades.
So, focus on making updates quick and easy, and listen. That's the Linux way: release early, release often.
People will tell you what they like and don't like. Listen, and release an update when you add new features.
In my flagship product, I've released over 40 releases in a single year. It'd be painful, except that the product updates itself, and it takes me all of about 10 minutes to release. Really.
It costs each user about the same - 5-10 minutes, and they can do it whenever they like.
So, I release early, I release often, and I listen closely to the feedback. Users get what they want, and I get what I want. (Users' money!)
Parent
Re:The answer depends (Score:4, Interesting)
In the UK that means that there is a bid. The lowest bidder gets it, they employ the cheapest coders on the planet, farm as much off shore as possible, and then waste millions supporting crappy software. We're now in a situation where we can't trust the government with ANY software creation. They got the passport software wrong (well to start with), they got the tax software wrong (New Tax Credits was a fiasco) and they got the air traffic control wrong (fortunately nobody has died... yet).
What Joel says rings so true that its scary to think that the really important software will NEVER be written like this. But what can you do to remedy the situation? Because there is no market, you can't expect competition to improve the quality of the code, the only incentive being fines to companies when they get it wrong - thats no incentive, that just makes accountants want to do just a good enough job not to get fined.
Do you open source the problem? While I agree that security through obscurity is not security at all, you will never get a country that thinks its a good idea to ahve its tax software open to all to see. There is also Brookes law to deal with and there is still no guarentee that you will attract the best of the best.
Anyways... fascinating article!
Parent
The full saying is... (Score:5, Insightful)
Parent
Re:The full saying is... (Score:4, Interesting)
Parent
I hope he's wrong (Score:4, Funny)
Re:I hope he's wrong (Score:5, Funny)
Well, I couldn't hire monkeys, but I did the next best thing - outsourced the documentation department.
Romeo, Romeo, why is it that they are calling you Mister Romeo?
You should be talking to your father about getting your name changed,
And if you will not be doing that, oh please just be renewing my contract,
And I will be changing my name to Julie or something else that sounds kind of American!
(Shall I be listening to the on-hold music, or shall I just punch "0" and hope to be transferred?)
They didn't quite meet the "all documentation shall be written in iambic pentameter" part of the specification, but it wasn't bad for $6/hr... and it was still better English than what my alma mater's graduating these days. I'm convinced!
Parent
Common Sense (Score:3, Informative)
I guess it is just me... move along now, nothing to see.
Re:Common Sense (Score:3, Insightful)
Let me guess... (Score:3, Insightful)
Seriously though, it is very non-obvious to a good deal of IT Managers. When you perceive software development costs as ultimately a burn on revenue, their conclusion is that you need to minimize said costs (much in the same way that you would seek the lowest-priced landscaping or office-cleaning staff).
Can't Go Wrong (Score:5, Funny)
Yes, you're all great programmers, much better than all the others out there. Especially because you read my posts. We need more people just like you.
Re:Can't Go Wrong (Score:4, Insightful)
Consider Paul Graham, who could be accused of writing programmer ego-stroking articles. They are both good writers, but I like that Joel (at least here) tries to support the theory. He doesn't say "Some programmers are fundamentally better", which is a fairly wide-spread folk belief, backed only anecdotally usually. Instead, Joel says "Are some programmer's fundamentally better? Here's some data that suggests just that".
On a seperate note, a lot of other posters here are saying "Who's Joel?" and "Why should I listen to some guy I've never heard of?". Well, that's a silly argument against whatever he might be saying in your article of choice. Remember that ESR was a nobody once; he seems to be primarily noted for writing the Cathedral and the Bazaar. Similarly with Joel: he's worked on a few software projects, though you may have never heard his name, and he writes well, and his articles make sense. To me anyway: you may disagree, but at least then you're disagreeing based on content, not based on "I've never heard of him so he must be some jackass upstart know-it-all."
Parent
Re:Can't Go Wrong (Score:4, Funny)
Just pack my job up and move it to India now. Apparently, I won't be needing it.
Parent
versus (Score:5, Insightful)
- There isn't a need to go and ask simple questions all the time around.
- Development experience gives a 'mental' outline of what the end thing will look like
- Intelligence comes handy when one is 5 level deep in a nested function (which can't be simplified) and trying to add another 2 levels at once.
That's such a bunch of bullshit (Score:5, Insightful)
Second of all, if you're five levels deep in the nested function, that's a good indicator that you're not good enough at software design.
Parent
Cost of Quality (Score:5, Insightful)
My experience with this is in the IC design part of the world, but the rule remains: you're better off with half the people but good ones.
If you want to add bodies, let them do review work. It actually does contribute to quality, and has the added benefit of making better engineers out of the reviewers (and, IMNSOHO, of those who know that their work is going to be reviewed, too.)
Re:Cost of Quality (Score:5, Insightful)
It gets worse when outsiders above the project (say, a division manager that is not paying attention to the status reports) decide to listen to hearsay and water cooler talk and use that as criteria to bring more people in:
"The guys in the break room are bitching about the project, we need to bring more php programmers."
Next thing you know, this head guy is talking to everyone except the actual team that knows what is going on.
This happened to us less than a month before delivery. For real. We found by accident that the boss was concerned and was getting ready to shop around for extra PHP people. Small problem: we were not having PHP problems. Our problem was a hosed CVS repository, which is what we were overheard bitching about while making coffee in the break room.
When we told the boss that there was nothing wrong with the code and we were less than two days behind our schedule (which is much more agressive than his) he almost shit a brick.
The lesson? Don't bitch about technical stuff unless it is a controlled environment. We now keep our bitching for our daily walk to pick up lunch. The odds of someone from the office overhearing us and getting half of the information are pretty much nil.
BTW, the boss still came up with a good idea for bringing extra people, since programmers are not needed. He thinks we can bring temps just to do grunt work like filling a bunch of web forms, etc.
Parent
Re:Cost of Quality (Score:5, Interesting)
Let them do process busy work as well.
A few months back we were too crunched on the schedule, but another project had cancelled so there were loads of bodies available. But putting them to work coding would have destroyed the project. As always, upper management didn't understand that. So when I was asked where I could best use some extra help, I answered truthfully: have someone else write all the freaking documentation and attend all the freaking meetings so I dont' have to. Tada! They listened and I ended up with four extra hours per day to get the work done.
p.s. Of course, management never learns. Another project is slipping and they're throwing people at it as fast as they can cancel projects. Sigh.
Parent
The cult of the elite programmer (Score:3, Insightful)
That's because it's a craft, not engineering (Score:5, Insightful)
Software is much the same. A true craftsmen of the art will produce code that is so tight, so functional and so spare that it is nothing short of beautiful. When was the last time you made something beautiful? We all get the warm fuzzies from time to time when we think we've done good work, but how can you really tell?
My view is that software engineering courses are all very well (not exactly a waste of time), but they might perhaps be the wrong way to turn out good programmers. Perhaps something more like the traditional apprenticeship would serve better - mentoring by someone who is already a craftsman "well versed in the art". I guess the main drawback of this is that most good programmers are often terrible teachers, but that might reflect the lack of a tradition in the field.
Parent
Good programmer = terrible teacher? (Score:5, Insightful)
This was an interesting observation:
Something I've found in many aspects of life is that the people who are really good at something tend to be able to explain it, clearly and accurately, to someone less experienced. This is true of almost any field I've ever studied, from mathematics to martial arts, from driving to dancing.
It's interesting that in Japanese, there is little distinction between being very good/experienced at something, and being a teacher of it. If someone in Japan asks you whether you teach programming, and you're the 20 year veteran Senior Software Engineer at your company, the answer is yes even if you don't teach in the English sense. It's simply implicit that by being good at something, you will be teaching those around you as you do it.
I think the difference between someone who's really good at something and someone who's just OK usually comes down to a depth of understanding. One can follow a cookbook of techniques, or regurgitate information they've been fed in the past. The other writes the cookbook, because they've understood the information and worked out how it all fits together.
A corollary of this is that those who truly understand a subject tend to be better able to convey their understanding to others. Because they can see it from more than one point of view, they can adapt their explanation and examples to fit the knowledge and learning preferences of the person they're trying to teach. Those who never reach that level of understanding can repeat what they were told when they were learning themselves, perhaps even in multiple ways they learned from multiple sources, but they can't adapt it, can't see it from different perspectives and present it in different and original lights.
Thus I'm rather surprised that you think most good programmers are terrible teachers. Most programmers may be terrible teachers, but I question whether a good programmer who is unable to pass on that knowledge is really that good at all. It's unwise to generalise completely, because of course teaching requires skills all of its own, but I've met very few great practitioners in any field who weren't also outstanding teachers.
Parent
Yes, but... (Score:5, Funny)
Who is Joel? (Score:5, Insightful)
I suppose, of course, that the same could be said for most tech journalists, most of whom would have a hard time compiling a source tarball. On the other hand, usually tech journalists are reporting on companies' press releases, not writing editorials about software design.
The other side of things (Score:5, Insightful)
I tend to judge him by what he has said more than any experience with software he has written or managed. And really his blog has very good insights on software that other people ignore at their peril - this particular story is no exception to that rule.
just because he also has a bit of the marketer in him (understandable since he owns a business) does not automatically mean he does not know what hes talking about in regards to programming.
So would you disagree with his assertion that a higher quality developer can produce code that would never come from a mediocre one?
Parent
Re:Who is Joel? (Score:5, Insightful)
1. I haven't heard of him, therefore he must not be important and
2. He can think and write, therefore I read his log.
I definitely fall into catagory 2. I am not a programmer, but I work with programmers, request changes from them, and depend on their work. Insights that I gain from his website and his books have lead to more understanding on my part, and better results. That's good enough for me.
Parent
Joel headed up the excel team at Microsoft (Score:4, Informative)
Anyway, his articles are the main reason for his fame these days. His company also has a third product, CoPilot, that lets people fix software problems remotely.
Parent
Software application development comes down to... (Score:5, Insightful)
2. You can have it done cheap.
3. You can have it fully functional
Now pick 2.
Fast and cheap = means using average and inexpensive programmers and is not fully functional
Fast and fully functional = exceptional programmers and will cost an arm and a leg
Cheap and fully functional = means it will take a long, long, long, long time for the average and inexpensive programmers to build it
The timeline for the application, whether you need it tomorrow or can wait a few years, in addition to the budget determines what kind of programmers you can afford and need to hire.
- tokengeekgrrl
Re:Software application development comes down to. (Score:5, Interesting)
Parent
I agree. (Score:5, Insightful)
No art, however minor, demands less than total dedication if you want to excel in it.
This means that people who aren't dedicated to their profession won't properly trap errors, will always be calling functions wrong, and won't figure out what their users want. In a word, they won't excel.
If you don't want your software to have nasty bugs, hire good programmers. If you want your software to work beautifully, hire good programmers.
What does 'best' REALLY mean ? (Score:5, Informative)
He forgot something (Score:5, Funny)
WTF happened to the ??? step!
One remark I do not agree with... (Score:5, Insightful)
I agree with the first part of the statement but not necessairly the second. The reason is as someone who has friends in both worlds rarely does the "software house" ever care about your outside life. If fufilled means being challenged, constantly engaged in your work, but constantly on deadline death marches, always-on fire control, and no life outside of work I guess you can call that satisfied. Have a friend who works MS. LOVES his job, but everything in his life revolves around it and the insane hours he keeps there.
Work to Live, Don't Live to Work.
I respect the heck out of Joel but he seems to fall in that second camp. When the tale of your life is told make sure its not about the code you cranked out but the lives and people you touched.
Yeah, but (Score:5, Insightful)
This is my curiosity... (Score:5, Insightful)
Does every "good" programmer have a degree in computer science? Are there exceptions? How can a programmer who might be "average" GET to be a "good" programmer? Can mediocre programmers be MADE into good programmers? This guy seems to be suggesting that it's ok to continue the cycle by doing NOTHING to enhance the abilities of these mediocre programmers. What about hiring a couple of good ones, and then some others who can be ACTIVELY mentored? Isn't that how some other professions work? What is medical internship all about? What about the journeyman status in the building trades? It's all about mentoring and moving people to the next level of expertise.
The Google strategy (Score:4, Insightful)
Other news (Score:5, Funny)
1) Good Carpenters build good furniture
2) Good Architects architect good structures
3) Good Authors write good books
Re:And exactly what is a 'good' programmer? (Score:5, Insightful)
1. It has nothing to do with money. You can find good quality developers at both ends of the pay spectrum. In fact, I adamantely believe that the further you get towards the high end of the pay spectrum, the worst the quality is. Too cheap is bad too, but not as bad as too expensive.
2. A good programmer isn't limited to a narrow set of tools or technologies. He will pick the best platform and language/tools based on the application's needs. A bad programmer is one who only knows a small subset of technology and ends up forcing applications to operate within the confines of resources which limit stability, flexibility, performance and productivity.
3. A good programmer spends a lot of time researching the project before ever writing a single line of code. A good programmer demands the client/employer be as detailed as possible regarding the specs of the application. A bad programmer is comfortable with ambiguity relating to product specs. A good programmer, in lieu of getting detailed specs from the client, will create his own outline of what the application will involve and make it finite before coding even starts and make sure the client signs off. Good programmers don't tolerate ambiguity in specs.
4. A good programmer/sub-contractor is more likely to charge a flat rate for the development of the project than an ambiguous time-based wage (but all sub-contractors have to have provisions to deal with project creep and problem clients).
5. Good programmers expose bugs in applications and platforms. Bad programmers create them where they didn't exist.
6. Good programmers always exceed the client's expectations in terms of flexibility and versatility. Bad programmers tend to literally interpret feature lists and make program structure more finite than modular.
and last but by no means least...
7. Good programmers ALWAYS DOCUMENT THEIR CODE WELL! Bad programmers take great pride in making sure nobody can understand what they're doing.
Parent
Re:And exactly what is a 'good' programmer? (Score:4, Insightful)
1. It has nothing to do with money. You can find good quality developers at both ends of the pay spectrum. In fact, I adamantely believe that the further you get towards the high end of the pay spectrum, the worst the quality is. Too cheap is bad too, but not as bad as too expensive.
Maybe you are not guaranteed good programmers by paying alot, but good programmers still cost more. I just do not see how things could be different, except if you are saying that companies are completely unable to recognize quality.
2. A good programmer isn't limited to a narrow set of tools or technologies. He will pick the best platform and language/tools based on the application's needs. A bad programmer is one who only knows a small subset of technology and ends up forcing applications to operate within the confines of resources which limit stability, flexibility, performance and productivity.
A good programmer will not only think of the needs of the application when choosing tools, but will also consider the context he is in. Chossing an unknown and complex tool might well be a very bad idea, even if it fits the job perfectly. I realize that you might intend this to go under "the application's needs".
3. A good programmer spends a lot of time researching the project before ever writing a single line of code. A good programmer demands the client/employer be as detailed as possible regarding the specs of the application. A bad programmer is comfortable with ambiguity relating to product specs. A good programmer, in lieu of getting detailed specs from the client, will create his own outline of what the application will involve and make it finite before coding even starts and make sure the client signs off. Good programmers don't tolerate ambiguity in specs.
Most projects are not of the form "implement a correct compiler for Java" or something equally well defined. In many contexts, demanding exact specifications will result in endless preparations, and as soon as the spec is "perfect", requirements will have changed. Specifications change because needs change and the knowledge of the users and developers increases as the project progresses. This is not a bad thing, it is a very good thing, even if it can be annoying to the programmer. I think eXtreme Programming gets this right: get some code out of the door as quickly as possible so people can try it out.
4. A good programmer/sub-contractor is more likely to charge a flat rate for the development of the project than an ambiguous time-based wage (but all sub-contractors have to have provisions to deal with project creep and problem clients).
Specifications change so a flat fee is a bad idea for everyone.
Good programmers expose bugs in applications and platforms. Bad programmers create them where they didn't exist.
Good programmers are human, so they make mistakes too. Of course they may do it less frequently, but they still do it.
6. Good programmers always exceed the client's expectations in terms of flexibility and versatility. Bad programmers tend to literally interpret feature lists and make program structure more finite than modular.
Unneded flexibility and versatility can increase code complexity, introduce bugs, make the program harder to use in the common case and lengthen development time. It is much better to get the program out there in use quickly, and then implement just those things people actually end up needing. Of course, in some cases things can be made more general "for free", and then the good programmer will try to spot it and do that. Sometimes the flexibility and versatility is really useful og necessary, and only in those caes will the good programmer make the program that way.
7. Good programmers ALWAYS DOCUMENT THEIR CODE WELL! Bad programmers take great pride in making sure nobody can understand what they're doing.
I might agree, depending on what yo
Parent
Re:Elitist Programmers (Score:4, Informative)
Parent
Re:my own experiences (Score:4, Interesting)
Parent
Re:my own experiences (Score:5, Funny)
Parent