You can quite well measure productivity if you set a task, write tests for it, and tell two independent groups to implement it. You give them the same amount of time. Now the more productive / better group is which can do the task with smaller complexity . Complexity measures measure size of code and number of dependencies between blocks in different ways. But even the most simple comlexity measure is quite good: jus…
Genuinely asking: Why not just stop at "tell two independent groups to implement it"? That is, why constrain to the same amount of time?
Cannot Measure Productivity
41–50 of 77 posts
Re: Cannot Measure Productivity
#42Earlier quoted context omitted.
I agree with the sentiment of your last paragraph, though in fairness Fowler seemed to end his piece saying that measurement was seductive and likely to make things worse. Still, I can't help cringe at some of the ideas posited -- for one, the idea that more features == a better product. Or that profit is a measure of engineering productivity. As if it's that uncommon for great products to be badly marketed.
I think Fowler was just reaching for a stick to beat the metric he was deconstructing - "look Joe writes only 10K lines but makes ten times the profit - that means LoC is not a good metric." However I do think that (free) market success is a reasonable measure of value / worth - backed up by my favourite quote for which I can find no author: "Many books are unfairly forgotten, but none are unfairly remembered."
Re: Cannot Measure Productivity
#43It drives me nuts when programmers brag about their productivity, measured by how many lines of code they've written. You end up with something like feature 1: +12,544 / -237 lines. Done in 2 weeks. Then comes feature 2, 2 and a half months later, the stats: +5,428 / -9,845. Look at that, you had to tear down everything they wrote because they cared about amount of code over code quality. The more they brag, the more…
How could that be possible? Consider the following, very typical scenerio.
You write 2000 lines of code, implementing a feature. I write 2,200 lines of code, implementing a feature in a way that supports our vertical for the next 5 years (you just take my module and plug it in, instead of coding from scratch). Add in whatever time interval you want to make it more complicated - I took the same amount of time as you, less, or more.
Consider that this is a judgement call - did I or you do the right thing? We understand the risks and costs of premature design, but also understand the risk of coding exactly to today's requirements, with no insight into the future. No algorithm is going to tell you the right answer, and by the time we know (5 years from now) the measurement will be useless.
Or we each write a heuristic to the TSP. What algorithm could possible decide whose work is more "productive"? I put it in scare quotes because I don't even know how to define productivity in that regard. Yours runs faster, mine took 1/2 the time to code. Yours is 70% larger than mine, which has cache coherence implications as we continue to add to our programs. Yours is well documented (give me an algorithm to tell if code is 'well' documented), mine is sparse. I used gotos, you used exceptions to deal with errors. You wrote it in Haskell, I did it in C++. Yours will make features X,Y,and Z easily possible, mine makes A,B, and C easy. Your heuristic performs better for some graphs, mine performs better on others.
Who is more 'productive' here? It's not even a meaningful question. Bottom line is, we both tackled a hard problem, both did fine in very different ways, and both have implications on the future of the company (assume a,b,c,x,y,z are really important in the future).
It's an N-dimensional optimization problem with endless unknowns, and no knowledge or agreement on how to measure many of the axis', let alone their relative importance to each other.
Re: Cannot Measure Productivity
#44Earlier quoted context omitted.
Genuinely asking: Why not just stop at "tell two independent groups to implement it"? That is, why constrain to the same amount of time?
Because we measure the quality of their output. A weaker group can solve the problem with the same quality as a stronger group given much more time. (For example by doing refactoring in the plus time.)
On the other hand, setting the time constraint (as opposed to measuring both time taken and solution complexity for the two groups) is important because deadlines help.
Re: Cannot Measure Productivity
#45Earlier quoted context omitted.
Doing science does not make you a scientist.
Can you elaborate on why you believe this to be the case? Saying that a scientist is one who does science seems like a truism bordering on being tautological. I'm curious why you disagree.
"Scientist" implies a certain amount of knowledge, training, discipline, etc. I'm not implying that every scientist needs to have undergone academic training - there are other ways - but merely doing a scientific experiment is not enough to call yourself a scientist.
A scientist is one who "does science" with some knowledge, consistency and perseverance.
Re: Cannot Measure Productivity
#46Earlier quoted context omitted.
Can you elaborate on why you believe this to be the case? Saying that a scientist is one who does science seems like a truism bordering on being tautological. I'm curious why you disagree.
Does knowing a bit of physics make you a physicist? Does praying make you a monk? Does mixing a few chemicals make you a chemist? Does having some theories about people's motivations make you a behavioural psychologist? Does balancing a budget make you an accountant? "Scientist" implies a certain amount of knowledge, training, discipline, etc. I'm not implying that every scientist needs to have undergone academic tra…
> In a more restricted sense, a scientist is an individual who uses the scientific method. [...] This article focuses on the more restricted use of the word.
Re: Cannot Measure Productivity
#47Earlier quoted context omitted.
Does knowing a bit of physics make you a physicist? Does praying make you a monk? Does mixing a few chemicals make you a chemist? Does having some theories about people's motivations make you a behavioural psychologist? Does balancing a budget make you an accountant? "Scientist" implies a certain amount of knowledge, training, discipline, etc. I'm not implying that every scientist needs to have undergone academic tra…
I guess you'd better edit Wikipedia: > In a more restricted sense, a scientist is an individual who uses the scientific method. [...] This article focuses on the more restricted use of the word. https://en.wikipedia.org/wiki/Scientist
If we're going to throw definitions around, how about dictionary.com: http://dictionary.reference.com/browse/scientist?s=t
> an expert in science, especially one of the physical or natural sciences.
Re: Cannot Measure Productivity
#48Earlier quoted context omitted.
Can you elaborate on why you believe this to be the case? Saying that a scientist is one who does science seems like a truism bordering on being tautological. I'm curious why you disagree.
Does knowing a bit of physics make you a physicist? Does praying make you a monk? Does mixing a few chemicals make you a chemist? Does having some theories about people's motivations make you a behavioural psychologist? Does balancing a budget make you an accountant? "Scientist" implies a certain amount of knowledge, training, discipline, etc. I'm not implying that every scientist needs to have undergone academic tra…
Re: Cannot Measure Productivity
#49I am going to get my drum out and bang on it again. Software is a form of literacy - and we measure literacy completely differently. In fact we measure it like we measure science - you are not a scientist unless other scientists agree you are, and you are not a coder unless other coders say you are. What Fowler wants to measure is not the top echelons of productivity but the lower bounds - presumably to winnow out th…
Not everybody needs the approval of an external entity. I couldn't care less what other coders think of me. What I ship speaks for itself. What I write speaks for itself. What studies scientists publish speak for themselves. The rest is politics.
Re: Cannot Measure Productivity
#50It has been more than 10 years, it has been at least 50 since there were moans about productivity in the early 60's. Feynman had some interesting thoughts on minimal computation that sort of paralleled Shannon's information complexity. As you know Shannon was interested in absolute limits to the amount of information in a channel and Feynman was more about the amount of computation per joule of energy. But the essenc…
> It has been clear for years that you can produce inefficient code quickly, and conversely efficient code more slowly (...) That's not only false, but is often the opposite. The symptom number one of an inexperienced programmer is to waste development hours reinventing the (square) wheel, while a good programmer is lazy (already knows which solution works best, and will probably just import it from a tested library)…
My statement about inefficient code quickly is in terms of joules per computation. So while it is absolutely true that a junior perl programmer might slowly generate inefficient code and an experienced (lazy) perl programmer might quickly generate optimal perl code, neither of them would produce the same product written in assembly code (or better yet pure machine code).
To put that in a different perspective, I once wrote a BASIC interpreter in Java (one of my columns for JavaWorld) and it was pretty quick to do, and yet looking at the "source" to Microsoft BASIC written in 8080 assembler it was not very efficient. But it took Bill a lot longer to write Microsoft BASIC in assembler, and you couldn't even begin to port a full up Java VM to the 8080 (let's not argue about J2ME).
But step back then from that precipice, you have two versions of BASIC, one runs in a Browser and one runs on a 16 line by 64 character TVText S-100 card. (or 24 x 80 CRT terminal). Now you can run the same program in both contexts, unchanged, but the amount of energy you expend to do so varies a lot. So which is more "efficient?" I'd argue the one written in 8080 assembly is more efficient from a joules per kilo-core-second standpoint. Which was written more quickly? Mine, it only took about a week.
That is why talking about efficiency and productivity without getting anally crisp in your definitions can lead to two opposite interpretations of exactly the same statement.
[1] I find the lack of a wrist pad to rest on a challenge.