Everything old is new again redux

Lind­say did an excel­lent blog post yes­ter­day titled “Every­thing 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 sim­ple 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 lit­tle agents on the wire.

Sound famil­iar? It should. Kurt has re-discovered the same prin­ci­ples that the Holy Fathers of Unix dis­cov­ered, over a quar­ter 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­pli­cate 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 extra­ne­ous infor­ma­tion. Avoid strin­gently colum­nar or binary input for­mats. Don’t insist on inter­ac­tive input.

Later, he sim­pli­fied it:

This is the Unix phi­los­o­phy: Write pro­grams that do one thing and do it well. Write pro­grams to work together. Write pro­grams to han­dle text streams, because that is a uni­ver­sal interface.

Of course, Henry Spencer 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 cir­cles… I’m read­ing through the Old Tes­ta­ment (as you do), and Israel went around in Cir­cles with God, over and over and over again..( I know I’m stretch­ing the anal­ogy — but same thing!)

    Its the with tech­nol­ogy, as you have described above…look at the fact that we are even going back to the ‘thin’ client / dumb ter­mi­nal — every­thing is being pushed into the cloud… here we come around the cir­cle again..

  2. James Polley says:

    But even as every­thing is being pushed into the cloud, Gear (and HTML5) are cham­pi­oning the idea that it can be bet­ter to push the data and pro­cess­ing 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­e­gorise this as “slug­wor­thy”. :-)

  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 par­a­digm for build­ing what is, in my opin­ion, highly agile, reusable and flex­i­ble soft­ware. Simplified:

    1. Expose all log­i­cal units of func­tion­al­ity as a ser­vice with­out any coor­di­na­tion. E.g., expose “Take Loan Appli­ca­tion”, “Val­i­date Tax File Num­ber”, “Val­i­date Address”, “Val­i­date Email address”, “Income meets our lend­ing cri­te­ria”, “Approve Loan”, “Deny Loan” as indi­vid­ual services.

    2. Orches­trate those processes with a lan­guage called BPEL. E.g. A BPEL process, “Process loan appli­ca­tion”, calls the “Take Loan Appli­ca­tion”, and then calls “Val­i­date Tax Num­ber” (etc), and then calls “Income meets our lend­ing cri­te­ria”, then depend­ing upon the result the BPEL process calls either approve or deny loan. This “Process Loan appli­ca­tion” is exposed as a web ser­vice for con­sump­tion in a larger process.

    This then allows for soft­ware to be built in a man­ner whereby the indi­vid­ual com­po­nents can be con­sumed indi­vid­u­ally and also to be orches­trated in a larger process, 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