72
Powered by Rabbit 0.9.2 Ruby開発が教えてくれたこと (財)Rubyアソシエーション (株)ネットワーク応用通信研究所 (株)楽天 技術研究所 Heroku [New] まつもと ゆきひろ @yukihiro_matz

Ruby開発が教えてくれたこと

Embed Size (px)

DESCRIPTION

CEDEC2011 9月8日招待講演

Citation preview

Page 1: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Ruby開発が教えてくれたこと

(財)Rubyアソシエーション(株)ネットワーク応用通信研究所

(株)楽天 技術研究所Heroku [New]

まつもと ゆきひろ@yukihiro_matz

Page 2: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

プログラミングとの出会い

ポケットコンピュータPC-1210

1/71

Page 3: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

コンピュータでなにするか

ゲーム

計算

プログラミング言語

2/71

Page 4: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

手段と目的

手段としての言語

目的としての言語

手段のためには目的を選ばない

3/71

Page 5: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Sapir-Whorf仮説

言語は思考に影響を与える

制限を与える

発想を与える

4/71

Page 6: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

言語の選択は重要

生産性に直結

ストレス

コスト

記法

5/71

Page 7: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

プログラミング言語

Ruby

開発効率に注目

より簡単に

より効率よく

より気分よく

6/71

Page 8: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

気分

重要な要素

プログラマの気分を重視

7/71

Page 9: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

プログラマの気分

気分が良い時

思った通りに行く時

万能感

我慢しない時

悩まない時

8/71

Page 10: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

思った通りに行く時

常識が通用する

予測が当たる

期待が応えられる

9/71

Page 11: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

万能感

やりたいことができる

やればできる

簡単にできる

10/71

Page 12: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

我慢しない時

苦痛が少ない

不合理を感じない

11/71

Page 13: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

悩まない時

海に向かって叫ばない

クリアな世界観

12/71

Page 14: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

気分の良いプログラミング

簡潔

万能感

13/71

Page 15: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

ブルックスの法則

プログラマが一定時間に開発できるソフトウェア量は言語によらず一定である

[「人月の神話」より引用]

14/71

Page 16: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

簡潔さは力なり

Paul Graham

プログラミング言語の進化

15/71

Page 17: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

例題: 階乗

factorial, or n!

n以下の自然数すべての積

n! = 1×2×3×...×n

16/71

Page 18: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

階乗(Java)

class Sample { private static int fact(int n) { if (n == 1) return 1; return n * fact(n - 1); } public static void main(String[] argv) { System.out.println("6!="+fact(6)); }}

17/71

Page 19: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

階乗(C)

#include <stdio.h>intfact(int n){ if (n == 1) return 1; return n * fact(n - 1);}

intmain(){ printf("6!=%d\n", fact(6));}

18/71

Page 20: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

階乗(Ruby)

def fact(n) if n == 1 1 else n * fact(n - 1) endendprint "6!=", fact(6), "\n"

19/71

Page 21: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

階乗(Ruby)

def fact(n) (1..n).inject(:*)endprint "6!=", fact(6), "\n"

20/71

Page 22: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

簡潔な表現

get '/foo', :agent => /Chrome/ do "You're using Google Chrome"end

get '/foo' do "You're using non Chrome browsers"end

21/71

Page 23: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

抽象化

for (i=0; i<100; i++) { ...}

100.times do ...end

22/71

Page 24: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

人間の都合、機械の都合

だれが主人か

人間?

コンピュータ?

23/71

Page 25: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

200!

printf("12!=%d\n", fact(12));printf("13!=%d\n", fact(13));printf("14!=%d\n", fact(14));printf("200!=%d\n", fact(200));=> 12!=479001600 13!=1932053504 14!=1278945280 200!=0

24/71

Page 26: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

200!

print "200!=", fact(200), "\n"=> 78865786736479050355236321393218506 22951359776871732632947425332443594 49963403342920304284011984623904177 21213891963883025764279024263710506 19266249528299311134628572707633172 37396988943922445621451664240254033 29186413122742829485327752424240757 39032403212574055795686602260319041 70324062351700858796178922222789623 70389737472000000000000000000000000 0000000000000000000000000

25/71

Page 27: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

プログラミング言語Ruby

開発効率に注目

より簡単に

より効率よく

より気分よく

26/71

Page 28: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

時代の要請にマッチ

性能よりも生産性

開発者の気分重視

開発者に心地よい言語

27/71

Page 29: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

設計者=ユーザー

使う人の気持ちが分かる

共感できる人のために

共感できない? それもOK!

28/71

Page 30: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

プログラミングは楽しい

創造する楽しみ

対話の楽しみ

知的刺激

29/71

Page 31: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

でも楽しくない

直らないバグ

迫る〆切

炎上するプロジェクト

30/71

Page 32: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

解決策

コンピュータに仕事を押し付ける

ムーアの法則

31/71

Page 33: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

オープンソース

どうしてRuby売らないんですか?

日本のビル・ゲーツ(笑)

32/71

Page 34: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

Ruby開発開始(1993)

一般公開(1995)

33/71

Page 35: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

最初の書籍(1999)

最初の英語書籍(2000)

34/71

Page 36: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

Rubyで就職(1997)

未踏ソフトウェア(2000)

Ruby on Rails(2004)

OSS貢献者賞(2005)

35/71

Page 37: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

2007

楽天技術研究所フェロー

Rubyアソシエーション

Ruby技術者認定試験

36/71

Page 38: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

2007

日経BP技術賞大賞

経済産業大臣表彰

37/71

Page 39: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

2009

松江市名誉市民

島根大学客員教授

ものづくり日本大賞

日本イノベーター大賞

38/71

Page 40: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

2010

日経BP チェンジメーカー2010

39/71

Page 41: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの認知度

40/71

Page 42: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

キャズム論

イノベーター

アーリーアダプター

アーリーマジョリティ

レートマジョリティ

ラガード

41/71

Page 43: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

キャズムを越えた日

イノベーター

技術者個人の興味・関心(1995-)

アーリーアダプター

ベンチャー・零細企業(1997-)

42/71

Page 44: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

キャズムを越えた日

アーリーマジョリティ

中小企業・IT系企業(2007-)

レートマジョリティ

大企業(2010-)

43/71

Page 45: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

キャズムの向こう側

財団法人

標準規格

44/71

Page 46: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

財団法人

Rubyアソシエーション

45/71

Page 47: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

標準規格

JIS

ISO

46/71

Page 48: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

ローリングストーン

転石苔生さず

47/71

Page 49: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

OSSコミュニティ

生存戦略

変化を続ける

課題を提供し続ける

48/71

Page 50: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

Rubyの未来

未来はどうなる?

49/71

Page 51: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

ムーアの法則

LSIの集積度は2年で2倍になる

50/71

Page 52: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

CPU性能向上

CPU性能向上51/71

Page 53: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

CPU性能向上

近年頭打ち

物理的限界

要求の飽和

52/71

Page 54: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

未来への対応

Web

分散

並列

マルチコア

53/71

Page 55: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

未来への技術

クラウド

MapReduce

関数型

分散アーキテクチャ

54/71

Page 56: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

未来のRuby

新しい環境への適応

より広汎

より高速

より分散

より堅固

55/71

Page 57: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

広汎

幅広い実行環境

スマートフォン

PC

スーパーコンピュータ

56/71

Page 58: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

HPC Ruby

Ruby for High Performance Computing

型推論

コンパイル

Cに匹敵する速度

57/71

Page 59: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

軽量Ruby

Lightweight Ruby

組み込み

ソフトリアルタイム

58/71

Page 60: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

広汎

幅広い適用分野

組み込み

Web

HPC

59/71

Page 61: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

高速

YARV

JIT

最適化

GC

60/71

Page 62: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

分散

並列・分散はより重要になる

dRuby / Rinda

MessagePack

MapReduce

61/71

Page 63: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

堅固

より書きやすく

キーワード引数

Classbox

Enumerableプログラミング

62/71

Page 64: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

軽量Ruby

RiteVM

63/71

Page 65: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

RiteVM

文法:JIS/ISO準拠

ライブラリ:ほぼJIS/ISO拠準

64/71

Page 66: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

RiteVM

LuaっぽいRuby VM

65/71

Page 67: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

RiteVM

組み込みAPI

レジスタベース

インクリメンタルGC

66/71

Page 68: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

RiteVM

ポータブル

コアはC99のみ依存

67/71

Page 69: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

RiteVM

コンポーネント構成

コンパイラ分離可能

minimal, standard, full

68/71

Page 70: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

RiteVM

計画中

ファイバー(コルーチン)

非同期I/O

69/71

Page 71: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

RiteVM

今後の予定

2011/10

クローズドベータ

2012/03

オープンベータ(MITライセンス?)

70/71

Page 72: Ruby開発が教えてくれたこと

Powered by Rabbit 0.9.2

ご清聴ありがとうございました

71/71