[Python-Dev] Re: Zen of Python
Phillip J. Eby
pje at telecommunity.com
Thu Jan 20 01:14:47 CET 2005
At 07:03 PM 1/19/05 -0500, Timothy Fitz wrote:
>On Thu, 20 Jan 2005 09:03:30 +1000, Stephen Thorne
><stephen.thorne at gmail.com> wrote:
> > "Flat is better than nested" has one foot in concise powerful
> > programming, the other foot in optimisation.
> >
> > foo.bar.baz.arr involves 4 hashtable lookups. arr is just one hashtable
> lookup.
>
>I find it amazingly hard to believe that this is implying optimization
>over functionality or clarity. There has to be another reason, yet I
>can't think of any.
Actually, this is one of those rare cases where optimization and clarity go
hand in hand. Human brains just don't handle nesting that well. It's easy
to visualize two levels of nested structure, but three is a stretch unless
you can abstract at least one of the layers.
For example, I can remember 'peak.binding.attributes' because the 'peak' is
the same for all the packages in PEAK. I can also handle
'peak.binding.tests.test_foo' because 'tests' is also always the same. But
that's pretty much the limit of my mental stack, which is why PEAK's
namespaces are organized so that APIs are normally accessed as
'binding.doSomething' or 'naming.fooBar', instead of requiring people to
type 'peak.binding.attributes.doSomething'.
Clearly Java developers have this brain-stack issue as well, in that you
usually see Java imports set up to have a flat namespace within the given
module... er, class. You don't often see people creating
org.apache.jakarta.foo.bar.Baz instances in their method bodies.
More information about the Python-Dev
mailing list