掲示板 > Tiny Basic for Windows

TBasic事始め(2) 構造化プログラミング

<< < (2/2)

takeuchi:
sokuhanさん
 ご自身の経験を通しての,構造化プログラミングの解説,コメント有難うございました。
興味深く読ませていただきました。

 構造化プログラミングの目的は,ダイクストラ自身が述べているように,
「我々が,プログラマーは正しいプログラムを書くだけでなく,その正しさを分かり易く示す
べきであるという立場を取れば,・・・,プログラマーが作り上げる対象は十分に
構造化(usefully structured)されていなくてはなりません。」
に尽きると思います。但し,ここで「構造化とは何か」というのが問題で,構造化プログラミングの
解説はこの部分の説明になります。(私の説明は「BASIC入門」に詳しく書いてあります。)

 私的には,「分かりやすいプログラムを書く。」がプログラミング手法の究極の目標とすれば
構造化プログラミングは,そのための一つの重要な指針であり,心得ておくべき最低限の作法・マナー
と思っています。

 ただ,元々構造化プログラミングは明確に定義されたものでもなく,全ての状況に対応するものでもないので,
あまり厳格にこれに拘泥する必要はないと私も思っています。

>もっとも、何が何でも構造化プログラミングでなければならないかどうかは別問題で、
>構造化を図るべき時はそれなりの構えが必要となる。

sokuhan:
早速にコメントいただき、ありがとうございます。

実は、論点が拡散してしまって捉えどころがなくなりそうな恐れがありましたので、
本文では余り論及しなかったのですが、
プログラミングにおける「分かりやすさ」とはどういう意味を持つのか?について、
改めて考える必要があろうかと思っていました。

新たなアプリケーション・ソフトを作成しようとする場合、
その意義・目的なり必要性というものを先ず明確にし、
その処理の流れを、データのインプットとアウトプットを確定し、
更に、そのインプットとアウトプットを取り結ぶ処理の流れと内実を、論理的に矛盾をきたさないように、
諸々のルーチンを組み合わせていく・・・というスタイルになるのですが、
その全体において、
対象たる事象のありよう(枠組み)と、その運動法則を如何に認識するか、
その捉え方が一般的・常識的な思考に反しない、ということが、
分かりやすさの根源になると考えるわけです。

この「一般的・常識的な思考」ということについて、
過去から現在に至るまで、人文科学や社会科学の世界では、
さまざまな「方法論」が構想され、提起されてきたわけですが、
プログラミングの世界でも、人間の思考の所産である限りは、
旧前よりのさまざまな方法論の成果が反映されざるを得ないmのとなるようです。
逆に言うと、プログラミングの世界の内に留まってあれこれ試行を重ねていても、
なかなかうまくいかないということになりそうです。

プログラマの立場に立つ場合、
プログラミングの作法や技術・技能に習熟する必要は当然のことですが、
その前提として、この人文科学や社会科学の世界における思惟の所産というものを、
言わば常識的な素養として弁えておくべきだと思うわけです。

だから、「IT技術者(システム・エンジニアとかプログラマ)という職性は理工系」という決めつけは無意味で、
人文系や社会科学系の人材が広くIT技術者として自己形成を遂げるということも、
当然の、ごく当たり前なことでありましょう。

「神は細部に宿りたもう」

思い返せば、1970年代の思想状況の下に語られた「惹句」でしたが、
私は、この「惹句」が大好きで、
こういう思考に導かれつつ、プログラミングの世界に足を踏み入れたのでした。

以下、余計なことを言うことになりそうですが、
現在流行の「オブジェクト指向プログラミング」について、
いろいろと解説書を読むのですが、その解説が良く呑み込めない。
要するに、従前のプログラミング作法では、
データなるものを一義的に定義することから始められていたものを、
データそれ自体が多義的な多様性を固有するものと率直に認めて、
その多様性・多義性を大きな処理の流れの中にどう位置付けていくかという視座に基づくものと理解すると、
かなり理解に整理がつきます。
これは、かつては「概念論」なり「範疇論」として哲学の世界で論議されていたテーマで、
何か「新しい思考」であるとかとはとても考えられないもので、
プログラミングの世界もやっと追いついてこれたか、いささか傲慢な見方ですが、思うわけです。

「昔とった杵柄」という言葉がありますが、
若い頃に学んだことに無駄は1つもなかったと、そういう慨嘆に浸ってしまう日々ではあります。

takeuchi:
>「分かりやすさ」とはどういう意味を持つのか?

 中々難しいところです。「分かる」は主観的行為ですが,「分かりやすさは」客観的事象です。
この主観をいかに客観化するかが,問題の本質と思います。
 プログラムの動作は動的ですが,プログラム自体は静的なものです。
またプログラムが静的なものですから,それ故にかなり客観的なものとして構成できる可能性が
あります。厳密な確実性の検証は意味よりも,むしろその形式にあるとは,古代から論理学の基本ですが,
構造化プログラミングもその確実性の検証のために,その検証可能な形式を指定したと考えられます。
更にそれらの形式を分割と統合による階層化を行い,個々の階層における検証の単純化し,
各段階での誤りの混入を防ぐという仕組みです。
 各階層での定義は実際には「抽象化」といわれる行為で行われるわけですが,「オブジェクト」
とは,旧来の構造化プログラミングで規定された対象以上の抽象的対象を,プログラミング言語の
具体的対象として定義できるものと,私は理解しています。ですから,オブジェクト指向言語は,
構造化プログラミングの昇華としてあるものと思います。
 この「抽象化」という思考形態そのものは,「概念化,分類,統合」という古くからの哲学的手法の
プログラミングへの適用と考えれば,そのこと自体は確かに,

> 何か「新しい思考」であるとかとはとても考えられない

となります。しかし,計算機側から見れば,このようなものがプログラミング要素として具体的に
定義できるということになり,人間に少し近づいたとも言えます。

sokuhan:
論点が不必要に拡散させてしまい、
とりとめもないような仕儀となり、恐縮に存じます。

にもかわらず、
更に勉強しましょう、とか、
いっそう努力しましょう、と、
励まのご配慮をいただいたような心地がして、
このように掲示板を介して何をか語ること、、会話をいただけるということで、
学ぶということの楽しさも味わっております。

私自身、自分の考え方がトコトン正しいとか妥当性を持つものとは固執するわけではなく、
だからこそ、勉強を怠らない心構えではおりますが、
本業は別に抱えていて(個人自営の手仕事の職人暮らしです)、
従って、プログラミングの世界は、素人の趣味に留まることを「逃げ道」にしている気配があります。

TBasicを活用していろいろとプログラムを作成しつつ、
機会を設けて、情報理論や情報工学といった基礎から学び直そうとしております。
まだまだ、老け込むには早すぎて、なすべきことが山積しております。

今後とも、折々に投稿させていただき、学びの楽しさを大切にしたいと思います。
宜しくお願い申し上げます。

Navigation

[0] Message Index

[*] Previous page

Go to full version