エビデンス
最近、エビデンスという言葉をよく見る気がしているのですが、トレンド調べたら、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ではまだ「エビデンスが弱い」と考え、より上位のエビデンスを探す。この差があるんじゃないかなー。