WEB開発者としての有料情報ソース二選

プログラミングというかIT系の本を買わなくなってかなり経つんだけど、こないだ久々に一冊買ってみた。「.fla2」という Flash 制作のためのアイデア集。ただし ActionScriptFlash の実装をこと細かく解説する技術書とは違って、この本を読むことでバリバリの Flash が作れるようになるというわけではない。むしろ企画時にあと一つ、何か物足りないというときに開くネタ帳としての性格のほうが濃いかもしれない。

.fla 2 ―Idea of Flash Creation―

.fla 2 ―Idea of Flash Creation―

本を買うことは殆どなくなったと書いたけど、その大きな理由が safaribooksonline(SBO)。実際、仕事上において必要となる知識については SBO でほぼまかなうことができている。さらにはオンラインサービスだから本屋に行ったり本を持ち歩いたりする手間も必要ない上、まだ出版されていない下書き状態の書籍さえ読むこともできる。
ただ、SBO でじっくり読書するかというとそうでもない。
SBO はリファレンスとして活用していて、わからないところがあったらそのわからない部分を中心に調べるというスタイル。だから Web 上で調べ物をするのと実はそれほど大差ない。ただ、ほぼノイズがゼロ、かつ体系化されていて一箇所にまとめられているというのが最上のメリットで、これによってかなりの時間節約になるのは言うまでもない(さらには空間の節約にもなる)。

本棚をクラウド上に持ち、いつでも参照可能な状態にしておくということは自分にとっては近年の中で一番のイノベーションだ。また、物理や数学、ビジネスといった分野の本もあるおかげで知識の幅もかなり広げることができた。

ほかの情報源として活用しているのは ACM
Assosiation for Computing Machinery という学会のサイトなんだけど、会員になるとその学会に提出されている論文であったりジャーナルであったりを参照できるようになるというのがポイント。ACM はかなり規模の大きな学会で、コンピューターサイエンスに関する様々な活動が活発に行われている。なので新規性が高く大がかりな機材をそろえなければ得られない知識、たとえば最近だとクラウド界隈の新鮮な知識などもここで仕入れることができるのだ。
こちらの論文およびジャーナルの検索も SBO 同様、ノイズが少ないのでIT業界に携わっている人には時間の節約に貢献するだろう。
これら safaribooksonline と ACM は知識のソースとして今の自分の中では最強タッグだ。
ではその二つを活用する例として並列処理におけるデザインパターンを調べてみよう。

まずはキーワードを調べるための検索。ここでキーワードというのは調査対象の中に現れるであろうキーワードの洗い出しだ。「並列処理におけるデザインパターン」だから最初の検索語句としては concurrency/concurrent/design pattern といったものが妥当と思われる。
これらを組み合わせて ACM で検索すると、「concurrency design pattern」という語句で

Concurrency design patterns, software quality attributes and their tactics

という論文がヒットしたので参照してみるとすぐにパターン一覧を見つけることができた。一覧によると

Structural Patterns
Double Buffering, Lock Object, Producer-Consumer, Read/Write Lock, Scheduler, Thread-safe Decorator
Behavioral Patterns
Active Object, Balking, Event-based Asynchronous, Future, Guarded Suspension, Monitor Object, Reactor, Thread-Specific Storage
Architectural Patterns
Asynchronous Processing, Half-Sync/Half-Async, Leader/Followers
Enterprise Patterns
AJAX, Lock File, Optimistic Concurrency, Session Object, Static Locking Order, Thread Pool
Other General-Purpose Patterns
Double-Checked Locking, Scoped Locking, Single Threaded Execution, Strategized Locking, Two-Phase Termination

というように体系化されているようだ。で、これらがいわば調査対象となるキーワード群となる。並列処理のデザインパターンについては論文中の説明で大体の概要を掴めるが、それで終わってしまうのももったいないので実装例を探すべくもう少し深追いしてみることにする。

次に safaribooksonline でこれらのキーワードをもとに検索すると

Concurrent Programming in Java: Design Principles and Patterns, Second Edition
ACE Programmer's Guide, The: Practical Design Patterns for Network and Systems Programming

といった本が見つかり、その中に実際に動くコードや説明、周辺知識が見つかる。
もちろん Google 検索でも同じようなことはできるが、違いは検索結果から得られる知識が断片化された知識としてではなく体系化された知識として脳に織り込まれるかどうかの違いだと思っている。

さて、本来であればこれらのサービスのサブスクリプションフィーは会社負担であってほしいところだけど、今のところ自らを知識武装するためには自腹を切りつつ成長していくしかないのが実情なんだろう。そのうち人を育てられる会社が頭角を現していくのに伴い、技術者のケアにも金が回ってくるだろうがまだ時間はかかるようだ。