2ヶ月かけてプログラミングの基礎という本を読みました。
この本を読んだきっかけ
この本は2013年くらいに @kis におすすめされた本でした。
購入日は2013/05/29
買ってすぐ読んだ記憶があるのですが、2章くらいまでで読むのをやめた気がします。
その後、数回本を開いた記憶があるのですが、どの場合も途中で読むのを止めていました。
で、2020年になってLeetCodeなどをやり始めたのですが、解法やアルゴリズムは理解できるがプログラムに落とし込めない(特に再帰が想像できない)という課題がでてきました。
問題に一対一対応させて覚えていくという力技よりは、もっと根本となるコードを書く能力を高めないと先がないなあと思って、色々本を読んでみました。
最初はSICPとかを眺めて見ましたが、理解が進まず挫折。。。
その後、SICPより読みやすくてなにかないかと探してみたところ、再度この本を取ることにしました。
きっかけもやっぱり @kis
(タイトルは若干あおり気味ですが、、、)
このブログを読んで改めてプログラミングの基礎を手にとりました。
読み進め方
今までなぜ読みきれなかったかを振り返ってみると、単に読んでいるだけだと何が問題なのか実感が得にくく、だんだんモチベーションが下がるという感じだった気がしました。
そこで、今回は下記を実践しました。
- 演習は全部やる
- 時間を決めてその時間を集中して手を動かしながら本を読む
今は夜に時間が取れないので、業務開始前 9:00〜10:00 を確保し、その間に手を動かしながらやっていきました。
それで、大体2ヶ月で読み切りました。
この本から学んだこと
課題に思っていたプログラムに落とし込めない問題(特に再帰)に関しては、自分が何がわかっていなかったかがわかるようになりました。
- 再帰的なデータ構造(型)を知り理解できた(気がする)
- 再帰的なデータ構造(型)とプログラムの構造が対応できることを理解できた(気がする)
- 構造に従わない再帰であっても、部分問題に分割すること、停止性を考えることでプログラムに落とし込みができるようになった
データ構造が重要なのはなんとなく思っていたのですが、この本を読むまではデータ構造をプログラムの構造に対応させる方法がわからなかったからだと気が付きました。
この本ではOCamlを使っていくのですが、パターンマッチの力をやっと理解できました。
この本の良かった点
- 日本語がわかりやすい
- 章の構成がよく、読み進めやすい
- 説明が丁寧で理解しやすい
- 単語の説明がすごく平易な表現になっていてわかりやすい(多相性 -> どのような型でもよい性質 などなど)
- 演習の答えが全て揃っている
次に
同じく @kis に勧められていたプログラミング言語の基礎概念を読みつつ、再度プログラムを書く練習をしていきます。
LeetCodeはOCamlサポートしてないけど、他の言語でトライしてみる予定です。
雑感
もっと早く読んでおけばよかったと思う反面、課題がないまま読んでもまた読むのを止めると思うのでこのタイミングでよかったんだろうと思っています。
自分はCSの勉強を大学でしてこなかったで、こういう本があると自力でCSの勉強をする取っ掛かりとしてはとてもいいのではないかなと思いました。