「まつもとゆきひろ氏が語るビューティフルコード」
ウェブキャリアさんのセミナーに参加してきました。
自分へのメモ書きです。
コードの美とはなにか
- コードとはなにか
- ソフトウェアは美しいのか
コードは工業製品ではない
- よくある誤解
- ソフトウェア工場
- 大量生産しない
- コピーは一瞬
対象が情報なので車のように1つづつネジを締めて等はしない。
ソフトウェア開発は、設計を始めアーティストっぽい仕事なのに、工場のラインのように扱われる。
コードは設計である
- 職人芸
- 一品もの
- 善し悪しがある
コードは実用品
- 実用にともしてナンボ
- 用の美
芸術などのアート(見るだけの芸術品)とは違う。
実用性が伴っていなければならない。
コードは読み物である
- CODE READING
- 教材
- 知識の宝庫
- オープンソース
コードを読むと、曖昧性の無い形で理解できる。
仮に、オープンソースがこの世に存在せずに、自由に読めない世界ならば、
例えば、OSの知識を理解したい場合は、教科書で読む程度の知識しか得れない。読む事によって学ぶ時代があった。
また、優れたプログラマはほぼ間違いなく、他人のソースコードを読むのが好き。
そういうプログラマが優秀なプログラマには多い。
パワーの美
- [できない]を[できる]に
- アルゴリズムの力
例えば、パフォーマンス性能に問題がある時、
普通のプログラマは、小手先の変更で対応するが、
スーパープログラマは、アルゴリズムを変える事も考慮する。
計算量
- O記法
- O(1)
- O(n)
- O(n・log(n))
- O(n^2)
不可能を可能に
凄い大変だと思っていた、Unicode対応
常識に頼らない考えで吉田さんが実装(99年以降)
ソフトウェア開発者が、最初から、無理だろう、駄目だろう
と思ってしまうことを打破するパワーがコードにはある。
効率の美
- 生産性
- 簡潔さ
簡潔さは力なり
- Succintness is Power
プログラム言語に関する話
いかに簡潔に書くか。簡潔に記述できるか。
昔の言語より、今の言語あパワーがあるとすればそれは、簡潔に書ける点。
簡潔さは力?
- Brooks の生産性不変の法則
- 本質に集中
- 実行可能議事言語
ある人は、1日に、500行コードを書ける。
その人はアセンブラで500行、Rubyでも500行書ける。
でも、出来上がるものは、Rubyで書いたものの方が良い。
選ぶ言語によって、出来るものは変わる。
議事言語:本当のプログラム言語じゃないけど、ある程度アルゴリズムを書ける言語。
→昔はいっぱいあったらしい。
Java による Hello World
class Sample { public static void main (String[] args) { System.out.println("Hello World !!"); } }
Ruby によるHello World
printf("Hello World\n")
冗長の排除
- DRY
- Don't Repeat Yourself
ソフトウェアの価値は書いたコードの量じゃなく、お客様の価値で決まる。
コピーをすると、バグを増やしてしまい、価値が下がる。
DRY
class User < ActiveRecord::Base end
Rails はこれだけで、usersというテーブルに違いない。と判断。
users にアクセスするメソッドを中で見に行く。
怠惰のための勤勉
- 手抜きは美しくない
- 苦労は
水鳥のごとく
シンプルは美しい
- シンプルとはなにか
人の心は単純じゃない
- 単純さがすき
- 複雑さがすき
- 難しいのがすき
単純さの罠
- ソフトウェアが複雑だと、プログラムが単純
- プログラムが単純だと、ソフトウェアが
バランス
- 要は人間がどう感じるか
思考の流れ
●○しを〜して、〜して と書けるのは良い。
puts ARGF.each....
思考の流れを、繋げて書ける。
外面の美
- 人間がどう感じるか
- 時代/前提によって変化する
人間は進化する
- 現状に安住するより
- 前向きに進みたい
- 長い目で見た効率
内面の美
- コードに存在
コードはアートだ
- アートを作る人
- 自覚があるか
アーティスト
- 歯車違う
- 工業員ちがう
アーティスト
- 創造的
- 自発的
自発的とは書かされているので書いているという人は違う
エンジニア+アーティスト
- 考慮すべき
- 納期
- 顧客
- チーム
他の業界のエンジニア的アーティストな仕事をしている人から
学べることが多いのでは?
アーティストの条件
- 自覚
- 自発
美しいコード
- 理解に基づいたコード
- 人間(外面の美)
- 機械(内面の美)
[理解]が鍵
- どれだけ知っているか
- どれだけ理解できるか
- どれだけ考慮できるか
プログラムやアルゴリズムをどれだけ知っているか、理解しているか。
お客さんやチームの事もどれだけ理解できているか、考慮しているか。
まとめ
- コードは美しい
- コードはアート
- プログラマはアーティスト
まとめ
- 誤解の蔓延
- ソフトウェアは工場
- シンプルは善
- アーティストは「仕事」にならない