Win32/C++
マルチスレッド
プログラミング詳説

Aaron Cohen,Mike Woodring 著
金森 玲子 訳,鈴木 慎司 監訳
オライリー・ジャパン 発行
1999年3月
770ページ
7035円(税込)
コンパイラ I/II
原理・技法・ツール

Alfred V. Aho,Ravi Sethi,
Jeffrey D. Ullman 著
原田 賢一 訳
サイエンス社 発行
1990年10月
合計916ページ
5880円(I/II,税込)
コンパイラ
中田 育男 著
オーム社 発行
1995年6月
193ページ
3360円(税込)
文字コード「超」研究
深沢 千尋 著
ラトルズ 発行
2003年8月
614ページ
3129円(税込)
CJKV
日中韓越情報処理

Ken Lunde 著
小松 章,逆井 克己 訳
オライリー・ジャパン 発行
2002年12月
1128ページ
1万3440円(税込)
LHAとZIP
圧縮アルゴリズム×プログラミング入門

奥村 晴彦 監修・著,山崎 敏 著
ソフトバンク パブリッシング 発行
2003年12月
258ページ+CD-ROM
2940円(税込)
暗号技術入門
――秘密の国のアリス

結城 浩 著
ソフトバンク パブリッシング 発行
2003年9月
392ページ
3150円(税込)
暗号技術大全
Bruce Schneier 著
安達 眞弓ほか 訳
山形 浩生 監訳
ソフトバンク パブリッシング 発行
2003年6月
831ページ
7770円(税込)

様々な分野の知識を身に付ける

 OSやCPUに関する知識以外にも,開発するプログラムによっては様々な知識が必要になります。例えばネットワーク関連のプログラムを作るならソケットやプロトコルの知識が,画像フィルタを作るなら画像変換アルゴリズムについての知識が必要です。一般にこうした知識は,必要になった時点で勉強する,くらいに思っておけばいいでしょう。

 ただ,それとは別に,何年かプログラミングをしていれば必ず必要になる知識というものも存在します。例えば,文字コードや構文解析といった知識は,20年以上CやC++でプログラミングしてきた人なら必ずどこかで学んでいるはずです。以下ではこうした知識を身に付けるための本をいくつか紹介します。

 最初はマルチスレッド・プログラミングです。言葉は知っていても,初心者には手を出しにくいイメージがあるかもしれません。実際,マルチスレッド・プログラミング特有の,同期化などの面倒な問題があるのは事実です。しかし,それを上回って,プログラムの構造を単純かつ効率的にできるケースも数多く存在するのです。

 「Win32/C++マルチスレッド プログラミング詳説」は,こうしたマルチスレッドにまつわるトピックを整理してまとめた本です。スレッドの作成方法,ミューテックスやセマフォといった同期化オブジェクトの使い方,スレッド間通信の方法などの基本的な事項を解説するほか,DLLやGUI周りのプログラミングなど特定の局面で気を付けるべきことを詳細に説明しています。マルチスレッドを扱う機会は必ず来るはずなので,今のうちに基本を理解しておきましょう。

 次はコンパイラについてです。この記事を読んでいるのは,コンパイラを使うことにはもう慣れている人でしょう。しかし,その仕組みは? となると,かなりミステリアスに感じているのではないでしょうか。実際,コンパイラには様々な技術が投入されています。コンパイラ理論のバイブルともいうべきAlfred V. Ahoほか著「コンパイラ(2分冊)」が,(参考文献リストなどを除いても)合わせて1000ページ近いボリュームということからも,その膨大さに想像がつくでしょう。この本は,表紙に描かれた赤いドラゴンと,それに立ち向かう騎士の絵から,「レッド・ドラゴン・ブック」とも呼ばれ,大学の授業のテキストとしてもよく使われています。

 教科書ということからもわかるように,決して楽に読み進められる本ではありません。しかし,だからといって「コンパイラなんて関係ないよ」と簡単に投げ出してしまうべきではありません。コンパイラ開発に限らず,特定の形式のファイルから情報を読み取ったり,プロトコルに従ってデータを処理したり,スクリプト機能を組み込んだりと,字句解析や構文解析といったコンパイラの技術を利用できる局面は非常に多いのです。BNFに代表される文法定義の表記法,オートマトン,状態遷移の考え方も,中級以上のプログラマにとっては常識と言えるでしょう。

 それでも1000ページ近くも読むのはやはり辛いという人には,日本のコンパイラ研究の第一人者である中田 育男氏の「コンパイラ」を薦めておきます。本論部分はたったの150ページしかありませんが,字句解析/構文解析などの基本的な手法は一通り解説してあります。巻末にC言語による簡単なコンパイラ(PL/0の改良版)の全ソースコードを掲載している点も,細かい点を知りたい人には参考になるはずです。

 三つ目は文字コードに関する知識です。文字コードについて我々漢字圏の人間は,欧米人にはない苦労を強いられてきています。その主な原因は,データの基本単位である1バイトでは識別できない種類の文字を扱わなければならないこと,そして,文字を表すためのコード体系(エンコーディングも含む)が何種類もあることです。最近はUnicodeも普及しつつありますが,まだしばらくは苦労が続きそうです。

 そもそも文字コードにまつわる問題がよくわかっていない,シフトJISやEUC-JPと言われてもピンとこないという人は,まず『文字コード「超」研究』を読んでみてください。この本は,「テキスト・ファイルとは何か」というかなり初歩的なことから,各種日本語文字コードやエンコーディングの説明,Unicodeとの関係などをまとめています。基本的には入門者向けの本ですが,Windows XPがどう振る舞うかをPerlや様々なフリーソフトを使って実験している部分は上級者にとっても参考になるでしょう。

 一方,もっとプログラマ向けの詳細な情報がほしい,という人には,「CJKV 日中韓越情報処理」を挙げておきます。マルチバイト文字を使用している国には,日本以外に中国,台湾,韓国,ベトナムなどが挙げられますが,ソフトウエアの国際化に伴って,欧米もこうした東アジアの存在を無視できなくなっています。そうした欧米人の観点で,東アジアの情報を網羅したのがこの本です。中国語や韓国語は日本人にとっても外国語なので,読み方も入力の仕方もわからないという欧米人を対象としたこの情報は役に立つはずです。欲を言えば,Unicodeのハン・ユニフィケーションによる,重複するコード・ポイントの詳細にも触れてほしかったところです。

 四つ目はデータ圧縮技術です。ハードディスクなどの記憶装置が大容量になり,ネットワーク環境も高速化しているのに,今さら圧縮が必要なのかと思うかもしれません。しかし,こうした大容量化,高速化の上をいく勢いで,データの巨大化が進んでいる分野もあるのです。動画データなどがいい例でしょう。また携帯電話のように,転送速度や安定性が有線ネットワークを大きく下回る環境もあります。以前にも増して,データ圧縮が一般的かつ重要になってきているのです。

 そういうわけで,せめて一つくらいはメジャーなデータ圧縮アルゴリズムを知っておきたいものです。「LHAとZIP」は,日本を代表するアーカイバであるLHAと,世界中で広く使われているZIPの圧縮アルゴリズムの実装を中心に解説した本です。監修およびアルゴリズム編を執筆しているのは,LHAの圧縮アルゴリズムの開発者であり,現在三重大学教授の奥村晴彦氏。組版ソフトウエアTeX関連の書籍で有名な人でもあります。アルゴリズム編では,データ圧縮アルゴリズムの基礎をわかりやすく解説し,プログラム編では,実際のソースコードを詳細に解説しています。LHAもZIPもソースコードは公開されているものの,ソースコードだけで読み解くのは大変なので,こうした解説書は貴重と言えます。

 データ圧縮と並んで最近重要になってきているのが暗号です。これまた自分には縁のない話だと思うかもしれませんが,オンライン・ショッピングやネット・バンキングなど,ネットワークを経由した個人情報のやりとりが増加するになるに伴って,暗号が必要となるケースはますます増えています。プログラムでパスワードを扱うだけの場合でも,それを平文(暗号化しない状態)のまま保存するなどということは許されません。いざというときに慌てないためにも,暗号技術の基本くらいは理解しておきたいものです。

 そんな暗号の初心者にも安心してお薦めできるのが「暗号技術入門」です。対称暗号や公開鍵暗号を含め,代表的な暗号アルゴリズムやその基礎となる数学について,初めての人にもわかりやすく説明しています。電子署名,証明書,乱数,そしてWebベースの暗号通信に主に用いられているSSL/TLSといったプロトコルに至るまで,最低限知っておきたい関連トピックを網羅しているのもうれしいところです。

 この本の特徴は,プログラムのソースコードが一切載っていないことです。アルゴリズムやメカニズムは,すべてブロック・チャートと文章で説明しています。逆に言えば,実装まで行うにはこの本だけでは情報が足りません。しかし,プログラマでなくても抵抗なく読み進めることができます。直接プログラムを書く立場にない人にも,一度目を通してもらいたい本です。

 基礎知識を習得して,いざ実装という段階にきたら,ぜひ手元に備えておきたいのが「暗号技術大全」です。約800ページにも及ぶ,まさに暗号に関する百科事典のようなものです。原著の発行が1996年なので,それ以降に開発された新しい暗号は載っていないのが欠点と言えば欠点ですが,RSAの公開鍵暗号やSSLで使用されているものなど,まだまだ現役の暗号アルゴリズムも詳しく解説しています。数論や高速計算のためのアルゴリズムにも触れているので,実装に当たってのヒントも得られるでしょう。