ポケットの中の計算機。
知的好奇心
30年前に大型計算機でプログラミングしていた頃と比べると、計算機環境の変化は目を見張るものがあります。運が良いのか悪いのか、計算機発達の歴史の中でも激動の時代を身を持って体験できたのは幸せだったのですが、同じ時代を生きたビルゲイツは世界一の資産家になったのに僕の現実をみるとちょっと不幸なのかなと思ったりもします。彼がまだ大学生であった頃、僕もまたマイクロプロセッサの誕生とその可能性に夢をふくらませていました。(実は僕とビルは同じ年齢なのです)。彼がプログラミングの天才であると騒がれていたときも、僕の周りには沢山の天才がいましたし、みながマイクロプロセッサに群がり、知的好奇心を満たしていた時代でした。
メカトロニクスといった機械工学科の中でもエレクトロニクスに関連した分野を研究していたこともあり、現在、計算機のプログラミングの授業を担当しています。プログラミング言語の説明をするときには機械語、アセンブラ、高級言語、、、と自分自身が順に経験してきたプログラム言語の歴史を話すことになります。最初の電子計算機であるENIACは真空管を使ってケーブルを配線することでプログラミングしていましたが、私が最初に体験したマイクロプロセッサのプログラム開発はスイッチで行っていました。スイッチのON-OFFで機械語を0−1の信号としてメモリに書き込み実行することになります。このスイッチパネルにはじまり、直径43cm(17インチ)のハードディスクや、IBMやAppleが最初に作ったマザーボードなど実物を提示して授業を進めていますが、いずれも自分で使っていたマシンを分解して保存していたものです。
沢山の種類のマイクロプロセッサを使ってきたのですが、最近のお気に入りは、H8と呼ばれるワンチップマイクロプロセッサです。計算機の主要な機能がワンチップに集約されていて、いままた25年前にマイクロプロセッサが開発された時のような気分でプログラムの開発を行っています。ただ、違っているのは開発環境が整備されて高級言語でプログラム開発できることでしょうか。プログラミングに利用できる言語はいろいろあるのですが、これを教える立場になってよく言語について考えさせられることがあります。C言語は確かに優れたプログラミング言語なのですが、べつにC言語である必要はありません。必要なのは何を計算機にさせるかを適切に表現できればいいのです。ということは、英語やドイツ語、中国語、もちろん日本語でも良いはずです。どんな言語であっても計算機の処理手順(アルゴリズム)が表現できれば、それを計算機のプログラムに翻訳さえすれば良いことになります。
最近、日本語がわからないというか表現力が乏しい学生さんが多くなってきてプログラミングの授業も影響が出てきているのではと思うことがありますが、それはさておき、言語は何でも良いと言うことになれば、どんな課題をプログラムするのかということになります。一般に、と言ってしまうと語弊があるかもしれませんが、僕がこれまで学んできたプログラミングの授業での例題は、いずれも数値解析(数式を解く)アルゴリズムがほとんどでした。言語を学ぶ上で重要な要素の一つとしてその言語で表現されている内容が挙げられます。たとえば、英語圏の文化を知りたいから英語を学ぶのではないのでしょうか。となれば、C言語によってエレガントに表現できる計算処理を知ることがCプログラミングの目的となります。C言語はシステム記述言語としてOS等の開発に用いられていますが、授業の演習問題でOSを開発するのは荷が重いので、僕の教えているCプログラミングの授業では、本年度から学生1人に1台、ポケットに入る大きさの計算機(H8マイクロプロセッサ)を渡しています。そして、スイッチやタイマーによる割り込みや、入出力ポートの設定などをプログラムしています。いわゆる組み込みシステムの開発を体験しているのですが、C言語を初めてのプログラミング言語として学ぶ学生さんにはちょっと敷居が高いかもしれません。140台の計算機を作るのは大変だったのですが、これまでにC言語を学んだ学生さんの「今のCプログラミングを受講している後輩がうらやましい」という言葉をはげみに、知的好奇心を刺激するような授業を展開していきたいと考えています。