separator line

らぼなび!

第 6 回 金沢工業大学 工学部 情報工学科 小林研究室の巻

小林 要 教授 , 伊藤 綾敏 さん (M2), 小嶋 芳幸 さん (M2), 松本 大 さん (B3)

 教授と学生のお写真

第 6 回目の「らぼなび!」は 金沢工業大学 工学部 情報工学科 の 小林要研究室 へお邪魔しました。小林研究室は、ソフトウェアの加工技術について研究しておられ、Role Programming System というプログラム加工ツールを研究しておられます。

ACM (アメリカ計算機学会) が主催している ACM 国際大学対抗プログラミングコンテスト (ICPC) に出場されたり、プログラミング道場を開校されたりと、プログラミングスキルを向上させる取り組みにも積極的な研究室でした。

ソフトウェア開発の生産性を上げるためのユニークな取り組みをされている小林研究室の小林要教授と学生 3 名へのインタビューです。小林研究室のプログラミングに対する思いや夢をお伝えしたいなと思います。


小林 要 教授

 小林教授

プログラミングが好き

-- まず始めに、小林先生の研究の概要を教えていただけますか?

RPS (Role Programming System) という、プログラム加工ツールに取り組んでいます。 現在も、自分でプログラミングをして取り組んでいます。 言語は、アセンブラ、C++ などありましたが、現在は Java で作っています。

-- RPS はどのような機能を果たすソフトなのですか?

RPS はルールに基づいて、ある木構造を別の木構造への加工をするものです。プログラ ムは木構造になっていますから、RPS に入力文法、加工ルール、出力文法を与えると、 プログラムを作成する元となる情報から 1 本のプログラムを自動生成することができ ます。ここで、ロール (役割) 名は、加工ルールを簡単に作るために使います。たとえ ば、代入文の場合は、代入先と代入元というロール名をつけて、分かりやすくしていま す。そういったツールを 1985 年ごろから取り組んでいます。

-- そもそも RPS を作られたきっかけについて教えていただけますか?

プログラムの開発生産性を上げる方法として、科学的なアプローチで取り組める方法は 2 つあると考えています。ひとつは、再利用性を上げること。もうひとつは自動化です ね。再利用は、分野によります。自動化は、現状は汎用性の高いツールはなかなかあり ません。そういう意味で、自動生産ツールが必要だと思っています。

そして、自動生産ツールを作るためには、「ソフトウェア開発とは何か?」ということ に対する答えを出す必要があります。私自身はこの答えを、"要求を起点として情報を 追加しながら、加工するノウハウ"であると考えています。料理にたとえるならば、料理 をするノウハウが技術となります。

料理は、原材料とレシピの中の具体的な作業から出来上がりますね。RPS も同様のア プローチを取っています。ですので、RPS をソフトウェアの電子レンジと呼んでいるん ですよ。原材料とレシピを入れて、しばらくすると、ソフトが出来上がるという訳です。


プログラミングは練習が大事。

 小林教授

-- プログラミングスキルを伸ばすためには、どうすればよいと思いますか?

これは面白いテーマですね。アメリカの計算機学会 が、毎年、大学対抗で プログラミング コンテスト (ICPC) を実施しています。今年は 83 カ国、1700 大学、6000 チーム が参加していました。各地区で予選があり、それに勝ち抜いたものが ワールドファイナルに出場できます。本学では、このコンテストに、私が大学に 赴任したときから参加しています。

世界大会ですので、問題は全て英語です。問題量は、予選で 3 時間 8 問、決勝で 5 時 間 10 問、ソースコードは 200 行から多くて 300 行なので規模の点では難しい問題で はありません。だいたい三角形の面積を求めるような数学的なものです。よい結果を 残すには、英語が分かって、数学が分かって、プログラミングができて、という三拍子 が揃うとよいのですが、そのような人材はなかなか居ません。そこで、コンテストは 3 人で 1 チームなので、3 人の役割分担をうまく行えば強力なチームが形成できるの ではないか?と考えます。例えば、英語・数学・プログラムがそれぞれ強い人で 3 人合 わせたらよいのでは?と思うのですが、僕の経験上ではダメですね。やはり、3 つとも 頭にある人がよいですね。

-- 問題を解くための戦略などは、先生がご指導なさっているのですか?

そうですね。考え方を教えて、訓練させるようにしています。問題を正確に把握するこ と、解法を立案することに加え、プログラムのモジュールのきり方、実際のソースコー ドをどう書くかに関しても訓練が必要です。早く解答させるための僕の提案は、繰り返 し練習させることです。同じ問題を、毎回新たな気持ちで解く。同じ問題を解いている ので、毎回早くなります。当たり前ですが、人間は繰り返すと本当に早くなる。これを 裏付けてくれたのは、中国チームでした。とにかく強いので、「どうやって練習してい るの?」って聞いたら「過去問を一生懸命解いている。」というんです。優勝したチー ムは 500 問解いたそうですよ。うちの学生は 50 問も解いていなかったので、桁違い でした。決勝でも、時間内に全て解き終わって、1 時間くらいお茶飲んでましたよ。


 小林教授

-- 最近、複数の大学の先生とお話をしましたが、このお話を聞く限りプログラミングが すきな学生が減っているのではないかとかなり心配になりました。プログラムを好きに させる秘訣や、問題をどのように克服されていますか?

普通の授業ですと、プログラムの言語の概念を教えることになってしまうのですが、 そのような教え方では、やる気は起きないと思います。そこで、今私は新しいプログラ ミングの授業を考えています。その授業では先にプログラムを見せてしまう。そして、 目的がこうであれば、こんな風に書けばいいんだ。という対応関係を理解させてあげた いと思っています。

芸術作品は、よい芸術作品を見ておく方がよい作品が出来る。プログラミングも同じだ と思います。よいプログラミングをたくさん見ることが大切だと考えています。 この授業は、単位なしで実施しようと考えています。また、将来はインターネット上に 個人が解ける問題を解いて、自動判定する仕組みを作りたいですね。講義に出なくても よい、バーチャルユニバーシティの第一歩にしたいですね。

-- これは、個人の取り組みですか?それともコミュニティなものを目指されているのですか?

悩んでいます。というのも、私は 2007 年度で退官する予定です。その後も、プログラ ミング道場的なサイトを開きたいと考えています。学部のほかの先生方も興味があるようなので、本年度のうちに、まずは本学の学生を対象に授業を開始して、環境を整えながら、一般に提供していきたいですね。

同じプログラムを作るにしても、いろいろなノウハウがあると思います。 たとえば、バグを見つけやすいプログラムの書き方や、情報の独立性の高くする方法、オブジェクト指向の特徴である、抽象化、概念化などの使い方、頭では分かっていることを、身体で覚えさせる。そんなことをやっていきたいですね。 特に、抽象化やメモリリークはプロのプログラマでも失敗します。 ですが、そういったことは、普通のプログラミングの授業では教えられていないですね。

-- 実践的なプラクティスはプログラミングの教科書にはあまり書いてないですよね。

そうですね。


学生には会社を興せるだけの力をつけてほしい

 小林教授

-- 学生に向けて、将来どんなエンジニアになってほしいかを教えてもらえますか?

ソフトウェア開発の会社を、組織、技術、ルールを全て決めて、自分なりに提案できる人になってほしいと思っています。

-- それは会社を興せるような人ということですか?

非常に簡単に言うとそうでうね。実際に私のソフトウェア工学の授業の最終レポートは、 そのようになっています。自分で会社の名前も決めて、必要な組織を書いて、どういう ソフトをどんな方法で開発しているか、品質管理は何か? 会社が持つ技術は何か? を書いてもらっています。ソフトウェア開発は、会社全体で取り組むことで、特定の プログラマが考えて作るものではない。品質管理は、組織のあり方によって変わってく ると思います。ですから、経営者の視点からソフトウェア開発がどうあるべきか?を考 えるべきだと思いますね。

-- そういう意識のある人は、プロのエンジニアでも少なくて、かえって分業で分担しながら開発するので、自分自身の役割だけを果たせばよいと考えがちになりがちです。それを解決するためには、自分自身が個人商店としてソフトウェアを作る、という考えになると思うのですが、そういう狙いもあるのですか?

そうですね。「なぜ」こういう部門があるのか、の「なぜ」を常に考えてもらいたいと 思っています。その際に、人ではなく、サイエンティフィックな原因追求が組織・技術 において重要だと考えています。交通事故にたとえるならば、当事者に原因を求めるの ではなく、信号機に右折の信号がなかったことが根本的な原因だと考え、信号機に右折 の信号を追加しようといった、技術者の目で原因を追究をするようにしてもらいたいで すね。ソフトウェアでも、どうしても「A さんの作ったモジュールが悪い」となってし まうのですが、そうではなく、背後にある技術を改善しないとよくならない。そう思い ますね。

-- ありがとうございました。

ありがとうございました。

separator line

小林研究室の学生紹介

小林研究室で研究に取り組んでいらっしゃる、修士 2 年の伊藤さん、小嶋さん、学部 3 年生の松本さんの 3 名にお話を伺いました。

ソフトウェアの加工技術について研究しています。

-- それではまず、皆さんの研究テーマについて教えていただけますか。

 小嶋さん

小嶋さん

僕は、ユーザ情報を管理するウェブアプリケーションの自動生成に関する研究をしてい ます。

最近、ATM でのなりすまし詐欺など、システムを悪用した犯罪が増加していますよね。 僕は、これはシステムによるユーザの確認不足が原因と考えています。システム設計 でのユーザの状態設計において、確認すべき項目毎に「確認状態」を追加します。 そして、その確認状態を使って処理の実行を制限することで、システムとして確認を 行なったことを保証するというアプローチをとっています。そして、その設計が自動生 成技術を使うことで確実にプログラムに反映されていることを保証しています。

 伊藤さん

伊藤さん

僕はメモリリークが発生しない C++ プログラムの自動生成に関する研究をしています。 ソフトウェアを開発するときには、メモリリークの問題がありますね。僕の研究では メモリリークを発生させない C++ プログラムを作成する方法として、Java でプログラ ムを作成し、それにメモリ管理機能を組み込んだ C++ プログラムに変換するというも のを提案しました。メモリ管理を気にせずにプログラムができる上、最終的に C++ プ ログラムになりますから、ネイティブコードにコンパイルでき、Java で書いたコード よりも高速に実行できます。

-- おふたりとも、小林先生と同じくソフトウェアの加工技術を研究されているんですね。松本さんは研究はこれからだと思いますが、テーマは何ですか?

 松本さん

松本さん

僕もソフトウェアの加工技術です。僕のテーマは、プログラムを効率のよい最適なプロ グラムに変換することで、等価変換といわれているものです。プログラムはプログラマ によって同じ処理をするものでも記述が違います。プログラミングが上手の人はコンピ ュータにとって効率の良いプログラムを書くことが可能ですが、プログラミングが苦手 の人が書くと非常に無駄な処理を記述したりして、コンピュータにとって効率の悪いプ ログラムになってしまうことがあります。そういうプログラムを効率の良い最適なプロ グラムに変換するツールを開発したいと考えています。


プログラミングよりは、自分のアイデアを試すことに興味があります。

-- 小林先生もそうですが、研究テーマをお聞きしたところ、みなさんもたくさんプログラミングされているような印象を持ちましたが、プログラミングは好きですか?

 小嶋さん

小嶋さん

好きですね。プログラムって何を目的としているか、どこに視点を置くかで、同じ処理 をするプログラムでも書き方がいろいろ変わってくると思うんですね。多くの人にわか ってもらいたければ出来るだけわかりやすく記述することを考えないといけません。 例えば、たくさんのライブラリを使わずに限られたライブラリの中でプログラムを構成 する方針を立てるとかです。そういったところが面白いと思っています。そして 10 人 いれば 10 種類のプログラムがあって、それは人によって読みやすい読みづらい、処理 が速い遅いあるでしょうし、いろいろです。そしてそのなかで、訓練をするうちに だんだんと極めていくもの、ちょっとずつ上手くなっていくものがあって、そういう ところですごく面白いと感じます。

-- なるほど。伊藤さんはどうですか。

伊藤さん

うーん ...そうですね。

-- 微妙な回答ですね。(笑)

伊藤さん

昔から工作とかが好きで、モノを組み立てたりするのは好きなんです。ただ、プログラ ムをどんどん書くことよりも、アイデアが浮かんだらそれを試してみたいというという 思いの方が強くて、そのために書くぞっていう感じなんですよ、どちらかというと・・・

-- 何を作りたいかという方に興味があるということですか。

伊藤さん

そうですね。僕にとってプログラミングは作るための手段ですかね。こんなこと言うと 怒られるかもしれませんが、"プログラムの書き方"とかはホントはそんなに興味ないん ですよ。ただ、ちゃんと作れるかとか品質は大事なことなので ...書き方も重要な んですが。(笑)

 松本さん

松本さん

僕も好きなんですけれど、自分で書くということを考えると、そこまで好きじゃないか なと思っています。どちらかというとプログラミングよりも、例えばどういうものを作 るかと言うことを決めたときに、どのようにプログラムを作るかということを考えたり、 他の人の書いたプログラムを見て解析したりするほうが楽しいですね。

-- あえて、理論 (ソフトウェア工学) かモノづくり (プログラミング) かでいうと、どちらが好きですか。

松本さん

工程を考えるのは好きなんですけれど、それを実際自分で手で動かすと、「あぁ面倒 だ」と思ったりします。理論の方が好きですね。

小嶋さん

僕らのやってきたプログラムっていうのは、ソフトウェア工学とプログラミングの両方 の要素があるので、分けて考えると言うのは難しいですけれど、私もどちらかというと ソフトウェア工学の方が好きですね。でも、ソフトウェア工学を知らないとどうやって 書けばいいかわからないですし、切り離せないものだと思います。


日常生活にでも通じることを得られた

-- では、小林先生や小林研についてお聞きしたいのですが。

伊藤さん

小林先生は貫禄のある先生です。頼れるというか。

-- 貫禄があるというと、どっしり構えている印象があるのですけれど、小林先生も 落ちついていて怒らないイメージがありますね。

小嶋さん

怒らないですね。先生の姿勢として、怒るより解決策を考えたほうがよいということが あって、授業なんかを見ているとよくわかります。例えば、寝てる学生に「なんで寝て いるんだ」っていうよりかは、寝なくするための授業の方法を考えて、授業をやるよう にする姿勢でいらっしゃいます。行動に対して怒るよりかは、行動を起こさないように するためにどういう指導しようと考えておられるので、それで怒らないのかなと思いま す。

 インタビュー風景

-- 例えば、その授業ではどんな工夫をされているのですか。

小嶋さん

このあいだ、私がチーティングアシスタントをしていたときは、授業中に時間を取って 簡単なレポートのようなものを書かせていました。すると少なからず授業を聞きますし、 書いていると眠気も覚めます。効果があったのか、寝ている学生はいなかったですね。 で、すごいなと思うのが、それを全部先生が集めて自分でチェックしているんですね。 バイタリティーがあるなと思います。自分のクラスは 40 名、別のクラスは 60 名だっ たので、毎週すごい量のレポートのチェックをしているんですよ。

伊藤さん

先生は体力ありますよ。先生のところに質問に行ったりすると、始まるんですよ(笑)。 ご飯も食べないで 10 時間も考えに入り込んじゃって、僕なんかもうついていけなくて フラフラになりながら聞いていて ...。精神的に若いですね。

松本さん

僕もまだ先生とのおつきあいの期間は短かいですが、集中力とバイタリティーはすごいと感じています。


-- 伊藤さんと小嶋さんは、そういった先生のいらっしゃる研究室で過ごされたわけですけれど、よかったなと思うことを 1 つ挙げるとすると何でしょうか。ちょっと、面接みたいな質問になっちゃいましたけれど。

小嶋さん

プログラミングコンテストに出たのもよかったですし、なんでしょうね ...

 インタビュー風景

伊藤さん

考え方じゃない? 先生のプログラミングとか情報技術の考えかたとかを通して、身についたこととかあるじゃない。

-- プラクティスみたいなものでしょうかね。

小嶋さん

そうですね。情報技術を学んだんですけれど、そのなかで何にでも通じること --- 日 常生活にも通じることがあって、そういうものを得られたのが、小林研に入って大き かったなと思います。

-- それはすばらしいですね。


将来について

-- 最後の質問ですが、今後目指す姿や、夢があればお聞かせください。

小嶋さん

シンプルですが、システムを作りたいです。就職先も SIer なので、そこで社会に対して自分の仕事が影響を与えていくような仕事に携われるといいなと思います。

伊藤さん

僕は自分で使うようなものを作りたいんですよ。さっきも言いましたけど、試してみる のが好きなんですね。だから自分で使いやすさとか便利さを実感できるものを作りたい んですね。で、うまく言えないんですけれど、上流をしたいけど、現場の下流工程から 離れたくないと思っているんですね。わがままかもしれないですけれど。自分が少しで も携わっていないと試してみたことにならないじゃないですか。

-- それは健全な考えだと思います。

伊藤さん

でも、上流やっている人があんまり現場に首を突っ込みすぎるとよくない気もするんで すけれど、やっぱり下から離れたくはないですね。

-- 松本さんは、これから研究なのでまずは研究をするということでしょうけれど、将来を見たときにどんなことを考えられていますか。

松本さん

ソフトウェアにしろ,ソフトウェアじゃないにしろ、自分のやったことが自分の目に届 くことをしたいです。世の中で使われて欲しいです。

-- ものづくりをしたいという思いがあるということですか。

松本さん

はい、そうです。

-- 今日は貴重なお時間ありがとうございました。

皆さん

ありがとうございました。


インタビューを終えて

今回のインタビューは、卒業論文提出の直前というとてもお忙しい中でしたが、みなさん暖かく迎えて下さいました。 学生のみなさんが、和気あいあいと作業をされていたのが印象的でした。

さて、小林研究室はプログラミングコンテストに出場されたり、プログラミング道場を開校しておられると伺っていました。 ですので、「プログラミング能力の高い研究室なんだろうな」と想像しながら訪問させていただきました。 実際その通りで、RPS という独自の技術を使って様々な研究課題に取り組まれており、興味深いソフトウェアを開発されていました。

しかし、私達が驚かされたのは、学生のみなさんがプログラミングばかりに注力されているのではなく、ソフトウェアを設計するにあたっての抽象的な考え方や、ソフトウェアで何を作るかという強い上流思考を持たれていることでした。 さらに、プログラミングという行為を通して、日常にもあてはまるモノの考え方まで学ばれているということにも驚かされました。

「うーむ。私は学生時代、何を学んで卒業しただろうか。」---そんなことを考えながら、帰路につきました。

研究室情報

研究室名 金沢工業大学 工学部 情報工学科 小林研究室
教授 小林 要
主な研究内容
  • ソフトウェア加工技術
Website

リンク・参考資料

インタビュアー

 藤井 拓

藤井 拓(ふじい たく):オージス総研 技術部ソフトウェア工学センター 兼 大阪大学大学院 工学研究科 電気電子情報工学科専攻(招へい教授)。1990 年頃に C++ と OMT を勉強して以来、オブジェクト指向三昧な日々を送ってきたおじさん。最近は、アジャイルモデリングと反復的な開発アプローチをメインに研究、執筆、翻訳、開発プロジェクトの 支援、大学での講義などに従事。大阪大学で SOA 関係の研究も行っている。

(編集 : 角内 里江 , 水野 正隆)
separator line

オブジェクトの広場では、「らぼなび!」で紹介させて頂ける研究室を募集しています。「是非、我々の研究室紹介をして欲しい!」という研究室は、オージス総研オブジェクトの広場編集部 (oosquare-editor@ogis-ri.co.jp) までご連絡下さい。