読書というものは、こちらが頭を空にしていれば、向こうでそれを充たしてくれるというものではない。
読書も亦(また)実人生の経験と同じく真実な経験である。[1]

読書術が学習を加速する

技術書、読んでますか?

近頃はネット上の情報が増えたとはいえ、
やっぱり技術書は欠かせませんね。

とはいえ、読むべき本も山積。なかなか手がつけられない。
こんな方も多いのではないでしょうか。

今日は読書を一つのスキルとして捉え
そのスキル向上のためのノウハウを紹介したいと思います。

以下の三部構成からなっていますが、どうぞつまみ食いしてください。

  1. 準備編「書物道具論」
  2. 実践編「つまみ食い読書術」
  3. 応用編「インデックス読書術」

本エントリはリブセンスアドベントカレンダー2017 テーマ「学」 の9日目です。

準備編「書物道具論」

はじめは3つの心構えについて。

まずは

  • 本は頭から終わりに向けて順番に読む
  • 本に書いてある内容を憶える
  • すべての内容をしっかり理解する

という考えを捨てましょう

本を通読する必要はない

本というのは、あくまでパッケージです。
そこにはコンテンツが複数詰まっていて、
そのすべてが役に立つとは限りません。

たとえば、Rubyのリファレンスを考えてみましょう。
これ、なかなか通読しませんよね。
ま、学び始めに構文などはざっと通すかもしれませんが、
マイナーなビルトインライブラリまでは精読しない。
必要になったらときに、必要なものを引く。それで十分です。

なのに、なぜか私たちは「本」となると、頭から生真面目に読みがち。
もっと自由になりましょう。

本は、あなたの外部ストレージです。

必要なのは

  • その本に何が書いてあるか、なんとなく把握している
  • 必要なときに本を引いて調べられる

ということです。

本を暗記する必要はない

同様に、本を丸暗記する必要もまったくありません。
もちろん何も残らないのはさびしいですが、
すべて暗記しようなんて、そもそも無理ってものです。

ショーペンハウアーですら

読んだものをすべて覚えておきたがるのは、
食べたものをみな身体にとどめておきたがるようなものだ。[2]

と言っているのですからね。

本はあなたの外部ストレージである、と言いました。
ちょっと通信時間はかかりますけどね、
必要なときに引っ張れればいい

さしずめ、記憶はオンメモリ、自宅や職場の本はハードディスク、
図書館や書店はクラウドストレージ、といった具合でしょうか。

ページ置換アルゴリズムのようなもので、
アクセス頻度に応じて、置く場所を変えていけばいいわけですね。

本を理解する必要はない

ええ、理解しないってどういうこと?と思われるかもしれません。
もちろん、ちんぷんかんぷんじゃ困りますけどね。
徹頭徹尾、理解できる必要はない。

読書というのはね、そもそもがマゾヒスティックなんです。
だから、「参った」とか「空振り三振」するのも、とても大事なことです。
わかったふりをして読むよりも、完封されたり脱帽したりするのが、
まわりまわって読書力をつけていくことになる。[3]

私たちは「理解できる本」を求めがちですね。
わかりやすい、理解できる、スイスイ読める。
でも、それじゃ力がつきません。
たまには理解できない本をこそ読みたい

私にとってはGoFやSICPがそうでした。
いやあ、お恥ずかしながら初見ではまったく太刀打ちできませんでした。

時間をかけ、仲間を見つけ、徐々に読み進めていきました。
それこそが成長ってもの。
そういう本こそが、私たちの能力を拡張していきますね。

マーシャル・マクルーハンはこう言っていました。

トンカチは腕の拡張であり、望遠鏡は眼の拡張、
メガホンは声帯の拡張であり、車は足の拡張ということになる。[4]

技術書も同じですね。
それは私たちの脳を拡張し、技術力を拡張する。

あらゆるメディアは人間のなんらかの心的ないし身体的な能力の拡張である。[4]

だから、本を本と思わない方がいい。

一冊の本には対象もなければ主題もない。(…)
本を何かある主題に帰属させるということはたちどころに、
さまざまな素材の働きを、そしてそれら素材間の関係の外部性を
ないがしろにすることになる。[5]

そう、それは対象ではなく道具なんです。
完成されたソフトウェアではなく、一つのライブラリです。
publicメソッドの集合であり、そうしたクラスのパッケージです。
それと自分をどうリンクさせていくか。そのビルドこそが読書なんです。

本と気軽に付き合おう

最後に心構えについて、もう二人だけ引用しておきましょう。

プラグマティズムと混同される危険を承知の上で言えば、
本ってのも結局は道具箱として自由に使うために読むものなんだと思う。[6]

こうしたラフな付き合い方を身に着けたいですね。

実践編「つまみ食い読書術」

それでは実践に入っていきましょう。

読む手続き

基本的な流れは

  1. 目次を熟読する
  2. 気になったところから読む
  3. 飽きたら他の気になったところを読む

です。つまみ食いです。

だいたい本に書いてあることの十割が役に立つわけがありません。
すべての本を、辞書やリファレンスのように扱ってください。
必要な知識は、常に書籍の中のほんの一部です。
(そもそも全部読んだって全部が憶えられるわけではないのです)

興味ない所は遠慮なくすっ飛ばしましょう。
ただ目次から「なんとなくこんなことが書いてある」ということだけ把握してください。
それが乱読や再読のトリガーとなります。

目次読書について松岡正剛はこう書いています。

これはぼくが「目次読書法」と名付けているものですが、
目次を見て、ごくごくおおざっぱでいいから、
その本の内容を想像するというのが大事なんですね。
わずか三分程度のちょっとしたガマンだから、誰でもできる。
そうしておいて、やおらパラパラとやる。
そうすると、目次に出ていたキーワードから想像したことと、
その本の言葉の並びぐあいとの相違が、たちまち見えてきます。(…)
この三分間目次読書によって、自分と本とのあいだに
柔らかい感触構造のようなものが立ち上がる。
あるいは、柔らかい「知のマップ」のようなものが、ちょっとだけではあっても立ち上がる。
それを浮かび上がらせたうえで、いよいよ読んでいく。これだけでも読書は楽しいですよ。[3]

わからない単語の例外対応

読書意欲を減衰させる主要因の一つが、わからない単語です。
特に技術書は山のように謎の単語が出てきます。
構造的部分型、パトリシアトライ、HMAC、バックプレッシャー……。
私はマーク・アンドスイープとマーク・アンドリーセンの違いが未だにわかりません。
これについては二つ指針があります。

  1. わからない単語はその場で調べるか、メモしておきましょう
  2. わからない単語が多すぎる本は、まだ読むのをやめましょう

一番いけないのは、わからないままに読み進めることです。
これはだいたい失敗します。
謎が徐々に大きくなって、最後は紙面の上を視線がスベるようになるだけです。

読めないということも、また財産です。
読みたいという気持ちが、また学習に向かうでしょう。
大事なのは読んだふりをしないこと。

単語を調べるのに一番よい方法は、他の本を参考にすることです。
本の中にはいくつか教科書的なものがありますので、
それを辞書のように引きましょう。

もちろんGoogleのお世話になるシーンもあると思いますが、このときは

  • Wikipediaのような、わかりやすさより正確性を重視したサイトを使わない
  • 脱線しない

の二つにだけ注意しましょう。

教科書と参考書の読み分け

本にもウェブにも教科書的なものと、参考書的なものがあります。

  • 教科書は定義が書かれていますが、参考書は理解するための道筋が書かれています
  • 教科書は正確性を重視しますが、参考書はわかりやすさを重視します
  • 教科書は網羅的に書かれていますが、参考書は濃淡つけて解説しています

たとえば技術書でいうと

教科書的なもの

  • 『オブジェクト指向における再利用のためのデザインパターン』
  • 技術評論社『パーフェクト◯◯』シリーズ
  • 『JavaScript』『プログラミング言語 Ruby』
  • 『実践ハイパフォーマンスMySQL』
  • Wikipedia
  • 公式リファレンス

参考書的なもの

  • 『アジャイルソフトウェア開発の奥義』
  • 『リファクタリング』
  • オライリー『Head First ◯◯』シリーズ
  • Qiita
  • 公式チュートリアル

といった感じ。

もちろんゼロイチで区別できるものではないですが、これらを読み分けましょう。
ちなみに名著や古典と言われるものはたいてい教科書的ですので、
そこから読み始めるとプログラミング学習はたいてい失敗します。

応用編「インデックス読書術」

つまみ食い読書についてはOKですか?
それでは最後に、応用編です。

一つの分野の学び方

ある特定の分野を学ぶということは、
その分野にまつわる地図を頭の中に構築するということです。

本ごとの索引が複数つながったものをイメージしてもらえばよいです。
それと脳が結合すれば、万事OKです。

たとえばデータベースであれば

  • 代表的な製品はどういうものか
  • データ型には何があって、どう使い分けるのか
  • インデックスはどういうシーンでどれを使うべきか
  • 行指向と列指向はどう異なるのか
  • トランザクションの構文は何か
  • トリガーをどう書くか

をいきなり知る必要はありません
最初は

  • 数値型や文字列型にも複数あるらしい
  • インデックスを貼るときは注意点があるらしい
  • 列指向というものがあるらしい
  • トランザクションは便利なだけじゃないらしい
  • トリガーなんてものがあるらしい

ということを知っていれば十分です。

重要なのは、その存在を知ること、
言い換えれば、語彙を増やすということです。

まずは語彙を増やしましょう。
単語を調べましょう。

語彙を十分に蓄えていくためには、最低限の記憶が必要ですね。
このときのコツが二つあります。

1. 本は二度読む

まずひとつ目は二度読むということ。

「反芻は勉学の母である」。重要な本はどれもみな、続けて二度読むべきだ。
二度目になると、内容のつながりがいっそうよくわかるし、
結末がわかっていれば、出だしをいっそう正しく理解できるからだ[2]

はじめに読むときは、先が見えないので、頭もなかなか混乱しまうが、
二週目はある程度全体像が見えているため、内容が理解しやすくなります。

食事を口に運んでも、消化してはじめて栄養になるのと同じように、
本を読んでも、自分の血となり肉となることができるのは、
反芻し、じっくり考えたことだけだ[2]

本を読みながら、考える余裕も出てきますね。
こうした余裕は記憶や理解の助けにもなります。

2. アウトプットする

もう一つのルールはアウトプットすること。
アウトプットの形式はなんでも構いません。

  • 新しい知識を活かしたコードを書く
  • 内容を自分なりにまとめ直す
  • 既存の実装で使われている箇所を見つける
  • 友人とディスカッションする

などなど。

自己講義法による記憶読書術がある。
これは十分に理解できたものは忘れない、という法則を利用するもので、
読んだ本の内容を自分自身(他人でもよい)に講義してみる。
記憶がうすれている箇所は、理解があいまいだった箇所だ。
このトレーニングで思考力や知的透視力が身につくばかりか、
次の読書のときには注意ぶかい読解力が身についている。[7]

アウトプットによって学習効率が上がる理由はいくつかありますが、
もっとも大きなものは、アウトプットによって興味が駆動するからです。
はじめの方に、「気になったところだけ読め」と書いたように、
人間は気になっているもの、興味があるものの学習の方が得意です。

アウトプットは未知を作り出し、興味を駆動させる優れた方法なのです。

本と本をつなげて読む

ここまでできていれば、本のインデックスが
ある程度頭の中にできてきているはずです。

最後に、それらを独立させるのではなく、接続させましょう。

Aという本とBという本があるのではなく、
例えばクラス設計ならクラス設計という分野に
それらのインデックスをマージして格納していく。

こうして書くと難しそうですが、
分野を区切って複数の本を連続/並行して読めば、
自然とそうしたマップが頭の中にできていくはずです。

データベースならデータベースでテーマを決めて3、4冊を読む。
それらを目次読書し、横断してつまみ食いし、インデックス化する。

こうした読書をすることで、
分野にまつわる地図が頭の中にできていく。
これがインデックス読書術です。

おまけ:古典についての古諺

最後に古典についても触れておきましょう。
これについては池澤夏樹の記述が素晴らしいのでほぼ引用してしまいます。

古典というと、どこからか「読んだか?」という声が聞こえる。
詰問されているような気分になる。
例えば会食の場で古典が話題になったとしよう。
読んだ人たちはお互い得意そうに論じているから、
読んでいない自分は話についていけなくて肩身が狭い想いがする。
古典って、重機の運転免許か何かみたいな、特別の資格みたい。[8]

あるあるですね笑。

さて、そんな古典を読むべきなのかどうか。
答えはこうなっています。

はっきり言ってしまうと、古典を読むのは知的労力の投資だ。
最初はずっと持ち出し。苦労ばかりで楽しみはまだ遠い。
しかし、たいていの場合、この投資は実を結ぶ。
つまり、たくさんの人が試みてうまくいったと保証されたものが古典と呼ばれるのだ。
あなたの趣味が他の人たちとぜんぜん違うのでなければ、
最初の苦労を承知で手に取ってみるのは悪いことではない。
ただし、結果が出るのはすぐとは限らない。
つまらなくてダメだと思って放棄するのも読書の自由。
それが何年もたって、時には何十年もたって、ふっと読みかけのものを思い出して
再度挑戦すると今度はものすごく面白いということもある。
若いときに少しでもかじっておくと、後になって滋味がわかるようになる。[8]

と、いうことですね。
「少しでもかじっておく」というのがポイントでしょうか。
上述したように、私も挫折と挑戦を繰り返した本が何冊か。

でも、そうした経験がまた新たな未知へと、私を駆り立てているように思います。

さいごに

優れた技術書を体得することは、エンジニアのレベルに直結します。
つまり、読書術はエンジニアのレベルをあげるための
最上のチートコード
だということです。

よく一冊ずつ丁寧に読み進める人がいますが
(稀に本当にそういう読み方がハマる人もいますが)
たいていの人はただ遅く読んでいるだけです。

つまみ食い上等、読み飛ばし上等で、
何冊も何十冊も書物をカラダに通していきましょう。
いつしかそれは、あなたの手足となっているはずです。

参考文献

[1]小林秀雄『読書について』中央公論
[2]ショーペンハウアー『読書について』光文社
[3]松岡正剛『多読術』筑摩書房
[4]マーシャル・マクルーハン、クエンティン・フィオーレ『メディアはマッサージである』河出書房
[5]ジル・ドゥルーズ+フェリックス・ガタリ『千のプラトー』河出書房
[6]浅田彰『逃走論』筑摩書房
[7]花村太郎『知的トレーニングの技術』筑摩書房
[8]池澤夏樹『知の仕事術』集英社

まさにこのエントリこそが、インデックス読書術によって書かれたものでした。
どの本に何が書かれていたか。私は正確に憶えていたわけではありません。
でも「なんとなくこの本にはこんなことが書いてあったはず」という
ゆるやかなインデックスがあれば、こうして本を引きながら書くことができます。

プログラミングも同じです。
「なんかあの本に書いてあったような…」が思い出せればいいのです。

そうやって、自分の脳を拡張していきましょう。