はじめに
きっかけは、以下のツイートです。
「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ
— ふみ a.k.a.DJ Monad (@fumieval) May 29, 2023
このリプライや引用リツイート欄では、Trueを返すべき、Falseかな、例外を返すべき、要件による、といった意見がありました。
建設的な議論ができるコミュニティは素晴らしいと思う反面、同じコミュニティに属するエンジニアに対して「センスがない」「プログラマを辞めてほしい」と言っている人がいて非常に残念です。
そのように敢えて煽り他人へのリスペクトが欠如している人が一番センスがないという話です。
元ネタと反応
「「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すか」(https://twitter.com/fumieval/status/1663161595009314819?s=20)
反応を以下のようにまとめてみました。
どれも根拠がしっかりあって良い意見ですね。
True派の意見
- 論理積の単位元が真(True)であるから
- Vacuous Truthから
- 自分の知っているライブラリがTrueを返すから
- 再帰関数を考えるとTrueを返すのが妥当だから
False派の意見
- 直感的にFalseを返してほしいから
- 実務的にはFalseを返すケースが考えられるから
- Trueを返すとバグを誘発するケースを経験したから
例外派の意見
- 仕様として読み取れない(未定義)だから
要件による派の意見
- 要件によって関数名の名付け方も変わり、True/Falseのどちらも返しうるから
「センスない」と言っている人が一番センスない
タイトルのとおりです。
理由は次の通りで、
- プログラミング言語は全て数学や論理学で成り立っていると思い込んでいる
- そもそも論理学を理解していない
- 自身の世界と知識を前提として話を進めている
- (これが最も重要ですが)自身が優秀であると勘違いし人を煽り、リスペクトが欠如している
があげられます。
とりわけ人に「センスがない」と言っている人は、そもそも論理学をしっかり理解できていないのです!!
「センスがない」と言っている人自身がそれらの学問を理解していない
特に「センスがない」と言っている方は、そもそもそれらの学問を理解していない可能性があります。
これは、
- 自然言語で表現されたものに対して、Vacuous truth の理論を(勝手に)持ち込んでいる
- そもそも自然言語と論理学の間にあるギャップを埋めることができていない
- (そもそもギャップがあることを認識できていない可能性もある)
点にあります。
命題に何らかの条件(例えば「論理学において」)があれば、「True以外ありえない」は通りそうですが、
そのような条件はありません。
また、命題をPとすると「True以外ありえない(Trueだ)」と主張する方々を論理式にしてみると、
All.x(P(x)) -> True
ですが、彼らの主張は「この時P(x)というのは All.x(A(x) -> B(x)) の形であり、A(x)には空配列を取りうるからVacuous truthによってTrueを返すべき」というものです。
しかし、命題にはP(x)に対する前提が隠蔽されており、この「P(x)なものが存在する」という隠れた前提(これを存在措定と言います)を勝手に補って読んでいるのです。
例えば、「True以外ありえない」と主張する人々は「論理学において~という状況がある」という存在措定を補い、
「Falseかな」と主張する人々は「〇〇業務において~という状況がある」という存在措定を補っています。
数学や論理学を背景とした主張をしておいて、これを無視することはナンセンスでしょう。
つまり前提を整理せず他の主張であるFalse、例外、要件によるを否定することはできません。
今回は論理学を背景に主張する方の中に他人の意見を否定する方がいたためこの記事を書いていますが、人間的に見ても「前提を共有せずに相手の意見を否定することはできない」という感覚は納得いただけるはずです。
リスペクトのない方々におかれましては、存在措定を明示せずに論証を行うこと及びその論証は妥当ではないことを肝に銘じて頂きたいと思います。
さいごに
「あまり強い言葉を遣うなよ…弱く見えるぞ」
P.S
多くの方々にご覧いただき、とても有り難く思います。
さて、すでに何人かはお気づきかと思いますが、
このようなタイトルを付けている私も漏れなく「センスのない」人間です。
ほんとうにありがとうございました。