因果関係というのはそれ程、一般的では無い?
ヒュームと同時期の哲学者のエルンスト・マッハに関する本*1 を読んだのですが、
マッハは、
- 「原因」と「結果」の観念など
は、持ち込むべきではない、と思っていたそうです。
同じ本でマッハの文体に「むかついて」いたルートヴィヒ・ウィトゲンシュタインは、
- 語りうることと語りえないこと(倫理上の問題など)は有るが、
- 語りうることは一義的で明確で無いといけない
と、やはり「原因」と「結果」の観念などについてはマッハに賛成していたとの事です。
そう言われてみれば
そう言われてみれば、純粋なプログラム内部の議論を除けば、ソフトウェア開発の現場でも、
- 「原因」と「結果」の観念など
は無視していると思います。
プログラマーとして新人だった頃、オフコン(言語はCOBOLで、14インチディスクパックを「カコン」とはめ込む様な機械でした)のプログラム修正時、
- 直接の詳細設計書には書いていないが、
- 基本設計書などと引き比べると、
- 隠れた「原因」が有るとしか思えない(そうしないと要求された「結果」を導き出せない)
ので、それを指導の先輩に言ったら、引き取ると言われ、そのままでしたが、
もし、新人で無い、自分で何とかしないとならない立場だった場合、
- 隠れた「原因」については語らず、それも踏まえた必要なプログラムを作り、
(語りえないこと❓❓❓❓) - 詳細設計書が間違っているなどと、事を荒立たせず、
- 文書化もしない(その様な記述を書くに相応しい文書がそもそも無い)
のがまともな大人の振る舞いだと思います。
つまり、マッハやウィトゲンシュタインの態度の踏襲となると思います。
ソフトウェア開発の現場では
- 「原因」と「結果」の観念など
は無視しているので、当然の帰着です。
プログラマーに書かせるのは
でも、私の本心としましては、プログラマーに書かせるのは、
- テストなんか
では無く、
- 結果としてのプログラムの原因全て(詳細設計書も原因だが、それ以外の隠れた原因も残らず!!)
なのでは無いかと強く思います。*2
テストというのは、
なぜなら、
テストというのは(単一の関数呼出と、その準備と確認の様な単純で線形なものを除き)、因果推論の言葉で言う、『交叉』や、『介入』や、『反事実』も駆使すべき、大域的な知識が必要で、
プログラマーにやらせるより、(より因果ダイアグラムの上限側に近い)設計者にやらせた方が良いと思いますし、
逆に、結果としてのプログラムの原因全てこそ、プログラマーでしか書けない(思いつかない)と思います。
結論
これからも「因果推論に関する教示」を周りの人にされる事でプログラミングが嫌いになる人は存在し続けることでしょう。