コードリーディングのための書体

プログラムを書くときには等幅フォントを使うのがいいと思いますが、読むときにはプロポーショナルフォントもありだと思います。実際、書体に注目しながらプログラミングに関する書籍を読むと、意外と頻繁にプロポーショナルフォントが使われていることがわかります。

プログラミング言語C++ (アスキーアジソンウェスレイシリーズ―Ascii Addison Wesley programming series) (単行本)(1) Stroustrup 『プログラミング言語C++』

C++のバイブル、Stroustrup 『プログラミング言語C++』第3版では、コード中の識別子はプロポーショナルフォントのイタリックで印刷されています。曰く、

固定ピッチフォントのコードを見慣れたプログラマには、この表記スタイルは最初は“不自然”に見えるかもしれない。しかし、一般に、テキストの提示方法として、プロポーショナルフォントは固定ピッチフォントよりも優れていると考えられている。プロポーショナルフォントを使えば、非論理的な改行の数も減る。私が試してみたところでも、しばらくすると、ほとんどの人々がこのスタイルの方が読みやすいと感じるようになった。(p.33)

これは読みやすいと思いますが、記号など、イタリックにはならない文字もあるのがやっかいです。何らかのツールが必要でしょう。たとえば、膨大な機能を誇るWordでも、特定の文字種を除外するのは面倒でしょう。安易に、すべてをセリフ・イタリックにしたりすると台無しです。

4797375957第4版では等幅フォントになりました。

文芸的プログラミング (ASCII SOFTWARE SCIENCE Programming Paradigm) (単行本)(2) Knuth 『文芸的プログラミング』

Knuth 『文芸的プログラミング』では、(2)のように書体が使われています。擬似コードを印刷するときによく用いられている方法ですが、実際のコードで使ってもいいと思います。

Knuthの本はタイポグラフィの勉強にもいいのですが、『文芸的プログラミング』にはこんな話も載っていました。

ある学生は、FindInNewWordsという名前を用いた。これは印刷するとあまりきれいでない。大文字は小文字の直後に並べるようにデザインしていない場合が多い。複合名詞を使用しないですますことはまず無理だから、WEBにはうまい解決法を用意してある。WEBでは、たとえばget_wordのように、短い下線で語をつなぐことができる。(p. 311)

WikiなどではfindInNewWordsのようないわゆるCamelCaseがよく用いられますが、印刷する可能性がある場合には、使わない方がいいかもしれません。(Knuthなりの対処法が『文芸的プログラミング』で紹介されています。)

C++の設計と進化 (単行本)(3) Stroustrup 『C++の設計と進化』

(1)でのStroustrupの試みが普及することを期待していたので、(1)の後に出た『C++の設計と進化』(日本語版)のコードが等幅フォントになってしまったのはちょっと残念でした(原著は確認していません)。等幅フォントは、プログラムの印刷に最もよく使われているのはフォントですが、必ずしも読みやすいとは言えません。(本の内容はすばらしいです。)

Programming: Principles and Practice Using C++ (ペーパーバック)(4) Stroustrup Programming: Principles and Practice Using C++

1000ページを超えるプログラミング入門書(形容矛盾?)であるProgrammingでは、プロポーショナルフォントが復活しました。これが現時点でのStroustrupの結論だと考えていいのでしょう。すべてサンセリフ(というかセリフ無しローマン)に統一するこの方法は、特別なツール無しで実践できていいと思います。

4798119598日本語版では等幅フォントです。

個人的には、ちょっと手間のかかる(2)が、authenticで好きです。