ドミノソフト公式ブログ

合同会社ドミノソフトの公式ブログです。

Evidence based programming

エビデンス

最近、エビデンスという言葉をよく見る気がしているのですが、トレンド調べたら、2020年頃から増えてるようです。コロナのせい?

この言葉、元は医学でのEvidence based medicineがベースだと思うのですが、どうも世に流れてる「エビデンス」という言葉は、証拠といった意味合いで「エビデンスがある」「エビデンスがない」といった使われ方がしているケースが散見されます。

が、Evidence based medicineにおけるEvidenceは、レベルが明確に定められていて、たとえば、「専門家個人の意見」なんてのも、エビデンスレベル6なんですよね。なので、エビデンスについては「ある」「ない」ではなく、本来は「強い」「弱い」といった軸で使うのが正しい用法です。

Evidence based programming

で、ふと思ったのですが、これ、プログラム開発でも近いものがあるのではないでしょうか。

たとえば、とあるライブラリを利用したプログラムを利用する場合、当然ながらライブラリの挙動を考えて設計し、コードを書くわけですが、そこにエビデンスレベルが当てはまりそうです。ちょっと思いつくまま言語化してみると、下記の表になりました。

レベル 内容
1 数学的、物理的に絶対と言えるもの(三角形の内角の和は180、とか)
2 ライブラリ公式のドキュメント
3 書籍化されているドキュメント
4a StackOverflowやQiitaなど、信頼できそうなネット情報
4b 当該技術に精通していると思われる先輩などの意見
4c 個人ブログなど、信頼できるかどうか不明なネット情報
5 様々なネット情報をもとに自分で推測した情報

これらのレベルに、「動作確認を行った(A)」「動作確認はしていない(B)」の軸を加えます。

根拠のないコードは無い

これまで、様々な人の設計やコードのレビューをしてきましたが、疑問点があって担当者にインタビューしてみると、5Aとか4cAなどの情報が元だったりするんですよね。「コードをコピペで持ってきたら動いたのでOK」ってやつです。

レベル2(公式のドキュメント)を見ていない。そこにはエラーや例外となる条件が記載されているが、そこを読んでいない(公式ドキュメントが英語のみだと増えがち)。結果、エラーや例外は自分の想像で仕様を埋めるので、2Aのエビデンスレベルで作れるはずが、5Aベースになっている。当然、エビデンスレベルの低いコードは、バグっている可能性が高い。

レビューで多く指摘を受けてる人と、そうでない人とは何が違っているのか、ってのが、長年言語化したいものだったのですが、このエビデンスレベルの考え方で言えば、前者(指摘を多く受ける人)はエビデンスを「有り」「無し」で考える人、後者はエビデンスを「強い」「弱い」で考えてる人、と表現できそうです。

4cの情報を発見し、動かしたら動作したので4cAとなる。前者はこれで「エビデンス有り」として完了となるが、後者は4cAではまだ「エビデンスが弱い」と考え、より上位のエビデンスを探す。この差があるんじゃないかなー。