Live Programmingについて (LIVE 2017で基調講演します)
Live Programming に関する国際ワークショップ LIVE 2017 で基調講演を任されることになり、いろいろ考えた末「User Interfaces for Live Programming」という題で話すことにしました。講演内容は講演後に掲載することにして、Live Programming とは、LIVE とは何か、どんな人がやっているのか紹介してみます。
Live Programming
Live Programming とは、簡単に言うと**プログラム実行時の情報を参照しながらプログラムを編集できるようにする「プログラマ向けのインタラクションデザイン」**で、近年プログラミング言語・ソフトウェア工学・Human-Computer Interaction (HCI)の研究者の間で盛んに研究されています。実行中の様子を想像しながらソースコードを編集 → コンパイル → 実行しながらどうソースコードを直せばいいか考える、という開発サイクルを過去のものにしようという目論見です。
Live Programming というインタラクションデザインは、この Bret Victor の Inventing on Principle という講演で一躍有名になりました。ここで注意したいのは、Live Programming が可能な開発環境自体はかなり昔からたくさんあったということです。
古くて新しい Live Programming
Max/MSPやvvvvなどビジュアルプログラミング言語の多くはデータフロープログラミングが可能で、スライダーなどを操作して下流のノードの実行結果をインタラクティブに変えることができます。Morphic Framework を採用したSqueak/SmalltalkやLivelyKernelのように、プログラムを実行中に編集できる機能はオブジェクト指向プログラミングのための環境に備わっています。REPL (read-eval-print loop)をサポートするシンプルなインタプリタも、Live Programming を可能にする技術の一種と言えます。
このように「新しくない」Live Programming がそれでも近年注目を集めているのは、一つにはLive Programming がメインストリームを占める文字ベースの開発環境においても実現できるようになってきたためだと思います。例えば Live Programming が実装されたプロダクションレベルの開発環境にXcode, LightTable, 最近の例だとFlutterなどが挙げられます。
また、もう一つ ── このほうが本質的だと思うのですが ──Live Programming が、技術ではなくインタラクションデザインであり、ひいてはプログラマの体験を軸に考えた設計思想である、という面があります。
Live ⇔ Dead Programming
実は、Live Programming の技術的な定義は曖昧です。というか、技術だけでは定義されないといったほうが正確かもしれません。例えば私が作ったDejaVuという統合開発環境には、プログラムの実行結果が動画プレイヤーのように実時間軸に沿って表示されるタイムラインがあって、過去の実行結果を自由に探索できます。さらに、それを参照しながらプログラムを書き換えて、タイムラインをリフレッシュできます。
DejaVu では、コードの編集結果が実行時状態に反映されるのに少し時間がかかるため、単に実行中のプログラムをインタラクティブに編集する技術だけを Live Programming と呼ぶことにすると、DejaVu は定義からは外れます。しかし、Live Programming の第一人者である Sean McDirmid は最近書いた原稿のなかで DejaVu を代表例の一つとして挙げてくれています。(まぁ、Sean 自身が DejaVu 論文の共著者なので身内びいきという面はあるでしょうが……)
これについては、Live Programming の反対の概念(Dead Programming?)を考えるとスッキリすると思っています。Dead なプログラミングでは、ソースコードというプログラムの死んでいる表現とにらめっこしながら実行時の生きた状態を想像する必要があります。このとき、プログラマは頭の中で死んだプログラムの実行状況をエミュレーションしているはずです。
Dead Programming のように頭の中で想像しなくても、開発環境が生きたプログラムの状態を分かりやすく提示してくれて、しかもそれに関するソースコードを直感的に編集できるようなインタラクションデザインこそが Live Programming なのです。(余談になりますが、Inventing on Principle で有名になった Bret はその後Stop Drawing Dead Fishという講演をしています。)
Programming Experience (PX)
最近、Live Programming に限らず、プログラミングのインタラクションデザインを再考する試みがたくさん出てきています。例えばJupyter NotebookやEveなどは文芸的プログラミング(Literate Programming)が Live Programming と結びついて現代的な再興を果たした例です。プログラミング言語のような単一のユーザインタフェース(UI)だけを改善するのではなく、プログラマを取り巻く環境、それが提供する体験を改善しようという流れができてきています。
UI からユーザ体験(UX)へのシフトのプログラミング版、つまりプログラミング言語(PL)からプログラミング体験(PX)へのシフトと見ることもできるかもしれません。SIGPX (Special Interest Group on Programming Experience)は、そうした背景のなか私が東工大の増原先生と一緒に日本で昨年立ち上げたグループです。
LIVE Workshop
Live Programming について学術的な背景を持つ人が中心となって集まる場は、ソフトウェア工学に関するトップ国際会議 ICSE 2013 に併設するかたちで初めて開かれました。これがWorkshop on Live Programming (LIVE 2013)です。Plenary Session では、ビジュアルプログラミングにおける Liveness を初めて提唱した Steven Tanimoto 氏が「A Perspective on the Evolution of Live Programming」、Morphic Framework を実現した David Ungar, Randall Smith 両氏が「The thing on the screen is supposed to be the actual thing」、そして即興プログラミングで音を生み出す Live Coding に古くから関わってきた Thor Magnusson 氏が「The Threnoscope」というタイトルで発表しています。その他、デモ発表や講演、BoFセッションがあったようです。
LIVE 2013 主催者の一人、Brian Burgは当時 HCI とソフトウェア工学で有名なCode & Cognition Lab (Prof. Andy Ko)の博士課程学生で、今は Apple で Safari のデバッガを作っています。Safari のデバッガに DejaVu のタイムライン的なものを実用的な形で盛り込んだ凄腕プログラマです。(PX っぽいことができる学生、わりと産業界に行くケースが多い気がします。Adobe で JavaScript デバッガ Theseus を作っていたTom Lieberとか。)
LIVE 2013 の次は少し間が空いて、プログラミング言語に関する難関国際会議の一つECOOP 2016に併設するかたちで開かれました。Workshop on Live Programming Systems (LIVE 2016)です。プログラム委員には Java/Dart の設計に関わったGilad Brachaや Live Coding の第一人者Alex McLeanなどが名を連ねています。私もプログラム委員として参加した他、Live Tuningという登壇発表を行いました。驚いたのが会議参加者の Live Programming への関心の高さで、会場を急遽大きめのところに移してもらうほどの人気でした。
そして、今年はプログラミング言語関連で最も大きな国際会議SPLASHの 1 トラックとして、オブジェクト指向プログラミングに関する国際会議OOPSLAと同時開催でLIVE 2017が開かれます。プログラム委員には、先に紹介した Eve 設計者のChris Grangerや、エンドユーザプログラミング研究で著名な MIT のHenry Lieberman、Microsoft Research で Visual Studio のDebugger Canvasやビッグデータ可視化などに関わってきたRob DeLine、図形を直接操作してその図形を描画できるプログラムを編集できる(もちろんその逆もできる)Sketch-n-Sketch でプログラミング系・HCI 系両方のトップ会議に論文を通したRavi Chugh、Python Tutorをはじめとするインタラクティブなプログラム可視化や、最近だとテーブルのあるどんな Web ページもデータサイエンス用開発環境にしてしまうDS.jsなどに取り組んできたPhilip Guoなどが名を連ねています。
LIVE に深くかかわる人たちのなかで、明らかに HCI 寄りの研究者が増えてきています。そのうち、HCI 系のトップ国際会議でワークショップが併設される日も遠くなさそうです。
おわりに
ここまで紹介してきたように、Live Programming とそれを取り巻くトピックは研究者の間で年々盛り上がってきていますが、それだけでなく産業界にもインパクトを与えてきています。一研究者としては、今後の盛り上がりにぜひ注目していただければ幸いです。
この他にもより幅広く PX 関係の研究をしているラボなどが知りたい場合は過去の記事やGoogle Docsを見てみてください。(私と研究してみたい場合はこちらをご参照ください。)