maya's blog

About programming, aws and ubuntu

ビューティフルコード 29章 読書メモ

『Beautiful Code ビューティフルコード』

編者 Andy Oram, Greg Wilson

著者 Brian Kernighan, JonBentley, まつもとゆきひろ

訳者 久野 禎子, 久野 靖

ISBN 978-4-87311-363-0

29章 エッセイのごときプログラム まつもとゆきひろ

  • 美しいプログラムとは、効率の良いプログラム
    • プログラムの読み書き、修正を効率よくできる人間の効率のこと
  • プログラミング言語とはプログラムを記述する時の媒体
    • 言語によって美しいプログラムの書きやすさが違うとMatzは解釈

プログラミング言語がどのように美しいプログラムを支援できるのか?

1. 完結さ

「平均的なプログラマが生産できるコードの行数は言語によらずほぼ一定である」 Frederick P. Brooks 『人月の神話』 より

  • 例えばrubyであれば、型宣言がないこと、クラス宣言やmainルーチンなしにトップレベルで命令実行できること
  • より高い抽象化機能の提供により、人間の概念に近い高いレベルでプログラムを記述できる
int ary_indext(int n, int *ary, int len) {
  int i;
  for (i = 0; i < len; i++) {
    if (ary[i] == n) return i;
  }
  return -1;
}
ary.find_index{|x| n == x}
  • 完結さ = 冗長さの排除 ⊃ DRY(Don't Repeat Yourself)の原則

2. 保守性

  • 新しい概念を受け入れるのは難しい
  • プログラミングの美しさは自分が持っている常識からあまりかけ離れていないことにも
  • 革新的すぎないこと do-end とかAlgol由来だしね

3. シンプルさ

  • 言語の複雑さがプログラムをシンプルにする
  • プログラマの労力軽量化 ✖言語自体の軽量化
  • 一例としてRakefile(Makefileruby代替)
  • ツールのシンプルさを求めるとプログラマに複雑さを押し付けることもある(Golangはその傾向が...)
  • rubyの文法の複雑さ(メソッド引数括弧の省略、引数最後のhash展開, blabla)がプログラム自体をシンプルにする

4. 柔軟性

  • 型宣言が存在しないことが、将来の変化に対応しやすくなる柔軟性の向上にもなる
  • DuckTyping オブジェクトの振る舞いだけに注目
  • メタプログラミング 例えばJavaのリフレクション

5. バランス

  • 完結さ、保守性、シンプルさ、柔軟性のどれか一つが突出していても美は実現できない