|
From: Sergei S. <ser...@ya...> - 2007-03-19 01:41:15
|
--- Eric Wilhelm <scr...@gm...> wrote:
> # from Sergei Steshenko
> # on Sunday 18 March 2007 04:08 pm:
>
> >> ...
> >> funky_array => do {my @p = (1,2);
> >> [1,2,map({push(@p, my $v = shift(@p)+$p[0]); $v} 3..100)]},
> >> ...
> >
> >Why should I load my brain trying to understand what $p means ?
> >And what is $v if I may ?
>
> Well, one-letter variables that only appear within a closed block on two
> lines of code never bothered me. I prefer to think about the algorithm
> and not whether the code *appears* to be readable. It's encapsulated
> by virtue of its seeming opacity.
>
> >I prefer readable code, not a short one.
>
> I prefer correct code. If my subtlety eludes you, go run yours and see
> what answer you get. It is just a long-winded [map({2**$_} 0..99)]
> (i.e. a doubling sequence) which is at-a-glance very readably wrong.
>
> I really don't understand why so many people seem to think that longer
> code is somehow better and more readable. Have they had a readability
> study? Would you call a 5000-page novel "readable"? Is a 20-hour
> movie "watchable"? If you're writing 10 times as much Perl as you
> should, why not just use C? You'll have the same number of bugs, but
> they'll run faster :-D
>
> A local news station once had (maybe still does have) the slogan "Clear,
> accurate, and to-the-point." I always thought it ironic that they
> would use so many words to claim that they are "concise".
>
> I'm not claiming that code should be all one-character variable names in
> a single chain of compile-time map() statements with no carriage
> returns (for that, you need lisp.) Rather, code should not be any
> longer than it needs to be. A large part of Perl's expressiveness
> comes from context, implied information, and concision. There's more
> than one way to do it, but there's a whole lot of ways to do it wrong.
>
> Concise and correct code beats long-winded incorrect code. Further,
> short and incorrect code is easier to fix. In fact, the longer code is
> obfuscated by its shear size. Ever heard the phrase "needle in a
> haystack"? For code to be readable, you have to understand what it is
> doing. I could use utf8 with greek characters for variable names and
> it would make as much sense and still be correct. We have two things
> @p which get rotated as the new one $v arrives. How is that more
> complicated than your longhand variable names? (If you haven't found
> the bug, I think you need yet another variable to hold the new value.
> Then it will give 1,1,1,1,1 instead of 1,2,4,8,16. But to get
> 1,2,3,5,8,13 you have to deal with the seeding.)
>
> So you want better variable names and comments? Fine. The algorithm is
> still more clearly (and correctly) expressed in less code.
>
> funky_array => do {
> my @pair = (1,2); # previous pair
> [1,2, # seed first
> map({ # roll-over the pair while calculating the next val
> push(@pair, my $new_value = shift(@pair)+$pair[0]);
> $new_value
> } 3..100)]
> },
>
> Or,
>
> funky_array => do {
> my @out = my @pair = (1,2); # seed/previous pair
> for(3..100) {
> # roll-over the pair while calculating the next value
> # I call it '$new_value' because it is new, and a value.
> push(@pair, my $new_value = shift(@pair)+$pair[0]);
> push(@out, $new_value);
> }
> \@out
> },
>
> Well, that's getting long-winded. But, to make sure the dead horse is
> thoroughly beaten, let me just say that you (hopefully) won't be
> searching your codebase for bugs and skimming this e-mail in
> Foo::Bar.pm. Code is going to be read/skimmed over and over and over
> and over and over again. You pay for the extra lines of code *all the
> time*. You only pay for the extra density when you're working on that
> particular chunk.
>
> --Eric
> --
> "Because understanding simplicity is complicated."
> --Eric Raymond
> ---------------------------------------------------
> http://scratchcomputing.com
> ---------------------------------------------------
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> wxperl-users mailing list
> wxp...@li...
> https://lists.sourceforge.net/lists/listinfo/wxperl-users
>
I just reject outright the code with $p, $v, $i, $j - I admit I am too dumb
to understand it.
Sorry, I was educated that names have to be meaningful and self-explanatory,
which allows one to have self-documented coded, i.e. code needing practically
no comments, because the comments are not needed.
Everything should be obvious; comments should be needed only in places where
the code is not obvious.
Regards,
Sergei.
Applications From Scratch: http://appsfromscratch.berlios.de/
____________________________________________________________________________________
The fish are biting.
Get more visitors on your site using Yahoo! Search Marketing.
http://searchmarketing.yahoo.com/arp/sponsoredsearch_v2.php
|