Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re^2: Old NumberCrunching Modules

by davido (Archbishop)
on Aug 13, 2012 at 15:58 UTC ( #987143=note: print w/replies, xml ) Need Help??

in reply to Re: Old NumberCrunching Modules
in thread Old NumberCrunching Modules

I can't agree more with the tirade against monolithic functions that span several pages. A few months ago I was working on refactoring some code where many functions reached or exceeded around 200 lines. And as I began refactoring it was amazing how many places I found that I could generalize what five to fifteen lines were doing in a way that could be reused across several of those functions. The end result was fewer total lines, no functions beyond a single page, and in my opinion, easier to read and maintain (which was my motivation behind refactoring it -- I needed to maintain it and found it to be unmanageable without this sort of sprucing up).

My inspiration was derived from Schwern's Skimmable Code talk (PDF... sorry). I wanted to follow-up to your post to get that link out in the open once again; it's a great resource.


Replies are listed 'Best First'.
Re^3: Old NumberCrunching Modules
by Tux (Abbot) on Aug 13, 2012 at 16:29 UTC

    But refactoring for the sake of refactoring - or just to get a shorter method/function body can easily led to just the oposite, as I have sadly seen way too often.

    A perfectly sane 400 line function/method stuffed with comment of a process that was a sequential series of logical steps that only got interrupted by serious Exceptions/dies was broken into several parts shattered across modules without proper call-checks and, worse, rewritten in an understanding that was not true, thereby killing the whole process.

    Some people say they understand code better when it is rewritten into smaller chunks. That might (very) well be true if any of those chunks is to be reused or makes a perfectly sane unit. If the code however is not (ever) to be shared or reused by other parts, refactoring just because of size most of the times leads to serious errors. At least in my experience.


    Enjoy, Have FUN! H.Merijn

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://987143]
and nobody stirs...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2017-08-23 13:21 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (351 votes). Check out past polls.