“... If I have seen a little further, it is by standing on the shoulders of Giants.”
– Isaac Newton
This, to me, is one of the most important consequences of the Internet age. The availability of a world-wide, largely unconstrained data network (and powerful search engines) made it possible for software developers around the planet to build up powerful software foundations, the likes of which the industry had never seen before, and to do so cooperatively. In the Perl community, the CPAN library has, at this moment: 73842 Uploads, 23837 Distributions 101779 Modules, 9364 Uploaders.
What does this mean to us, as software developers? Well, it means that we are no longer actually “developing,” i.e. “from scratch,” nearly so much stuff as we once did. Tangentally, it means that we should be spending a lot more of our time searching for “prior art,” before we attempt to create something altogether new and (we hope and expect) instead of doing so.
Okay, okay ... “duh, we all know that. What’s your point?”
My point, reaching deeper, is that I think that this demands a greater sense of software-development discipline from us, with regards to the stuff that we aren’t grabbing from some library someplace. We need to take some lessons from these modern packages, and from CPAN itself. We need to study not only what the most recent and popular packages do, but how they are built and how they are deployed. We need to take a peek at the source-code links sometimes. And, we need to look at those mountains of self-tests. We need to “go and do likewise.”
Any CPAN package, to pass muster, must be provided with certain things: embedded documentation, a thorough prerequisites/corequisites list, a rugged overall construction, and very thorough and complete self-tests. This, and only this, is what created the vast library of modules that we now enjoy and that we drop into our critical projects with relative impunity. We need to push ourselves, and our teams, to that standard of excellence.
Do all such modules achieve that standard? No. But they (should) aspire to it; they are expected to.
When we do this, we achieve a level of human performance (in terms of “quantity of error-free functionality generated” as well as in terms of “maintainability of that base”) that has sometimes been referred to either as haiku or Zen. Perhaps a better way of describing it is “software leverage.” Even a single tough, well-engineered and well-constructed software module can have dramatic positive impact upon a project. Surfacing in many places throughout a project, and utterly (provably...) dependable in whatever it does, the module brings reliability and consistency at the same time.