Everything old is new again redux

Lind­say did an excel­lent blog post yes­ter­day 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 bet­ter to a post he shared on Google Reader a few days ago, writ­ten by Kurt Schrader and titled “Liv­ing in a Post Rails World”. To quote that post:

I think that the Ruby world is even­tu­ally going to end up in a model like this, writ­ing 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 run­ning logic is well tested, encap­su­lated, and most likely run­ning in little agents on the wire.

Sound famil­iar? It should. Kurt has re-discovered the same prin­ciples that the Holy Fath­ers of Unix dis­covered, over a quarter of a cen­tury ago. Doug McIl­roy, circa 1978:

(i) Make each pro­gram do one thing well. To do a new job, build afresh rather than com­plic­ate old pro­grams by adding new features.

(ii) Expect the out­put of every pro­gram to become the input to another, as yet unknown, pro­gram. Don’t clut­ter out­put with extraneous inform­a­tion. Avoid strin­gently colum­nar or bin­ary input formats. Don’t insist on inter­act­ive input.

Later, he sim­pli­fied it:

This is the Unix philo­sophy: Write pro­grams that do one thing and do it well. Write pro­grams to work together. Write pro­grams to handle text streams, because that is a uni­ver­sal interface.

Of course, Henry Spen­cer said it the best:

Those who don’t under­stand UNIX are con­demned to rein­vent it, poorly.

7 Comments

  1. Sherif says:

    Man we just go around in circles… I’m read­ing through the Old Test­a­ment (as you do), and Israel went around in Circles with God, over and over and over again..( I know I’m stretch­ing the ana­logy — but same thing!)
    Its the with tech­no­logy, as you have described above…look at the fact that we are even going back to the ‘thin’ cli­ent / dumb ter­minal — everything is being pushed into the cloud… here we come around the circle again..

  2. James Polley says:

    But even as everything is being pushed into the cloud, Gear (and HTML5) are cham­pi­on­ing the idea that it can be bet­ter to push the data and pro­cessing back out to the nodes — Gmail “Flaky Con­nec­tion Mode” and Myspace both push data to the web browser, so that searches can hap­pen there and be nice and fast..

  3. You should cat­egor­ise this as “slug­worthy”. :-)

  4. Kieran says:

    Atomic-SOA…BPEL to orches­trate them…and wham. magic.

    • James Polley says:

      SOA, I.. well, I know what it stands for, no-one (not even the shills try­ing to get me to cough up money for their idea of an SOA) knows what it really means.

      Atomic-SOA? No idea.

      BPEL? No idea.

      Could we get a trans­la­tion into plain english?

  5. Kieran says:

    SOA defines a paradigm for build­ing what is, in my opin­ion, highly agile, reusable and flex­ible soft­ware. Simplified:

    1. Expose all logical units of func­tion­al­ity as a ser­vice without any coordin­a­tion. E.g., expose “Take Loan Applic­a­tion”, “Val­id­ate Tax File Num­ber”, “Val­id­ate Address”, “Val­id­ate Email address”, “Income meets our lend­ing cri­teria”, “Approve Loan”, “Deny Loan” as indi­vidual services.

    2. Orches­trate those pro­cesses with a lan­guage called BPEL. E.g. A BPEL pro­cess, “Pro­cess loan applic­a­tion”, calls the “Take Loan Applic­a­tion”, and then calls “Val­id­ate Tax Num­ber” (etc), and then calls “Income meets our lend­ing cri­teria”, then depend­ing upon the res­ult the BPEL pro­cess calls either approve or deny loan. This “Pro­cess Loan applic­a­tion” is exposed as a web ser­vice for con­sump­tion in a lar­ger process.

    This then allows for soft­ware to be built in a man­ner whereby the indi­vidual com­pon­ents can be con­sumed indi­vidu­ally and also to be orches­trated in a lar­ger pro­cess, which then can be reused and eas­ily adapted. 

    kill ‘ps auxww | grep firefox-bloat | egrep –v grep | awk ‘{print $2}’‘ (and yes, I know of pgrep).

Leave a Reply