nekoTheShadow’s diary

IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)

浅井健一『プログラミングの基礎』(サイエンス社) を読んだ

世の中的に本書の評判がよく、とくにSICPの代わりになるらしいと聞いていて、SICP挫折組の自分としてはいつか取り組んでみたいなと思っていたのですが、先日、立川にある某巨大書店をぶらぶらしていると、コンピュータ関連書籍の片隅で本書を発見。衝動買いしてしまったので、休みや通勤時間を利用して一通り読んだ後、本書内の多数の演習問題を一通り回答しました。以下が自分の回答を格納したレポジトリです。

https://github.com/nekoTheShadow/basic-of-programming

ちなみに本書は学習の手段としてOcamlを採用しているのですが、自分の環境では環境構築が難しく、同じML系のF#を使って問題に解答しました。そのため、snake_case (OCaml) → CamelCase (F#) にしたり、F#固有の機能を使ったりしています。また本書ではいわゆるUnit Testの記述を書くことを強く推奨するのですが、上記のレポジトリではxUnit.netを使っており、テスト方法もかなりxUnit.net流にしています。自分は.Netに詳しくないのですが、どうもこのxUnit.netとF#の食い合わせはあんまりよくない、というかF#向きのUnit Test Frameworkがいろいろあるらしく、そういうのにしておけばよかったかなというのが反省点です。

さて本書ですが、Dijkstra法を用いてメトロネットワーク最短路問題を解くプログラムを作成しながら、プログラミングをするにあたって必要な概念、身に着けておいたほうがよい技法などを少しづつ学習していくという構成になっています。もともとが情報系の大学生のための教科書、それも入門的な立ち位置の講義のためのものだそうなので、とにかくプログラマとしての基礎を固めるにはもってこいというのが本書を通読しての感想でした。熟達したプログラマから見ると当たり前に思えるようなことばかりかもしれませんが、この当たり前のことを体系的にかつステップ・バイ・ステップに身に着けられる本はかなり貴重です。お金になるようなフレームワークの知識が身につく、というたぐいのものではありませんが、アプリケーションを作る際に必要な普遍的な力や考え方が身につき、自分の基礎や血肉になった感じは受けます。

ただ、これまで関数型言語に触れたことがないという人は少し苦労するかもしれません。自分だけかもしれませんが、関数型言語を使う場合、頭を関数型言語脳に切り替えないといけないんですよね。自分は過去にSchemeに取り組んでいたこともあり、純粋な関数型言語には慣れていたので、何とかなったのですが、関数型言語ってなんぞというレベルだと、最初は苦労しそうです。もっとも本書を関数型言語の入門書に使うのもありかもしれません。