[Purdue-pm] Efficiency, was: my 2015-08-12 challenge problem solution

Rick Westerman westerman at purdue.edu
Sun Aug 9 08:18:04 PDT 2015


> COMMENT
> 
> Human time costs more than computer time.  I didn't bother to
> optimize the Perl 5 or Perl 6 solutions.

I think that is a dangerous concept to hold on to.  Certainly for one-off programs computer time generally does not matter over human time but if a person gets the idea that human time always trumps computer time then that person can get sloppy to the point that when does he write a production program said program performs poorly.   Thinking about order-N effects is, IMHO, always a good idea especially for large data sets.

In these ventures/experiments we try to explore the “many ways to do things” that Perl offers.   Some ways are more efficient than others.  I am not saying that we should optimize to the last little bit but we should explore and talk about ways to make our code more efficient.

For example — and this has nothing to do with your code — if I want the last element of parsed string there there are many ways to do that task:

my $data = ‘aaa:b:cccc’ ;

my ($one) = reverse grep { $_ } split ‘:’, $data ;

my @twoarr = split ‘:’, $data ;
my $two = $twoarr[-1] ;

my $pos   = rindex $data , ':' ;
my $three = substr($data, $pos + 1) ;


All three — $one, $two, $three — produce the string ‘cccc’ but they do so with increasing efficiency.   Once again not a biggie if the data set is small or if the program is being run once in a blue moon but — IMO — programmers who do not give thought to what they are doing when they write small programs will produce inefficient programs when speed does count for something.


BTW: I do not wish to hold myself up as a paradigm of always writing efficient code — I can be just as sloppy as the next person — but I do try to think of what is happening in the background — e.g., are unneeded anonymous arrays being produced? -- and the order-N effects.

BTW#2:  Anyone have an even more efficient way of getting the last element of a list contained in a string?  

BTW#3:  If I have time I’ll go through your Perl5 program and see if I can tease out inefficient code.  That could be instructive for all of us (and I hope not displeasing to you).  If nothing else this will give me an excuse to look at the code more closely — maybe I’ll learn something new and efficient.


— 
Rick






More information about the Purdue-pm mailing list