Why I love Python: More rambling...

Fernando Perez fperez528 at yahoo.com
Fri Oct 31 12:50:09 EST 2003


Alex Martelli wrote:

> Ville Vainio wrote:
>> Another aspect of motivation is accomplishment - a thing that might
>> make a C++ programmer proud of his achievement seems like a trivial 15
>> minute job for a Pythonista, and when that Pythonista is tasked w/ the
>> C++ job he doesn't get the kick from the accomplishment. And 6 hours
>> of debugging that "trivial" program doesn't help either.
> 
> Yep.  Managing to write even just "SPQR" with the marble and chisel
> without cracking the slab makes you proud (that Q is _so_ tricky!) --
> with a word processor, or pen and paper, you'd get no kick from the
> accomplishment.  And six hours of sandpapering and polishing that
> marble slab doesn't help either.

Data point (real world, from a few weeks ago): after spending ~2 weeks (spread
over a month) writing about 1400 lines of C++, debugging a nasty coredump, and
pounding the documentation, I had my 'fast' extension module finished for some
numerical work.  Great, sweaty and exhausted but all proud of myself, I turn
my attention to the problem of writing a unittest.  I decided to write it in
python, since I figured it would be easier, and an independent implementation
of the algorithm (simple one) should suffice, if tested with enough random
data.

Python code: 15 lines (no, it's NOT a typo: fifteen).  Time to write it: 10
minutes.

The sad part (to my ego, at least:)?  The python runs faster!  The C++ version
is now in the dustbin.  At least I learned a bunch about the STL and
templates.  The consolation...

Cheers,

f.

ps for those thinking: you must be an idiot of a C++ programmer. That may well
be true.  But still, there are reasons for the difference.  The C++ version
uses a heavily templated library for handling multidimensional arrays with a
bearable syntax, and g++ isn't the best compiler out there for that kind of
code.  The python version relies on Numeric.innerproduct(), which is very well
optimized, and tackles head-on the problem I was avoiding with the templates,
namely very annoying pointer manipulations for multidimensional tensors.  The
Numeric guys got their hands dirty, did it once RIGHT, and it works extremely
well.




More information about the Python-list mailing list