学ぶとは何か。エンジニア的思考と原理原則
サイエンスシフトで執筆した若い学生さん向けのメッセージの記事
綺麗にレイアウトされたものはこちら:
以下は執筆段階のメモ
著者の紹介用の情報
チームワーク・組織の生産性を向上させるソフトウェアを製造販売するサイボウズで研究に従事
昨年8月に「エンジニアの知的生産術」を発売、技術書でありながら一般書ランキングで10位に入る
東京工業大学の特定准教授を兼任している
「学ぶ」とはなんだろう?
「学ぶことが大事」というメッセージは、耳にタコができるくらい聞いていることだろう。では、その「学ぶ」とはなんだろうか。
福沢諭吉の「学問のすすめ」はタイトルの通り、学ぶことを多くの人にすすめる文章だ。この文章の冒頭の「天は人の上に人を作らず。人の下に人を作らず」というフレーズが有名だ。このフレーズは「人は生れた直後には差がないが、学問をして物事をよく知る者は貴人・富人となり、無学な者は貧人・下人となる」という話の導入部だ。彼がすすめたかった「学問」とは、どのようなものだろうか。彼は「もっぱら勤むべきは人間普通日用に近き実学なり」と言った。つまり、日々の暮らしに使えて(日用で)、有益である学問(実学)に注力すべきだ、という考えだ。
社会生態学者のピーター・ドラッカーは著書「ポスト資本主義社会」で知識についてこう言った。「いまや知識とされるものは、それが知識であることを行為によって証明されなければいけない。今日我々が知識とするものは行動のための情報、成果に焦点を合わせた情報である。」つまり、知識とは行動やその成果と密に結びついているものだ、という考えだ。知識と行動を切り離して考えてはいけない。知識を用いて実際に行動し、そこ行動の成果を見ることで、その知識が有益かどうかを確認していかなければいけない。知識や学問を「机上の空論」にしてはいけない。
何を学問だと考えるのかには人によって色々な意見があるだろう。私は福沢諭吉やドラッカーに共感している。この記事で私が「学びが大事」という時、その学びの対象はみなさんが日々の暮らしに使える知識だ。そして、使うことでみなさんの日々の暮らしに有益な効果が発生する知識だ。この知識が有益かどうかは、実際にみなさんが日々の暮らしに使い、成果を観察することで確認しなければならない。そう考えている。
ソフトウェアエンジニアの学び方
ソフトウェアエンジニアがプログラミング言語を学ぶ過程を具体的にみてみよう。プログラミング言語を学ぶ過程では、実際にプログラムを書いて動かしてみることがよく行われる。「こう書けば、こういう挙動をするかな」と考え、実際にそうプログラムを書き、そのプログラムを実行した結果が、期待した挙動と同じかどうかを観察する。
これは科学の研究でよく使われる「仮説を立てて実験し、検証する」と同じだ。「こういうプログラムを書いたらこう動くだろう」という気持ちがまずある。これが仮説。その仮説を検証するために、実際にプログラムを書いてみて、それを実行する。これが実験。プログラムの実行結果が期待した通りかどうかを観察する。これが検証。
プログラミング言語を学ぶプロセスは、実験科学のプロセスと似ている。もっと一般化して、「学び」というものの中に、実験科学と同じプロセスがあるのではないだろうか。例えば本を読んだり、実験データを眺めたりして、あなたが何かをわかったような気になったとしよう。その「わかった」は事実だろうか?
理解は仮説
あなたが「わかった」という気持ちになったとしても、それはあなたが本当にわかっていることを意味しない。「わかった」は仮説に過ぎない。あなたが本当にわかっているのかどうかは、検証しなければならない。実験科学と同じ、仮説検証のプロセスが必要だ。
「わかった」の例を一つ紹介しよう。ダニエル・カーネマンは「ファスト&スロー」で、面白い例を紹介している。全米にある3,141の地域で、ある腎臓の病気の発症率を調べたところ、発症率が低い地域の大半は、中西部・南部・西部の農村部にあり、人口密度が低かった。ここから何が言えるだろうか?あなたは「ああ、なるほど、この腎臓病は農村部で低く、都市部で高いんだな」と考えたとしよう。これが仮説だ。
この仮説はどうすれば検証できるだろうか。この仮説が正しいかどうかを検証するためには何を観察する必要があるか、を考える。「この腎臓病の発症率が都市部で高い」という仮説が正しいなら、都市部での発症率は高いはずだ。ならば実際に発症率が高いかどうかを確認しよう。この事例では、都市部の発症率は高くない。発症率が低い地域の大部分が農村部だが、発症率が高い地域の大部分も農村部だった。つまり、仮説は正しくなかったことがわかる。
このように仮説が実験によって否定された時が、学びのチャンスだ。「わかったつもり」で誤った解釈を持っている状態から抜け出し、一歩前進するチャンスだ。この記事ではこの事例について詳細には説明しない。この事例については「ファスト&スロー」の「第10章 少数の法則ーー統計に関する直感を疑え」に詳しく書いてある。ごく簡潔に言えば、農村部は人口が少ないためサンプルサイズが小さく、その結果、発症率の分散が大きくなったのだ。
実験科学を日々の暮らしに使う
この例は、この記事の中で話を完結させるために、コンパクトにまとまったものを選んだ。読者のみなさんの中には実験科学系の大学で教育を受けた人も多いだろう。そのような大学では、仮説を検証するために、仮説を検証するための実験を計画し、実験を行なって、その結果を観察する、という体験をしたことだろう。しかしこの仮説・実験・観察・検証のプロセスは大学や研究室の中だけで行われるのではない。
この記事の冒頭で解説したように、「学びが大事」の、その「学び」の対象は、みなさんが日々の暮らしに使える知識だ。みなさんの日々の暮らしの中にも、仮説と検証によって改善していける知識がある。それを自分で発見し、実験し、理解を改善していくことが大事だ。その知識は、みなさん日々の暮らしに有益な効果を発生させる。そして、知識が有益かどうかは、実際にみなさんが日々の暮らしに使い、成果を観察することで確認していく。そういうプロセスが日常の中にある。
今回、実験によって仮説を検証していく学び方について解説した。もしあなたが「学びとは教科書を読んでその内容を飲み込むことだ」と考えていたなら、「実験によって仮説を検証していく学び方がある」という知識を得たことになる。私はこの知識があなたの今後の暮らしに有益だと思っている。実際にそうなのかは、あなた自身が使うことによって検証していく必要がある。
例えば就職活動にも
この記事を書くにあたって、読者の中に就職活動中の学生さんがいるという話を聞いた。その学生さん向けにメッセージを書いて欲しいそうだ。私は今みなさんがやっているような就職活動をしていない。学生当時、技術系のイベントで発表をいくつかしていて、そのイベントの懇親会で「新しくこういう会社ができるのだが、受けてみないか」と誘われ、成果や発表の一覧をテキストファイルに書いてメールで送り、面接を受けて採用された。なので今時の就職活動というものに関しては、私よりみなさんの方が詳しいだろう。
そんな私ができることは、一つだけ。就活マニュアルだとか、就活支援サイトなどに「これが正しいです」と書かれている知識は、本当に正しいのか?それも仮説なのでは?という指摘だ。採用の形や、何を評価するのかは、会社によってまちまちだ。マニュアルに従うことが、本当に正しいのだろうか。大勢の人が読んでいるマニュアルに従うことは、他の大勢の応募者と似た振る舞いをすることになり「採用されない大多数」の仲間入りをするだけではないだろうか。滅びにいたる門は大きく、その路は広く、これより入る者は多い。
今マニュアルに従って行動している人は「マニュアルが正しい」という仮説に基づいて、自分の行動で実験している状態だ。私は最近の就活事情に詳しくもないのに、無責任に「マニュアルが正しくない」という仮説を提示した状態だ。みなさんが今後どうしていくのかは、みなさん自身の実験計画であり、みなさん自身が自分で考えて決めていく必要がある。そしてみなさん自身が今後の自分の行動で実験し、理解を深めていくのだ。
実験検証のサイクルを小さくする
仮説、実験、検証、という流れを大ごとのように感じてしまう人も多いだろう。特に、生物系の分野だと、一回の実験に大きな労力がかかることが多いので、大ごとだと考えがちだ。しかし、むしろ逆だ。実験検証のサイクルをいかに小さくし、高速に回すかが重要だ。
この考え方はソフトウェア・エンジニアリングの分野では「リーン・スタートアップ」という本で紹介されて有名になった。この本はソフトウェアベンチャーの経営戦略に関する本だ。ソフトウェアベンチャーは、限られた資金を消費しながらソフトウェアを開発し、資金が尽きる前に収入を得なければ倒産してしまう。
ソフトウェアベンチャーは「こういうソフトウェアを作れば、売れるだろう」という仮説を持っている。この仮説が正しいと思い込み、資金の全部を使ってソフトウェアを開発すれば、仮説が間違っていた時には即倒産だ。「ソフトウェアを実際に開発して、それが売れるかどうかを見る」という実験は大きすぎるのだ。なので、どうすれば実験をもっと小さくできるかを考える。例えばファイル共有サービスのDropboxは、実際にソフトウェアを開発する前に、そのソフトウェアを使うとどういうことができるかの紹介動画を作った。そしてその動画を使って見込み顧客を集めて、十分集まることを観測してから開発をした。
就活でも構図は同じだ。使える時間は限られている。なるべく少ない時間で実験し、自分の理解を改善していく必要がある。私は今の就活がどういうものかはよく知らないので、その方法を教えることはできない。例えば、自分自身で実験することは高コストなので、他人や先輩の実験結果を共有してもらうことがわかりやすい例かとは思う。
「会社に採用されるかどうか」の他に「その会社で自分が幸せになれるかどうか」も検証の必要な仮説だろう。入社してから何年か経って、転職する人もたくさんいる。ミスマッチが起きるとお互いにとって不幸なので、例えば「インターン」という形で、就職することよりも低コストな実験が行われている。
Connecting the Dots
ここまでで、日常の中にも実験・検証のチャンスがあることを説明した。しかし、現実社会にある色々な選択の機会の中には、実験・検証しやすいものと、しにくいものがある。プログラミング言語の学習は比較的実験・検証しやすい分野だ。試しにある選択肢で実装して見て、間違ってたら、別の選択肢に書き直したら良い。実験科学も、実験がしやすく、実験結果に影響する環境要因をコントロールしやすい領域で主に発展してきた。
しかしこのような分野ばかりではない。「自分がどの会社にマッチするのか」は繰り返し実験が困難だ。新卒で入ることができる会社は一つだけだ。新卒という実験条件を揃えて、10社に入社して結果を比較することはできない。新卒という条件を緩めたとしても、あなたが10社のそれぞれに入社して3年ほど働いて一番あなたにマッチする会社を見つけようとしたら、それだけで30年経ってしまう。あなたの経験や年齢も、実験結果に影響を与える実験条件だ。
このような分野に対して、事前に「科学的に正しい答え」を求めようとすると、現実的ではない実験コストがかかる。なので「正しいかどうかわからないまま行動すること」が避けられない。この件に関して、Apple社の共同創業者であるスティーブ・ジョブズは、「Connecting the Dots」というソフトウェア業界で有名な言葉を残した。「点を未来に向かってつなぐことはできない、振り返って過去の点とつなぐことしかできない」(You can’t connect the dots looking forward; you can only connect them looking backwards.)という言葉だ。
彼は大学をドロップアウトした。卒業を諦めたので、興味がある授業を取ろうと考えた。そこでカリグラフィー(欧米風の書道)の授業を取った。この知識が、彼が文字のきれいなMacintoshを作る際に役に立った。文字をきれいに扱うことができるシステムを持っていたことが、他のメーカーのコンピュータとの差別化になり、Macintoshのビジネス上の成功をもたらした。カリグラフィーの授業を取った時点で、将来そのようなことが起こるなどと予想することはできなかった。
何が将来役にたつかは、事前に知ることができない。これを彼は「点を未来に向かってつなぐことはできない」と表現した。まず行動し、時が経ってから振り返って、過去に行ったことが今の人生に役立つことを発見する。これが振り返って点をつなぐということだ。そして、点を打たなければ、将来それが繋がることもない。なので将来にきっと繋がると信じて、今行動するしかない。
まとめ
この記事では、みなさんに3つの知識をお伝えした。まず日々の暮らしに有益な知識を実験検証サイクルによって得ることが大事だということ。次に実験サイクルは小さく速く回すことが大事だということ。そして、それをやってもなお「正しい選択」が事前にわからない、そういう時には将来にきっと繋がると信じて行動しなければならないこと。私は、この3つの知識がみなさんの今後の人生に有益な効果をもたらすと考えている。この理解が正しいかどうかは仮説であり、実際にみなさんが実験し、理解を改善していく必要がある。
大人になっても学びは続く。ただし「先生がカリキュラムを決めてくれる」というサービスはなくなる。また、たとえ学ばなくても「期末テストの成績が悪くて追試」などの、短期的でわかりやすいデメリットは起こらない。しかし学ぶ人と学ばない人では、5年10年経った時に明確な差が生まれる。あなた自身が、あなたの限られた人生の時間を使って実験し、あなたの人生に有益な知識を獲得していかなければならない。
-----
学ぶことが大事
「学ぶことが大事」というメッセージは、耳にタコができるくらい聞いていることだろう。
では、その「学ぶ」とはなんだろうか。
福沢諭吉の「学問のすすめ」は「人は生れた直後には差がないが、学問をして物事をよく知る者は貴人・富人となり、無学な者は貧人・下人となる」という話だ。
彼は「もっぱら勤むべきは人間普通日用に近き実学なり」と言った。
つまり、日々の暮らしに使えて(=日用の)、有益である(=実のある)学問だ
社会生態学者のドラッカーは著書「ポスト資本主義社会」で知識についてこう言った
いまや知識とされるものは、それが知識であることを行為によって証明されなければいけない。今日我々が知識とするものは行動のための情報、成果に焦点を合わせた情報である。 つまり、知識や、それを得る手段である「学び」を「机上の学問」にしてはいけない、という考えだ。
知識と行動を切り離して考えてはいけない。知識は行動と結びついている。知識を用いて実際に行動し、そこ行動の成果を見ることで、その知識が有益であることを確認していかなければいけない。
何を学問だと考えるのかには人によって色々な意見があるだろう。私は福沢諭吉やドラッカーに共感している。
この記事で私が「学びが大事」という時、その学びの対象はみなさんが日々の暮らしに使える知識だ。そして、使うことでみなさんの日々の暮らしに有益な効果が発生する知識だ。この知識が有益かどうかは、実際にみなさんが日々の暮らしに使い、成果を観察することで確認しなければならない。そう考えている。
ソフトウェアエンジニアの学び方
ソフトウェアエンジニアがプログラミング言語を学ぶ過程を具体的にみてみよう。
プログラミング言語を学ぶ過程では、実際にプログラムを書いてみて、動かしてみることがよく行われる。
これは科学の研究でよく使われる「仮説を立てて実験し、検証する」と同じだ。
「こういうプログラムを書いたらこう動くだろう」という気持ちがまずある。これが仮説。
その仮説を検証するために、実際にプログラムを書いてみて、それを実行する。これが実験。
プログラムの実行結果が期待した通りかどうかを観察する。これが検証。
学び=研究
例えば本を読んだり、実験データを眺めたりして、あなたは何かをわかったような気になったとしよう。
その「わかった」は事実か?
これは仮説に過ぎない。あなたが本当にわかっているのかどうか、検証しなければならない。
全米にある3,141の地域で、ある腎臓の病気の発症率を調べたところ、発症率が低い地域の大半は、中西部・南部・西部の農村部にあり、人口密度が低かった。
ここから何が言えるだろうか?
例えば「都市部と農村部で食生活が違っていて、それがこの腎臓病に影響を与えているのではないか」と考えたとしよう。これが仮説だ。
この仮説はどうすれば検証できるだろうか。
この仮説が正しいかどうかを検証するためには何を観察する必要があるか、を考える。
「都市部と農村部の食生活の違いが腎臓病の原因」という解釈がもし正しいとするなら、都市部での発症率は高いはずだ。
ならば実際に発症率が高いかどうかを確認しよう。
このケースでは、都市部の発症率は高くない。発症率が低い地域の大部分が農村部だが、発症率が高い地域の大部分も農村部だった。つまり、仮説は正しくなかったことがわかる。
このように仮説が実験によって否定された時が、学びのチャンスだ。「わかったつもり」で誤った解釈を持っている状態から抜け出し、一歩前進するチャンスだ。
何が起きているのかというと、農村部のサンプルサイズが小さいことによって、発症率の分散が大きくなっている、という現象だ。
★「学び=研究」の、就活や非エンジニアリング仕事での例
この例は、この記事の中で完結させるために、コンパクトにまとまったものを選んだ。
読者のみなさんの中には実験科学系の大学で教育を受けた人も多いだろう。
仮説を検証するために、仮説を検証するための実験を計画し、実験を行なって、その結果を観察する、という体験をしたことだろう。
そのプロセスは大学や研究室の中だけで行われているのではない。
この記事の冒頭で解説したように、「学びが大事」の、その「学び」の対象は、みなさんが日々の暮らしに使える知識だ。みなさんの日々の暮らしの中にも、仮説と検証によって改善していける知識がある。それを自分で発見し、実験し、理解を改善していくことが大事だ。その知識は、みなさん日々の暮らしに有益な効果を発生させる。そして、知識が有益かどうかは、実際にみなさんが日々の暮らしに使い、成果を観察することで確認していく。そういうプロセスが日常の中にある。
今回、実験によって仮説を検証していく学び方について解説した。もしあなたが「学びとは教科書を読んでその内容を飲み込むことだ」と考えていたなら、「実験によって仮説を検証していく学び方がある」という知識を得たことになる。私はこの知識があなたの今後の暮らしに有益だと思っている。実際にそうなのかは、あなた自身が使うことによって検証していく必要がある。
この記事を書くにあたって、読者の中に就活中の学生さんがいるという話を聞いた。その学生さん向けにメッセージを書いて欲しいそうだ。私は今みなさんがやっているような就活をしていない。学生当時、技術系のイベントで発表をいくつかしていて、そのイベントの懇親会で「新しくこういう会社ができるのだが、受けてみないか」と誘われ、成果や発表の一覧をテキストファイルに書いてメールで送り、面接を受けて採用された。なので今時の就活というものに関しては、私よりみなさんの方が詳しいだろう。
そんな私ができることは、一つだけ。就活マニュアルだとか、就活支援サイトなどに「これが正しいです」と書かれている知識は、本当に正しいのか?それも仮説なのでは?という指摘だ。
採用の形や、何を評価するのかは、会社によってまちまちだ。マニュアルに従うことが、本当に正しいのだろうか。大勢の人が読んでいるマニュアルに従うことは、他の大勢の応募者と似た振る舞いをすることになり「採用されない大多数」の仲間入りをするだけではないだろうか。滅びにいたる門は大きく、その路は広く、これより入る者は多い。
今マニュアルに従って行動している人は「マニュアルが正しい」という仮説に基づいて、自分の行動で実験している状態だ。私は無責任に「マニュアルが正しくない」という仮説を提示した状態だ。みなさんが今後どうしていくのかは、みなさん自身の実験計画であり、みなさん自身が自分で考えて決めていく必要がある。そしてみなさん自身が今後の自分の行動で実験し、理解を深めていくのだ。
仮説、実験、検証、という流れを大ごとのように感じてしまう人も多いだろう。
特に、生物系の分野だと、一回の実験に大きな労力がかかることが多いので、大ごとだと考えがち。
むしろ逆だ。実験検証のサイクルをいかに小さくし、高速に回すかが重要だ。
この考え方はソフトウェア・エンジニアリングの分野では「リーン・スタートアップ」という本で紹介されて有名になった。この本はソフトウェアベンチャーの経営戦略に関する本だ。ソフトウェアベンチャーは、限られた資金を消費しながらソフトウェアを開発し、資金が尽きる前に収入を得なければ倒産してしまう。
ソフトウェアベンチャーは「こういうソフトウェアを作れば、売れるだろう」という仮説を持っている。この仮説が正しいと思い込み、資金の全部を使ってソフトウェアを開発すれば、仮説が間違っていた時には即倒産だ。「ソフトウェアを実際に開発して、それが売れるかどうかを見る」という実験は大きすぎるのだ。なので、どうすれば実験をもっと小さくできるかを考える。
例えばファイル共有サービスのDropboxは、実際にソフトウェアを開発する前に、そのソフトウェアを使うとどういうことができるかの紹介動画を作った。そしてその動画を使って見込み顧客を集めて、十分集まることを観測してから開発をした。
就活でも構図は同じだ。使える時間は限られている。なるべく少ない時間で実験し、自分の理解を改善していく必要がある。私は今の就活がどういうものかはよく知らないので、その方法を教えることはできない。例えば、自分自身で実験することは高コストなので、他人や先輩の実験結果を共有してもらうことがわかりやすい例かとは思う。
「会社に採用されるかどうか」の他に「その会社で自分が幸せになれるかどうか」も検証の必要な仮説だろう。入社してから何年か経って、転職する人もたくさんいる。ミスマッチが起きるとお互いにとって不幸なので、例えば「インターン」という形で、就職することよりも低コストな実験が行われている。
ここまでで、日常の中にも実験・検証のチャンスがあることを説明した。
しかし、実験・検証しやすいものと、しにくいものがある。
ソフトウェアは比較的実験・検証しやすい分野だ。
実験科学も、繰り返し実験がしやすく、実験結果に影響する環境要因をコントロールしやすい領域で主に発展してきた。
「自分がどの会社にマッチするのか」は繰り返し実験が困難だ。
このような分野に対して、事前に「科学的に正しい答え」を求めようとすると、現実的ではない実験コストがかかる。
なので、最終的には「正しいかどうかわからないまま行動すること」が避けられない。
Apple社の共同創業者であるスティーブ・ジョブズは、「Connecting Dots」というソフトウェア業界で有名な言葉を残した。
彼は大学をドロップアウトした。卒業を諦めたので、興味がある授業を取ろうと考えた。そこでカリグラフィー(欧米風の書道)の授業を取った。この知識が、彼がMacintoshを作る際に役に立った。
何が将来役にたつかは、事前に知ることができない。これを彼は「点を未来に向かってつなぐことはできない」と表現した。時が経ってから振り返って、過去に行ったことを繋げることしかできない。点を打たなければ、将来それが繋がることもない。なので将来にきっと繋がると信じて、行動するしかない。
・メッセージ(★学ぶことの重要性・再)
この記事では、みなさんに3つの知識をお伝えした。まず日々の暮らしに有益な知識を実験検証サイクルによって得ることが大事だということ。次に実験サイクルは小さく速く回すことが大事だということ。そして、それをやってもなお「正しい選択」が事前にわからない、そういう時には将来にきっと繋がると信じて行動しなければならないこと。
私は、この3つの知識がみなさんの今後の人生に有益な効果をもたらすと考えている。
この理解が正しいかどうかは仮説であり、実際にみなさんが実験し、理解を改善していく必要がある。
大人になっても学びは続く。ただし「先生がカリキュラムを決めてくれる」というサービスはなくなる。また、たとえ学ばなくても「期末テストの成績が悪くて追試」などの、短期的でわかりやすいデメリットは起こらない。しかし学ぶ人と学ばない人では、5年10年経った時に明確な差が生まれる。あなた自身が、あなたの限られた人生の時間を使って実験し、あなたの人生に有益な知識を獲得していかなければならない。
(★その他項目案
・ただ目の前の、上司から振ってくる仕事に追いまくられる状況でどう学ぶか
・就活をどう「研究」に変えるか
・自分に必要な「学び」をどう知るか
意思決定である、事後にしかわからない、しかも本人だけが 熱意
・何を学ぶか?
「自分経営戦略」のごくさわり、コアのコンセプトを少しだけ
卓越、連続スペシャリスト、ふたこぶ……
-----
大人になっても学びは続く
ただし「先生がカリキュラムを決めてくれる」というサービスはなくなる
学ばなくても「期末テストの成績が悪くて追試」などの、短期的でわかりやすいデメリットは起こらない
しかし5年10年経った時に明確な差が生まれる
ソフトウェアエンジニアの学び方
仮説を立てて実験し検証する
科学の研究では当たり前のように使われる手法
学び=研究
何かをわかったような気になる
例えば本を読んで
その「わかった」は事実か?
仮説に過ぎない
ならば実験によって検証する必要がある
仮説、実験、検証、という流れを大ごとのように感じてしまう
むしろ逆、いかに小さくするかが重要