無事、基調講演を終えて帰国しました。フォローアップ記事を後日執筆予定ですが、とりあえずスライドをどうぞ。

Live Programmingに関する国際ワークショップLIVE 2017で基調講演を任されることになり、いろいろ考えた末「User Interfaces for Live Programming」という題で話すことにしました。講演内容は講演後に掲載することにして、Live Programmingとは、LIVEとは何か、どんな人がやっているのか紹介してみます。

Live Programming

Live Programmingとは、簡単に言うとプログラム実行時の情報を参照しながらプログラムを編集できるようにする「プログラマ向けのインタラクションデザイン」で、近年プログラミング言語・ソフトウェア工学・Human-Computer Interaction (HCI)の研究者の間で盛んに研究されています。実行中の様子を想像しながらソースコードを編集→コンパイル→実行しながらどうソースコードを直せばいいか考える、という開発サイクルを過去のものにしようという目論見です。

Bret Victor – Inventing on Principle

プログラマの人は、今使っている開発環境と、このデモを見比べてみてください。前にも紹介したかもしれないけれど、もう一度。この動画に触発されたプロジェクトが、今、世界各地で複数動き始めています。 / “Bret Victor – Inve…” http://t.co/6cjfJCaP

— arc@dmz (@arcatdmz) 2012年10月28日

Live Programmingというインタラクションデザインは、このBret VictorのInventing on Principleという講演で一躍有名になりました。ここで注意したいのは、Live Programmingが可能な開発環境自体はかなり昔からたくさんあったということです。

古くて新しいLive Programming

Max/MSPvvvvなどビジュアルプログラミング言語の多くはデータフロープログラミングが可能で、スライダーなどを操作して下流のノードの実行結果をインタラクティブに変えることができます。Morphic Frameworkを採用したSqueak/SmalltalkLivelyKernelのように、プログラムを実行中に編集できる機能はオブジェクト指向プログラミングのための環境に備わっています。REPL (read-eval-print loop)をサポートするシンプルなインタプリタも、Live Programmingを可能にする技術の一種と言えます。

このように「新しくない」Live Programmingがそれでも近年注目を集めているのは、一つにはLive Programmingがメインストリームを占める文字ベースの開発環境においても実現できるようになってきたためだと思います。例えばLive Programmingが実装されたプロダクションレベルの開発環境にXcode, LightTable, 最近の例だとFlutterなどが挙げられます。

また、もう一つ──このほうが本質的だと思うのですが──Live Programmingが、技術ではなくインタラクションデザインであり、ひいてはプログラマの体験を軸に考えた設計思想である、という面があります。

DejaVu Timeline

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 NotebookEveなどは文芸的プログラミング(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 Thorenoscope」というタイトルで発表しています。その他、デモ発表や講演、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 ChughPython Tutorをはじめとするインタラクティブなプログラム可視化や、最近だとテーブルのあるどんなWebページもデータサイエンス用開発環境にしてしまうDS.jsなどに取り組んできたPhilip Guoなどが名を連ねています。

LIVEに深くかかわる人たちのなかで、明らかにHCI寄りの研究者が増えてきています。そのうち、HCI系のトップ国際会議でワークショップが併設される日も遠くなさそうです。

おわりに

ここまで紹介してきたように、Live Programmingとそれを取り巻くトピックは研究者の間で年々盛り上がってきていますが、それだけでなく産業界にもインパクトを与えてきています。一研究者としては、今後の盛り上がりにぜひ注目していただければ幸いです。

この他にもより幅広くPX関係の研究をしているラボなどが知りたい場合は過去の記事Google Docsを見てみてください。(私と研究してみたい場合はこちらをご参照ください。)


No Comments

Be the first to start a conversation

Leave a Reply

  • (will not be published)