プログラマの三大美徳について

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