難しいと感じる技術本を読む時に自分がやっていること

# 難しいと感じる技術本の読み方

僕は完全に未経験からプログラマになったので、技術本を読む時に難しいなあと思うことが多々あった。
しかし、それらの難しい本を読み込んでレベルアップしたかったので、なんとか読み進めてきた。（挫折もあったが...）
そんな中で試行錯誤しながら、初めて読んだ時には難しくて読み進められるのだろうかと思った本を読み進めるためのノウハウを確立しつつあるのでここに記したい。

## 注意
これから記す術は、いきなり難しい本が突然読めるようになる銀の弾丸ではない。
また、今から記すことはある意味当たり前のことばかりかもしれないし、賛否両論あるかもしれない。

## 方法論編

### その本を読むための前提知識を獲得するための本を読む
ある技術本を読んだ時に、ある概念が説明されていたとする。それもかなり丁寧にだ。それでも、その説明が理解できない場合がある。それはおそらく、その説明を読んで理解するための下地となる知識を理解していないからだろう。このような場合は、その技術本を一旦閉じ、下地となるための、より基礎的な知識を説明している技術本を読むのが賢明だと思う。

ここで、具体的な例をあげる。
症状:「 デザインパターンの本を読んでも、あんまり理解できない」
症状が起きた原因の仮説:
これはおそらく、デザインパターンの下地となるオブジェクト指向を理解していないためだと思われる。
デザインパターンの勉強をしていく中で、オブジェクト指向の理解を深めていくというのはもちろんあると思うが、それでもある程度のオブジェクト指向の理解がないと、やはりデザインパターンの勉強をするのは難しいと思われる。よって、デザインパターンの勉強を急ぐのではなく、まずはオブジェクト指向についての本を今一度手に取ってみるのが良いと思われる。それでも難しい時は、Java(オブジェクト指向をJavaで学ぶ場合は)の基礎的な本を今一度手に取ってみるのが良いと思う。

参考にさせていただいたサイト
http://type.jp/et/feature/216

###  繰り返し読む
難しい本を1回読んだだけで理解するのは難しい。ましてやそれを実践で使うことはかなり困難だ。では、どうすれば良いか。答えは単純だ。理解するまで読めば良い。僕の経験上だが、1回目読んだ時と5回目に読んだ時には、その文章に対する印象や考察はかなり違う。
また、全体を読んだ後に、もう一度読み返すのは、全体像に一度触れているので、理解しやすくなっているはずだ。繰り返し読むことの重要性は、様々な書籍やネット上で主張されていることだが、本当にそう思う。

参考にさせていただいたサイト
http://president.jp/articles/-/11963

### 毎日ちょっとずつ読む
これは、すぐに学ぶ必要がある技術を学習する時よりも、即効性はないけど、基礎力をあげるために読む本に有効だと思う。難しい本を読むにはそれなりにエネルギーが必要だ。一気にこれをやろうとするとしんどい時もあるだろう。ならば、毎日10ページずつとか、毎日30分だけなどを決めて、ちょっとずつ読めば良いと思う。そうしているうちに理解が深まってきて、毎日読む量を増やしていくこともできるようになる。

### 難しくない本と並列で読む
これは賛否両論あるかもしれないが、同時に数冊読む。そして、それは自分にとって難しいと思う本とそんなに難しくないと思う本の組み合わせにする。これは、別に全く違うような内容の技術本であっても良いし、関連性がある本でも良いと思う。こうすることで、気分の切り替えにもなる。また、難しい本ばかり読んでいると、理解に時間がかかることが多く「自分はなんてアホなんだろう」と落ち込むこともあるかも知れない。自分にとってそんなに難しくないと思う本も読むことで、「この技術本を読みこなせている俺ってなんて、天才なんだろう」と自己肯定感や自信を持つことができる。詳しくは後述するが、難しい技術本を読むにあたって、自分に酔うことは非常に重要なことであると僕は考えている。

### 部分部分でインターネットや違う本を使う
ある概念や技術を理解するのが難しいと感じたら、思い切ってその部分については、インターネットや違う本を参照することも手である。ネット上には、図や動画を使って噛み砕いて説明してくれているものもあるし、簡単な言葉で説明してくれているものも存在するので、それらを理解の助けに使うのは有効だと思う。ただ、注意したいのは、簡単だからだと言って、難しい技術本を捨てて簡単な方に逃げてしまうことだ。インターネットや別の簡単な本は、あくまでも補助的に使用し、網羅的に学ぶのは当初読み進めようと考えていた本で行う方が良いと思う。

### 一人でプレゼンごっこする
「誰かに教えると思って学習する」というのは、良く聞く良い学習方法だが、僕は部屋で歩きながら小声で一人でプレゼンごっこをすることがある。(注意! 周りに他人がいる場合、やばいやつだと思われかねないので、他人がいない部屋で行うことをおすすめる)
理由は、2つある。
1つ目は、「誰かに教えると思って学習する」というのと同じ理由だが、プレゼンごっこというのは自分がちゃんと理解していないとできないので、より深く理解しようとするようになるからだ。
2つ目は、モチベーションが上がるからだ。詳しくは後述するが、自分に酔うことができる。（そろそろしつこいと思われそう…）自分をスティーブジョブズやマークザッカーバーグだと想像し、歩きながら、身振り手振りを加えて行うとより効果的だ。

## 精神論編
### 新しいことを知ることは楽しいこと、さらにエンジニアとしてレベルアップできるという考え
難しいと思うことは大抵、新しいことを学ぶからだ。新しい技術や概念に触れるということは、今まで知らなかったことを知ることができるわけで、それは楽しいことだ。
さらに、新しいことを学ぶということは、それだけ自分の知見が広がり、エンジニアとしての武器が増えるわけだ。
エンジニアとしての武器が増えれば、できることが増えるし、やりたいことを実現しやすくなるはずだ。
これはなんて素晴らしいことだろう。

### 自分に酔う
これはアホだと思われることかもしれないが、非常に大切なことだと僕は考えている。「こんなに難しい本を読んでいるなんて、自分はなんて天才なんだ」と悦に浸ることで、モチベーションを奮い立たせることができ、難しいと思う本でも折れずに済む。余談だが、僕はこれを多用している。


## まとめ
いろいろ書いてきたが、挫折することもあるし、ベテランエンジニアからしたら、僕が難しいと感じている技術本も、簡単だと思うかもしれない。難しい技術本を読みこなせれば、生涯の財産になると思うので、頑張ろうと。

## 参考にさせていただいたサイト
http://president.jp/articles/-/11963
http://type.jp/et/feature/216

※ ブログでも同一記事を投稿している
 [難しいと感じる技術本を読む時に自分がやっていること](http://www.sekky0905.com/entry/2017/05/21/%E8%87%AA%E5%88%86%E3%81%8C%E9%9B%A3%E3%81%97%E3%81%84%E3%81%A8%E6%84%9F%E3%81%98%E3%82%8B%E6%8A%80%E8%A1%93%E6%9C%AC%E3%82%92%E8%AA%AD%E3%82%80%E6%99%82%E3%81%AB%E3%82%84%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B "難しいと感じる技術本を読む時に自分がやっていること")