Everything old is new again redux
Lindsay did an excellent blog post yesterday titled "Everything old is new again", about the re-emergence of multi-dimensioned databases.
Great title, but just to prove his point, it applies even better to a post he shared on Google Reader a few days ago, written by Kurt Schrader and titled "Living in a Post Rails World". To quote that post:
I think that the Ruby world is eventually going to end up in a model like this, writing small simple apps that all talk to each other, and can be replaced or upgraded at any time.
<snip two paragraphs>
All of my hard/long running logic is well tested, encapsulated, and most likely running in little agents on the wire.
Sound familiar? It should. Kurt has re-discovered the same principles that the Holy Fathers of Unix discovered, over a quarter of a century ago. Doug McIlroy, circa 1978:
(i) Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new features.
(ii) Expect the output of every program to become the input to another, as yet unknown, program. Don't clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don't insist on interactive input.
Later, he simplified it:
This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.
Of course, Henry Spencer said it the best:
Those who don't understand UNIX are condemned to reinvent it, poorly.