セミナーの選択を考えている皆さんへ

野村研究室@コンピュータシステム学科

当研究室では...

どのような心構えで来て欲しいか

何よりも,何か「やりたいこと」を持って来て下さい.「何か面白いことないですか?」と私のところに来ても,面白いことは何もありません.面白いことは自分で見つけてきて下さい.

配属希望を提出する前に …

必ず 面談 に来て下さい.

卒研について

私自身の関心は下記「私の興味」の通りですが,卒業研究では,各自(グループを希望の場合は相談に応じます)自由にテーマを決めて,ソフトウェアシステムの開発をすることを原則とします.機能的にある程度のまとまりがあること,GUI(グラフィック・ユーザ・インタフェース,ウィンドウ表示とマウス操作を含むインタフェース)指向のシステムであることをみたせば,どんなシステムでもよいものとします.また,この条件を満たさなくても,作ってみたいソフトがあれば相談に応じます.配属はされたけれど,作りたいものはプログラムではない/プログラムは作りたくない(作れない)皆さんでも,自分でテーマを決めて何か(コンピュータ上で実行/表示できるもの)を作る事はして下さい.「何」については相談に応じます.

iOS(iPhone,iPad,iPod 等に使われている OS)環境下のプログラムは歓迎します.ただし,開発には Mac が必要です.Android でのプログラムも対応します.

過去の卒研テーマは こちら です.

セミナーでやること

セミナーでは卒研に必要なプログラミング技術の基礎を修得することを目標にします.配属当初に卒業研究作品(作りたいもの)のイメージを作って,作品の開発に使う言語を決めて下さい.言語の基本的な勉強,GUIプログラミング(グラフィック・ユーザ・インタフェース,ウィンドウによる表示とマウス操作を伴うプログラミング)およびオブジェクト指向プログラミングの学習を集中的にやってもらいます.

プログラミングに使う言語は特に指定しません.強い希望がなければ,Java を勧めます.各自のプログラミング技術の修得度・関心に応じて,適当と思うテキストを選んで学習して下さい.セミナーの時間は,1週間の学習の成果を発表し,できれば,互いの知識を共有できるようにして欲しいと思います.

毎回出席する事を原則とし,正当な理由で欠席した場合でも,欠席分のレポートを提出してもらいます.

私の興味

私の興味はソフトウェアを作って行くプロセスにあります.

プログラムは計算機の動作を記述したものですから,それによって計算機がどのように動くかはわかりますが,そのような動作の結果にどのような意味があるかについては,プログラム自身は何も示さないのです.ただ,実行前の状態あるいは実行中に与えたデータと,実行中/実行後に得られた結果の間に,常に「何か」を期待できるとしたら,その「何か」をプログラムの意味または役割(機能)と考えてもよい,とすることはできます.

たとえば,3をデータとして与えると,「1,1,2」という結果が得られ,8をデータとして与えると「1,1,2,3,5,8,13,21」という結果が得られ,与えたデータと得られた結果の関係が常にこのようであるなら,このプログラムは「与えられた個数だけフィボナッチの数列*を求める」といっていいかもしれません.

*フィボナッチの数列とは,前2つの数の和が次の数になるような数列.

プログラムを作る時は,逆に,上の「何か」に相当する事,すなわちやりたい事が先にあって,そのような事をしていると考えてよいような計算機の動作をプログラムという形で書くわけです.プログラムは計算機の動作を記述したもので,計算機の動作とは,計算機のメモリなどによって保持される内部状態の時系列です.ところが,内部状態の時系列を素直に書けばプログラムになるかというと,決してそうではありません.素直に書くととてつもなく長くなってしまったり,与えられるデータによって異なる時系列を発生させなければならなかったりするからです.つまり,プログラムは計算機の内部状態の時系列を「畳み込んだ」形で表さなければなりません.3行のプログラムが300万の時系列を発生させるかも知れないわけです.

プログラムを作る時の問題は,やりたい事が何かという事と,それを行っていると考えてよい計算機の動作はどのように「畳み込んだ」形で書けるのか,ということです.プログラムを作っている時に「畳み込んだ」形から発生すると考えている動作と,実際に実行してみて起こる動作に齟齬があれば,それがバグになります.上で述べたように,計算機の動作とやりたいことの間には因果関係のようなものは何もないので,自由に考えられる反面,「それでいいのか?」という点において,とても不確かなものです.

やりたい事と「畳み込んだ」形式のプログラムと,実際の計算機の動作,この3者の関係を「それでよい」ことを確かめながら確立していくようなプログラム開発のプロセスを目に見えるようにする事,それが私の一番やってみたい事です.