GSoC application review - reimplementing personal metadata importers

Konrad Zemek konrad.zemek at gmail.com
Thu Apr 25 19:38:03 UTC 2013


On 25.04.2013 12:34, Matěj Laitl wrote:
> Oh, nice! Do mention it. I may be stating the obvious, but I felt it 
> needs to be said: Please note that "ideal" code for a typical FLOSS 
> project may be very different from "ideal" code for a programming 
> contest. In Amarok, we try to keep code as simple (to read & 
> understand) as possible, even if it would mean it is let's say 15% 
> slower. Keep in mind that many readers of our code may not be contest 
> finalists - but we still want them to be able to understand and 
> perhaps modify it. This of course doesn't mean you should be using 
> O(n) algorithm when O(log(n)) algorithm exists or refrain from using 
> private inheritance where it is appropriate. It means "oh, this is a 
> super-smart code, but perhaps it can be expressed more clearly using a 
> line or two more?" mindset.

Now I feel that I need to respond to that. :-)

I'm a mature programmer. I have well over five years of real programming 
experience (not the home-grown kind), and in that there's over half a 
year of commercial experience. I'm not claiming I'm very experienced - 
obviously five years is a lot less than ten or fifteen, but still that's 
enough to have both "fastest code" and "shortest code" phases well 
behind me. I favor clean, easily understandable and maintanable code, 
making (sensible) sacrifices of speed and linecount. I've also 
programmed in assembly a bit and analyzed how compilers work, so I'm 
very much aware that modern compilers more often than not optimize the 
code that makes its intentions clear to be actually faster than 
hand-optimized code doing the same thing.

That's basically what I've done in my first (of many, hopefully) review; 
the cleanup wasn't to make it faster, it was for it to be understandable 
(e.g. I myself had problems with figuring out what value is actually 
returned), and therefore of better quality.

And to touch on the private inheritance. ;-) Although it's seldom used, 
it actually makes code clearer and gives out more information at a 
glance than composition. (Of course composition should be favored over 
inheritance, but inheritance should be used where appropriate.) The 
thing is to read it the right way: while you'd read "A: public 
BaseClass" as "A is a BaseClass", private inheritance would be read as 
"A is implemented in terms of BaseClass". So now that very single-line 
declaration gives you information that underneath A is built on top of 
BaseClass - and all of that without looking through A's actual 
implementation to see that A is a BaseClass wrapper. It's all about 
semantics and choosing a language construct that best represents what 
the code is supposed to do.

> Matěj 

         Konrad


More information about the Amarok-devel mailing list