ゴールデンウィークを使って読み進めて、ようやく読み終わった。
タイトル通り、プログラミングの基礎を学んでいく。言語はOCaml。
リストや木構造などの簡単なデータ構造やアルゴリズムについても学んでいく。
Gitを使って内容をまとめながら読んだ。
赤黒木の挿入の説明がよく分からなかったのと、最後のヒープについては飽きてしまったので、やってない。
それ以外は一通りやった。
読もうと思ったキッカケとなったのは、この記事。
19: 読んでよかった技術書 – kdxu – Medium
憧れているプログラマが「プログラミングの作法の9割はこの本から学んだ」と言っていたので、興味を持った。
OCamlというのもいいなと思った。
プログラミングが上手くなるためには関数型言語をやるといいとどこかで読んだし、今は型の強い言語が人気だし。
JavaScriptに型を導入するためのライブラリであるFlowも、OCamlで出来ているし。
そんな訳で読んでみたのだが、非常に勉強になった。
実際に手を動かしていくのがいい。
ステップバイステップで作っていく。いま学んでいる機能やデータ構造をどのように使えばいいのか、どういう時に役に立つのかを示しながら進んでいくから、納得して進みやすい。
よりよいプログラムを書くための考え方や方法論である「デザインレシピ」もよかった。
最初は冗長に感じたが、この方法論に従って書いていくことで、再帰などの抽象度が高めの関数をスムーズに作れるようになる。
特に、再帰をスムーズに書けたのが嬉しかった。
再帰という概念はもちろん知っていたけど、なんとなく苦手意識があった。JavaScriptのmap
やfilter
も、再帰というより、配列を舐めていくだけという感じだし。
だが本書で、再帰に対する苦手意識がだいぶ和らいだ。
「自然数は再帰的なデータ構造と言える」といった話も面白かった。
JavaScript以外の言語をちゃんと触ったのはこれが初めてだが、いかにJavaScriptが自分の手に馴染んでいるか、悪く言えば手癖で書いているかを自覚した。
JavaScriptの場合、自分なりの勘が働く。なんとなく、こうしたほうがいいな、この書き方はまずいな、みたいなものを感じ取れる。その妥当さや精度はともかく、多少なりとも直観が働く。思考が自然に進んでいく、というのだろうか。
だがOCamlの場合、当然ながらそうは行かなかった。「えーと」という感じで意識的に順序立てて考える必要がある。それでもよく分からなかったりする。
単に言語の知識が足りないからというのもあるが、やっぱり慣れというのは重要だなと感じた。
OCamlは面白かったから、今後も勉強してみたいとは思う。
とはいえ、もう少し「実用性が高い(仕事で使いやすい)」言語を勉強したいから、そっちが優先になりそうではある。Go言語とか。
ずっとバックエンドを勉強したいと言っているのだから、そろそろ実践しないと……。