連載
» 2007年12月26日 03時51分 UPDATE

まつもとゆきひろのハッカーズライフ:第10回 ソースを読もう (1/2)

ハッカー能力を高めるのに優れた方法は、実際にコードを書くことと、ほかの人が書いた優れたソースコードを読むことです。今回は、わたしの過去の経験からソースコード読解の秘訣を考えてみます。

[Yukihiro“Matz”Matsumoto,ITmedia]

ハッカー能力を向上させる方法

 『Code Reading*』という書籍があります。わたしが監訳をしているから言うわけではないのですが、結構良い本です。今回の「ハッカーズライフ」は、この本を読んだ人には当たり前のことかもしれません。

 ハッカーとしての能力を身に着けるのに優れた方法は、実際にコードを書くことと、ほかの人の書いた優れたソースコードを読むことだと思います。特にコードを読むことは普段あまり強調されませんが、他人のソースコードはいろんな意味で知恵と知識の源です。考えてみれば、わたし自身も他人のソースコードをたくさん読んで学んだように思います。

 「コードを読むのは勉強になる」ということで、世の中には「Linuxカーネル読書会」と称して、Linuxカーネルのソースをmain関数から読み進めていく会合もあるようです。一度出席してみたい気もしますが、わたし自身はそのような読み方でモチベーションが維持できそうもありません。何ていうのかな、相手が巨大すぎるというか。ソースコードは小説のような読み物ではないので、漠然と読んでいくことはなかなかできないものです。

ソースコード読解の秘訣

 わたしが過去にどのようなソースコードの読み方をしてきたのかを振り返ってみると、プログラミング能力の向上を目指したコードの読み方のヒントがあるかもしれません。

 まず1つは、「全体を読もうとしない」ことです。ソースコードには「物語」はないので、全体を通して読む必要はありません。面白そうなところをつまみ食いして、先人の知恵を学べばそれで十分です。

 もう1つは、「目的を持って読む」ことです。何かを学ぼうと思ってソースコードを読めば、効果的に読解して知識を得ることができます。例えば*、「再帰下降構文解析の実装法を学ぶ」とか、「この処理系がどのようにガーベジコレクションを実装しているか」とか、「なぜこの処理系はこんなに高速に動作するのか」とかです。プログラミングの教科書にあるコードは非常に小規模なものが多く、枠組みを理解することはできますが、実用的なプログラムでどのような問題が発生するか、あるいはそれらの問題にどう対処するかについては、あまり教えてくれません。実際に動いているプログラムは、そのような「教科書が教えてくれない話」の宝庫なのです。

 目的を持って読むといえば、自分のプログラムに取り込むためにソースコードを読むのも1つの重要な目的です。幸いなことに現代ではオープンソース、言い換えればライセンス的に自由なソフトウェアのソースコードがたくさん手に入ります。自分が十分に理解していない領域のコードでも、ほかの人が苦労して作ってくれたソースコードを参考にして問題解決できることは多いはずです。

 わたしが体験した例では、pom(phase of the moon)というプログラムがあります。pomは月の満ち欠け(月齢)を表示するプログラムです。昨年、末の娘が生まれたとき、空に見事な満月がかかっているのに感動して、ほかの人の生まれた日の月齢が知りたくなりました。で、pomを使おうと思ったのですが、あいにくエポック(1970年1月1日)以前には対応していません。そこで、BSDライセンスのpomのソースコードを入手し、Cのソースコードをほぼ逐語的にRubyに書き換えました。日付ライブラリがエポック以前に対応しているRubyでは、そのままエポック以前の日付にも対応したpom*が完成したわけです。

 ただし、ライセンス的に自由なソフトウェアといっても、何をするのも完全に自由なもの*はそれほどありません。ほかの人が作ったソースコードを取り込む際は、それぞれのライセンスを尊重しましょう。特にGPLは「ソフトウェアの自由」を保証するため、幾つかの制約*が加えられています。何らかの理由から制約があるのですから、無視してはいけません。

このページで出てきた専門用語

Code Reading

Diomidis Spinellis著、まつもとゆきひろ/平林俊一/鵜飼文敏監訳、トップスタジオ訳、『Code Reading―オープンソースから学ぶソフトウェア開発技法』、毎日コミュニケーションズ発行、ISBN4-8399-1265-3

例えば

「例えば」と書いているが、どれもわたしが実際に目的としたものばかりである。すぐに思いつく範囲内で読んだソースコードが言語処理系ばかりというのも、さすが「言語おたく」というか何というか。

エポック以前の日付にも対応したpom

ソースコードはこちらのURL

何をするのも完全に自由なもの

著作権が存在しない、いわゆるパブリックドメインに該当するものは、まさに「何をするのも完全に自由」。メジャーなソフトウェアで明示的にパブリックドメインなものは、SQLiteくらいではないだろうか。

幾つかの制約

自由のために制約が導入されるというのも皮肉なものであるが、そのような制約がなければソフトウェアの自由が奪われてしまうというのがFSFの考えであり、それには一理あるとわたしも思う。


       1|2 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

Loading

ピックアップコンテンツ

- PR -

注目のテーマ