この記事はPOSIX原理主義Advent Calendar 2016の2日目の記事です。
今日のテーマは、昨日の記事でも紹介されていたPOSIX原理主義の書籍の話です。いきなりですが、商品の購入ボタンを置いておきます。
さて、技術的な話に関心の深い方ならこのページをちょっと不思議に思うかもしれません。
「カゴに入れるボタン」や、レジへ進むボタンがあるけど……、
はてなブログってショッピングサイトだったっけ??
と。はい、はてなブログはショッピングサイトではありませんし、はてなブログにそんな機能はありません。はてなブログの仕様や、Web技術を覚え、そしてアイデアをひねり出して自分で付けました。
この本は、執筆から販売に至るまで、私の持つ思想の塊です。そもそも思想とは、制作過程、もちろん商品の中、そして販売に至るまで、あらゆるところに込めるものだと思っています。
今日はこの本を通して伝えたい思想をさまざま書き綴っていきます。
思想① 書くだけで実践しなければフィクションも同然。技術書に非ず。
この本は、1日目の記事でも紹介されたようにPOSIX原理主義の本です。
POSIX原理主義は、交換可能性を担保するという方針から、一つのベンダーしか実装を作っていないJavaやPerl、PHP、……、等々の言語に依存することを否定します*1
否定して、「POSIX原理主義というプログラミング指針が素晴らしいんだよ」と言うのは簡単です。書けばいいのですから。でも書いただけで誰が信じるのでしょう。「俺にラーメンを作らせたら、ウマすぎて皆感動するよ」とだけ言うのと同じです。「なら食わせろ」と思うわけです。書いた内容を実践しなければフィクション(=架空のもの)と同じです。
それじゃあ何を食わせるか
いろいろ作りました。
- 郵便番号から住所を検索するデモ
- 検索速度を実感すべし
- Twitterクライアント「恐怖!小鳥男」
- 東京メトロの列車の位置をリアルタイムに表示する「メトロパイパー」(右画像)
- 2014年に作り、未だに無改造で動き続ける高い可用性
など、多数の例を本の中で紹介しましたが、リンクを示した通り、全部読者が試せます。本を買った人も、買っていない人も、これらの実力のほどを実感してもらい、決してPOSIX原理主義がフィクションでないことを理解してもらいたいです。
シェルスクリプトの本の通販が他言語アプリを使わないとできないなんて何の冗談だ!
デモの極めつけが、このページにある「カゴに入れる」ボタンと「レジへ進む」ボタンです。つまりショッピングカートです。
「通販するためのショッピングカートはそれらの言語で作られた製品に頼るしかない」といったら、説得力に欠けていると言わざるを得ません。そこで、POSIX原理主義シェルスクリプトでショッピングカートを1から作ることにしました。その名も「シェルショッカー」。シェルスクリプト製のショッピングカート、というのが由来です。
POSIX原理主義製のショッピングカートを実用性は、このページで商品を注文してみればわかります。:-) ←ちゃっかり商売
思想② 商品は、売り方まで含めて同じ一つの作品である。
企業はよく、商品はそのままに売り方を工夫して売り上げを伸ばそうとします。「まとめて買うとオトク」 や「分割金利手数料は当社負担」といったよくあるものから、「ハゲてる人はホテル代割引」や「BIGと書いてある商品を持ってくるとハンバーガー割引」まで……。なぜ、その目論見が通用するかといえば、消費者は売り方までを意識的・無意識的に作品と見なしているからに他なりません。
このことは、私も常日頃から思います。では、POSIX原理主義のこの本ではそれに対してどういう工夫をしているかというと、例えばこれです……。
お知らせ:C&R研究所『Windows/Mac/UNIX すべてで20年動くプログラムはどう書くべきか』の著者、松浦智之さんより直筆POPをいただきました。ぜひ店頭でご覧ください。 pic.twitter.com/NJCRMxkmcm
— ジュンク堂書店池袋本店/PC書 (@junkudo_ike_pc) 2016年11月14日
ついつい手に取りたくなるPOPを書いてきたり。そして、先程紹介したショッピングカート「シェルショッカー」もそうです。「シェルスクリプトの本がシェルスクリプト製のアプリで買えなくてどうする。さぁ実力の程を体験せよ」という仕掛けを作っているのです。
技術者が開発だけやっていればよい時代はとっくに終わったと思っています。海外のプログラマーは給与額が高いという話をよく聞きますが*2、実際の彼らの仕事内容を聞けば理由がよくわかります。
思想③ 本ももはや、ウォーターフォールで作る時代ではない
これは、書籍の制作工程に関する思想です。
プログラミングの分野では、ウォーターフォール型開発モデルは前時代的なものになりつつあります。
POSIX原理主義はウォーターフォールと相容れない
POSIX原理主義はソフトウェア開発モデルについて言及する理論ではありませんが、馴染むものではありません。その理由は二つあります。
理由1.UNIX哲学と相容れない
POSIX原理主義の発想の元はUNIX哲学です。わかりやすいのはマイク・ガンカーズの九つの定理(下記)です。
- Small is beautiful. 小さいものは美しい
- Make each program do one thing well. 1つのプログラムには1つのことをうまくやらせる
- Build a prototype as soon as possible. できるだけ早く試作する
- Choose portability over efficiency. 効率より移植性を優先する
- Store numerical data in flat ASCII files. 数値データはASCIIフラットファイルに保存する
- Use software leverage to your advantage. ソフトウェアを梃子(てこ)として使う
- Use shell scripts to increase leverage and portability. シェルスクリプトによって梃子(てこ)の効果と移植性を高める
- Avoid captive user interfaces. 過渡の対話的インターフェースを避ける
- Make every program a filter. すべてのプログラムをフィルタとして設計する
POSIX原理主義とは、UNIX哲学の思想を前提とし、その上に成り立っているものです。
そして、ウォーターフォール型開発モデルは、定理3の主張に相容れません。なぜなら、ウォーターフォール型はしっかり設計してから制作せよと言っているからです。UNIX哲学と相容れない以上、その上に成り立つPOSIX原理主義にも馴染みません。
理由2.プログラマーのサバイバル術にはなりえない
今後のAdvent Calendarで次第に明らかにされると思いますが、POSIX原理主義とはプログラマーにとってのサバイバル術なのです。本質であるとされる交換可能性も、プログラムの可搬性と持続性を向上させることで、プログラマーの負担を減らし、この職業を長く続けていけるようにとの願いが根底にあります。
では、ウォーターフォールという開発手法が、プログラマーの負担を減らすのに効果的なのでしょうか?とてもそうは思えません。
POSIX原理主義の本は、非ウォーターフォール的に作るべきだと考えた
以上のような理由から、POSIX原理主義の本は制作過程にもこだわるべきだと考え、独自の反復型制作工程*3を踏みました。
反復が特徴ですので、今回の青い本ができるまでに、過去に
1.[同人版]
2.[商業版]
3.[同人版]
という変遷を経てきました。そうやって、読者からの意見や感想を反映させながら、内容(POSIX原理主義の理論)を徐々に洗練させてきました。
まとめ
この本は、どうか内容だけでなく、作り方や売り方なども含めて、そこに様々な思想が込められている様子を楽しんでください。もちろん、主題として書いてあるPOSIX原理主義の思想も存分に堪能してください。
*1:対して、シェルスクリプト(Bourne sh)やCやJavaScript等は多数のベンダーが、各々の実装の言語プロセッサーを作っているため交換可能性があるのでOK。
*2:NomoLog,「アメリカのプログラマの給料が高い」は本当か?
*3:この記事の中で言及してますが、見事にウォーターフォール型で制作して「あぁ、ソフトウェア開発と同じだ」と感心していてがっかりしました。