in reply to Re^2: Hierarchy of code reuse by flexibility
in thread Hierarchy of code reuse by flexibility

Thanks for joining the discussion. One note - everybody knows that 'cut and paste' is evil - but yet there is a case where everyone would agree that it is not - on the contrary - it is the way to go for short examples like the synopsis in most CPAN modules.
Well, any sort of code template is essentially automated cut-and-paste. If you run h2xs or Module::Starter, you'll get an outline of code to start working with... and myself, I used to use some emacs code to generate perl accessors as needed.

The distinguishing feature of cut-and-paste vs. code abstraction is that with C&P you get a starting point that can be mutated at will without fear of effecting any other uses. The advantage of code abstraction is that if the interface is well designed, and well understood, you can often fix bugs by changing just one place in the code... but you'd better have good tests and/or QA, or you might have accidentally broken a use case without realizing it.

C&P has a bad reputation because it's too easy to do, and beginning programmers often produce large piles of C&P'd crap that's exceedingly difficult to read, let alone maintain.

  • Comment on Re^3: Hierarchy of code reuse by flexibility

Replies are listed 'Best First'.
Re^4: Hierarchy of code reuse by flexibility
by zby (Vicar) on Feb 18, 2009 at 08:28 UTC
    I like the term 'code template' :) When I was writing 'code generation' in this meditation I was mostly thinking about tools like h2xs and Module::Starter - but 'code template' is more precise.

    So how would you pin down the use case for C&P and code templates? When it is justifiable and when not? I am thinking about this because I've just released Catalyst::Example::InstantCRUD - which is a scaffolding a la Rails - i.e. code template. Is scaffolding something really useful or is it only a illusion of the beginning programmers - and it creates more problems than it solves?

      What I would say is you should use code abstraction by default, and resort to templates only to automate frequent coding tasks that resist that kind of code abstraction.

      Really, we've all got "code templates" in our head, and there's no point making us type them over and over again...