【書評】プログラマの考え方がおもしろいほど身につく本

今後も定期的に何度も読みなおす本だろう。
私のようにプログラミングを独学で学ぶ人は、プログラミング言語の基本(関数やデータ型)についての知識を得ることは比較的容易でも、それらをどのように組み合わせて自分が望む処理を実現させればいいのかを学ぶことは難しい。プログラミング上級者が薦めるように、優秀なプログラマのコードをたくさん読むことも勉強法としては正しいのだと思うのだけれど、高次元の配列やポインタの絶妙な使用法をそういったところから初心者が読み取るのはかなり無理がある。初心者が本当の意味でプログラムを書けるようになるためのファーストステップが必要だったのであり、この本がまさにそれだと感じた。



この本のコードはC++をもとに書かれていて、配列、ポインタ、再帰を用いた基本的な問題解決手法を順を追って学ぶことができる。実は私はこの本を読むまでC++を避けてきたのだが、読み進めながらC++も勉強した。出てくる操作自体は単純なものなので、それでも十分にこの本を活用できる。


この本のユニークなところは、プログラミングそれ自体だけではなく、むしろ問題解決手法に焦点を当てているところではないかと思う。例えば第一章ではコードは一切出てこず、古典的な問題(狐、ガチョウ、トウモロコシを川の向こう岸に渡す順番)やスライドパズルなどを題材に問題解決のテクニックや基本思考を学ぶ。問題を言い換えてみたり、小さな問題に分割してみたり。そして、その考え方をその後の全編を通してプログラミングに落としこんでいく。だからこそ小手先のテクニックではなく、プログラマの基本的な考え方を順を追って少しづつ身に付けることができる。



そして実際に考えていくコードの内容も実用性が感じられるものばかりである。どういったときに配列やポインタを使い、どのようにメモリを管理すべきかまできちんと解説している本は実はあまりないように思える。本書はプログラミング言語の基本を学び、これからきちんとプログラマとしての思考法を学びたいと考えている方は必読ともいえる本ではないかと感じた。特に独学の人はそういった考え方を学ぶ機会がなかなかないと思うので。