2月27日(土)東京工業大学の会場をお借りして第1回 Special Interest Group on Programming Experience (SIGPX)を開催しました。開催にあたって考えていたことは、だいたい最初のプレゼンテーションで喋ったのですが、もう少し詳しく書いてみます。また、実際にSIGPXを開催して考えたこともあわせて書き残しておきたいと思います。

第1回SIGPX

SIGPX

私は常々、プログラミングのための環境はアプリオリに用意されている道具として語られることが多いように感じていました。これは、プログラミングを楽しむ母集団のなかで、プログラミング環境を作る人の数を考えれば当たり前かもしれません。例えばゲーム作りならUnity、プログラミング教育といえばScratch、マイコンのプログラミングならArduino…というように、目的に応じてすでに用意されている統合開発環境を便利に使う、という人が多いでしょう。

ただし、これらの環境もまた誰かの手で設計されたものであり、一般的なアプリケーションのユーザインタフェースと同様に設計次第で使い勝手が大きく変わります。プログラミングは、人がプログラムを作る行為です。その体験が、使う道具によって左右されるのは当たり前のことです。道具にはいろいろな種類があって、しかも、使い合わせることが容易なもの、難しいものがあります。AppleがiPhoneのハードウェアからソフトウェアまでを全部一気通貫で開発し、他のベンダーが入る余地を残さないのと同じように、その組み合わせでしか動作しないものもあります。きれいに分類することは難しいのですが、次のようなものがあります。(具体例など、詳しくは後ほど紹介します。)

  • プログラミング言語
  • ツールキット
  • 統合開発環境

これらを設計するためには、プログラミング言語・ソフトウェア工学・Human-Computer Interactionなど多岐にわたる研究分野に関する知識が必要です。また、設計したものを実際に使ってもらうためには、(プログラミングのための環境に限らないですが)最近ではコミュニティを育てるという視点も非常に重要です。SIGPXは、そうした幅広い知見を交換し、蓄積するための場として立ち上げたものです。プログラミングのための環境を作ったり評価したりしている人々(研究者、開発者)が中心になると思いますが、環境を使っている人々が事例紹介などを通してフィードバックを返せる場にもなってほしいと願っています。

また、国際的に見てもSIGPXのような研究内容への注目は非常に高まっています。以前からVL/HCCという国際会議はありましたが、ソフトウェア工学に関するトップ会議ICSEと併催でLive Programmingに関するワークショップLIVE 2013が開催されたり、Live Codingに関する初めての国際会議ICLC 2015が開催されたりしています。今年はオブジェクト指向に関する国際会議ECOOP併催でLIVE 2016とPX/16が開催されます。イベントの一覧はSIGPXのWebサイトに載せているのでそちらをご覧いただくとして、国際的な研究・開発コミュニティから日本のSIGPX関係者がちゃんと見えるようにするためにも、何かしら看板のようなものは必要だと考えています。それが、SIGPXのWebサイト開設当初より英語版のページを用意している理由です。

そんなわけで、第1回は多岐にわたる発表があって懇親会まで盛り上がったので、とりあえず成功といってよさそうです。これからも引き続き開催したいと思っているので、ご指導ご鞭撻のほどよろしくお願いいたします。参加にご興味のある方は加藤に直接ご連絡いただくか、Facebook グループにご参加ください。

さて、ここからは具体例を挙げながら、プログラミング体験を提供する道具にどんな種類があるのか見ていきます。自己紹介も兼ねたいので、自分の研究も積極的に宣伝していく方向で:)

プログラミング言語

プログラミングのための道具というと、まず多くの人が思い浮かべるのが言語かもしれません。モチはモチ屋ということでSIGPXもう一人の発起人である増原先生にお任せする所存なのであまり詳しく書きませんが、私の専門であるHuman-Computer Interaction分野でも新しい言語を設計することはあります。

例えば文字ベースの言語ではすべてのことがらを文字で表記することが当たり前ですが、変数や定数の名前を決めるのが難しいことも多いと思います。多くの学生が同じ仕様のプログラムを書く教室で、変数名の統計を取って、目的に合った変数名を推薦してくれるシステム[UIST ’15]が提案されていたりします。この問題は、プログラムが実世界の内容を取り扱うようになったとき顕著になります。例えば、ジェスチャ認識のプログラムでは何らかの姿勢情報を参照する必要がありますが、あらゆる姿勢に名前をつけるのは無理です。そこで私は、姿勢情報を表すリテラルには特別に写真を使えるようにする、Picode[CHI ’13]というプログラミング言語の拡張を提案しました。

ツールキット

ライブラリやAPIという言葉もありますが、見方がちょっと違うだけで全部ツールキットと呼べるものです。その名の通り、プログラミングのときに使える一揃いの道具です。JavaのためのGUIツールキットAWT, Swingのように、基本的には決まった言語にしか用意されていないものもあれば、OpenCVのようにさまざまな言語にポーティングされているものもあります。

Human-Computer Interactionの研究分野では、ユーザインタフェース設計を助けるためのツールキットが数多く発明されてきました。たとえばスクロールバー[Interfaces ’98]やプログレスバー[UIST ’07]など、さまざまなWidgetの設計が議論されてきました。WidgetはGUIを簡単に作れる便利な部品です。実世界で動作するセンサやアクチュエータをPC/Macから簡単に利用できるよう全てUSBデバイスとして実装し、APIを提供するPhidgets[UIST ’01]というものもあります。実世界の物体は画面上のピクセルのようには動かせませんが、私はそれをGUIと同じようなAPIで動かせるライブラリとしてPhybots[DIS ’12]を作りました。

統合開発環境

統合開発環境は、その名前の通り、コンパイラ、エディタ、デバッガのような複数のツールが統合されたものです。統合開発環境を使えば、別のツールに切り替えるメンタルワークロードがありません。プログラミングのワークフロー全体を支援する、大きなツールです。かつては統合開発環境を作ったり拡張したりすることは一人では難しかったのですが、最近は状況が変わってきています。冒頭で挙げたScratchとArduinoは、どちらも統合開発環境です。オープンソースプロジェクトなので、その気になれば使い勝手を自分好みに手直しできます。Unityも、C#のコード編集にはMonoDevelopというオープンソースの開発環境を利用しています。また、既存のインタプリタなどを使えば、簡単な開発環境なら10分で作れるのです。

統合開発環境を作るための部品の再利用性が高まり、一人でも作れる規模になってきたことで、研究も盛んになってきました。多くは、特定の用途のプログラムを書きやすくするDomain-Specific Language (DSL)と同じような発想で、特定の用途のプログラム開発をしやすくするDomain-Specific Environmentの研究です。私が以前Microsoft Research Asiaでインターンしたときに作ったDejaVu[UIST ’12]は、既存の統合開発環境(MonoDevelop)を拡張してインタラクティブな画像処理を行うプログラム開発をしやすくしたものです。プログラミング言語を拡張した例として挙げたPicodeはProcessingをベースにしており、実は言語だけでなくさまざまな面で手を加えています。例えば、ポーズライブラリというユーザインタフェースの追加や姿勢情報を処理するためのビルトインライブラリの追加などを行っています。

ここまでプログラミング体験を提供する、プログラムを作るためのいろいろな道具を紹介してきましたが、最近の道具はインターネットに繋がっているのが当たり前になってきています。オンラインにあるソースコードリポジトリからサンプルコードを引っ張ってくるコード補完の拡張Blueprint[CHI ’10]や、アプリケーション起動中に発生した例外の内容とソースコードの文脈から原因とアドバイスを検索して表示してくれるデバッガの拡張HelpMeOut[CHI ’10]など、間接・直接に多くの人の協力を得てプログラミングすることが当たり前になっていくでしょう。私は、プログラマとエンドユーザという二項対立には意味がないと思っているので、例えばプログラマが表現力を決めてデザイナがコンテンツを作り、それを閲覧するユーザがいつでもプログラマやデザイナになれる統合デザイン環境というものを提唱しています。TextAlive[CHI ’14]はそのような考え方をベースにWeb上で動画をプログラミングできるようにした環境です。

SIGPXでは、プログラミング体験を提供するあらゆるものを対象に、プログラミング言語、ツールキット、統合開発環境だけでなく、ネット越しの「誰か」とどう協力するか、もしかしたらコミュニティ設計を支援する方法なども含めてみなさんと勉強していければいいなと思っています。ちなみに、第1回SIGPXの最後に1時間ほど議論する時間を設けたのですが、PXの定義は人によりけりでした。この記事はあくまで私見ということで、みなさんの思うPXについて、ぜひ聞いてみたいと思っています。


2 Responses to “第1回SIGPXを開催しました”

Trackbacks and Pingbacks:

  1. 情報処理が科学を更新する(IPSJ-ONEに登壇しました) | junkato.jp

    […] SIGPXについて興味を持たれた方は、ぜひ一つ前のブログ記事をご覧ください。5分では紹介しきれなかった未来志向のプログラミングの話、とくにプログラミングできない人までプログラ […]

  2. 二年目の後半を振り返る | junkato.jp

    […] 第1回SIGPXを開催しました […]

Leave a Reply

  • (will not be published)