2012/08/30

LL Decade 参加メモ(後編)

書こう書こうと思って、1ヶ月近く経過しようとしている・・・
講演についてはすでにvimeoに動画が上がっている。
なので細部の説明は割愛する。個人的な感想のみ。


Language Update Decade
  • forkは世界を良くする(こともある)
  • Pythonが変化に遅い。しかしそれは慎重に検討、ドキュメント化されるから。デコレータの導入が議論された際、複数の案をGuido van Rossumが各案のメリデメをまとめてドキュメント化した
  • 言語は黒子。目立たない。C言語のカンファレンスとかはない。でもRubyは言語が前面に出る。それはRubyがコミュニティのシンボルだから。そして楽しいからそれはコミュニティのシンボルになり得る。

プログラミング言語処理系を自作してわかったこと

@Constellationさん無双といった感じ。
「Level5」Ecma262完全準拠のEcmaScript実装系。
やっぱ低レイヤーいじれる人はかっこいいなと思った。


俺たちの継続的hogehogeは始まったばかりだ!

Jenkinsの話ばっかり。
見た目がぶっ飛んでたkyon氏の発表が一番実があった。
コミットの自動化により仕事の進捗のログを取るという発想は良いと思った。


Lightning Talks
  • 憧れが人を成長させる
  • 日本のエンジニアの今後10年の戦略。世界中で使われるソフトを作る、あるいはアーキテクト方面を目指す。
  • LLプログラマは仕事は速いが始めるのが遅い。
  • LLプログラマは飽きっぽい。
  • 勉強会は学校のようなもの。卒業する人もいる。たまにそんな人たちが戻ってきて同窓会みたいになる。

2012/08/05

LL Decade 参加メモ(前編)


2012年8月4日、銀座ブロッサムにおいて開催された「LL Decade」に行ってきた。
前回参加したのは2007年の「LL Spirit」だったと思うから、もう5年ぶりになるのか。

プログラムは以下の通り。
  • 開会宣言
  • 基調講演
  • Language Update Decade
  • プログラム言語処理系を自作してわかったこと
  • 俺たちの継続的hogehogeは始まったばかりだ!
  • Lightning Talks
  • 閉会宣言
  • 懇親会+Lightning Talks

開会宣言は日本Unixユーザー会の法林浩之氏。
眠かったので「赤いストラップの人は写真撮影NG」ということしか覚えていない。

続いてクックパッドの宮川達彦氏による基調講演。
Perlハッカーとして業界内ではあまりにも有名人であるが、現在の所属はRubyを中心に使用すると言われているクックパッド。そのあたりのジレンマ(?)のような話も出るのかと思ったが、そのような言語の差異の問題をむしろポジティブに捉える講演内容だった。

以下、講演内容のメモ。

基調講演(宮川達彦氏)



サンフランシスコは青空が印象的だが、その印象とは裏腹に気温は低く、夏でも20℃弱しかない。 先週日本入りしたが、30℃を超える東京は暑くて死にそうだ。

同僚に、今度LightWeight Languageのカンファレンスに出るのだと言ったら、そもそもLightWeight Languageとは何か? という話になった。コンパイラのあるなしがそれを決めるのか? それとも別の基準があるのか? もはやC言語とJava以外はLightWeight Languageと扱ってもいいのではないか? でもWikipedeiaを見るとむしろC言語がLightWeight Languageに分類されている。省メモリなのが理由らしい。確かにそういう考え方もあるかもしれない。

自分はこう考えている。「少ない能力の消費で開発できる。少ない労力でスゴいことができる言語」。それがLightWeight Language。

LL Decadeということで、この10年で何が変わったかという話をする。その変化は、Code, Community, Cultureという言葉で言い表すことができる。

10年ほど前。伊藤直哉さんと出逢った。お互い所属していた会社は違うが、『BlogHacks』という本を共著で出版した。コードを超えたコラボレーションがこの頃から盛んになったように思う。

Livedoorを退職したとき、SixApartの社長Benが日本に来ていて飲みに行った。求職中である旨を伝えると、レジュメを送るように言われた。しかし就職活動もろくにしたことがなかったのでレジュメの書き方がわからなかった。しょうがないのでCPANのURLを送った。翌日、コードを読んだBenから採用の連絡がきた。

ソフトウェアは人。コードはその人のことを表す。Code = What I really am.
コードには人格が宿る。だからコードを見て自分のことを評価してもらえるのはうれしい。

コミュニティの必要性を感じて、2006年、YAPC::ASIAを開催した。

「polyglot」という単語を最近見かけるようになった。「複数の言語を知っている人」という意味。特定の言語に拘泥せず、色々な言語の動向に対してアンテナを張り、適材適所で選択する人。そのような人は「Polyglot Programmer」と呼ばれる。サイボウズ・ラボの竹迫良範さんが書くような、複数の言語で動くプログラムのことではない(笑)。

Pythonはドキュメントが良い。PEP(Python Enhancement Proposal)という形でドキュメント仕様が整理されている。良いドキュメントの形というものがあらかじめ定められている。
The Zen of Python」に謳われたPythonの思想は、TMTOWTDI(There's More Than One Way To Do It)を是とするPerlの思想とは相反する。それはそれで良い。ただ使い始めて3ヶ月くらいすると、段々と「なんでこういう書き方ができないんだ」的なウザったさが出てくるが(笑)。

Perlプログラマはモジュールを作ってCPANに上げたがる。
RubyプログラマはDSLでフレームワークを作りたがる。
PythonプログラマはRSTドキュメントを書きたがる。

GitHubの登場が与えた影響は大きい。
GitHubのURLがそのままプログラマとしてのレジュメになる。
GitHubが果たした特に大きな貢献は、forkが持つイメージを変えたこと。GitHubの登場以前にもライセンス上はforkすることが可能だったが、そこにはどこか「分裂」「気に入らない」といったネガティブなイメージがあった。しかしGitHubはそのイメージを変えた。「変えたければ好きなように変えてよい。それには誰の許可も必要ない」という文化を醸成した。
GitHubのおかげでforkはポジティブなものになった。
Forbesもそのことを記事にしている。曰く「GitHubはプログラミングを民主的にした」。
10年前に比べて、環境が良くなった。

PythonにはWSGIというインタフェース規格がある。RubyはこれにインスパイアされてRackを作った。PerlはこのRackを真似てPSGIとPlackを作った。
良いものからアイデアを借りてくるのは良いことだし、コピーするのも良いことだ。Rackを構成するファイルの拡張子を.rbから.pmに変えればほとんどPlackのファイル構成と同じになる。

拙速は巧遅に勝るという言葉がある。
しかし、遅く始めることにもメリットがある。
遅く始めればその分先人の知識を多く見ることができる。遅い方が良いこともある。鍋パーティーに最初から参加すると準備を手伝わされるが、1時間くらい遅れて参加すると良い感じに煮えていたりするのと同じ(笑)。
The Zen of Python」も同じことを言っている。曰く「Now is better than never. Although never is often better than *right* now.(やらないよりは今やるべき。けど今「すぐ」やるならやんない方がいいこともある)」
(※和訳はPython Japan User's Groupより)

Cross Language Pollination。
Perl、Ruby、Python。そのそれぞれが互いに影響を与え合っている。
RubyコミュニティがPerlコミュニティの動向を観察し、良さそうなものがあればRubyに取り入れている。
RubyGemsの人気モジュールであるmime-typesはCPANのモジュールから影響を受けて作られたものだ。

名前付けは重要。
Perlはネストし過ぎ。「::」が多すぎる。説明的ではあるが冗長でもある。
Pythonは頭か後ろにpyを付ける慣習がある。どっちにつければいいのかわからない。
Rubyの命名規則はカオスで、名前を見ても何がなんだかわからない。
名は体を表すような説明的な名前よりも、クリエイティブな名前の方が逆に解りやすい。現在のPerlにおける3大Webフレームワークである「Catalyst」「Dancer」「Mojolicious」は、説明的な名前ではないが、一度何をやっているものか理解してしまえば、「::」を何個も連結した名前よりもむしろ解りやすい。

今はRubyを書くことが多い。RubyGemsにもモジュールを上げている。

Keep Cross Language.


(※終わり。以下、質疑応答)


【質問】
仕事ではRubyを書くことが多いとのことだったが、今後もPerlには関わり続けるか。

【回答】
Plackをリリースしたときにはすでに仕事ではもっぱらPythonを書いており、Perlは殆ど書いていなかった。ただ、他の言語の良いところをPerlに取り入れていくという視点で、今後もPerlには関わっていく。


【質問】
「この言語にはこれが足りないな」というものはあるか。

【回答】
特段はないが、「PHP Sadness」というサイトが面白い。趣味でPerlを書き、仕事でPHPを書いている人がPHPの気に入らない点をまとめているサイト。

Rubyは綺麗だと思う。Perlと違ってオブジェクト指向が後付けではない。Perlでは素直に書けないことが、Rubyでは綺麗に書ける。Rubyの「手錠をはめられていない感」がいい。


【質問】
近年のVimの台頭に対して、Emacsユーザとして何か思うところはあるか?

【回答】
(※挙手による会場アンケート。VimユーザとEmacsユーザの比率は6対4くらいだった。)
Vimは普通のエディタと比べて明らかにヘンだと思う。閲覧用のモードと編集用のモードが分かれているところとか。
若い人は何故Vimを使うのだろうか。プリインストールされているから? 何かハッカーっぽい感じがするからかもしれない。


【質問】
PHPを使えと会社から言われたらどうするか?

【回答】
そもそも転職するときにPHPを使用している会社を候補に入れないようにしている。
ただ、面白い人と面白い仕事をするのが第一であり、言語選択の優先度はそれに比べれば少し落ちる。

定期的に新しい言語を学ぶべきだと思うが、新しい言語を学ぶにはその言語を使っている会社に就職すると効率がいい。お金をもらいながら勉強することができるから。


【質問】
PHPを使っている会社を避けると言っていたが、PHPを主として使用しているFacebookからオファーが来たとしても断るのか?

【回答】
Facebookからはすでに何度もオファーが来ている。
ただ、FacebookはPHPをただのページ記述言語としか使っていないはず。裏でC++にコンパイルして使っているはず。そういう割り切った使い方はアリかもしれない。

面白い人と面白い仕事をするのが第一であり、PHPが絶対にイヤというわけではない。ただ、現状においては、PHPを使う会社を避けた方が、面白い人と面白い仕事をできる会社に当たる可能性が高くなるからそうしているだけ。


【質問】
JavaScriptについて何かコメントを。

【回答】
jQueryを作ったのはPerlの人。「$」とかにその影響が見て取れる。
自分としてはサーバサイドに興味があるので、あまりJavaScriptの優先度は高くない。ただ、面白いことをしているとは思っている。


【質問】
日本とアメリカの会社の違いについて。

【回答】
国の違いよりも、時期と使うツールによる差が大きい。オープンソースのプロダクトを使用している会社は、自分たちでもオープンソースにコミットしていることがあり、GitHubのアカウントを持っていたりする。そういう会社は、コードを通してその会社の文化を知ることができるので良い。


【質問】
Haskellのような関数型言語について。

【回答】
あまりやったことがないからわからない。
ただ、PSGIはラムダ計算の要素も取り入れていると思う。