夏のプログラミングシンポジウム2012に行ってきた

Beautiful Codeにつられてホイホイ行って参りました。
てことでレポートとは言いがたいメモを残しておきますよ。
理解度低くてもしかすると発表者の方の言いたかったことと多少違ってるかも。

Beautiful Error Handling

エラー処理に美しさを!
  • エラー処理は醜くなりがち
    • エラー処理に対する抽象化が行われていなかったため、こうなりやすい
    • これはプログラミング言語の記述力の問題
  • Haskellを見て考える
  • C言語の場合はあまり美しくない
    • とある値が0以下ならエラーとする処理があったとする
    • この処理を複数回やると同じようなコードが多くなってしまう
  • エラー処理についての抽象化が必要である
  • Haskellのアプローチ
    • エラー処理抽象化されたモナドがある
    • エラーハンドラの抽象化により退屈な繰り返しを避ける
    • エラー処理が簡潔かつ確実になる
    • プログラムが美しくなる!

ビューティフルコードこのためのN個の指針

プログラムはわかりやすく書く!
  • わかりやすくって何?
    • わかりやすさよりも効率優先のコードだってある
  • 美しさとは?
    • 突き詰めると結局個人観点
    • なので他人の好みには干渉しないこと
  • まずは動くものを作れ
    • 動いているものを見て、それをブラッシュアップしていく
  • KISS原理
    • Keep It Simple, Stupid
  • ネストは浅く
    • クラス、メソッドだけで2レベル
    • for、ifを更に使用するだけで4レベルになってしまう
    • ネストが深くなればなるほどに読みづらくなる
  • 複数出口は良くない
    • return文はひとつにしよう
      • 個人的にはこの考えは好きじゃない
      • むしろ早く脱出したほうがいいじゃない
  • 名前の長さはスコープの長さによって変える
    • あちこちで使用されるような変数はしっかりとした名前をつけるべき
      • フィールドとかは長く
      • メソッド内の変数は多少短くてもいい
      • ifスコープ内のみとかなら別に1文字でも問題ないと思う
  • 共通処理を関数にするようにクラスをどんどん作成する

Rubyを用いた超絶技巧プログラミング

最近のプログラミング言語の宣伝って俗世にまみれてね?
  • 超絶技巧プログラミング
    • 単純に変態的なだけだった……!
  • self-discriptiveなRubyプログラミング
    • 手順
      • コードの自己複製
      • フォント埋め込み
      • 実行可能なアスキーアートとして書きだす
  • 文字を制限したRubyプログラミング
    • 制限
      • 大文字駄目
      • 記号駄目
      • 数字駄目
    • 手順
      • for文とか色々と利用する
      • 変態的すぎて説明不能
      • スライド資料見るべし

ビスケットにおけるプログラミングの美しさについて

知育ツールとして面白い
  • というか普通におもちゃとして面白い
    • 今度遊んでみよう
      • というか従兄弟に遊ばせてみよう
  • 動きがプリセットされているわけではなく、動きを定義していく

Cute Algorithms!

アルゴリズム可愛いよアルゴリズム
  • アルゴリズムと言えばソート
    • ソートといえばO( n log n )
      • 一番遅いソート方法は?
        • バブルソートは早すぎる
          • 最初からソートされてたらO(n)だから最悪
        • 一般的に「遅い」と言われているソートは早い
        • QuickSort遅いよね!!
          • 最悪計算量O(n)で、最速O( n log n )
          • 前半QuickSort後半InsertSortでやれば最遅だよね!!
  • 非破壊型キュー(Functional Queue)
    • 一度作ったデータは絶対に書き換えない
      • popしようとすると破壊的である
      • だからキューの中身をreverseしてから一番最後を取り除いて再reverse
      • ただし実装の都合上内部的にはpopとpush用を用意する

まとめ

美しさってなんだっけ?
と、いうのは冗談として。
いや本当に楽しかったです。
特にN個の指針についてはかなり参考になりました。
ありがとうございました!

※後ほど資料へのリンクとか追記するかと……。