java-oneの話

13
JavaOneRich Hickeyセッションを聞いてきた話 @naokiainoya

Upload: recruit-technologies

Post on 20-Jun-2015

2.015 views

Category:

Engineering


1 download

DESCRIPTION

Java One 報告.

TRANSCRIPT

Page 1: java-oneの話

JavaOneでRich Hickeyのセッションを聞いてきた話

@naokiainoya

Page 2: java-oneの話

自己紹介

相野谷 直樹

!ainoya

株式会社リクルートテクノロジーズ APソリューションG所属

主な仕事:

新技術の導入検証など

Page 3: java-oneの話

JavaOne

• OracleによるJavaの祭典

• Sanfransisco • 9/28-10/2 • 500を超えるセッション

Page 4: java-oneの話

Rich Hickey

•Clojureの作者

•その昔はC++や.NETなどで20年のキャリア •エンタープライズ領域での経験あり •大変な思いをしたこともあった…といっていた

Page 5: java-oneの話

“Clojure made simple”

•1時間のセッション

•Clojureの概要説明 •言語的な特徴 •利用例 •実用性 • エコシステム

Page 6: java-oneの話

“Clojure made simple”

Javaと比べてどうか?

→Clojureのシンプルさ

Page 7: java-oneの話

何がSimpleになるのか?• Smaller is better

• 少ない記述でコードベースを小さくできる • polymorphism made simple

• protocol, multimethod • 型と実装の分離

• Data as program • S式,EDN • コードとデータを均質に扱える • Data-orientation;データ処理と相性がよい

Page 8: java-oneの話

Data as program

• オブジェクト内のデータ構造にアクセスする • getHogehoge,,,OOPだと大体めんどくさくなりすぎ.複雑

• オブジェクト間のやりとり=結局単純なkey-valueのmapだけでいいんじゃない?

• RMI/DCOM/CORBAが死んでjsonが生き残ったよね

• Clojureならデータ構造はmapで十分

• RichはO/R mapperとか好まない

Page 9: java-oneの話

“Death by specificity”

HTTPServletRequest getAttribute, getAttributeNames, getCharacterEncoding, getContentLength, getContentType, getInputStream, getLocalAddr, getLocale, getLocales, getLocalName, getLocalPort, getParameter, getParameterMap, getParameterNames, getParameterValues, getProtocol, getReader, getRealPath, getRemoteAddr, getRemoteHost, getRemotePort, getRequestDispatcher, getScheme, getServerName, getServerPort, isSecure, removeAttribute, setAttribute, setCharacterEncoding

“Everything using HTTPServletRequest is special”

Page 10: java-oneの話

Code is data(defn build-request-map "Create the request map from the HttpServletRequest object." [^HttpServletRequest request] {:server-port (.getServerPort request) :server-name (.getServerName request) :remote-addr (.getRemoteAddr request) :uri (.getRequestURI request) :query-string (.getQueryString request) …

“10個のデータ型毎に使う10個の関数があるより 1個のデータ型に100個の関数があるほうがまし”

- Alan J. Perlis

Page 11: java-oneの話

Data as programからわかること• “Objects are like marionette”

• データ構造を操つるメソッドがオブジェクトにたくさん生えている

• “more refs more uncertainly”

• Rich(Clojure)の考え • システムは,シンプルかつ小さな部品を集めて作るべき

• 三本足の椅子の例え

Page 12: java-oneの話

Clojure made simple最低限のデータ型と,最低限の関数でシステムを作る

Page 13: java-oneの話

最後に:セッション全体を通して

• Clojure;実用的なLISP

• JVMで動く • イミュータブルな言語設計 • 並列処理が書きやすい

• Webサービスはもちろんエンタープライズ領域でも

価値を発揮する→どんどん使いましょう