書籍やブログ、そして各種メディア等で読んで、聞いて仕入れた情報は鵜呑みにしてはいけない。
わたしはよくこういうことを言っている。
技術書を立ち読みしながらもいつものように言っている。
何故、鵜呑みにしてはいけないのか
「メディアの報道はバイアスやスピンがかかりまくっている」、そんな話はよく聞くだろう。先日だってPokémon GOが一躍ブームになった際も偏見報道が多かったことなどは有名だ。もちろんそんなことは当たり前なのだが、私が言いたいのはそうではない。
何人たりとも過ちを犯す
人は過ちを犯すものである。
河童の川流れだとか弘法にも筆の誤りだとかのようなことわざがいくつもあるように、たとえその道のプロであっても間違い、勘違いといったものはよくある。
例えば、その勘違い(もちろん本人は知る由もない)を書籍(初心者向けの技術書)に当たり前のように書いたとする。
残念なことに、編集者がそこまで詳しくなく、他の人が推敲しても見落とし、あるいは同じ勘違いをしていた、知らなかったなどといったものがそのまま世にでることは当たり前のように存在する事実である。
それを購読する読者はそんなことはつゆ知らず、信じてしまう。
○○は○○では出来ないので〜〜と書かれていても、本当はいとも簡単に出来ることかもしれない。(書いていて思ったが件のPCデポの話にも似ているところがある)
よく理解してる人がその書籍を読み「この本酷いな〜」と思うのは当然であるが、初学者は無知なので気づきようがない。
特に、人は最初に仕入れた情報をそのまま信じやすい。あとからそれが誤りと指摘されても馴染んでしまったものは直せない。私もそんな経験がよくある。
ブログに書くならば根拠をしっかりして欲しい
一気に話が変わるが、先ほど共有された1年前の記事1の話である。
1年前のエントリーで、はてブやツイートが一切見つからなかったので埋もれていた記事だろうか。
せっかくコメント欄もあるのだし、もし気付いた人がいたならばコメントでなりなんなり指摘しておいて欲しかったのだが2、残念ながらそのような形跡もない。
このような書き方をすると晒しあげているみたいだが、そのようなつもりはない。(ごめんなさい)
あくまでもたまたま見かけた例として紹介させてもらっただけである……
端的に要約すれば、
Cakeの
Model::save
は失敗したらfalse
になるもんだと思ってたらdocコメ見た感じ失敗したらtrue返すみたいだし成功チェックはis_array($result)
で見分けよう
という内容であった。
が、これは残念ながら誤訳である。
失敗したらfalse
が返ってくるのが正しい。
mixed On success Model::$data if its not empty or true, false on failure
これは全く嘘はついていなく、
「 “On success Model::$data if its not empty or true” つまり成功したらModel::$data
を返すよ、でもそれがemptyならture
返すよ. “false on failure” 失敗したらfalse返すよ.」
というのが本来の意味であったようである。
なお、この誤った解釈が正しかったとすれば、CakePHP Cookbookに掲載されている
1 2 3 |
if ($this->Recipe->save($this->request->data)) { // 保存に成功した時の処理 } |
といったサンプルコードは誤っていることになる。
もちろん、「空の場合はtrue
が返る」(そもそもそのような状況が珍しそうだが)場合がある、ということはis_array
で判断するコードはバグである。
ここの過ちとはなんだろうか。誤訳がつらいのは当然なのだが、これだけを読んで私はおそらく正しく訳せない。似たような誤訳をしてしまうだろう。
しかし
「ソースを読む(コメントだけ)」
docコメは便利で、メソッドの使い方に自信がないときもIDEでそのメソッドにカーソルを置くだけで使い方を教えてくれる。
ところが、コメントだけではこういった勘違いも少なくない。それまでは正しい使い方をしていたのだから、恐らく自分よりはCake使ってる人だろうな、というのはそれだけでも読み取れる。
それでも勘違いは起こっている。
己の過ちに気づいた!ブログに書こう!
これはいいことだと思う、が確認はきちんとして欲しい。
この記事の根拠はコメントであった。やり方としては間違っていない。が、そのすぐ下には実際に動いているコードがある。コード読もう。
コードを読もう
実際に該当箇所を15分くらいにらめっこしてみた。
どう考えても失敗してtrueになる部分は見つからなかった。
急いでるならばまだしも、ブログに書くのであればせめてコードを読みたい。1分ぐらい眺めれば勘違いに気付くような気がする。コールドリーディングは無駄というがそうでもない。
ものすごく話があっちやこっちに行ってしまったが、言いたいことは2つ。
- 人に物事を伝えるときは最低限自信の持てるラインをしっかりと
- 見た読んだ聞いた物事をそのまま信じる前に今一度見なおそう
と言ったとこだろうか。もちろん、「勘違い」が爆発的に広まって正しい情報が見つからないことだってよく有り、難しい話なのだが。
ところで私がこれらを実践できているかといえば、その回答はNoである。何も考えずに発言するので、言ってから「やっぱ違ったわ」なんていうことはいつものようなことである。恐らく、過去のブログ記事も。
この記事は以前ずっと書こうとして書けなかった話の短縮・改変版です。
- 【CakePHP】摩訶不思議CakePHP。save()とsaveAll()の返り値 – ITの隊長のブログ ↩
- ならばお前がしろ、という話なのだがその気力はなかった…… ↩