あの有名なTED Talkをはじめ、色んなところでwhy→how→whatの順で考えろ!と言われがちです。
しかしプログラミングにおいては、what(→why)→howの順が良いと思います。(自戒)
前半は「why→how→whatを否定したい」というより「whatは大事だよね~」という話。後半は、「そもそもwhy→how→whatってどうなの?」って話を書こうと思います。
長文駄文ですので、先にまとめを。
まとめ
「①なにかエラーが起きている→②きっとここが悪い→③変えよう(もしダメなら、②に戻る) 」ではなく
「①なにかエラーが起きている→②何が起きている?→③なら、これが悪いはずだ→④変えよう(もしダメなら、②に戻る)」を意識していきたい。
また、学ぶときには「何クラスの、メソッドなのかヘルパーなのか・・・」といった「直接機能に関係ないところ」「これは何?」も意識して学びたい。
whatは飛ばしがち
我々エンジニア(くそでか主語)は、エラーが出るとパニックになりがちです。
そして、 「なぜこのエラーが出てる?(コードのどこが間違ってる?)」「これすれば直るんじゃね?」とひたすら「手を動かして」解決を試みます。why, how, whatで言うとwhyとhowです。
そもそもの「これは何?何が起きてるの?」をなんとなくの理解(エラーが出てるなあ)で飛ばしちゃうんですよね。
はやとちりもよくやります。
「あ〜なんかエラーなる気はしたんだよね〜多分ここが問題で、ここを書き直したら……あれ?じゃあここか?あそこか?(蟻地獄のはじまり)」
what-何が起きているのか、を改めて確認すると案外単純だったりします。「全く関係ないことに取り組む」時間ってもったいないですし。
新しい概念についても、「これはなぜ必要で、何をしているのか」は学ぶけど、whatについては「文字情報(こう書けばいい)」くらいしか知らない、知ろうとしないことが多いです。
それはメソッドですか?何クラスのメソッドですか?実は演算子でしたか?糖衣構文ですか?言葉の由来は?といったところが、実は重要な気がする。
例えば、rubyの`size`というメソッドについて。パッと思いつくのは、「長さを返す」ですね。`length`とも一緒です。・・・配列(Arrayクラス)と、文字列(Stringクラス)においては。
これが数値(Integerクラス)になると違います。Integerクラスの`size`はバイト数を返します。
これはエラーのタネになりますね。
`size`を学ぶときに・・・ひいては、メソッドを学ぶときに、「どのクラスのメソッドか」を意識することで、実装時やエラー時に「クラスの違いじゃないか?」という発想につながるかもしれません。
この点で、how-機能だけでなく、what-これは何?を意識して学ぶのが良い気がしています。
whatってhowと比べてかぶりにくいというか、一意であることが多いと思うんですよね。
howは先ほどのように、「長さを返す」など、ふわっと簡単に理解できます。
一方、関係・構造をつくる、体系的な理解には向かないというか。whatはそれに向いているというか、という感覚があります。
手より前に頭を動かすのが良いのかなと思ってます。(「世界一流エンジニアの思考法」に触発されました。)
まとめ
「①なにかエラーが起きている→②きっとここが悪い→③変えよう(もしダメなら、②に戻る) 」ではなく
「①なにかエラーが起きている→②何が起きている?→③なら、これが悪いはずだ→④変えよう(もしダメなら、②に戻る)」
を意識していきたい。
また、学ぶときには「何クラスの、メソッドなのかヘルパーなのか・・・」といった「直接機能に関係ないところ」も意識して学びたい。
why→how→whatってどうなの?
本家動画(と勝手に呼んでいる、先ほどのTED Talk)が好きな方はブラウザバックをお願いします。
ちなみに私は、本家動画を非常に過大評価されたものだと思っております。
冒頭、why→how→whatで伝えることの重要性を示す、次のような例を出します。
「Appleはこう言います『我々のすることはすべて世界を変えるという信念で行っています』→『私たちが世界を変える手段は美しくデザインされ・・・略』→『そんな素晴らしいコンピュータができました』。どうです?欲しくなりませんか?」
突っ込みどころがままあります。
まず、whyとwhatはまだしも、howがhowかどうか怪しいです。why / whatとオーバーラップしているように思います。
また、ここでのポイントは「『why→how→what』の順で伝えたこと」ではないでしょう。私が思うに、ポイントは「我々のすることはすべて世界を変えるという信念で行っています」と大言壮語と言えるほどのセリフを吐けるかどうかです。
これを言えるか言えないかに比べたら、「素晴らしいコンピュータができました」というwhatを先に言おうが後に言おうが大した差はないと思います。
このTED Talkの時代背景として、他のメーカーはスペックだけ書いた広告を出す中、Appleはビジュアル素材を使った世界観のある広告を打った、というものがあると聞きました。その時代背景があってのものであることは頭に入れたいものです。今のAppleを見ると、why→how→whatとはいいがたい広告を打っています。
そもそも大したことは言ってないと思います。「why→how→what」なんて言われなくても、「つまらない説明をされるより、大きな夢や信念に人は惹かれる」ということは誰でもわかります。
つまり、このTED Talkこそ「我々のすることはすべて世界を変えるという信念で行っています」と言っているのです。その言葉に、人は感動しインスパイアされるのです。
短時間で人をインスパイアできることはとてもすごいことです。一方で、その内容が大発見で価値的であるかは別です。某枢軸国の総統と同じです。と僕は思います。