[OT] dealing with lower level programmers

I

Ian Collins

Alf said:
* Ian Collins:

Your argument wouldn't be much different with one order of magnitude,
and that's commonly observed. So where does the argument go wrong? It's
simply that the argument assumes that the requirements for graduating
and holding a job, in a technical profession, have to do with
productivity and/or quality, a sort of monotonically increasing
function, whereas in reality there can be little direct connection
between technical ability and success, and whereas success can have more
to do with conformance and social issues. In fact, a recent career guide
in Norwegian "Dagens Næringsliv", a leading economics newspaper in
Norway, cautioned strongly against doing too well while at the lower
rungs of the ladder because one is then viewed as a threat both by
co-workers and by one's boss, and reader comments were uniformly
positive that at last some reality was discussed.

That observation is as old as humanity! Luckily we don't execute
threats to the leadership any more.
Care to cite the references?

Third google hit on "programmer productivity", citing e.g. Steve
McConnell, Randall E. Stross and [clc++m] mod (now inactive) Robert C.
Martin: <url:
http://www.devtopics.com/programmer-productivity-the-tenfinity-factor/>.

It's so common and well-known that it has its own name.

They don't claim 100:1.
Note that this fact, the observed reality, doesn't square with your
reasoning above, and one resolution of that is as I noted above (I'm not
saying that that's the only explanation, but I think it's the main one).

Maybe I should have cited James' favourite caveat - "In well run shops"..
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

What is with this newsgroup?  People seem to be waiting for an
opportunity to go at each other's throat.

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots. The
younger were attempting to bully the older into early
retirement. Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.


"Most men will proclaim every one his own goodness:
but a faithful man who can find?" Proverbs 20:6
 
B

Brian Wood

There is a fair amount of incivility out there these days.
Close to a year ago I posted a link to a news story
about conflict between older and younger pilots.  The
younger were attempting to bully the older into early
retirement.   Most companies/politicians pay lip
service to ethics and integrity, but few back it up.
In "The Abolition of Man" by C.S. Lewis he observed
in the 1940s that technological integration was
leading to societal disintegration.

"Most men will proclaim every one his own goodness:
but a faithful man who can find?"  Proverbs 20:6- Hide quoted text -

- Show quoted text -

I meant to include my signature.

Brian Wood
Ebenezer Enterprises
www.webEbenezer.net
 
J

Jerry Coffin

[ ... ]
So I think that though the 100x figure is a bit extreme I do believe
there can be significant differences between developers, especially when
you don't assume we're talking about some super-shop that only hires the
best and can afford to do so...and take the time to interview and
replace people when they don't pan out as expected.

In _The Mythical Man-Month_, Brooks quotes a study by Sackman,
Erikson, and Grant, giving a factor of approximately 10x in terms of
productivity, and 5x in terms of program speed and space.

That study, however, was conducted in 1968, and (a point that's often
ignored) was originally written as a comparison of online to offline
programming. That points (at least to some degree) to the difficulty
of extrapolating from that study to much that's meaningful about
current practice. For the sake of argument, however, let's assume
that it gives a rough idea of the expected range of "native ability"
of programmer.

I do think a couple of factors are worth considering, however. First
of all, in 1968 there were relatively few programmers, and I'd guess
that most had formal background in engineering, mathematic, or both.
In 1968, there was virtually no such thing as a college with a major
in computer science, but today there are quite a few. Unfortunately,
for every good one today, there's at least one more that'll give a
diploma to anybody with money.

That's likely to lead to a larger range of variation in both
directions: there are almost certainly more people who picked
programming as a job simply because it pays well and such (even
though they may well lack any aptitude for the job at all). On the
other side, there's a whole lot that can be accomplished by applying
known, proven principles today that hadn't been invented at all in
1968. The average has probably stated about the same, but the best
certainly have a great deal more education now, while the worst
probably have less.

Second, there are a lot more specialized tools reasonably easily
available today than in 1968. Some maintain a high level of awareness
of those tools, and are likely to apply them (to at least some
degree) when they're at least reasonably appropriate. Others barely
know a single language, and have no idea when another tool would be
more appropriate.

Either of these could probably lead to a 2x factor by itself, so
multiplying the three together, we've accounted for a 40x factor --
but this would still be between the best and the worst, NOT between
the best and the average.

Assuming relatively minimal skew and such, that gives a difference
between the top and the average of ~6.3x (no, not 20x -- the factors
multiply, so it's sqrt(40), not 40/2).

While there are certainly other factors I haven't tried to take into
account, I think those are probably the biggest ones. A 10x
difference between the top and the average might be believable, but
100x strikes me as more than just a bit extreme -- it sounds
downright unbelievable.

I'd also note that there's at least one factor working in the
opposite direction: we routinely expect systems today to be both
larger and more reliable than any but a tiny percentage were in the
1960's. In a large, high-reliability system, it's MUCH more difficult
for even the best coder to be drastically better than an average one.
In a large system, processes and procedures take up a larger
percentage of overall time -- and in the process the time taken for
the coding itself takes up a smaller percentage.

Assume programmer A could find and fix a particular bug in 6 minutes,
but programmer B would take a full hour to do the same thing. So far
A is 10x more productive. Now we have a code review where we have
(say) 10 people look over the code. First we have 10 minutes where
people discuss the weather, wait for the people who are inevitably a
few minutes late, etc. Then the programmer spends 20 minutes
outlining the bug and the change -- and since the meeting involves
about the same level of people (overall) either way, A can't explain
it a whole lot faster than B could.

Then the code is reviewed -- again, since about the same people are
involved either way, the review takes about the same time either way.
To give him the benefit of the doubt, let's assume A figured out a
much simpler way of fixing the bug, so for A's fix, the meeting
(overall) runs 45 minutes, but for B's fix, it runs an hour and a
half.

In overall productivity, A's change took .1 + .75*10 = 7.6 man hours.
B's change took 1 + 1.5*10 = 16 man hours. The 10x factor for the
original change is now just over 2x -- and in all honesty, even
that's probably being generous.

This also explains why you want formal reviews to involve fewer
people if possible -- in the example above, if the review team was 5
people instead of 10, the numbers would work out to 3.85 and 8.5 man-
hours respectively. The overall difference is still well under 3:1
though...

P.S. If you really object to "man-hours" please feel free to read
those as "person-hours". Personally, I find "person-hours" much
clumsier to say -- and the percentage of programmers I've worked with
who were female was tiny anyway.
 
N

Noah Roberts

Jerry said:
In overall productivity, A's change took .1 + .75*10 = 7.6 man hours.
B's change took 1 + 1.5*10 = 16 man hours. The 10x factor for the
original change is now just over 2x -- and in all honesty, even
that's probably being generous.

OK, this is pretty good analysis but one thing it leaves out maybe is
the time that a "bad" programmer can add to discussion time. If you
have to describe in excruciating detail everything for person B so they
can competently understand what you've done whereas with person A you
can discuss things in terms of patterns and other domain specific
language...there's going to be time added there too.

In other words, a "bad" programmer may just plain not get it and may
increase the time necessary for code reviews by 2+ times as well.

Still, as you say...100x is overboard. Not sure it was meant as an
accurate number, being seeming pulled from the sky (or some other
place). To be 100x it would have to take one person two weeks what it
would another person an hour.

Actually...come to think of it...bah, but that was due to the developer
running off and "researching" for two weeks and never accomplishing
anything. More a management issue I think. I think you have to get an
average programmer with poor attention and add a bad manager to get 100x.
P.S. If you really object to "man-hours" please feel free to read
those as "person-hours". Personally, I find "person-hours" much
clumsier to say -- and the percentage of programmers I've worked with
who were female was tiny anyway.

We've interviewed 2 in the four years I've been here. One was straight
out of college and we got her as an intern. The other one did not
accept our offer. She was impressive, it's really too bad.
 
J

Jerry Coffin

OK, this is pretty good analysis but one thing it leaves out maybe is
the time that a "bad" programmer can add to discussion time. If you
have to describe in excruciating detail everything for person B so they
can competently understand what you've done whereas with person A you
can discuss things in terms of patterns and other domain specific
language...there's going to be time added there too.

In other words, a "bad" programmer may just plain not get it and may
increase the time necessary for code reviews by 2+ times as well.

True -- but it remains true for _all_ the code reviews, not just when
he writes the code. IOW, this affects essentially _everybody's_
productivity, not just his own (at least everybody involved in code
reviews along with him -- but probably almost anybody who has to
interact with him at all). It's also (one of several reasons) why a
poor programmer can be _so_ detrimental to a team.
Still, as you say...100x is overboard. Not sure it was meant as an
accurate number, being seeming pulled from the sky (or some other
place). To be 100x it would have to take one person two weeks what it
would another person an hour.

Right -- while that's believable in special cases, it's much less so
on a consistent, ongoing basis.
Actually...come to think of it...bah, but that was due to the developer
running off and "researching" for two weeks and never accomplishing
anything. More a management issue I think. I think you have to get an
average programmer with poor attention and add a bad manager to get 100x.

As I said, it can happen once in a while, but maintaining it for long
periods of time is a whole different story.

There are really two main points though: 1) as a project grows, the
percentage of time actually spent writing code shrinks -- and the
differences in productivity between programmers shrinks at about the
same rate. 2) the square root involved when dealing with the factors
makes the factor between the average and the top or bottom seem quite
small compared to the factor between the top and the bottom.
 
G

Gerhard Fiedler

Noah said:
We did stand ups here and they were a total waste of time for us. We
got the same stuff I got when just asking, "How are things going?"
People respond with, "fine," and in stand-ups that would be, "I'm
doing backlog item XXX and everything's going great." Everyone knows
you're doing backlog item XXX and the later is not informative.

Exactly. Then ask for more details. If it's a bug "could you reproduce
it?" or "already have an idea what's the problem?", if it's a new
feature, "any ideas on how to do it?", "made any progress on the ideas
we talked about yesterday?" -- or whatever, but /specific/, until /you/
are satisfied with the specificness of the information (not necessarily
with the answers).

You're the leader, so it's on you to lead the conversation... :) This
position is not only about being a higher skilled programmer (actually,
that's the architect's job, not the team leader's job, if you have the
luxury of having both), it's about being able to "lead" -- which means
being able to deal with, in one way or another, shortcomings (real or
perceived) of team members (and of higher-up management :).

Patience and absence of personal judgment are really important for this.

Gerhard
 
G

Gerhard Fiedler

Alf said:
Care to cite the references?

Third google hit on "programmer productivity", citing e.g. Steve McConnell,
Randall E. Stross and [clc++m] mod (now inactive) Robert C. Martin: <url:
http://www.devtopics.com/programmer-productivity-the-tenfinity-factor/>.

It's so common and well-known that it has its own name.

They of course claim about 20:1 from best to worst, while Andrew claims
100:1 from best to average.

Since you seem to defend this viewpoint... do you really think that
there is somebody who can in 1 day do what an /average/ (not "bad" or
"the worst") programmer can achieve in 4 months? (In terms of
programming, of course, not making money or impressing girls... :)

Gerhard
 
K

Keith H Duggar

Dilip work:
Noah Roberts work:



What is with this newsgroup? People seem to be waiting for an
opportunity to go at each other's throat. First there was Mr. Duggar
who thinks the best way to get someone to admit their mistake
(legitimate or not) is to humiliate them. The next is Mr. Roberts
who, in all this time of lurking in this newsgroup, I have never seen
agreeing with Mr. Kanze on anything (not that its a bad thing -- I
just wonder why this kind of language needs to be resorted to).

The thing that gets me is I have been following this newsgroup for
several years. I have learnt an enormous amount of C++ by simply
reading posts from James Kanze, Jerry Coffin, Hyman Rosen and others.

One of the most impressive things about James is that he rarely
(if ever) speculates beyond the bounds of his knowledge without
qualification. In other words, if he makes a factual claim, you
can bet that he *knows* it to be true first hand. I keep hoping
that he'll write a book someday covering his extensive practical
experience with C++.

In contrast to James, Jerry has lately been speculating beyond
the limits of his knowledge claiming falsehoods as facts. Such
misinformation is pedagogically dangerous when coming from one
who, as you rightly recognize, has otherwise (and often) shown
knowledge and expertise; because, you see, too many students
will naively believe his misinformation simply out of respect.
And, yes, when such a man is too proud to admit he is wrong, I
think extreme measures such as I took are warranted.
Doesn't that count for a little bit of respect or at least the fact
they, you know, might actually know what they are talking about? Like

Certainly. However, in the uncommon cases when they are wrong,
they must have the guts to admit it (publicly) or they expose
themselves to well deserved and justified attack.
everyone of us they are going to be wrong from time to time and I have
personally read quite a few posts where they have freely admitted it.

Please post some examples of Jerry Coffin freely admitting he
was wrong regarding a non-trivial matter which he debated.
But even there they have been more right than wrong.

I don't know what that means. You mean they claimed N things
but were wrong about only m where m << N? Regardless how large
m is, anyone must have the guts to admit when they are wrong
and especially those who are "respected" or they damage the
students who believe them.
Why can't we all get along? Is it too much to maintain some
civility considering, um, we are adults?

There is far too much whining about incivility. Look, it's a
rough world. Instead of crying and moping, one should grow some
armor and balls. For example, Jerry called me a "pathetic worm",
a completely unoriginal and lame insult. Now, what am I going to
do about it, tell the school principal? Throw some equally lame
and unoriginal insult back at him? Instead, I continued to focus
on relentlessly dissecting and exposing his feeble attempts to
hide the demonstrable fact that he was wrong. C'est la vie.


KHD

PS. Jerry's post here

http://groups.google.com/group/comp.lang.c++/msg/4762d9a5d9f98f44

was absolutely fantastic. So one can hope his other recent
misinformation was just a temporary glitch.
 
A

Alf P. Steinbach

* Gerhard Fiedler:
Alf said:
Care to cite the references?
Third google hit on "programmer productivity", citing e.g. Steve McConnell,
Randall E. Stross and [clc++m] mod (now inactive) Robert C. Martin: <url:
http://www.devtopics.com/programmer-productivity-the-tenfinity-factor/>.

It's so common and well-known that it has its own name.

They of course claim about 20:1 from best to worst, while Andrew claims
100:1 from best to average.

Since you seem to defend this viewpoint... do you really think that
there is somebody who can in 1 day do what an /average/ (not "bad" or
"the worst") programmer can achieve in 4 months?

No, not in general.

And by conventional metrics it can even go the other way, because conventional
metrics do not account for future maintainability (even within the same cycle)
nor, as I think it was James who remarked, do conventional metrics measure the
effect on the team as a whole of having someone good present.

And in many cases, doing grudge work, by conventional metrics the good
programmers can (apparently) do worse than the average ones. Because the
conventional metrics mostly measure typing and editing speed. The good ones will
be partially occupied helping the others do well and making sure that
immediately upcoming requirements are supported, hence will have less time for
typing and may have more to type. The super archeologist is not much better at
digging with teaspon than the grad student. By conventional metrics the super
archeologist may appear to do worse at this task.

And of course, if the super archeologist is set to digging with teaspon for an
extended period of time, and only allowed to do that, under micro management,
then some discontent will probably set in, and the super archeologist may be
*less* effective than others, and may then have negative effect on the team.

But in rare cases a minute-to-week factor can happen for the things that an
average programmer simply isn't able to do, or is blind to (in that case the
factor can, of course, be arbitrarily large...). This I know because I've both
observed it and done it. Relating one concrete case: some colleagues of mine
were stuck with a strange error in a Windows-based client software, and I was
called upon to help them out. On arriving at the site I just looked at the code
on the screen and, since I knew these guys :), I immediately spotted an
uninitialized variable (they'd struggled with this for about a week). That was
about 1 minute's work, and accounted for most of the problem. But there was
still something not working, inexplicably since it had worked splendidly. I
couldn't figure that out even after an hour. I took a stroll trough the locales
just to clear my mind, and spotted my old mentor at the firm. Talking with him
helped (good programmers know good programmers and can communicate effectively
with them, also a factor!), and he mentioned a change in functionality in
Windows 2000, which I didn't know about. And that was it, and now we're into,
say, 1.5 hour from arrival, compared to a week already spent on the problem by a
team of four.

But I've far more often been in the position of apparently being a drag, by
conventional metrics. And in both cases the reason has been the same: that some
things have simply not been understood by the average ones, and intentionally
ignored by some of those with the necessary understanding. The problem of
enlightening others, even about such simple things that using strong typing
helps (like, enum instead of int, or T* instead of void*), is one I haven't yet
cracked. There is a name for this effect too, the "tragedy of the commons",
where most everyone exploit the immediate gains to be had in the environment,
causing severe degradation of that environment to the detriment of all (the
quick local gains are *relative* to the environment, while a more rational
approach would improve the environment and yield much higher gains overall).

(In terms of
programming, of course, not making money or impressing girls... :)

There the factor is, I think, about six orders of magnitude. :)


Cheers,

- Alf
 
I

Ian Collins

Noah said:
Again it depends on what "better" means. How are we going to measure
it? Are we going to compare someone who's been in the field for
decades, and constantly making sure their knowledge is current, to
someone straight out of college? You would probably get close to 100x
difference in any method you chose to measure their code quality and
production.

In answer to that, I'd point you to the original claim: "a good
programmer can be 100x productive as an *average* one".

So an experiment might be to take a randomly selected group of 10
programmers and compare their team output over ten day with the mythical
super programmer who should produce the same output in one. A larger
sample size might give a better average..
 
P

Pascal J. Bourguignon

Ian Collins said:
That's a fair point but I was using the "typical" programmer as a
baseline, which was fair considering the original statement was "a
good programmer can be 100x productive as an average one"

I have seen my fair share of crap programmers, I even made a good
living cleaning up after one! I've also learned how to spot them and
I'm pretty good at weeding them out in interviews.


It's way better. But that wasn't the centre of the argument, which
used average programmers as the baseline.

The 100-fold factor may integrate the fact that the good programmer
may also choose more productive tools. So all other things equal, he
will be 10x more productive than your baseline programmer, but if in
"multiplication" he chooses to program in Lisp rather than C++, he
will easily be 100x more productive.

Have a look at the figure #3 on page 9 of this report:

http://www.haskell.org/papers/NSWC/jfp.ps

Notice that it has been written by a Haskell advocate. Compare the
development time of Lisp vs other programming languages...
 
I

Ian Collins

Pascal said:
The 100-fold factor may integrate the fact that the good programmer
may also choose more productive tools. So all other things equal, he
will be 10x more productive than your baseline programmer, but if in
"multiplication" he chooses to program in Lisp rather than C++, he
will easily be 100x more productive.

Have a look at the figure #3 on page 9 of this report:

http://www.haskell.org/papers/NSWC/jfp.ps

Notice that it has been written by a Haskell advocate. Compare the
development time of Lisp vs other programming languages...

On an embedded system? He will probably be 100x slower!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,787
Messages
2,569,631
Members
45,338
Latest member
41Pearline46

Latest Threads

Top