nekoTheShadow’s diary

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

『プログラミング文体練習』を読んだ。

honto.jp

X(旧Twitter)1のタイムラインで話題になっていたのと、宣伝されていた本書のコンセプトにびびびと来たので、買って読んでみました。

本書のコンセプトは「『高慢と偏見』を読み込んで、単語の出現回数をカウントし、多いものから25個出力する」という課題を40個のスタイルで実装するというもの。紹介されるスタイルはアセンブラやForthを模した古き良き時代のものから、オブジェクト指向・並行処理・関数型プログラミングなど現代では一般的になったもの、そして最後にはニューラルネットワークまで、かなり広範囲にわたっており、これをPython3で実装しています。

1スタイル=1章という構成で、1章ごとにサンプルコードとその解説、そのスタイルの歴史的・論文的な背景説明があり、あわせて各章ごとに2-3の演習問題がついてきます。そのため、316ページとこの手の本にしてはボリュームが少ないように見えますが、まじめにやりこむとかなり時間はかかります。

ちなみに自分は全章読んで、ニューラルネットワークを扱う最後の6章以外については、演習問題をすべて解きました2。こういう本を読むとき、自分はたいていサンプルコードの写経をするのですが、今回はすべての章に「別言語でサンプルコードと同じものを実装してみましょう」という演習問題があったので、これを解くことで実質的に写経できていると判断しました。また、ほかの演習問題もサンプルコードの写経前提だったということもあります。だれの参考になるかわかりませんが、自分の回答を格納したレポジトリのURLをはりつけておきますね。

github.com

そのスタイルが与えた影響や歴史的背景が章ごとにまとめられているのですが、個人的にはここが一番面白かったと思います。知らなかった知識を身に着けるという行為それ自体楽しいことですが、背景知識があると、スタイルの学習がより深まるような気がします。

また、紹介されるスタイルは古いものやお仕事上あまりなじみのないものもあり、このあたりは単純に勉強になりました。現代的なプログラミングをするにしても、過去のスタイルを知っておくことは、とても大事なことです。知らなければ先人の苦労や失敗をもう一度繰り返す可能性があります。あるいは、自分の知りうるスタイルの選択肢を増やすということは、システム特性に合わせたスタイルが選択できるようになり、より品質の高いシステムの構築ができるようになるかもしれません。

もっとも、何か目新しい技術が身について、お給料UPに即つながるというタイプの本ではないです。また、プログラミングを通して何かものを作ることが好きな人にとっては、同じ課題の繰り返しのため、読んでいて苦しいかもしれません。プログラミングという行為そのものが好きな人向けですね。自分はそういうタイプだったので、あまり苦も無く、本書に取り組めました。アーキテクトやリードプログラマと呼ばれるような人が自分の設計スキルを底上げする、抜けていた知識を補完するには良い本かと思います。あとPythonの学習としてはコスパが悪そうなので、Pythonをまじめに勉強したい人はそれ用の本を読みましょう。


  1. この言い方したかっただけ
  2. ニューラルネットワークに興味がなさ過ぎてスキップしました…