プログラマの三大美徳について 西本卓也 京都工芸繊維大学 工芸学部 電子情報工学科 助手 (現在:東京大学 nishimoz atmark gmail.com) オープンソースとアクセシビリティ プログラマの三大美徳について考える 1. 無精 2. 短気 3. 傲慢 出典: Programming Perl 改訂版 美徳1 「無精」 手抜きをせずに楽をするためには? 仕事の質は落とさないで、時間や労力を短縮する 問題を解くのではなく、問題を解くための道具を作る プログラムを書きたくなる動機 問題そのものを解くのではなく、より一般化された問題を解く 解法=ソリューションを再利用する 誰かのソリューションを再利用する=オープンソース 頭を使って時間と労力を節約する 6時間かかる単純作業があったとする Aさん:6時間かけてやる 頭を使うことを怠ると、時間がかかる B さん:1時間かけてプログラムを書く→5 分で実行する 頭を使うことにより、時間を節約する もちろん逆もあるので見極めが大切!! ようするにこれがセンス?? 知識と経験ですね そのプロセスを、知的快楽にしなくてはダメ!! プロダクトの時代からプロセスの時代へ 技術者の「ブラックジャック」モデル 手塚治虫「ブラックジャック」の行動パターン 技術的にチャレンジングであれば、タダでも手術する つまらない外科手術には法外な値段をふっかける 類似例:「750ライダー」 知的快楽のない仕事を減らす生き方 そもそも仕事とは楽しいものなのか? 利益にならなくてもやりたい仕事があるのか? 条件によっては Yes!! ではその条件は? 「楽しさ」の認知的モデル チクセントミハイのフロー理論 「フロー体験 喜びの現象学」 M.チクセントミハイ (今村浩明 訳) 世界思想社 1996 カイヨワの遊びの理論を発展させ、 独自の方法によって「楽しさ」を定義した 楽しさ=自己目的的な行為 流れているような感じ=フロー体験 心理的エントロピーを減らす→最適体験 フロー体験モデル 挑戦と技能が均衡した状態 → 楽しさ 技能が低いと不安 技能が高いと退屈 能力を必要とする挑戦的活動が必要 フローをもたらす体験 チェス,山登り,ダンス 仕事:外科手術 ネットサーフィン BBS・チャット参加 音声認識 フロー体験の構成要素 課題を達成できる見通し 行為への意識の集中 明確な目標 直接的なフィードバックの感覚 深い没入状態 自分の行為を統制しているという感覚 自己と対象の融合(自己意識の消失) 時間経過の感覚の変化 成功するオープンソースとは 課題を達成できる見通しがあること 明確な目標、直接的なフィードバックが得られること 役に立たない未完成のソースコード →× 複雑すぎていじれないソースコード →× もしも Mozilla が Netscape 4.x からスタートしてたら… 美しい製品ビジョンと、理解しやすいソースコードは、プログラマを感動させる オープンソースシステム=芸術作品である 作品それ自身が指揮棒、プログラマは演奏者 プログラマにおける「無精」とは 仕事をしたくないのではない くだらない仕事をしたくない 憎むべきものは 1. 不毛な事務処理・トラブル・もめごと 2. 自分のやった仕事が無駄になること、 3. 門外漢に余計な口出しをされて邪魔されること 正しく分析し、正しく問題を解決することで、無精を貫く 理性的であればあるほどハッピーになれる 金をケチればケチるほどクリエイティブになれる 無精さが育てたUNIX文化 テキストファイルは万能である あらゆる情報が、すべて、使い慣れた1種類の スクリーンエディタによって編集/閲覧できる テキストファイルを加工する豊富なフィルター 過去に作られた「一般性のある解法」 「車輪を再発明しない」 グルー(糊)になるソフトウェアの存在 (Perl など) 唯一の欠点:データ構造が階層化すると破綻する → 階層構造を持つテキストファイル= XML 「編集」情報の管理と共有 テキストファイルは行単位で編集される ファイルそのものではなく、 「どこをどう書き換えたか」という編集情報を表現したい こまめに書き換えるファイル、大勢が並行して書き換えるファイルを効率よく管理 バージョン管理システムの基本思想 テキストファイルの差分 (diff と patch について図で説明) CVS=並行バージョンシステム (conflict/merge について図で説明) インターネット、無精でいいのに。 データ:二度と作り直したくない。使いまわしたい。 テキスト情報・電子情報:いくらでも再利用できる Shockwave とか凝った画像とか、いらん。でしょ? プログラム:二度と書き直したくない Java なら「一度書けばどこでも動く」? ウソ。Java VM が変わればデバッグはやり直し。 サーバでロジックを書いて、ブラウザはHTML だけ。 ならばデバッグも1 回ですむ → EJB / JSP 美徳2 「短気」 「大切だと感じたものはすぐに手に入れるか経験しないと、 一晩か二晩で平凡なものに変質してしまう。」村上龍「ラブ&ポップ」 プログラマは短気でなくてはいけない いますぐ作りはじめること。でなきゃいつやるの? 誰かにやらせないこと。自分以外に誰がやるの? 勤務時間だけ仕事するのはアホである 休日に休むより仕事をやっつける方が安心する プログラマは金を使う暇がないのが当たり前 「短気」を支える開発環境 ターンアラウンドタイムが短いこと 記述が簡潔であること Perl, Ruby, Java, Delphi, … 開発環境を買わなくても、すぐ手に入ること フリーの開発環境はたくさんある。しかも高機能 使い方やノウハウもインターネットで見つかる あなたがプログラマになれないのは、 「XXXXを買っていないから」「XXXX を読んでないから」 ではなく、やる気がないからです。(語学と同じ) オープンソースとは?フリーソフトとは? 作者に修正を依頼するのが待てない さっさと自分で直したい ソースファイル公開や配布の許諾を得るのが面倒 お金を払う手続きが面倒 プログラマの「短気」を本当に満たすためには? → GNU Public Licence こそが偉大なソフトウェア フリーソフトの本質は「自由なソフト」 自分一人で使えない/直せない奴は金を払え 技術のある人間がとことん安く速く活動できる世界 美徳3 「傲慢」 とりあえず公開しよう = オープンマインド 大切な情報を保管する最良の方法は、あまねく広く配布することである 不完全だからといって隠さないこと かっこいい名前をつけること 自分が作ったもの、自分がほれ込んだものを売り込む ウェブでは、無精で短気な人も、傲慢になれる 「完璧にしよう」と思うな 自分で100% 解いてはいけない ただし、バグフィックスにおいては「短気」であるべし!! 何のために働くか? 食うためではなく、地位と名誉と快楽のために仕事をすること 「労働」 それをしなければいけないからやること。 「仕事」 それをしたいと思ってすること。 と思っている人が食えるようなビジネスモデルに期待 おまけ:このファイルは PowerPoint で作ったスライドを 1. アウトラインを RTF で出力 2. RTF を Word で開いて、「テキスト形式」で保存 3. テキストエディタで整形 とやってテキスト化しました。