Ruby開発者まつもとゆきひろ氏「Rubyからのメッセージ」の講演

プログラミング
By: Fumitake Taniguchi
この記事は約6分で読めます。

By: Fumitake Taniguchi


以下の動画を見ながらのメモ

特に印象に残った言葉

あるプログラマーが一定期間内に生産できるプログラムの行数は、プログラム言語によらず一定である

 

参考動画

世に言語の種は尽きまじ

  • 一説には数千・数万とも
  • ほとんどは消えていく
  • アイデアの具現化

先端言語と普及言語

大きく荒く分けると、先端言語と普及言語にわける見方ができる。

言語における対立軸

  • 学術向け/一般向け
  • 先端技術/枯れた技術

先端言語

  • 特定のアイデアに深く依存
  • 応用の範囲が狭い
  • アイデアの実用性を証明

先端言語例

  • 論理プログラミング – Prolog
  • 関数プログラミング – FP
    • Fortranを作った人が作ったFP(Functional Programming)
  • オブジェクト指向 – Simula
    • 1960年代終わりくらい
  • イテレータ – CLU
    • 繰り返しを抽象化したような言語
    • イテレータと抽象データ型を頑張った
  • ゴール指向 – Icon
    • バックトラッキングが組み込まれている言語

先端言語のほとんどは…

  • 玉石混淆
  • 多くの言語が広く使われることはない
  • 他の言語の礎となる

多くの熱狂的なファンを取り込め、実用性もある、例外的先端言語

  • Lisp
  • Smalltalk

普及言語

  • 先端言語から学ぶ
  • 枯れた機能優先
  • 実用的
  • だが、面白みは少ない

たとえば、javaでオブジェクト指向を知った人はかなりいるかもしれないけれど、オブジェクト指向の基礎ができたのは1960年代であり、javaの作られたのが1993年であるので、かなり普及するのは時間がかかっていることがわかる。また、ガベージコレクション(GC)も当時のCユーザなどからすれば、メモリ管理を自動化なんて信じられない。。みたいな空気だった。

先端から普及へ

だいたいの技術は先端から普及へという流れになる

  • 再帰
  • 抽象データ型
  • オブジェクト指向
  • 関数指向

先端技術とはなにか

  • より抽象的
  • より簡潔
  • より生産的
  • より変化に強い

先端的普及言語 Ruby

普及言語でもっとも進化したもの

Rubyの特徴

  • 純粋なオブジェクト指向
    • 文字列
    • 数値
    • 配列
    • その他すべて
    • よって、すべてのデータが統一的にオブジェクトである
  • 特徴的な文法
    • Lisp:S式
    • Smalltalk:メッセージ式
    • Python:インデント
    • Ruby:保守的
    • DSL(DomainSpecificLanguage):専用言語風汎用言語
      • Rakefile:Rake = Ruby Make
      • ルビーで書かれたMakeっぽいものという由来
  • 高階関数
    • 手続きの塊そのものをオブジェクトとして扱うことができる
    • クロージャ
    • Enumerators
    • ラムダ
    • ブロック
      • コードの塊
      • メソッドに付加
      • 拡張可能な制御構造
      • これにより、繰り返し・条件判断・データ加工・スコープ制御などなど
    • ダックタイピング
      • 動的型付けオブジェクト指向プログラミング言語に特徴的な型付けの作法
      • 「アヒルのように鳴き、アヒルのように歩くのはアヒルに違いない」というポリシー
      • 変数や式に型なし
      • 実行時に型が決まる
      • エラーチェックも実行時
        • 型宣言不要:簡潔
        • 型に束縛されない:柔軟
      • 型情報よりもインターフェイス(どんなメッセージを持っていて、メソッドを持っているか)を重視
      • StringIO
        • 文字列への入出力
        • 継承関係なし
        • 実装共有なし
        • 外見は同じ
    • メタプログラミング
      • インスペクション:プログラミングを操作するプログラミング
      • 自身のプログラム情報取得
      • プログラム変更
      • ActiveRecord(Railsのライブラリ)
        • Object-Relational
        • DBスキーマのみ
        • クラスはスキーマから作成
        • 新しいユーザというクラスがほしい時
          • class User < ActiveRecord::Base
          • end
        • これだけでよく、中身はスキーマから
        • DBスキーマを読み属性を自動定義、人手いらず

Rubyと他の言語との真の違いは…

哲学に基づいたバランス

  • 簡潔さ
    • 簡潔さは力なり
    • by Paul Graham:Fred Briooksの法則
      • あるプログラマーが一定期間内に生産できるぷろぐらむの行数はプログラム言語によらず一定である
      • アセンブラで1000行書ける人は、C++でも1000行書ける
      • 第2の法則は「遅れているプロジェクトに人を投入するとますます遅れる」
    • 簡潔さ≒効率
  • 書きやすさ
    • 少ない記述
    • 少ないタイプ量
    • 実行可能擬似コード
      • 完全に動くプログラムを書くのはめんどうなので、アルゴリズムの教科書などでは擬似コードで動く

 単純さを追求しない

  • 単純な言語か
  • 単純なソリューションか
  • 自然か単純か
    • Rakefileの例

人間の心は単純じゃない

  • 単純さが好き
  • 複雑さを好き
  • 簡単な問題がいい
  • 難しい問題もいい

Ruby on Rails

Web development that doesn’t hurt : 痛くないフレームワーク!

Opinionated Software : 自分の意見を持っているソフトウェア

ソフトウェアがプログラミングに影響を与える

Sapir-Whorf仮説:自然言語学の仮説であり、自然言語学では否定されているが。。。

  • 言語は思考に影響を与える
    • 制限を与える
    • 発想を与える
  • バベル17:言語が思考に影響を与えるというSF小説作品
  • 言語は思考に影響を与える=言語そのものにメッセージが含まれている

Rubyが与える影響とは

  • プログラミングは楽しい
  • プログラマは素晴らしい
  • プログラミングはワクワクする
  • 苦労はコンピュータへ
  • 人間は楽を
  • 記述は簡潔に
  • 生産性は高く
  • 変化に強く

Rubyからのメッセージ

Enjoy Programming!

Rubyの今後

  • 趣味から仕事へ
  • スケーラビリティ
    • データ量
    • アクセス数
    • プロジェクト規模

コメント

タイトルとURLをコピーしました