科学と家事とプログラミング (python を中心に)

python 温度計測 湿度計測 DS18B20 USB9097

超構造化(10) 構造化の先へ

パラダイム・シフト

構造化は空間化を連想させる。時間/空間という文脈で切り分けるなら、手順は時間的であり、宣言は空間的である。比喩的な表現を許してもらえば、宣言的なプログラムにおいては、(それを人が読み書きしているかぎりにおいては)時間が流れない。計算機が解釈することで初めて(計算機の中で)時間が流れる。全体として、手順的/時間的な側面が無くなるわけではないが、その大部分を処理系が面倒を見てくれる。プログラマーは手順的/時間的な問題から解放され、それに関する間違いが減ることが期待できる。

オブジェクト指向パラダイム・シフトとよぶなら、構造化プログラミングだって十分パラダイム・シフトなのだろう。どちらも計算機の機構(メカニズム)に依拠した計算モデル(破壊的代入)からの脱却を目指すものであり、通底するのは、プログラムをいかに人間の都合に近づけるか?という問題意識に他ならない。「チューリングノイマンの呪縛からの脱却」とでも言い表しておこうか。こういう話を正面から扱う教科書(入門書)は少なく、言及されていても、さらりと数行で済まされる。研究者にとっては、あたりまえすぎるというのが理由の一つと思うが、明治期に導入された翻訳漢語の使い方が荒っぽいことも、素朴な理解や表現を難しくしている理由かと疑う(自戒をこめて)。

構造化の先へ

以上、空間化に重きを置いて説明を試みてきましたが、その絶対的な優位を主張するものではありません。空間的(宣言的)な思考よりも時間的(手順的)な思考を得意とする人達もいるようです(私はあまりうまく想像できないのだけど)。デバッガーを使って処理を追いかけはじめると、バグの箇所のはるか手前で間違いに気がつくことも多い(不思議ですね)。なにより、将来が決まっている(ニュートンデカルト的)無時間世界は生きるに値しない。その一方で、システム分析やプログラム設計の場面では、時間を抜いて空間化していくという視点が有効な場面は多い(というか、そういう仕事だと思っている)。ただそれだけのことです。計算機って、あまりお利口ではないから、すべてを明示的に示さないと何もできない。それを使う人間は、気まぐれで、飽きやすくて、忘れっぽく、しかもよく間違う。普通の人が一度に扱える要素の数は限られているので、そのギャップを埋めるために、部分/全体という空間的/階層的な把握の仕方に頼らざるを得ない。と、あたりまえのことを再確認するのでした。いずれ論じてみたたいオブジェクト指向の前振りとして、引用を 2 つ。

オブジェクト指向言語は、...計算機制御のための記述力を捨て去って、 思考の形式化機能、問題のモデル化支援機能を提供する」 --- 春樹良且, 「オブジェクト指向への招待」


「computer science という名称は不的確だとさえ言える。 その大半はコンピューターの科学ではなく、 叙述ということ、そして叙述のための言語の科学なのである」 --- シーモア・パパート, 「マインドストーム

f:id:sken20k:20180213141922j:plain