久野先生へのインタビュー企画 第ニ週

1984.3 東京工業大学理工学研究科情報科学専攻博士後期課程 単位取得退学 1984.4 東京工業大学理学部情報科学科 助手 1986.3 理学博士(東京工業大学) 1989.4 筑波大学大学院経営システム科学専攻 講師 1990.8 同 助教授 2000.12 同 教授 2016.4 電気通信大学情報理工学研究科 教授, 筑波大学 名誉教授 2022.4 電気通信大学情報理工学研究科 特命教授

久野先生は、2016年に本学教授として就任され、一年次必修科目「コンピュータリテラシ/基礎プログラミングおよび演習」のカリキュラム作成に尽力されました。長年、プログラミング、ユーザーインターフェース、情報教育の分野をご専門とされ、情報の教科書なども執筆されています。詳しくは先生の個人サイトをご覧ください。

電気通信大学情報理工学研究科 久野靖 特命教授 


Chapter4

プログラミングについて

先生の好きなプログラミング言語とその理由についてお聞かせください。

 だいたい、自分で研究とか教育で自分がある言語を使うなど、またその流れに沿うという感じで使ってるんです。そういう意味では時間順に言って最初はCLUっていう、あまり知られてない純粋なデータ抽象(オブジェクト指向より理論ぽい考え方)の概念を作らせた言語で、非常にそれが画期的なんですね。それが結構好きでそれでいろいろ論文も書いたり、教えたりしたこともあります。その後のオブジェクト指向言語ではデータ抽象の機能はあるんですけども、少し他の面も混ざっていて、オブジェクト指向言語がそういう意味では純粋じゃなくて、純粋なデータ抽象というのは非常に面白いと思います。

 その次はCです。C言語はやはりOSと関係がすごく大きい、そういう関係がすごく魅力的でOSに近いようなプログラムもいろいろ書けるのが非常にありがたくて、非常に好きでした。そのうちに今度はJavaが流行ったんです。Javaはその当時新しく出た言語が、こうやって普及するようになったっていう。そういう時期にリアルタイムでそういう経過を見ましたから、非常に印象をよく覚えています。

 これまでは型のある言語をやってきたんですけども、型のある言語でオブジェクト指向を作ろうという点ではJavaはやはりいいと思います。そのあとRubyなんですけど、Rubyはオブジェクト指向言語でデザインが綺麗で、書きやすさを重視していて、そのままできる。スクリプティング言語だから型は必ずしも書かなくてもいいと。だいぶ今までの言語と違うんですけども。教育用ではやっぱり型の無い言語の方が簡単ですぐ書けているじゃないですか。だからそういう意味ではRubyで良かったなと思っています。

先生は、やはり時代をいろいろ見てこられたと思いますが、今流行っている言語、例えばPythonなどについてはどう思われますか。

 RubyとかPythonとでどっちがいいというのは、いろいろ議論はあるし。ただ僕は個人的にはRubyはやっぱりいいんですね。良いアイデアとか、あるいはいろんな書きやすさのための道具を重視している。Pythonは誰が書いても同じようなプログラムを書ける。そういう言語が必要なときは、まあいいですね。あとオブジェクト指向が基本的にRubyでは重視されてるとかそういうところで、だから今となってはPythonが教育に使われてるのはわかりますけども、ただPythonのプログラムでいろいろやるというのは、結局そのライブラリとしてPythonの様々なルーティンを使うために使うという感じで、裸から自分で書くのであれば結局どの言語を教育で使う上であまり変わりはないので、Rubyでプログラミングを始めるのは悪くはないと思うわけですけどね。

あといろいろ多分プログラミングって言語っていろいろまとめ方があると思うんですけど、その中に関数型プログラミング言語というのがあるじゃないですか。先生はこういうスタイルについてはどう思われますか。

 そうですねだから関数型の場合は非常に副作用がなくて、短く書けるとかそういう風な利点はありますけども、すごい数学に近い深い感じがするんじゃないかな。ああいう言語が好きな人は使う方がいいと思うんですけども、なんか中学高校から普通の言語を使ってやってきたって人が急に新しく関数型をやりますよとかそういう風にやるのは結構辛いんじゃないかなという気はしますね。あとやっぱり僕はバックグラウンドとして関数型よりはオブジェクト指向という人なので自分の好みというのもありますけども、好みというものだけじゃなくて関数型のちょっととっつきの悪さというか、それがまだちょっと現代ではまだ自由に使うような段階でないという気がしてますね。

プログラミング言語のパラダイムがどう進化していくと思われますか。

 それは例えば僕がこういう風と言っても大体それは外れて、新しくできたものがこう非常に画期的で使われるという世界に今までもなってるから、これを僕が何か言っても全然当たりそうにないです。今はまだオブジェクト指向の時代が続いてるけどもこの先は分かんないっていう風に思いますね。一つはやっぱり可能性があるのは並列性ですね。並列性っていうのはつまり順番に実行されていくことを前提としない言語で、関数型はそちらに近くできるというのが利点なんですけども、関数型よりもさらにこう並列性が自由に使えるような言語っていうのは必要というか求められていますけど、あんまりそれはこうしたらいいというのは分かってない気がしますね

GPUとか並列処理みたいなのは流行りかなと僕も思います。

 それはもちろんスピードが出るようにするためには並列性は大事なんですけども、ただ並列性を最初から取り入れている言語はうまく書くことが非常に難しいので。並列性を今の言語でこうやるとするといろいろとこう思わぬ落とし穴にはまったりとか思ったように動かないとか、そういうことがどうしても起きるので。そこをうまくできるような、そういう方向での研究というのが非常に求められているんじゃないかと思いますね。

プログラミング教育において先生はどのようなことが重要だと思われますか。

 私のペーパーの中にも書いてあるんですけど、「離陸ファースト」。離陸ファーストっていうのはまず離陸ってのは自分の思ったプログラムを作れるようになっていくんですね。だからまず非常に簡単な範囲、言語の本当に少しでも最低限の小さな機能だけでいいので、自分で思ったものを作れるようになることをやると。で、そういう風になってからその作れる状態を維持して、様々な新しい機能というのをだんだん増やしていって覚えていくと、最後まで離陸した状態を維持してどんどん自分のできることが増えていくのがいいと思いますね。

 多くの先生は、最終的な目標って例えばソートのプログラムだとか探索プログラムとか、そういう例題があって、それを全部覚える。あるいは全部そういうのを書けるようになる、ということを目標にしてたり、そういうテキストが見えますけど、そういうのってやっぱり結構重いから、自分で書けるようになるのは難しいですよね。そのままいくらやっても、自分で書けるようにはならないじゃないですか。そうじゃなくてもっと簡単なプログラムでいいから、自分で書けるようになって、それから段々増やしていくというのが重要だというふうに思っています。

僕自身もそうなんですけど、プログラミングスクールみたいなので教える、講師としてやるっていうのが、電通大の周りとかでも、結構バイトとして一般的になってきてるかなって感じていて、そういう人たちに向けて、プログラミングをどう子どもたちに教えるか、コツとかがあれば教えていただきたいです。

 僕の場合は子ども向けに教えているというのではないんですけども、やっぱりこれも離陸ファーストだと思っていますね。自分で書ければ、自分で思ったものが自分で書けるようになったら、離陸して、自分でしたいように、いろいろ書いてみるというのをやったらいいと思うんですね。だからそういう意味ではさっきと同じなんですけど、まず簡単なプログラム、簡単な機能だけでいいから自分で書けるようになると。書けるようになったらば、ちょっとずつ機能を増やしていく。そういう風な方が絶対いいんじゃないかと思うけど、どうですかね。

そうですね、僕自身も教えていて、すごい難しいなと思うのは、if文とfor文があれば、大体のものは書けるわけじゃないですか。でも、そのif文とfor文自体がよくわからないとか、例えば、もしこうだったときこうしようとか、じゃあこれを何回繰り返してみようみたいなのを組み合わせるのが結構難しいというか、日常生活で何かに指示を明確に構造化して与えるみたいな、そういう思考にまず入ることが難しいのかなと思っていて、そういうパラダイムを理解するみたいなのをどう教えたらいいのかなっていうのが結構悩みなんですけど。

 それはさ、まず最初にif文に行っちゃうのはもう行き過ぎてるから。最初はだからまず変数ですね。変数を自分の思うように、あとはこう与えてとか、あるいは、こちらの変数のこちらに移すとか、そういうことを練習して、まずそれからできるようになるのが最初。その次は、変数を使った上で、どういう風にするかっていうのをもう少しやって、それをやって始めて、if thenだけのもの。その後で、if then else、else ifという風に、非常に少しずつ材料を増やさないと、いっぺんにというのは難しいと思いますね。そういう意味では、今まで変数の方というのは、意外と重視されないというか、みんな見過ごされている。まず最初は、if文とか、while文とか、そういうのは行き過ぎだという風に、僕は思ってますね。1

前編は全三週間にわたってインタビュー記事を公開予定です!
今回はニ週目ですので、三週目もご覧いただけると幸いです!

  1. このインタビューの後、情報処理学会情報入試委員会から久野先生執筆の「プログラミングの基本トレーニング」が公開されました。(https://sites.google.com/a.ipsj.or.jp/ipsjjn/home?authuser=0)Pythonを用いた5つのレッスンを通してプログラミングの基本をマスターし、「書けるようになる」ことを目指す問題集です。言語はPythonですが、基本から丁寧に解説されているので基礎プロなどにも役立つと思います。プログラミングに苦手意識のある学生の皆さんはぜひ一読してみてください! ↩︎