著書:ソースコードで体感するネットワークの仕組み
昨年出版した「ソースコードで体感するネットワークの仕組み」はおかげさまで、かなりマニアックな技術書にもかかわらず、意外とたくさんの方に手にしていただけているようです。これだけソースコードだらけの本をたくさんの人が読んでくれていると考えると、まだまだ日本のIT技術者というかプログラマーはこの先も安心!?と嬉しい限りです。
ソフトウェア開発関連の仕事をしていても、仕様書を要求されることは多いのですが、基本仕様書はともかく、詳細仕様書など私としてはほとんど意味がないどころか、むしろ詳細仕様書のメンテナンスが大変なので、あとから仕様変更や機能追加のコストが高くなるだけと考えていました。ソフトウェアの外部仕様的な内容は大抵基本仕様書に記載されますが、それは意味があると思います。でも、ソースコードの説明に相当する詳細設計書はほとんどの場合、「ソースを見れば良いじゃない」だと思います。難しいアルゴリズムを使っている場合はソースを見ても理解できないこともありますが、そういうところだけ説明すれば良いですし、その説明も別になっているよりはソース中にコメントで書いてある方がありがたいことも多いものです。
ということで、私のプログラミング関連の著書は毎回ソースコードだらけで説明は本のおまけ程度、というものばかり。そのかわり、ソースコードは部分的な抜粋ではなく、全部を載せてそのままビルドすれば動く状態ということにこだわってきました。私自身が先達の文献などを参考にする際にソースコードが断片的で動かすだけでも結構苦労することもあったという経験から、絶対に簡単に動かせるソースコードを載せるように心がけてきました。
プログラミングは、ソースコードを眺めていたり、参考書を読んでいてもなかなか身につきません。自分でコーディングしてみて、動かしてみて、少しずつ変更して動きを見て体感してみるのが一番です。そのためにも、下手な説明より動かしてみることができるソースコードが大事だと私は思っています。
「ソースコードで体感するネットワークの仕組み」は「TCP/IPを自分で実現してみよう」という感じの内容なのですが、ネットワークプロトコルもなかなかRFCを眺めているだけでは理解できません。自分で実現してみると、「なぜこのフィールドが必要なのか」「処理するためには内部でどのような変数で管理しておけば良いのか」などが良くわかります。
私自身、C言語の入門書がほとんどなかった時代にプログラミングを身につける際にやったことは、とにかく試行錯誤してみることでした。その後、リレーショナルDBを少し扱う必要があった際にも、自分でRDBサーバを作ってみてどんなものかを理解しました。ネットワークプログラミングをする際にもサーバ・クライアントを自作してみて身につけましたし、リンクレイヤーで様々な処理をする分野を得意分野にして行く際にもやっぱりやってみて身につけました。作って動かして直してみることが簡単にできることこそソフトウェアの特徴です。「案ずるより産むが易し」はまさにソフトウェアにぴったりの考え方なのです。
著書の書評などに「前提知識がないと理解できない」「初心者では動かすことすらできない」などと書かれていることがありますが、それをクリアーする過程が一番自分自身を成長させるチャンスです。やってみると自分ができないことが明確にわかります。それをクリアーできればその部分が理解できるわけですし、クリアーするために色々と調べることがとても良い勉強になるわけです。私だって最初から全部わかっていたわけではありませんし、実際は執筆を引き受けてから、書きながら自分がわかっていないことが明らかになり、調べて書き進めて行く感じなのです。それが自分を成長させてくれるわけです。
また、「こんなものはイマイチだ」と批評する人もいるようですが、本というのは仕様書とは異なり、正解を得るためのものではないと思うのです。「こういうやり方もあるのか」「これなら自分の方がもっと良いものを作れるぞ」と考えるきっかけになることでも本の価値はあるわけですし、私自身もそうですが、困っているときにはどんな情報でも、とくにソースコードなら、喉から手が出るほど欲しいものです。それをヒントに、もっと良いものを考えることに役立てれば良いわけです。本はどうしても分量や内容の制約があり、例えば製品のソースコードレベルのものをそのまま本にするのは現実的に無理なのです。やってみるためのヒントになれば本の役目は十分果たしていると私は思っています。もしこれから著書の執筆に挑戦しようという人はつまらない批評は気にしないで、世に出す勇気を持って欲しいと思います。世に出すことで役立ててくれる人がたくさんいるはずです。
おかげさまで、たくさんの人の手にとっていただけることで、私のところにも多少なりとも印税が回ってきます。身を削って書き上げた本でこうやって少しずつでも収入になることは嬉しい限りですが、せっかく手にとっていただけた人には、試行錯誤のきっかけになってくれて、業界でも非常に少ないネットワーク分野のプログラミングが好きな人が少しでも増えてくれればなによりの喜びです。
なお、出版した順番は逆でしたが、「ソースコードで体感するネットワークの仕組み」を読んでから「ルーター自作でわかるパケットの流れ」を読むとすんなり入っていけると思います。この両方がマスターできたと思う人は是非我が社で一緒に、日本のネットワークを支えるような仕事をしましょう!