____________________________
COPY AND PASTE PROGRAMMING
Nicolas Herry
____________________________
2022/10/24
1 Copy and paste programming
============================
It's not uncommon to hear old timers remark how much the activity
of programming has changed over the years, and how nowadays young
developers do not try to understand the code, but simply copy and
paste from some website. Is it true? And if so, is it a bad
thing?
1.1 Do programmers copy and paste code?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Even though it is of course impossible to really provide an
answer to that question (given how vague the formulation is), we
can at least say that we've all seen this happen. On
StackOverflow, dozens of questions are asked everyday by people
only looking for ready-made solutions to their problems, be it
for homework or just plain work. So, it would appear that people
do, indeed, copy and paste code instead of writing a solution of
their own.
One could argue that in order to obtain some code one can paste
straight into a source file, one must first be able to explain
the problem in very clear, unambiguous terms. This requires
understanding the problem well enough to do so. When a problem
does not need understanding, chances are that the solution
doesn't need any either (and as such, falls outside the scope of
the original question). A good point, but there is more to the
question.
But now, we need to take a closer look at the question: most of
the time, it's the younger generation that is singled out as
giving in to copy and pasting. Is it truly the case? Once again,
it's not exacty easy to find statistics on this, but it's fair to
say that the population making up the older generation of
programmers probably did exactly the same thing in the
past. Certainly not all of them, and they might not do it today,
but it's likely they did copy and paste code to get the job
done. How can we be so sure of that? Well, we only have to
remember the end of the 90s, and the beginning of the 2000s. Back
then, the Web was exploding and everyone was busy writing their
boo.com clones and such, and this meant typically writing [DHTML]
code that would work with Netscape and Internet Explorer, among
other things. And back then, Internet was ripe with sites
providing "code snippets", some companies would disallow
right-clicks on their pages, hoping to prevent developers from
stealing their Javascript secrets and book publishers would offer
all kinds of "Cookbooks" to programmers.
This last example is worth detailing a little, as the formula for
these books was exactly what happens today on StackOverflow: each
chapter would open with a question asking how to do some specific
task, and the answer would be provided in the form of a complete,
working example. There would sometimes be some additional
discussion, explaining some aspects of the solution itself or
opening to other questions. But fundamentally nothing that a good
answer on StackOverflow wouldn't provide, only with professional
editing. And these were not bad, lazy publishers: the very much
revered O'Reilly used to have a sizeable catalogue of
cookbook-style books, and even launched a series of books
following this very format.[1]
So, if even the old-timers have been doing it in the past, why
are they remarking this copying and pasting only now? One reason
could be that it's because they don't do it any more today. But
then, what does it actually mean, to copy and paste code? Why
would it be bad practice to copy and paste code, instead of
writing a solution of your own to every problem you encounter?
[DHTML] <
https://en.wikipedia.org/wiki/Dynamic_HTML>
1.2 What is programming about?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Answering these two questions requires asking yet another one,
that of interrogating the nature of the activity of
programming. I will not try to provide a thorough answer to that
question right now (I'm saving this for another essay), but after
years spent building teams, I believe it is safe to say that
there are different kinds of developers, each with their own sets
of motivations. Some work as developers for the money or the job
security, some find great and intense pleasure in the practice of
code and most are somewhere in-between on this spectrum. Focusing
only developers showing genuine interest for coding, my
experience is that one major motivation is their desire to
learn. To them, coding is a way to exercise their intellect, to
stretch their mind beyond what they know, to develop an
understanding of the patterns underlying the problems they seek
to solve.
In doing so, they need to identify the structure of the problems
they work on, and turn these insights into experience, a wealth
of devices of understanding they can reuse again and again,
enriching and refining them each time they attack a new
problem. The cyclical nature of the activity suggests there is
something more than simply solving a stream of unrelated puzzles:
there must be a progression not only in the output, but in how
the input is prepared, taken in and digested. In other words, to
these developers, the nature of programming is to continuously
learn how to learn.
1.3 To learn how to learn
~~~~~~~~~~~~~~~~~~~~~~~~~
So, what does it have to do with the original question, one might
ask? If to develop is to learn, and more specifically, to learn
how to learn, then we must remember that for a learning method to
be effective, it must help build and exercise critical
thinking. This means seeing the patterns, the structure, the
reason for why things are the way they are. Like any skill, this
one requires progressive training: being confronted with code,
again and again, and spotting the similarities and the
differences, and then trying to figure out why.
The next step is to excercise critical thinking: to identify in
the solution what there is to learn. And this is what in the end
is going to scatter developers across the spectrum I talked about
above. Some are not going to find it interesting, while some
others will eventually find it addictive. Over time, they will
not need to copy and paste code as much, as they develop their
own experience, and as such, actually learn. Instead of copying
and pasting from external sources, they will gradually copy and
paste from their own experience, as the keen eye it takes to make
good use of one's own experience is the same one trains looking
at other people's code. And then, eventually, they will become
old-timers, will forget how they started and will lament that all
the younger generation seem able to do is copy and pasting
code...
Coding, like any craft, comes with practice and
observation. Practising copying and pasting can help young
developers hone their observation skills during their
apprenticeship, and good developers always remain young enough
that they keep learning all their career. They take, take apart,
take in, again and again.
Footnotes
_________
[1] Two books in this style remain among my favourite books:
/"Unix Power Tools"/, with its 1200+ pages of Unix command-lines
sorcery spelling out entry after entry all the magic of Unix, and
/"Perl Hacks"/, whose cover captures perfectly the spirit of the
language, that of a sturdy, resilient and all-terrain language,
weathered to its core by the many adventures you've shared in its
company.