[Python-ideas] 80 character line width vs. something wider

David Stanek dstanek at dstanek.com
Tue May 19 19:14:15 CEST 2009


I'll bite.

On Tue, May 19, 2009 at 12:43 PM, Aaron Rubin
<aaron.rubin at 4dtechnology.com> wrote:
> 1) Python is three things which the standard was not designed for:  One:
> Object Oriented.  Two: Not Hungarian notation  Three: Mandatorily uses
> *whitespace* as its defintion for code blocks.  Let me explain each one in a
> bit more detail:
>   Object Oriented:  Because it is not functional-style programming, but
> instead OO, you have to give defintion as to what object type you are using
> before using it.  This makes definitions and usage longer than in functional
> programming (when 80 character widths were invented).
>  PhazeMonkey.Hardware.FrameSource.Abstract.Framegrabber is an example (and
> not an extreme one) of a class (55 characters already) in a rather large
> code base.

If you are using more than 5 or 6 levels of indentation you may be
doing something wrong. I would guess that your methods are too complex
or maybe you are violating the SRP.

>   Not Hungarian:  Not only is Python not Hungarian (in general), but the
> PEP-8 specifically tells us to use longer, more descriptive variable names.
>  hasInstrumentControllerPhaseDither is an example.  Many variables are 15-20
> characters and oftentimes longer.  How many of these variables can you fit
> into a line if we are limited to 80?

I'd like to see an example of your variable names. I don't use
hungarian notation and my name are usually under 10 characters.

>   Whitespace:  Python is very unique in that it *uses* whitespace for code
> blocking.  It turns out to be very useful, since it visually cues the reader
> where code blocks begin and end by mandate.  This creates many situations
> where code *starts* at the 10th indentation (40 characters in our
> standard, 80 characters in some Python standards).  Even in normal "great
> design" mode (which takes more time again), you can't help it....your code
> starts at the 6th indentation level often.  (28 characters, more than 30%
> of 80 characters already gone.  Now how many variables or class names can
> you fit?)

I'd like to see an example of where using 10 levels of indentation is
good. I'll bet that it's not easy to test.

>   Whitespace (2):  Because Python uses whitespace as its sole method of code
> blocking and because this is the visual cue for code blocks, wrapping lines
> obfuscates this and makes the reader think about whether this whitespace was
> there for a code block, or a line-wrap.  Thinking about intention of code
> slows us down.

I partially think you're right. Although I have the same problem with
long lines that have multiple levels of parens.

> 2) Many of the libraries that are widely used do not adhere to
> the 80 character width line standard.  wxPython, NumPy and Boa Constructor
> are a few, but I'm sure there are many, many more.  Many libraries do adhere
> to 80 character line width as well.  However, a library which is written in
> 80 characters still fits the paradigm of those which are wider and therefore
> backward compliant.  In other words, if your tools are geared toward 80
> character line widths and you are now looking at a wider width, things
> become quite difficult.  The other way around is fine.
> 3)  Writing new code in 80 character line widths takes more time.  If I have
> to worry about hitting this width, I have to de-concentrate my efforts of
> writing logical code and concentrate instead on how exactly to format
> this line of code (where to break it, etc....there are a number of rules
> attached to wrapping lines of code).  Then I have to re-concentrate on the
> actual task at hand.  Alternatively, I can code it up without worrying, then
> when convenient, take some time to reformat to 80 character width.  Either
> way, more time.

I don't really have this issue. The few seconds a day that I waste
formatting code are nothing near the time I waste on YouTube :-)

>
> 4) Code searching.  IDEs have powerful searching features.  They list all
> the lines of a file (or files) which match the string you are searching for.
>  If things are in one line, this search is meaningful and you can read it
> like you can code.  If a line of code actually spans two (or more) lines of
> code, the search is no longer contextually useful and you have to click on
> each item to see what's actually going on.  This feature is used heavily in
> many environments (especially large code bases) to save time, but time is
> either lost finding the actual context of a found string, or the search tool
> is avoided altogether because it does not provide meaningful results (i.e. a
> predictive waste of time)

I would actually like to see tools changed to make this better. Maybe
similar to the way unified diff shows a few lines of context.

>
> 5) Monitors are getting bigger, wider, cheaper.  This allows us to have two
> files, side-by-side on a screen that are *both* 120 character width (or even
> wider), without changing font sizes.

Sure I guess. I am typing this on my EEE 900 which won't like much
more than 90 chars. But even at work I put multiple 80 char wide
windows side by side.

> 6) Tools are cheap.  Time isn't.  Get a second monitor, get a more powerful
> editor, do whatever it takes to save time.  If viewing more information at
> one time is important, then we should try to make that possible with
> technology, not time.

Agreed. Use Vim with 80 characters and you will rock out code like
never before. I hear Emacs is good too. What are you currently using.

> 7) Python is designed to be written more like English than other programming
> languages.

That's news to me.

On another note when we hire new developers I often hear this
argument. Once they start coding in Python and using good OO/TDD
techniques they realize that it really doesn't matter. Out of
curiosity how much Python coding do you do?

-- 
David
blog: http://www.traceback.org
twitter: http://twitter.com/dstanek



More information about the Python-ideas mailing list