お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

120
お金になりにくい プログラミング言語を やり続ける技術 esehara shigeo RubyHiroba2014 生活発表会

description

 

Transcript of お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Page 1: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

お金になりにくいプログラミング言語を

やり続ける技術esehara shigeo

RubyHiroba2014 生活発表会

Page 2: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

お前誰だ

Page 3: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

esehara shigeo趣味:言語いじりFizzBuzzの研究

数論・論理学←New!!難解プログラミング

PythonistaClojuren

Page 4: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

生活の一部

Page 5: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

初級問題

Page 6: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会
Page 7: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

突然のHaxe欲!

Page 8: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

中級問題

Page 9: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会
Page 10: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

突然のFORTRAN77

欲!

Page 11: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

他には?

Page 12: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

underscore.py

Page 13: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

あれ、JavaScriptに同じようなプロダクトが

Page 14: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会
Page 15: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

お金にならない!

Page 16: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

生活ですしね

Page 17: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

というわけで(?)

Page 18: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Ruby始めました

Page 19: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

出自はPythonistaです

Page 20: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

仕事もPythonです

Page 21: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

仕事ではRubyは

使っていません

Page 22: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

でもやろうと思ったので

Ruby始めました

Page 23: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Agenda

Page 24: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

スライド120枚あります

Page 25: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Motivation

Page 26: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

JUST FOR FUN http://www.amazon.co.jp/dp/4796880011

Page 27: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Example

Page 28: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Rubyは「楽しさ」を第一の目標とする

言語である

Page 29: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

It is the first industrial-quality systems programming language that is as

expressive and enjoyable as a scripting language.

Swift Programming Language

Page 30: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

But

Page 31: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

ただ、肝心の「文章を書く」という作業はどうかというと、実は「好き」とか

「楽しい」とか思ったことはありません。文章がスラスラ出てくるなどという

経験はなく、基本的にはしぼり出すようなしんどい作業です。世の中に

は文章を書くのが好きな人も多いと思いますが、私はWebの記事であ

れ、雑誌の記事であれ、書くのは苦手です。精神力をごっそり削られま

す。

プログラミングが楽しいと思えないのは悪いことなのか

IT Proより

Page 32: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

And

Page 33: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

I wish to be able to eat sushi everyday.(画像) Wikipedia ― http://commons.wikimedia.org/wiki/File:2007feb-sushi-odaiba-manytypes.jpg

Page 34: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Reason

Page 35: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

多角的な視点ー左面は青、右面は赤(画像) Wikipedia ― Rubix cube.jpg

Page 36: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

道具の生態系(画像) Wikipedia 20060513Toolbox.jpg より

Page 37: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

イメージとしての技術(画像) http://bjorn.tipling.com/if-programming-languages-were-weapons

Page 38: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

建前

Page 39: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

如何なるパラダイムでも

食わず嫌いしない

Page 40: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

よりよい実装と設計を求めて

Page 41: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Language of Year(画像) Wikipedia ― Rubix cube.jpg

Page 42: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

本音

Page 43: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

JUST FOR FUN http://www.amazon.co.jp/dp/4796880011

Page 44: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

どんなものでもお金には出来るが自分が出来るとは

限らない

Page 45: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Real

Page 46: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

functionalprogramming

の台頭

Page 47: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

安全で綺麗な開発のために - Scala

Page 48: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

通信を確実かつ大量に裁くために - Erlang

Page 49: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

But

Page 50: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Rubyの「関数型志向」らしさ

● 関数の最後の行は「暗黙に」返り値を持つ○ ディスアゼンブラの挙動を見ると、正確には関数を

Leaveしているっぽい挙動( http://mugenup-tech.hatenadiary.com/entry/2014/07/03/195554)

● 配列にeachやmapなどの「高階」的な扱いが自然とできる○ とはいえ、モダンな言語だと、だいたいこういうことは出

来る

Page 51: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

余談

Page 52: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Rubyは何処に影響を与えたか

Page 53: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Lisp族

Page 54: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

RubyはClojureに影響を与えている

Page 55: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

そもそもRuby

Page 56: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

with influence from Emacs implementation (Matz)

Page 57: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Lispから生まれLispに返る

Page 58: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Point

Page 59: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

2~3年前くらいまでは「関数型」で

「メシを食う」のは一部だった(印象)

Page 60: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

プロダクト採用事例の増加 - Scala

Page 61: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

RabbitMQなどのOSS基盤へ - Erlang

Page 62: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

そもそもLightweight Language

Page 63: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

2004 Lightweight Language WEEKEND

Page 64: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

プログラムより抜粋

Page 65: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

半分建前半分本音

Page 66: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

如何なるパラタイムでも

食わず嫌いしない

Page 67: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

なぜなら、技術が進歩する以上

プログラミングも進歩する

Page 68: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

前置きここまで(スライド48枚消化)

Page 69: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

見せてもらおうか金になりにくいパラダイムってやつをよ!!!

Page 70: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会
Page 71: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

夢は終わったが(第五世代コンピューター)

論理型の代表はダテじゃない!!

Page 72: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Prolog

Page 73: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

お薦めの処理系(現在 Stable 6.6)

Page 74: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Prologとかって1989年の言語だしWeb Serverとか作れないでしょ

Page 75: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

SWI PrologはWeb Serverも立てられる(公式doc)

Page 76: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

つーても例えばR言語とか連携しにくいでしょ

Page 77: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Rへのインターフェイス……だと?(公式doc)

Page 78: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Prologはまだ進化している……

Page 79: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

ちなみに総務省の異能ベーションでは

「Prologの次世代言語」で提出させてもらいました

Page 80: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

もしかしたら毎日寿司が食べられるかも ……(画像) Wikipedia ― http://commons.wikimedia.org/wiki/File:2007feb-sushi-odaiba-manytypes.jpg

Page 81: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

せっかくだからRubyで

論理プログラミング

Page 82: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

老舗のLogic Programming(ただ活動は微妙)

Page 83: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

SchemeによるLogic Programming本(翻訳は無し)

Page 84: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Lisp

Page 85: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

これはやりたかっただけです

Page 86: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

ただ、RubyのminiKanrenは微妙に使えない

Page 87: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

そこで‘Ruby-Prolog’

Page 88: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

使い方

require 'ruby-prolog'c = RubyProlog::Core.newc.instance_eval do # ここにロジックを書く

end

Page 89: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

ジャンケンのルールを

記述してみる

Page 90: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

以下、CROSS 2014の使いまわしです

(手を抜いてすいません)

Page 91: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

じゃんけんとは

● ある要素(この場合は手)に対して、何の手に勝利しているかの関係性によって勝敗が決定するゲームである○ グー→チョキ○ チョキ→パー○ パー→グー

Page 92: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

ある関係性を「解くためのロジック」を排除出来るならば、そのルール自体については、「推論」で事足りる

Page 93: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

つまりこういうこと

janken['グー', 'チョキ'].factjanken['パー', 'グー'].factjanken['チョキ', 'パー'].fact

puts query(janken[:P, 'チョキ']).to_s# => [[janken["グー", "チョキ"]]]

Page 94: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

「勝つ」とは

● ある要素(この場合は手)の関係が成り立つ場合において、何の要素と結びついているかということである○ プレイヤーの手とCPUの手という組み合わせがルール

に書いてあるなら、プレイヤーの勝ち

○ CPUの手とプレイヤーの手という組み合わせがルール

に書いてあるなら、CPUの勝ち○ どっちもないなら引き分け

Page 95: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

勝利ルールの定義

win_p1[:P1, :P2] << [janken[:P1, :P2]]win_p2[:P1, :P2] << [janken[:P2, :P1]]

Page 96: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

勝利判定関数の定義

def win?(p1, p2) if query(win_p1[p1, p2]).length != 0 'Win Player 1' elsif query(win_p2[p1, p2]).length != 0 'Win Player 2' else 'Draw !!' end end

Page 97: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

実行

puts win?('チョキ', 'パー')puts win?('グー', 'パー')puts win?('パー', 'パー')

Page 98: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

● 「事実」の宣言により、関係を記述するだけで、その「事実」についての推測は追いやれる○ 逆に言えば、「推論」を高度に隠蔽するため解りにくい部

分は生まれるが、これはどんな言語を使っても一緒だろ

● 推論部分を追いやれるということは、ある意味において、「設定ファイル」に近づいていく

Prologの良いところ

Page 99: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Prologの悪いところ

● 組み合わせ爆発○ これはグラフデータベースにも言えることで、推論に関する組み合わせが

爆発すれば、当然死ぬ

● デバッグしにくい○ X + Y = 3は、無限に組み合わせが生まれるので推論エラーになるけれ

ど、これを「推論」として避けながら記述するのは難しい

● 対話前提は人間には早すぎる○ 基本、irbのような対話型で「推論」を問い合わせながらやるけど、欲しいの

は「対話」ではなく「結果」

Page 100: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会
Page 101: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

テメエの記述が正しいかどうか俺に証明させろ

Page 102: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Isabelle

Page 103: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Proof Assistant諸事情

Page 104: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Proof Assistantってなんだ

● Proof Assistant は「証明支援」のこと● ある証明が矛盾なく「成り立つ」ために必要なも

のはなにか、あるいは矛盾していないかを虱潰しに探し出してくれる

● 「論理型」が「内側から成り立つ」ことを探すなら、「証明支援」は「外側から成り立つ」ことを調べてくれる

Page 105: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Proof Assistant二大巨頭

● 日本語の情報が探しやすく、コミュニティーもあり、完成度も高いのはCoq○ Ocamlベース

● Haskellベースで書かれているのはAgda

Page 106: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

えっ、Isabelle使わなくても

良くね?

Page 107: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

あなた、言ってはいけないことを言ってしまいましたね

Page 108: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Proof Assistant実績情報

Page 109: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

GIZMODOの記事

http://www.gizmodo.jp/2014/08/post_15285.html

Page 110: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

Isabellの力技を見ろ ーー String???

Page 111: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

報告

Page 112: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

半分建前半分本音

Page 113: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

如何なるパラタイムでも

食わず嫌いしない

Page 114: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

なぜなら、技術が進歩する以上

プログラミングも進歩する

Page 115: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

技術が進歩する以上周囲の

プログラミング言語も進化する

Page 116: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

そもそも技術やWebサービスは僕たちを便利にするためのもの

Page 117: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

「こんなことできるんだ!

スゲー!」というセンスオブワンダー

Page 118: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

mameさんーーRubyを用いた超絶技巧プログラム

Page 119: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

それが僕にとっては「すごいもの」だったから

Page 120: お金になりにくいプログラミング言語を学ぶ技術 - RubyHiroba 2014 生活発表会

聞いてくれてありがとう!