whatを意識していきたい

あの有名な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`メソッドでも返すものが違う

これはエラーのタネになりますね。

`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こそ「我々のすることはすべて世界を変えるという信念で行っています」と言っているのです。その言葉に、人は感動しインスパイアされるのです。

短時間で人をインスパイアできることはとてもすごいことです。一方で、その内容が大発見で価値的であるかは別です。某枢軸国の総統と同じです。と僕は思います。

@kohki_takatama
RUNTEQ 53期 Twitterなどは→potofu.me/ja/my/links