ロジック(論理) とは何か? (思考整理中)

この投稿は、考え中の思考の断片を書き出したものです。 まだぜんぜんまとまっていませんが・・・、まだまだ先が長そうなので、一旦いまの段階でアウトプット。

考えている中心は ロジカルシンキング(論理的思考)、民主主義、合意形成、プログラミング教育のあたりですが、その基礎となるだろう "論理的" ということをどう捉えたら理解しやすいか? 何のために論理的に思考するのか? といったことが最後に導けたらよいのかなと思っています。(けど考え中)

ロジック(論理)とは

ある問に対して、誰が何度計算しなおしても同じ答を出す演算装置のこと。

ロジックの組成の殆どはサブクエリ(副問)でできており、サブクエリに対して答を出す仕組みもロジックです。つまり、あるロジックは基礎となるたくさんのロジックの組み合わせでできています。

各ロジックは、ファクト情報などを参照しながら答を計算して返します。

環境変数

環境変数は、ロジックに入力される、あるいはロジックから参照されるファクト情報の一種です。

一見して同じロジックでも、外部の環境要因によって違う答を出すことがあります。 従って、ロジックが「誰が何度計算しなおしても同じ答を出す」ためには、環境変数の取りうる値を十分に網羅的に把握し、それを考慮して組み込んでいく必要があります。

環境変数にはたくさんの種類がありますが、次の例はその一部です。

立場

立場が変わると見える景色が変わります。ある立場からは成立しそうに見えるロジックも、別の立場から見ると成立しえないことがあります。また、一見して誰の目にも明白に見えるファクトも、逆の立場からみるとまったく違う姿に見えることがあります。

ロジックが普遍的に同じ答を出すためには、あらゆる立場から見える情報が十分に共有され、入力されている必要があります。

立場には、次のような例があります。

  • 呼び出し元 と 呼び出し先
  • 依頼主と受託業者
  • 送信者 と 受信者
  • 経営者と従業者
  • 上司と部下
  • 教師と生徒
  • 親と子
  • 別の国
  • 別の企業
  • 別のセクション
  • 行政と民間
  • ルールを作る者 と 従う者
  • 富豪 と 貧民

リソース(資源)量

十分なリソースがある場合とない場合とでは、ロジックの振る舞いが異なる場合があります。

プログラミングにおいては、ネットワークの混雑状況やサーバー負荷、ディスク残量などがあります。社会では、食料が足りているか、電力量が足りているか、十分に安全であるか、などが資源の例です。対人コミュニケーションにおいては、疲れや体調などの影響によって感情が別の答を出すことがあります。

人間の感情

感情はロジックの一種だと考えられます。

しかし、内部の処理がブラックボックスで、なぜそんな答を出したのか、本人にもわからないことがあります。機械学習技術によって生成されたロジックが出す答は、開発者本人にも理由がわからない、と言われますが、ヒトの感情はこれと似ています。

ブラックボックスである感情のロジックは他者と共有することが困難なため、対人コミュニケーションにおいてしばしば対立の原因となります。

ただし、感情の振る舞いは、外部から観察し、仕様を理解することができます(心理学、脳科学など)。これにより、どんな入力にたいしてどんな出力が返されるか、ある程度の精度で予測することができます。

感情は、疲れや体調などの資源量、社会やコミュニティなど他の環境変数の影響を受けて振る舞いが変わります。

問と答の組み合わせ

問と答の組み合わせは、主に具体的なファクト情報から得られるもので、ブラックボックス化したロジックを外部から推測(リバースエンジニアリング)するヒントになったり、検算に利用することができます。

プログラミングにおいては、テストケースに用いて、ロジックが設計通りに振る舞うことを確かめます。

学校教育においては、問と答の組み合わせをたくさん教えることを 詰め込み型教育 と呼ぶことがあります。ここでもプログラミングと同様、学習成果を検算(テスト)するために、別の問と答の組み合わせが使われます。

機械学習においては、数千件以上の問と答の組み合わせを学習データとして利用します。そのうちの半分は 学習データとして与えられ、残りの半分は検算に使われます。この点は 学校の 詰め込み型教育 と似ています。

スコープ (範囲)

ロジック、または 問 自体が扱う対象とする範囲です。

スコープを広くとると、計算にたくさんのエネルギーと時間がかかります。 スコープを狭くすれば、速く計算結果を得ることができますが、スコープ外のファクトを無視するので、そこに矛盾があっても気づくことができず、後に問題となる場合があります。

コンピュータープログラムにおいては、可能な限りスコープを狭くとって、重要な機能に絞ったほうが使いやすくなることが多いと思います。これは、他のプログラムと組み合わせて使うことが多いことが背景にあります。1つ1つのプログラムが小さく分けられていることで、使う人は、複数のプログラムを好きに組み合わせ、スコープをコントロールすることができます。

対人コミュニケーションにおいては、可能な限りスコープを広くとって、より多くの人をコミュニティの中に包摂し、より多くの立場の人たちと共有できるロジックを構築することを目指すほうがよいでしょう。

いずれも、計算リソース と 処理速度 とを天秤にかけ、バランスの良いちょうどいいスコープに調整する必要があります。

合意とは

コミュニティのメンバー全員の問と答が合致すること。

誰が計算し直しても同じ答が出る完全なロジックが共有されることは、すなわち結果として問と答が合致すること(合意)に繋がります。

前提として、コミュニティのすべての立場を網羅した、十分な環境変数が共有されている必要があります。

合意には、 積極的な合意 と 消極的な合意 があります。 消極的な合意 は、本当はそれがよいと思っていないのに渋々同意したような状態をいい、健全な状態ではありません。 常に 積極的な合意 が目指されるべきです。

共通善とは

立場を越えて誰とでも普遍的に共有できる善のあり方。

「無制限のスコープで、すべて統合されたコミュニティの全メンバーが積極的に合意できたことがら」のように言い換えることができます。

対立が起きている場では、善は共有されておらず、共通善は成立していません。

共通善が成立している場では対立が起きないか、起きてもほどなく解決することができます。

プログラミング教育

2020年から日本の義務教育に導入される予定、とのこと。

自分はまだ中身をよくわかっていないので、勉強していきたいところです。

が、プログラマーとしてコーディングを生業としている立場から、 プログラミング教育 に期待したいことはあります。

それは、「職業訓練としてプログラミングを一般の基礎スキルにする」ことではなく、「プログラミングを通じて、ロジカルシンキング(論理的思考)の下地を身につける」ということです。

一般的な人と人との対話の中で、「ロジカルに話しましょう」といっても、何がロジカルなのか、どうしたらロジカルになるのか、なかなかイメージしにくいと思います。 ロジックを可視化して理解しやすくするツールとしては、プログラミング言語はなかなか優れているのではないかと思います。

本稿に並べた断片的な思考の部品は、人と人との対話の中にあるロジックの概念と、コンピュータープログラミングのそれとを区別せず、同じ構造として捉えようと試みています。

コンピュータープログラムが、誰のどんな環境で実行しても同じ答を返せるのと同様に、普遍的なロジックを意識しながら対話ができれば、誰とでも、互いを尊重しあいながら、同じ価値観を共有していけるはずです。

論理的な思考方法が身についていること。まずここを出発点として、論理的な対話を積み上げ、コミュニティの輪を広げていき、 より多くの仲間と合意を形成していくその先に、普遍的な共通善の成立があるはずです。それは、理想的な民主主義が実現した社会。対立がない、世界中が平和な未来。

そこにつながる最初の基礎としての プログラミング教育 に期待したいと思います。


プロフィール

ときにはデザイナ、ときにはディレクタ、ときにはプログラマ、ときには何でも屋と、ウェブの世界で未熟ながらもいろいろやっている、コヤナギトモヤです。

ツイッター上ではこのヒト。
@tomk79

RSSフィード

ページの先頭へ戻る