UNIXプログラミングの金字塔は今でも輝いている
これから中堅を担うべき30代くらいの若いプログラマーの中にはLinuxは知っていてもUNIXは知らないという人もいるかもしれない。
それは別に問題ではないが、リーナス・トーバルズさんがUNIXを一人で作った(それがLinux)と聞いて話半分に聞き流したのを憶えている。UNIXはそれ位巨大なシステムだったし今でもかなり巨大なシステムだと言うことは知っておいて損はない。
そしてその巨大なシステムを利用して現在多くのエンジニア・プログラマーが働いているWeb開発が成り立っていると言っても過言ではない。(Windowsベースのものもあるけどメインとは言えない。)
日々、Web開発などを行っている人が、その下で動いている謎のシステム(UNIX)について知りたいと思ったとき、最終的に参考にすべきものを紹介しておく。
最近はその手の案件を手がけていなかったので、調べてみたら私が持っている十年近く前の版が大半、最新版のままである事に気付いた。つまりこの十年ほど大きな変更は加わっていないのだ。
使用言語はもちろんC言語。UNIXを作るために開発されたプログラミング言語である。情報系を卒業した人なら知っていると思うが、文系から転身したような人だと知らないかも知れない。
Systems Programming
Systems Programming(日本語ではシステムプログラミングと単数形のままにする事が多いようだが、システムズのように複数形にするのが本当のようだ。)についての書籍。
Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series)
(日本語訳:詳解UNIXプログラミング 第3版 翔泳社)
これ以上はないと思われる古典だが、UNIXは互換性のためにAPIを維持しているため今でも通用する。真面目に勉強するならこの本。この本と合わせて次の実戦的な本を演習するといい。
UNIX Systems Programming: Communication, Concurrency and Threads: Communication, Concurrency and Threads (2nd Edition)
こちらはサンプルプログラムが充実している。大きく4つに分けてある。
- Fundamentals
- Asynchronous Events
- Concurrency
- Communication
このカテゴリーを見るだけで現代にも通用しそうな雰囲気が・・・。というより現代の各種フレームワークがUnder the hoodで実行しているのはここに書かれてあるようなAPIを利用して、というのが実情。だから当然通用するのである。
Linuxになれば
The Linux Programming Interface: A Linux and UNIX System Programming Handbook
これには日本語版がある
Linuxプログラミングインタフェース、オライリージャパン
Network Programming
こちらも後方互換性のためかあまり大きな変更が頻繁には生じない。そのため日本語版がそのまま使える「ありがたい」分野でもある。
Unix Network Programming, Volume 1, 3rd ed.: The Sockets Networking API Stevens, W. Richard Fenner, Bill Rudoff, Andrew M.(Addison-Wesley Professional Computing Series)
UNIX Network Programming, Volume 2, 2nd ed.: Interprocess Communications, W. Richard Stevens
Vol. 2には日本語版がある。(Vol. 1にもあるが旧版の訳)
UNIXネットワークプログラミング〈Vol.2〉IPC:プロセス間通信、W.リチャード スティーヴンス、ピアソンエデュケーション
TCP/IPにフォーカスをおいた本が以下。どれも厚い。
TCP/IP Illustrated, Volume 1: The Protocols (Addison-Wesley Professional Computing Series), Fall, Kevin R. Stevens, W. Richard
TCP/IP Illustrated, Volume 2, Gary R. Wright (著), W. Richard Stevens, Gary R. Wright (著), W. Richard Stevens : The Implementation
TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the UNIX® Domain Protocols, W. Richard Stevens (Addison-Wesley Professional Computing Series)
これらの日本語版
詳解TCP/IP〈Vol.1〉プロトコル
詳解TCP/IP〈Vol.2〉実装
詳解TCP/IP〈Vol.3〉トランザクションTCP、HTTP、NNTP、UNIXドメインプロトコル
まとめ
UNIXの根幹を操るためのAPI群やネットワークプログラミングのための基盤はこの十年ほど保たれており、まだ日本語の訳本がしばしば出版されていた時代の本が現役で通用する。
できれば時間のある学生のうちに読んでおきたい(厚い)本が中心だが、「使い捨てエンジニア」にならないためにはこういう基礎的なこともしっかり手を動かして学んでおきたい。
幸い、この辺りのことはあまり変わらないので、変化の激しいフレームワークを学ぶ時間のいくらかをこういった基礎に回す方が長い目で見てよいのではないかと思う。
まさに温故知新とはこの分野である。