「まつもとゆきひろ氏が語るビューティフルコード」

ウェブキャリアさんのセミナーに参加してきました。
自分へのメモ書きです。

コードの美とはなにか

  • コードとはなにか
  • ソフトウェアは美しいのか

コードは工業製品ではない

  • よくある誤解
  • ソフトウェア工場
  • 大量生産しない
  • コピーは一瞬

対象が情報なので車のように1つづつネジを締めて等はしない。
ソフトウェア開発は、設計を始めアーティストっぽい仕事なのに、工場のラインのように扱われる。

コードは設計である

  • 職人芸
  • 一品もの
  • 善し悪しがある

コードは実用品

  • 実用にともしてナンボ
  • 用の美

芸術などのアート(見るだけの芸術品)とは違う。
実用性が伴っていなければならない。

コードは読み物である

コードを読むと、曖昧性の無い形で理解できる。

仮に、オープンソースがこの世に存在せずに、自由に読めない世界ならば、
例えば、OSの知識を理解したい場合は、教科書で読む程度の知識しか得れない。

読む事によって学ぶ時代があった。

また、優れたプログラマはほぼ間違いなく、他人のソースコードを読むのが好き。
そういうプログラマが優秀なプログラマには多い。

パワーの美

例えば、パフォーマンス性能に問題がある時、
普通のプログラマは、小手先の変更で対応するが、
スーパープログラマは、アルゴリズムを変える事も考慮する。

計算量

  • O記法
    • O(1)
    • O(n)
    • O(n・log(n))
    • O(n^2)

不可能を可能に

凄い大変だと思っていた、Unicode対応
常識に頼らない考えで吉田さんが実装(99年以降)


ソフトウェア開発者が、最初から、無理だろう、駄目だろう
と思ってしまうことを打破するパワーがコードにはある。

効率の美

  • 生産性
  • 簡潔さ

簡潔さは力なり

プログラム言語に関する話


いかに簡潔に書くか。簡潔に記述できるか。
昔の言語より、今の言語あパワーがあるとすればそれは、簡潔に書ける点。

簡潔さは力?

  • 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 にアクセスするメソッドを中で見に行く。

怠惰のための勤勉

  • 手抜きは美しくない
  • 苦労は

水鳥のごとく

シンプルは美しい

  • シンプルとはなにか

現実は複雑だ

  • ソフトウェアは複雑だ
  • さけがたい現実
  • 現実を直視する

Rubyは中身が複雑で、Rubyを書く人はシンプルで書ける様に。

人の心は単純じゃない

  • 単純さがすき
  • 複雑さがすき
  • 難しいのがすき

単純さの罠

  • ソフトウェアが複雑だと、プログラムが単純
  • プログラムが単純だと、ソフトウェアが

バランス

  • 要は人間がどう感じるか

思考の流れ

●○しを〜して、〜して と書けるのは良い。

 puts ARGF.each....

思考の流れを、繋げて書ける。

外面の美

  • 人間がどう感じるか
  • 時代/前提によって変化する

人間は進化する

  • 現状に安住するより
  • 前向きに進みたい
  • 長い目で見た効率

内面の美

  • 外には見えない
  • 外面ほど価値観が変化しない

パワー.アルゴリズム

内面の美

  • コードに存在

コードはアートだ

  • アートを作る人
  • 自覚があるか

アーティスト

  • 歯車違う
  • 工業員ちがう

アーティスト

  • 創造的
  • 自発的

自発的とは書かされているので書いているという人は違う

エンジニア+アーティスト

  • 考慮すべき
    • 納期
    • 顧客
    • チーム

他の業界のエンジニア的アーティストな仕事をしている人から
学べることが多いのでは?

アーティストの条件

  • 自覚
  • 自発

美しいコード

  • 理解に基づいたコード
    • 人間(外面の美)
    • 機械(内面の美)

[理解]が鍵

  • どれだけ知っているか
  • どれだけ理解できるか
  • どれだけ考慮できるか

プログラムやアルゴリズムをどれだけ知っているか、理解しているか。
お客さんやチームの事もどれだけ理解できているか、考慮しているか。

まとめ

  • コードは美しい
  • コードはアート
  • プログラマはアーティスト

まとめ

  • 誤解の蔓延
    • ソフトウェアは工場
    • シンプルは善
    • アーティストは「仕事」にならない

感想

セミナーを聞く前は、
コードの美しさといえば、外面の美しか思いつかなかったのですが、
内面の美の話、特にパワーには、改めてもっともだと共感した。


そんな美しく実用的で様々な事を理解するアーティストのプログラマーってやっぱり凄い人で、
誇れるお仕事だと再認識。


なんかよく「プログラマー」って言った時、
プギャって笑われてんだが、胸はって働いていくよ!
なによりも、楽しいし。