コンテキストにまとわりつくゴタゴタ

最近語呂あわせばかりでナカミがないと評判のごみためです、どうも。

ソフトウェアを設計するということは、ある仕事をどうやってこなすかを設計することです。

その仕事の単位をタスクと呼ぶことにしましょう。

タスクを複数のプロセッサで処理することを並列処理と呼びます。

ひとつのプロセッサ上で複数のプロセッサが並列処理をしているように振舞わせることを並行処理と呼ぶとします。

簡単なタスクなら、複数のプロセッサで分担して実行する必要はないはずです。複数のプロセッサで分担する必要があるということは、おそらくフクザツなタスクなのです。

もっとも単純でフクザツなタスクは、同じ仕事をたくさん繰り返すようなタスクです。仕事はそれぞれ独立していて100個あるとするならば、100のプロセッサで並列処理することができます。

少し複雑でフクザツなタスクは、仕事間に依存関係などがあるために、単純に並列処理できないものです。少しくらいなら段取りを整える”ダンドリング”によってうまくタスクの分担を設計することができるでしょう。

さらに複雑なタスクでは変質が起こります。たくさんのタスクが絡み合って有機的に結合し、協調して動作することにより、タスク間の関係性の複雑さがある閾値を越えるのです。

この状態のことをタスクの有機化と呼ぶことにします。有機化したタスク群においては、教科書どおりの手法はほとんど役に立ちません。逆に書けば教科書どおりにいくらしっかり設計しても、ちゃんとまともに動きません。最後にはチカラワザで無理やり動かす羽目に陥る場合がほとんどでしょう。

それを後から見て、設計が悪い、実装がダサイなどと評論するのは簡単です。ですがもし大胆にREをしてから作り直しをおこなっても、結局同じことです。

それはここに書いた有機化タスクに対する理解が足りないからです。

有機化と書いたのには意図があります。有機化することで、タスク群はあたかも命を吹き込まれたように振舞い始めるのです。それをエコシステムと呼ぶのは勝手です。

ねじくぎで出来たマシーンのように組み上げたはずのものが、アミーバのように蠢く何かに変質してしまったのを目撃したことがみなさんにもあるはずです。

いったん有機化してしまうと、分解分析による手法は、かなり不利になります。 おそらくもぐら叩き的対処になってしまうでしょう。それはエコシステム全体を捉えた対処になっていないからです。

コンテキストについて書きたかったのに、なぜか有機化システムの話にすりかわってしまっていました。また思い出した頃に書けばいいんです。どうせほかにやることがあるわけでなし。

まぁそんな日もあるさ、だって満月だもの。