たなかの読書記録

スタートアップで働く人間が、読んでよかったなぁと思う本を紹介していきます。

記録#3『アルゴリズム思考術』コンピュータに"考え方"を学ぶ

はじめに

新卒で入った会社では入社するまえに課題図書が配られ、コンサルタントとして働く上で必要な財務会計や英語に関する本の他に、『イシューからはじめよ』や『論点思考』『仮説思考』といった、仕事をする上で役立つ考え方についてのものもありました。

色んな分野でこの「仕事をするときの心構え・考え方」に関する本があると思いますが、それはどれも「その分野で実績を上げた/有名な人が、後進たちに向けて書く」というものです。

  • 「私はこうやったらうまくいった(から、他の人もやるべき)」
  • 「私にはこんな反省がある(皆さんは同じ過ちを繰り返さないように)」

上で紹介した『イシューからはじめよ』等、先人の知恵を濃縮して伝えてくれるこのような書籍はものすごく参考になります。それは、同じ人間である以上、同じような失敗をする可能性があり、同じような成功の経路を辿れる可能性があるからです。 

コンピュータの思考法を学ぶ

 しかし、私たちが学ぶ対象は「人」からだけでよいのでしょうか?もっと良く生きるために、学びの対象を広げることはできないのでしょうか?

 問題解決にもっぱら強い先生。そう、「コンピュータ」です。

 将棋や囲碁、チェスなんかの分野では、人間が到達できないほどの高みまで登ってしまったコンピュータ。彼らは物事をどう考えているのか(アルゴリズム*1、といいます)、それを知ることができるのが下の本です。

アルゴリズム思考術:問題解決の最強ツール

アルゴリズム思考術:問題解決の最強ツール

 

コンピュータの思考法を学ぶ

原題は"Algorithm to live by"、生きていくためのアルゴリズム

以下、"はじめに"から抜粋。

誰もが直面する問題もある。われわれの生が有限な空間と時間の中で営まれているという事実から、直接的に生じる問題だ。

一日のあいだに、あるいは10年のあいだに、何をすべきで何をしないでおくべきか。

どの程度の無秩序なら受け入れるべきで、どの程度の秩序なら過剰なのか。
最も充実した人生を送るには、未知の経験とお気に入りの経験とのあいだでどんな バランスをとるべきか。
Kindle版 位置: 121) 

 

仕事にしろ日々の生活にしろ、上のような決断に日々私たちはさらされています。

  • 目の前の仕事を今片付けるべき?それとも明日で良い?
  • 同僚と飲みに行く?家族のいる家にすぐ帰る?
  • キャリアはこれでいい?転職すべき?
  • 社内ルールとして統一すべき?それとも都度対応したほうがいい?
  • ランチは前行って美味しかったところに行くべき?新規を開拓?

この決断をもっと良いものにするために、コンピュータから学べることはないでしょうか?

 これらは人間だけの問題と思われるかもしれないが、じつはそうではない。 半世紀以上前から、コンピューター科学者はこうした日常のジレンマに相当する問題に取り組み、多くを解決してきた。

  • 負荷を最小限にして最短の時間でユーザーの要求すべてに応じるには、プロセッサーの「注意」 をどう配分すべきか。
  • 異なるタスクの切り替えはどんなタイミングで行なうべきで、 そもそもタスクはいくつ実行すべきか。
  • 限られたメモリー資源を活用するには、どんな方法がベストか。
  • データをさらに集めるべきか、それとも既存のデータだけを使って作業すべきか。
今日こそ行動すべきかと一日レベルでタイミングを見極めるのさえ人間には難しいが、われわれを取り巻くコンピューターはミリ秒レベルでやすやすと判断を下している。コンピューターが判断を下す際の方法から、われわれが学べることはたくさんある。Kindle版 位置: 125)

 

素晴らしい。 ぜひ参考にしたい。扱っているテーマは、

  • 最適停止問題:どのタイミングで決断を下すか
  • 探索と活用:いつまであたらしい選択肢を探し続けるのか
  • ソート・並び替え:どれくらいの手間をかけて、何の順序で並べるか
  • キャッシュ:どの記憶を頭に残し、忘れるか
  • スケジューリング:何から手をつけるべきか。割り込みを許すか
  • ベイズの法則:手元の情報をもとに、未来をどう予測するか
  • 過適応:複雑さ・ノイズにどのくらい対応するか
  • 制約緩和:解けない問題を解けるようにするにはどうするか
  • ランダム性:全体ではなく一部を取り上げることで済ませられないか
  • ネットワーク:どのような頻度と量のコミュニケーションをとるか
  • ゲーム理論:他人に期待通りの動きをしてもらうためにどうするか

生きていくための考え方、という視点で言うと、特に前半の「最適停止問題」「探索と活用」「ソート」あたりはとても参考になると思います。

"やめどき"を考えよ

われわれは、合理的な意思決定とはすべての選択肢を徹底的に調べ上げて入念に比較したうえで最良の選択肢を選ぶことだと信じ込んでいる。

しかし実際には、時計(または心臓)が音を立てて動いているとき、意思決定(あるいは思考全般)のさまざまな側面のなかで、やめるタイミングほど重要なものはほとんどない。Kindle版 位置: 753)

若いときには探索を、年を取ったら活用を

決定を下すときにいつもそれが最後の決定であるかのように考えるなら、確かに活用だけが意味をなす。

しかし一生のあいだにはたくさんの決定を下すはずだ。それらの決定に関して、とりわけ人生の序盤には、探索 ──最良のものよりも新しいもの、安全なものよりおもしろいもの、熟慮されたものよりもランダム なもの── を重視するほうがじつは合理的ではないか。Kindle版 位置: 1,408)

合理性をどう考えるか 

人はほぼ絶え間なく、コンピューター科学で困難なケースと見なされる状況に向きあっている。

このようなときに有効なアルゴリズムがあれば、推測を行ない、より単純な解決策を優先し、エラーのコストと遅延のコストのトレードオフを行ない、賭けに出ることができる。

これらは合理的なやり方が使えないときの妥協策ではない。まさに合理的なやり方なのだ。(Kindle版 位置: 6,680)

おわりに

この本の中で紹介されている問題、アルゴリズムによる解決方法は、これまでコンピュータサイエンティストが全力で取り組んできたものです。その意味では、アルゴリズムから学ぶことも、最初に紹介したような人から学ぶ構造と同じでしょう。

ただし、問題解決について学びたいのであれば、中途半端なプロフェッショナルのスキル本を読むよりも、コンピュータがどう考えているかから学ぶほうがよっぽど良いと思います。コンピュータは問題解決のプロフェッショナルです。その中に組み込まれたアルゴリズムには、何千何万という優れたコンピュータサイエンティストの叡智が詰まっているはずですから。 

*1:数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。Wikipediaより)