Posted by tobi — 09:07 AM Aug 08
A great slashdot comment regarding the difference between programmers and great programmers:
There’s no one programmer who does the work of ten other programmers. One uber-programmer does just as much work as one ordinary programmer. It’s just that the results solve ten times as many problems. Programming is fundamentally a design problem. A great bridge designer doesn’t do the work of ten lousy bridge designers; the great one designs one great bridge in the time it takes the ten lousy ones to design ten lousy bridges.
The best approximation is that each problem has a certain complexity and a certain size. The size determines how long it will take, and it doesn’t matter how good the developers are. The complexity determines how good a developer is needed to make progress at all. If you’ve got only easy problems, an uber-programmer doesn’t help you much (unless the programmer can find a smaller, harder problem that replaces the big easy one). If you’ve got a hard problem, ten average programmers will work on it forever without getting any results.
And there’s one last thing specific to computers: the computer can solve easy problems for you, but making it do so is a hard problem. But solving that one hard problem (plus some processor time) resolves a lot of easy problems. Another type of hard problem is writing a magic library function that makes a range of moderately hard problems easy enough for average programmers to solve.
If you’ve got ten people essentially doing data entry, an uber-programmer may be able to eliminate the need for them to do that at all. If you’ve got ten developers working on some problem, an uber-programmer may be able to double their productivity. In either of these cases, the uber-programmer directly produces something that isn’t part of the actual project, but the benefit to the project is on the order of ten average programmers’ work. And, if the uber-programmer reduces the complexity of the problem to put it in reach of the rest of the team, no amount of ordinary programmers’ work would benefit the project as much as the uber-programmer’s contribution. Of course, if you require an uber-programmer to literally do the work of average programmers, there’s no benefit at all.
Gabe da Silveira 08 Aug 15:32
In my experience the real gap is not between competent programmers and superstar programmers, but between the incompetent and the competent.
I consider myself to be competent, and I can definitely see some programmers being 2-3 times as productive as me. But some of the stuff I’ve seen over the years has led me to wonder how some people can even hold down a job as programmer. Just as a great programmer might raise the productivity of everyone around him, a bad programmer can suck everyone’s time out. Easily creating a 90% or worse reduction in productivity. In fact, sometimes it would be better if the person was paid to just sit quietly and not touch anything!
Lourens Naude 09 Aug 21:29
I recently had to opportunity to work with an ex Microsoft Product manager, who is extremely good at writing specs, but also vigorously allocate time allotments for them, down to the hour.
I tend to lean towards Software Engineering / Design VS actual skillset / ability to program in a specific language.From the traditional project management approach, if a member of the dev is able to refactor a given spec into something more extensible, but would need perhaps an additional 2 hours to do so, I have found that to be generally frowned upon.Problem is at least 50% of the halflife of a production app is spent either on maintenance or feature additions.It’s much cheaper, and more time efficient, in the long run to opt for that cleaner solution now.
Refactoring is continuous as well – in the current startup environment, that’s generally delegated for ‘alpha’ or ‘later’ ... but I consider that a trait of a good developer … the ability to rip up a smelly portion from 2 days ago, and do regression via tests.
boredom-
—-—-sweet spot-———anxietyLet a programmer fall into either extreme, via lack of stimulation and unrealistic deadlines respectively, productivity drops immediately.
The various Ruby jobsites resembles the Daily WTF on occasion … almost every post requires 1..10 skills … does anybody bother taking the ability to architect, design && refactor into account?
Is someone coming from a corporate dev environment or Successful Web 2.0, who spent most of their careers as a team member ( with others to fix and cover code smells ), a better programmer than the individual in the coffee shop that spent his/her dev career working mostly alone, but with extreme discipline and good design skills to boot?