古今東西「プログラミング」を人々は自然と触れ合っています

長篠の戦いもプログラミング技術と関係

日本の歴史でも、プログラミング技術と類似する戦術が大きな功績を挙げたことがあります。

時は戦国時代。ご存じ、尾張のうつけ者とも呼ばれた織田信長が、当時無敵を誇っていた武田騎馬軍団を「長篠の戦い」で打ち破ることができたのは、とある戦術があってのことでした。

機動力があり、また高いところから攻撃を行うことができる騎馬隊こそが最強だと疑われていなかった当時、信長は鉄砲隊を戦場の中心に据えていました。現在放映中の大河ドラマ「麒麟がくる」でも、他国に先んじて鉄砲隊を組織する信長の様子が描かれていましたので、ご存じの方は多いかもしれません。

しかしこの時代、鉄砲を撃つにはまず筒を掃除し、火薬と弾薬を詰め、狙いを定めて撃つ、という過程が必要で、1発撃った後、2発目を撃つまでの間にかなりの時間を要することになります。そのため、速力に勝る騎馬隊に、鉄砲隊が蹂躙(じゅうりん)されてしまうこともしばしば。

そこで信長は馬防柵を設け、鉄砲隊を3列に分けて柵の後ろに配置し、1列目が発砲するとすぐさま後ろに下がり、2列目はいつでも発砲できる態勢を維持、という戦術を編み出したと言われています。

実は、これはプログラマーが「バッファリング」と呼ぶ技術。コンピュータでよく使われているのはダブルバッファリングという方式ですが、信長の場合、3列ありますからトリプルバッファリングとでも呼べばよいでしょうか。

バッファリングが用いられている例として、コンピュータの画面表示があります。コンピュータの画面はたえず書き換えられていて、通常は一度画面を全て消去してから必要な図形を描画する、という手順をとっています。毎回ゼロから書き換えているので、いくら高速で書いても、書いている途中の画像がチラついて見えてしまうことがかつての欠点でした。

そこで現在では、コンピュータの内部に画面を表現するためのバッファ(領域)を2つ用意して、片方のバッファが完成したらそれを表示、その間にもう片方のバッファを書き換え、今度はそちらが完成したら画面を入れ替える、という処理を行っています。そうすることで、チラツキを抑え、間断なく画面を表示できているのです。

信長は鉄砲隊が発射準備をするために発砲できなくなる時間を無くし、絶え間なく発砲できる態勢を維持するトリプルバッファリング戦術を採用したというわけです。

交代での休憩もプログラミングの1種

身近な例では警備員の交代制なども、一種のダブルバッファリングと呼べます。

どれだけ優秀な警備員でも、ずっと集中して警備していれば疲れてしまいます。疲れて、本来の能力を発揮できなくては警備の意味がなくなってしまいますから、時間がくれば必ず交代し、そして交代している間はしっかりと休息をとり、次の警備のための鋭気を養います。これもバッファリングの効果です。

2011年の東日本大震災のとき、現地に派遣された自衛隊の隊員は、どれだけ忙しくても必ず交代で休息をとっていたそうです。そうしなければ、咄嗟(とっさ)のときに十分な能力を発揮できず、かえって全体に迷惑をかけてしまう、という考えが徹底されているのかもしれません。

読者の中には会社で毎日残業続き、もしくは徹夜続きで疲弊している方もいらっしゃると思いますが、それでは体力の消耗が激しく、十分な能力を発揮できません。休むときは休む、働くときは働く、というメリハリが大事なことは、バッファリングの考え方がこれだけ世の中に浸透していることからも分かるはずです。

ところでなぜ、私たちはプログラムを必要とするのでしょう。その答えの一つは、「作業の均一化」にあります。

近代における大量生産と工業化の進展にとって、「誰がどのように作業しても、同じ結果を生む」ことができるかが一つの鍵でした。そしてそれを可能にしたのが、ファストフード店のような、手順のマニュアル化であり、工場の生産ラインの設計だったのです。

確かにマニュアルの通りにやっていれば、個人の能力や特性とは無関係に、同じサービス、同じ作業ができるようになりました。従来は職人の勘や、長年の経験に頼っていたものが、マニュアル化されることで誰にでもできるようになったのです。

このことは、「個性を奪っている」ともいえるかもしれません。

しかし、そのおかげで、私たちは大量生産された自動車に乗って移動し、時間通りに発着する電車、バスなどの公共交通機関を低コストで利用できるのです。自動車が昔のように手作りのままだったら、とても庶民が利用できるようにはなりませんでした。

それにプログラムがあるからといって全ての個性を奪う結果にならないことは、例えば結婚式のことを考えてみても分かると思います。

結婚式もプログラミングで説明ができる

多くの人にとって結婚式は人生で一度の晴れ舞台。思い入れもたくさんあり、準備にも時間をかける人が多いのではないでしょうか。

「自分の結婚式では、バイオリニストの叔父さんに演奏してもらいたい」「思い出深い、母校のチャペルで式を挙げたい」など、結婚式のプログラムは、新郎と新婦が一緒に話し合って決めるもの。いわば世界に二つとない、2人だけの、愛のプログラムです。

そういう個性を盛り込んだプログラムはコンピュータの世界にも存在しており、プログラミングは、作曲や執筆のように、思想の表現手段の1つとしても考えられているのです。

さらに愛に関連するプログラミングとして重要なものに「教育」があります。

子供を持つ人なら誰でも、「電車で騒いではダメ」「ストーブに触ってはダメ」などと子供を叱った経験があるでしょう。これも立派なプログラミングなのです。

子供が自分の安全を自分で守れるように言い聞かせて教育すること。彼ら彼女らの人生を正しく導いてあげられるような環境を用意すること。

親が死んでも子供は生き続けます。そして子供はまた、自分の子供に同じように教育を与えることでしょう。

プログラミングとは、言い換えれば「自分のいないところでも、自分以外の存在が自分の期待通りに振る舞うよう、その道筋を整える仕組み」です。だとすれば、子育ては立派なプログラミングであるといえます。

結婚式で、花嫁の父親はなぜ泣くのでしょうか。それはおそらく哀しいから、寂しいからだけではないように私には感じられます。

自分の育てた娘、すなわち自分のプログラミングした存在が、自立して自らの伴侶を選び、巣立ってゆく。これは子育てというプログラミングにとって、1つの完成を意味します。

結婚はプログラミングの1つの完成形

人生のうち、数十年という歳月を費やしたプログラミングが、ついにそこで一つの成就を迎える。完成に感動する気持ちは、筆者もプログラマーとして痛いほどよく分かります。

逆にお嫁さんを迎える側の両親は、あまり激しく泣いたりしません。それは「新しい家族を作るという、新たなプログラミングが待っているから」なのかもしれませんね。