Live data from Hacker News

Forbes is wrong about “Developernomics”

knowing.net

21–30 of 47 posts

Re: Forbes is wrong about “Developernomics”

#21
post #10

Reading this I can't help but think of Joel's classic piece, Hitting the high notes . He did go into some productivity statistics collected by a prof who had, in the course of his teaching, subjected many students to identical programming tasks. But what was far, far more compelling was this part: " The real trouble with using a lot of mediocre programmers instead of a couple of good ones is that no matter how long t…

Your comment is spot on.

For those who don't get the reference to Salieri and Mozart, I can recommend this highly entertaining film:

http://en.wikipedia.org/wiki/Amadeus_(film)

Re: Forbes is wrong about “Developernomics”

#22
I find the entire article quite poorly thought out and I disagree with it more or less entirely.

One part in particular stood out as being perhaps the most offensive to reason:

"Professional talent does vary, but there is not a shred of evidence that the best professional developers are an order of magnitude more productive than median developers at any timescale, much less on a meaningful timescale such as that of a product release cycle."

I really don't understand how anybody with experience in our industry could say such a thing.

I would have thought it was fairly routine for "professional developers" (by which I assume he means those devs who work in companies) to meet large numbers of people who are completely incompetent.

So in my view there must be a huge amount of first-hand evidence to support the statement that some people are 10x better than others (or even the more stringent requirement that they're 10x better than the median).

Re: Forbes is wrong about “Developernomics”

#23

I hope I don't sound rantish, but the author completely missed on his treatment of the Boehm/Beck curves The Beck curve seems to (I'm not expert) describe the cost of making a change or adding a feature. With routine deployment in XP, it's not going to be that expensive to roll out a new one (although, the Facebook push is a process that requires the complete, undivided attention of lots of smart people, so you don't…

[deleted]

Re: Forbes is wrong about “Developernomics”

#24

I hope I don't sound rantish, but the author completely missed on his treatment of the Boehm/Beck curves The Beck curve seems to (I'm not expert) describe the cost of making a change or adding a feature. With routine deployment in XP, it's not going to be that expensive to roll out a new one (although, the Facebook push is a process that requires the complete, undivided attention of lots of smart people, so you don't…

Drawing from this post, five ways to get 10x:

(1) Don't write the thing in C/C++ because there memory leaks, especially in the case of exceptional conditions, are too darned easy to make. So, use some 'managed memory': Either write it yourself or get it from Java, .NET, or some such.

If you write the memory management yourself, then put in extra code to do the work twice two different ways and compare and put in code to analyze allocated memory, separately for each way of doing the work, well enough to know where the heck all the allocated memory came from and don't have leaks.

For a crucial part of some of my code, I coded it three quite different ways, ran them all, and checked them all against each other. In my production code, I'm still doing that calculation with two of the different ways checked against each other. Want at LEAST both belt and suspenders.

(2) Moreover, testing for memory leaks or other bugs in the case of exceptional conditions can be TOUGH. So, design the code so that can be quite sure don't have problems. To do this, keep it SIMPLE so that can do good desk checking. Use some well tested 'architectural components' instead of writing just lines and lines of unique code. Design the code to be easy to test. Test the heck out of it. Pretend your worst enemy wrote the code and TRY to find things wrong with it.

Document the code very explicitly on just what the heck the code is to do. Document also the obvious and the trivial. In this documentation, pay close attention to the 'corner' cases. Then in the code, for each corner case, carefully desk check the code to confirm that the corner case is handled appropriately and DOCUMENT the check. Then test the heck out of the corner cases.

E.g., if write a sort routine to sort an array, make SURE that the routine works correctly when the number of components in the array is 0, 1, and the largest integer. Then, in the case of the largest integer, make SURE that the indexing arithmetic does NOT overflow. Document all this and then test it.

(3) Many cores and, thus, often, many threads are coming quickly. Then many new, nasty bugs are also coming. Many threads WITH exceptional conditions promise new levels of nastiness. So, borrow from (2): Don't just write 'code' that appears to solve the problem. Instead, stay SIMPLE and make heavy use of solid components. It would be good if the component usage had some logical properties on which could base proofs of correctness.

(4) Divide and conquer. Just do NOT permit code to go on and on. Instead, break the architecture and the code design into relatively small, independent pieces easy to check separately.

(5) Have the code well 'instrumented', that is, report various relevant internal 'metrics', in real time. Then do some 'statistical hypothesis tests' on this data to detect ASAP the anomaly, e.g., the memory leak after the network exceptional condition. Then return to the code and, near the exceptional condition handling code, turn on MUCH more instrumentation and pray for another network problem or just inject one. In this way, narrow down the cause of the problem.

How to do the statistics? It ain't in the books! The techniques are beyond essentially all of academic computer science. So, chalk up maybe 100x right there!

Such thinking can work for projects up to about 50,000 lines of code. For a larger project, ask someone else!

The 10x is not really from typing 10x faster!

So, get 10x not just by typing the same lines 10 times faster but by typing different lines with some significant differences in the design and maybe the architecture of the software.

Re: Forbes is wrong about “Developernomics”

#25
It's an interesting point: if some programmers are x10 productive, shouldn't there be programmer-organizations that are x10 productive?

Some possible explanations:

- an organization's productivity has many other factors that influence its productivity - optimizing part doesn't necessarily translate into the same optimization of the whole. Other factors, such as business skills (e.g. obtaining specifications, negotiating, adroitly managing scope creep, etc)

- it's easy to be x9 more productive if you are creating a "program" instead of a "systems" "product" (Brooks)

- massive productivity results from choosing what to solve, rather than how. I.e. redefining/reframing a problem instead of confronting it directly

- x10 productive programmers work on interesting problems, which are different from those that x1 programmers tackle, so it's hard to make a direct comparison. Who can you compare Jane Street with? RADgametools? If they do have a competitive set, they are probably competing against other x10 programmers - e.g. Id, Unreal, Crytek

Also: http://www.johndcook.com/blog/2009/12/23/why-programmers-are...

Re: Forbes is wrong about “Developernomics”

#26
post #9

> there is not a shred of evidence that the best professional developers are an order of magnitude more productive than median developers at any timescale, I beg to differ, using examples of Fabrice Bellard creating QEMU, Brendan Eich creating JavaScript or PG creating Arc and HN. Of course there are other examples out there, one just ought to look. Those are not tasks a single `industry average' developer or a team…

Really, these are anecdotes, not evidence.

And I think he chose his words carefully, he said median, not average. Of course - to paraphrase Greg Wilson[1] - if one were to go further and compare the "best" driver to the "worst" driver, the difference would be to the power of infinity because the worst driver is dead. The comparison is not useful.

I'd love to see some studies on this sort of stuff though.

[1] "Greg Wilson - What We Actually Know About Software Development, and Why We Believe It's True" http://vimeo.com/9270320

Re: Forbes is wrong about “Developernomics”

#27
I think there are two different ideas being mixed up here. As a developer, there is the code and the vision. Given a particular vision, the differences in developer productivity will be small, perhaps even normally distributed.

However, developers are not simple compilers that translate a human problem into a programming solution. There is an artistic, creative side to the process that can radically impact how effective a solution will be.

To muddy things even more, there are developers who are great visionaries but poor coders and vice versa.

Re: Forbes is wrong about “Developernomics”

#28

I find the entire article quite poorly thought out and I disagree with it more or less entirely. One part in particular stood out as being perhaps the most offensive to reason: "Professional talent does vary, but there is not a shred of evidence that the best professional developers are an order of magnitude more productive than median developers at any timescale, much less on a meaningful timescale such as that of a…

The problem with the 10x vs. 1x statement is that the 10x people are not constantly 10x better than the median. The environment in which they are placed has a lot to do with it. Circumstantial mediocrity is often a consequence of poor management, and the product release cycle is the petri dish of mediocrity.

So a common problem arising from this situation is the choice between leaving a 10x-er on the line or promoting him to do other things. It's a trade-off. If you choose the former, you maintain increased productivity, but the exceptional developer will eventually get bored and leave; if you choose the latter, you end up watering down your production pool, and risk placing the developer in a role where he might not be a 10x-er.

Constant [relative] mediocrity in a given developer pool is the stable state in either case.

Re: Forbes is wrong about “Developernomics”

#29
I'm tempted to write a blog post about the difference between productivity and effectiveness.

If you are working for someone whose sole focus is your productivity, take it as a warning sign. The only thing that matters is results and the single biggest contributor to getting results is being effective. Productivity is such a gross measure of performance that its relevance in today's business environment is almost anecdotal.

Re: Forbes is wrong about “Developernomics”

#30
"Professional talent does vary, but there is not a shred of evidence that the best professional developers are an order of magnitude more productive than median developers at any timescale, much less on a meaningful timescale such as that of a product release cycle."

Nonsense. I have seen evidence of it on nearly every project I've been on for 18 years now. It's one of the most obvious facts of enterprise software development.

Post reply on HN