現状、プログラミングは専門的な修練を積んだ人による技能となっています。言うなれば、全てが職人による一品物です。これほど情報技術・機器が一般的になった世界で、これで良いのでしょうか? マニュアル通りにやれば誰でもできるような、そういう生産技術があってこそ、プログラミングは本物の「産業」たりえるとは思いませんか?
本研究室では、
誰でもできるプログラミングを目指して、プログラミングの基礎理論、およびその応用について研究しています。
本研究室のアプローチ
本研究室では、プログラミング教育や統合開発環境(IDE)などの改善を目指しません。そのような発想は、服飾産業で言えば針や糸を改善するようなものです。産業化に真に必要なのは「産業機械」、例えばミシンです。ボタンを押せば自動的に縫ってくれて、ほつれ止めも飾り縫いもスイッチ一つ、マニュアルを読めば誰でも操作できる。そういう「産業機械」がプログラミングには圧倒的に不足しています。
プログラミングのための産業機械のために、本研究室では以下の3点を中心に研究を行っています。
-
機械的に作成できるプログラム部品の特定:
ミシンは衣類を完全自動で作ってくれるわけではありません。衣類をデザインし、どこをどう縫うかは人間が決めなければなりません。ミシンが自動化してくれるのは、労力がかかり技術も必要な部分ではありますが、全てではないのです。プログラミングにおいて、このように自動化できる部分はどこかを突き止めなくてはなりません。
-
プログラム部品を機械的に作成する手法の開発:
プログラマが期待するようなプログラム部品が現時点で知られた技術で自動的に作成できるとは限りません。本研究室では特にプログラム変換と呼ばれる技法に注目し、プログラマの期待を実現する新技術の開発に取り組みます。
-
プログラム部品が機械的に作成できることを前提としたプログラミング手法の探求:
ミシンの有無によって衣類作成の方法論は根本的に変わり得ます。ミシンを普及させ役立たせるためには、それをうまく活用する方法もまた必要です。プログラミングの文脈で言えば、これは新しいプログラミング言語や新しいプログラミングのイディオムを作り出すことに対応します。
(関連:
森畑による講演の動画)
本研究室に向いている人・向いていない人
本研究室には、
現状のプログラミング・プログラミング言語に疑問・不満のある人が向いています。逆に、プログラミングに不満のない人、自由にプログラミングのできている人はあまり向いていないかもしれません。
プログラミングの研究をする以上、現状を知るという意味で、プログラミング言語等について一定の知識が必要です。しかし、高いプログラミングスキルや個々のプログラミング言語についての詳しい知識などは、あればそれに越したことはありませんが、必須ではありません。
プログラミングに関する技術をソリッドに組み立てるためには、最終的には数学が必要になります。どの程度の数学が必要かは研究テーマやアプローチによりますが、数学アレルギーの人にはあまりお勧めできません。逆に、数学は好きだが純粋数学よりも数学の応用を探求したい、という人は楽しめる可能性があります。
本研究室で扱うテーマの範囲
本研究室のテーマは「プログラミング」であり「ソフトウェア開発」ではありません。つまり、巨大なソフトウェアの開発というプロジェクト全体ではなく、ソフトウェアを構成する各部品の開発を扱います。例えば自動車の開発であれば、ホイール一個、場合によってはネジ一本の開発技法を扱う一方、品質管理、工場ラインの管理、PDCAサイクルの回し方、顧客との折衝などは対象としない、ということです。
本研究室は、高度な技術をもつ職人に特注すべきような、本物の「一品もの」の開発は扱いません。そのような例は、気象予報やスペースシャトル制御のように非常に高い性能と信頼性が必要なもの、富嶽コンピュータのような特別なアーキテクチャに特化したもの、最先端の技術を用いたものなどです。
研究テーマ例とそれに関連する文献
-
プログラムの自動並列化:
マルチコア・マルチCPUのコンピュータを活用するためには並列プログラムが不可欠ですが、性能の良い並列プログラムの作成は素人には困難です。本研究室では、並列性を意識せず記述したプログラムを並列プログラムへ変換する「並列化」による解決を試みています。並列化が容易なプログラムや並列化技法を特徴付ける理論の研究から、実際に自動手並列化を行うシステムの開発まで、理論と実践の両面から取り組んでいます。
-
プログラム変換:
難しいプログラムを、比較的簡単に書けるプログラムや、そのプログラムの直感的な説明から得ることができれば、プログラミングを簡単にできます。本研究室では、このようなプログラム変換を研究しています。上述の「並列化」は典型例です。これ以外にも、入力が少しだけ変化した場合に前回の計算をうまく再利用する「プログラム漸増化」や、可能性を全列挙し最適なものを発見するプログラムに枝刈り等を自動的に挿入する技法などを提案しています。
-
プログラム自動合成:
プログラム変換では、変換前のプログラムには含まれないプログラムを自動合成することをしばしば求められます。逆に、プログラム合成技術によってプログラム変換の能力が決まると言っても過言ではありません。プログラム変換のさらなる活用のため、本研究ではプログラム合成技術の開発にも取り組んでいます。
-
プログラム運算:
プログラムの変換や断片的なプログラムの自動生成ができるなら、それに適したプログラミング技法があるはずです。プログラム運算は、方程式を式変型を繰り返してで解くように、プログラムの変換・合成を繰り返してプログラムを構成するプログラミング技法です。ここでは、プログラム変換が方程式における式変型の方針(例えばどの変数を消去するとか、因数分解をするとか)、プログラム生成が変型後の係数等の計算に対応します。これを用いることで、プログラム運算はプログラミングの汎用的な方法(方程式で言えば「ガウスの消去法(掃き出し法)」のような)を与えます。
本研究室は、プログラム運算に関して世界を牽引する研究を行っており、上に挙げた成果も全てプログラム運算の方法論を背景としています。
研究室に参加したい方へ
過去の修士論文題目
- 松田知樹:配列集約処理における実行時情報を用いた自動漸増化(2020年度)
- 黒田航希:Pythonインタプリタからコンパイラへのステージングによる変換(2020年度)
過去の卒業論文題目
- 奥山裕也:単調性判定による貪欲法・動的計画法の自動導出(2016年度、一高賞受賞)
関連研究室
Akimasa Morihata. Dec., 2021