Mankind has invested vast resources (time, manhours, computer machinery
sunk costs, maintenance, building space, heating, venting, cooling, and so on)
into software for all kinds of digital and analog hardware for over sixty years.
Far longer if you consider punched cards, and so on. In the end, most of the
source code ends in the waste heap of history. Old code gets forgotten, rubbished,
and a new wave of developers is forced to recreate new versions of old
ideas. People get promoted, graduate from college, and leave to get married;
before they do they don’t have time, don’t believe in the priority, and don’t
place the code where others can find it to make an important curation of their
software; and by this donate it to future generations, worldwide, the society at
large. If organizations, at the other end of the spectrum, would realign software
for a legacy of centuries instead of product runs, mankind can preserve the sunk
costs, speed up advancement, and make software impact far wider when it’s
made in a reusable form. People move to a new job, and remake linked lists,
factory classes, or ring buffers in the new language of the day, or within the
design paradigm of the latest fad management.
It’s kind of insane when you think about it, people spend many years getting
a consumer product working, finely tuned and profitable. Then two companies
merge, product lines are unified or obsoleted, and some or all of the intellectual
property gets forgotten in a corner as one team is merged and the others retire
to golf, or the pool. While filling in cardboard boxes of stuff as they leave, does
anyone drag out the old tapes and floppies to make sure the new guys aren’t
starting by reinventing the wheel?
Why?
The culture has a serious misunderstanding of where the value, where
the intellectual property comes from and where it gets stored. This wasteful
malaise needs to change.
This book is a launching point, not a destination. It is designed to evolve in
small, incremental ways along with your reusable software development guide-
lines, over many years. From novice coders starting out to experienced, and
jaded, software managers; all practical and technical issues are presented in
two natural layers ( for the simplest stratifications - explained in Section 8)-
one, the manifesto paints broad strokes in a proscriptive manner about how
to steer your organization gradually towards code for longevity, and two, the
toolbox brings together a set of free tools to get you started, a bunch of tried
and true realities about what makes sense while plumbing inside someone else’s
code, and realistic high level strategies to make sense of what you find. There’s
no practical way for this small book to cover every topic fully, the manuals
alone for autotools are several thousand pages. But the goal is a comprehensive
perspective, and that can be achieved, quickly.
This book provides a wider perspective, by looking back on the history of
software reuse, and the development cycle not as a painful target to meet and
then forget, but as a stepping stone that brings on differing teams, ramping
up and ramping down, to meet the custom needs of every stage of software.
Doesn’t that sound more productive, on the face of it?
Maintenance was the old end of software development, the goal of software
reuse is to make all software a continual maintenance cycle for mankind. The
goal is to accelerate the next generation farther and faster, perhaps into the
stars. But even in a humble grounded form, make impacts felt worldwide.
Easier to start, longer to impact, cheaper to deliver. The goal of all software
reuse: to untrap all the value stored there by society.
For each chapter, I parallel the main ideas of reuse with a Buddha koan.
Enigmatic ideas smashed together like koans are like the perfect proscriptive
advice: they present paradoxical and enigmatic ideas that appear ungrounded
in the importance of the day, until you wander into a situation, perhaps a con-
flict of ideas, and the answer leaps out of the confusion - linked to your brain by
the wise words of a koan. It all becomes clear, with time, patience, and practice.
Like the discipline needed to transform people’s habits to instill software
reuse, Buddhism is a practice. It is a “life raft built for one”, as the expres-
sion goes. There are many aspects, many dimensions, to consider as important
factors in making software more useful to a wider group. Like any discipline,
there will be areas people stumble, and other areas where people excel, and
areas that take a great deal of resources to conquer. And conquer them you
shall, with some humble guidance and a positive outlook.
Executive Summary:
What is this book about?
Software, made with quality from original sources repurposed, in many
agreed standpoints of comprehension, to meet a wider audience that benefits
mankind for generations instead of fiscal quarters so mankind can maximize
benefit from it for all society.
Who may benefit?
Mankind should be interested in and profit from software reuse, because re-
ducing software development time reduces energy greenhouse gas emissions,
reduces computing machinery wear and tear, provides more ways to accelerate
more people to work on software with security, mission-critical, and real-time
requirements; it provides easier starts for younger scientists and engineers in
Science, Technology, Engineering, and Math (STEM) to profit from and accelerate
their learning and contribution to technology.
Why should society care?
Society has learned from enough bad ideas and bad methods in the progeny
of software to make optimization a priority for everyone’s advancement tomor-
row.
When?
The change needs to happen tomorrow, and this book points a way towards it.
How?
By attacking the top and the bottom of software development at the same
time: the first half of this book describes the ideas from a managerial, or high
level perspective; the second half delves into the nuts and bolts things anyone
might use to get started.
IEEE Source Code Website: https://opensource.ieee.org/daveerickson/reuse-library-abstraction