スケジュールを立てよう

キーワード スケジュール
使用OS 関係無し
ここでは、卒業論文を仕上げるためのスケジュールについて考えます。

本大学、情報システム工学科を卒業予定の方々は、既にソフトウェア工学
の基礎を学んだことと思います。
その基本中の基本は
「納期から逆算して工程を決める」
ということです。

一般のソフトウェア開発は、「人月」という概念を用いてどうにか
納期に間に合わせますが、我々学生は、「1人月」でしか工程を
立てることができません。
ですので、時間の配分が命です。
もし、予定した工程に間に合わないときはリカバーする方法は
「残業」だけです。

そのため、基本的にいっぱいいっぱい詰めつめの予定を立てると
今年の年末年始は、学校で迎えるという状態が生じます。

それでは、具体的にスケジュールについて考えを及ぼしましょう。

工程は大きく分けて次のとおりです。
前述のとおり、納期に近い工程から列挙していきます。

論文添削
一般に、研究室を運営している教官の方々の指導のもと
我々、学生は卒業論文を提出することになっています。
そのため、卒業論文の質が低ければ、担当教官の指導が悪かった
という評価がなされます。
当然、質が悪ければまじめに研究してなかったと評価されて、
卒業できません。

また、我々は普通、これまでの人生でまともな学術論文を
書いた経験はありません。
ですので、論文に使った文法、用語などに不適切な表現があると
いうこともよく分かっていません。
以上がこの工程を必要とする理由です。

普通、我々は自分中心の地動説の世界に生きているため、
自分と外界が1対多の関係になっていることは理解できますが、
他人も実は1対多の関係になって存在していることには気付きません。
そのため、多くの人が論文提出締め切り間際に指導教官に添削を
してもらおうと殺到します。

当然、指導教官と殺到する生徒の関係は1対多になっているので
またされます。
そして、たいていは指導教官は寝不足で論文を読み、生徒は
提出当日の朝に赤字が満載の論文を渡されて、泣きそうになりながら
ぎりぎりの時間まで修正をすることになるのです。
そのような、状態に陥った論文は99%の確率で間違い満載です。

上記の状態を避けるためにも、学生一人に大して指導教官は3回添削すると
仮定して、一回の添削に半日、修正に半日と考え3日間を添削に割り当てます。
さらに、その6日間に研究室に在室する卒業生の数をかけた値が
添削期間です。
添削期間 = 一人に費やされる添削期間(3日間)× 研究室配属の卒業生数

論文作成
論文作成には、思ったより時間がかかります。
理由は、

  • 論文で用いられるお堅い日本語をうまく扱うことができない。
  • 普段から文章を書く訓練をしていない場合、使用したい日本語がでてこない。
  • 論文を書こうとすると、実は知識が足りないことに気付く。
  • 表、図、参考文献の収集に思いのほか時間をとられる。

個人差は当然ありますが、目安のため数式をたてておきましょう。
論文を書いてみれば分かりますが、1日にかける分量はたかが知れています。
私の個人的な感覚からすると1日、1章分(あるいは1節、1項)
を書くと疲れきってしまい頭が飽和します。

そして、自分の書いた文章を3回は見直す必要があります。
後にも書きますが、
人間は間違いがないと思っていれば、1+1=987という間違いがあっても 見落としてしまいます。
ですので、自分の書いた文章が頭から離れるまで見直しても効果があがりません。

たいていの人は、睡眠を一日の単位としていますので翌日、見直すのが効果的です。
つまり、1区切り(1章、1節、1項)書くのに4日必要とします。
ですので、論文作成に必要な期間は
論文作成期間 = 1区切りに費やす期間(4日) × 区切りの数

データの収集
理論作りでないかぎり、論文に必要なのは客観的なデータです。
どんなに、あなたが優秀な能力をもって素晴らしいソフトウェアを作ったとしても
データがなければ、他人はあなたのことを口だけのやつだと思うだけです。
そのため、正確なデータを数多くそろえることが論文成功の基本です。

ここでいう正確なデータとは、
同じ環境下ならば、複数回実行しても同じ結果が得られる
ということが重要です。
そのため、あなたは、素敵な論文を書くためには同一環境下で
データをとりつづけなければなりません。

このデータの収集期間は行われている研究によってまちまちです。
例えば、筆者の場合、共有メモリ型並列計算機においてCPUを
独占状況下で1つのデータを取得するのに要する時間は最大6時間程度
かかる研究を行っていました。そのため、最大6時間かかるデータの取得は
2〜3回しか行えませんでした。2〜3回では信頼できるデータとは
断言できません。

さて、このデータの収集という期間は工夫次第で短縮が可能な工程です。
理由は、

  • 計算機に自動的にデータを収集するプログラムを与えておけば
    収集者が計算機に付き添っていなくてもデータの収集を行うことができる。
  • 論文作成期間の背景、目標、理論などを書く工程と平行して進めることが できる。

ポイントは、計算機に勝手に行わせることができるという点です。

しかし、データを他ユーザーとの共有環境で収集する際には、
かなりの苦労が予測されます。

データ収集については個人差がありすぎるため一般的な期間の提示をすることが
難しいのですが1週間をとりあえずの目安と考えておきましょう。

ソフトウェアのデバッグ・テスト
既に、情報関連の学科で卒業を間近に控えている方々には明白なことですが、
コーディングを行っている時間よりもデバッグを行っている時間のほうが 長く苦しいものです。
バグは大きく
  • 構文間違い
  • アルゴリズム間違い
の2つに分類することができます。

このデバッグというものを以下に軽減するかという問題は
それだけで、ソフトウェア工学というジャンルになって研究されている
ため筆者ごときが語ることはできません。

ただ、貧弱な経験からいいますと、
「紙に書いたメモは絶対に捨てるなとりあえず引き出しにつっこんどけ。」
「バグにつまったら、とりあえず別の仕事をして、翌日調べろ。」
「ソースには、1週間後の自分に理解してもらうためにコメントを書け」
「コメントは1k未満のプログラムにも書いておいて損はない。」
の4点をみなさまに送りたいと思います。
ちなみに、この4点は自戒の言葉です。

とりあえず、デバッグに費やされる期間は、コーディングに費やされる時間の
3倍と見ておきましょう。

ソフトウェアコーディング
多くの学生がドキュメントを完璧に仕上げてからソフトウェアのコーディングに
入るという工程を踏みません。
理由は、面倒に思えるのとそもそも詳しい方法をしらないためです。
ということは、必然的に我々は、プログラムを書きながら思考していることに
なります。このソフトウェアのコーディングをしているときが
情報の学生にとって至福のひとときでしょう。
自分の思い描いたものが徐々に現実のものにしていくということは、
まさしく人間として最高の喜びの一つです。
このソフトウェアコーディングの期間は、これまでの4年間を通して
思い知った己の実力と指導教官、研究室の仲間と相談して余裕をもって
見積もりましょう。

ソフトウェア設計
学生レベルでは、このソフトウェア設計をすっ飛ばしていきなり
ソフトウェアコーディングに入ってしまいがちですがスケジュール命の
卒業研究では、ソフトウェア設計にも少し時間をかけましょう。
外部仕様書、内部仕様書、データ一覧、モジュール一覧などのすべてを作る 必要はありません。
もし、あなたに上記のものを作る能力があるのならば当然作るべきです。
上記のドキュメントはコーディングを楽に、デバックを短くしてくれます。
しかし、ドキュメントを作る能力、知識、根気が無いあなたは最低でも
次のものをなんらかの形で紙に書いて保存してください。

  • 今回、作成するソフトウェアの最低限の機能
  • 今回、作成するソフトウェアの入出力のフォーマット
  • 今回、作成するソフトウェアで使用する変数一覧
  • 今回、作成するソフトウェアを構成するモジュール一覧(一番、粗い分け方)
  • モジュール間の変数のやり取りの図

とりあえずここまで考えることができるぐらい知識があるのならば、
研究をさぼらなければ、ほとんど卒業できたも同然です。
上記の5つがしっかりと他人に説明できるぐらいまで資料を読み漁り、
思考を深めましょう。

この期間は1週間もとれば十分でしょう。

情報収集
中盤の山がデバック、後半の山が論文添削ならば、前半にそびえる絶壁が
この情報収集です。

テーマを決めた後、
あなたはそのテーマが世界の誰かに 既に実行されていないかどうか?
あるいは、先行者はいるのか?
自分のテーマにヒントを与えてくれる資料はないのか?
自分のテーマを実現するためにはどうすればよいのか?
などを一生懸命探さなければなりません。

ここを適当にすると、卒論発表のときに
「それは、***さんが既に実現した方法とどこが違うの?」
とつっこまれ、沈黙の行に突入することになります。

資料を探すのに1週間、探してきた資料を読むのに
日本語の論文ならば、3日
英語ならば5日
日本語の本ならば4日
英語の本ならば2週間くらいかかるんではないでしょうか?

以上で、工程の紹介は終わります。

最後に埼玉大学の場合にあてはめて適当に日程を立ててみることにしましょう。

昨年度の埼玉大学情報システム工学科の卒業論文提出日は2月13日でした。
昨年度の程研究室在籍、卒業予定者は5名でした。

とりあえず、論文の構成を次のようなものとします。
背景
目的
実験の理論(サブセクション2つ)
実験の方法(サブセクション2つ)
結果(結果、サブセクション2つ)
考察
まとめ
計10区切り。

ソフトウェアの設計に1週間、
コーディングに3週間
デバッグに9週間
データ収集に1週間
情報収集に1週間
日本語の論文 6本
英語の論文 3本
日本語の本 2冊

工程名 必要期間 工程開始日付
卒業論文提出 1日 2月13日
論文添削 15日間 1月29日
論文作成 40日間 12月20日
データ収集 7日間 12月13日
ソフトウェアのデバック 63日間 10月21日
ソフトウェアコーディング 21日間 9月30日
ソフトウェア設計 7日間 9月23日
情報収集 7日+41日間 8月6日
 

適当に作ってみた表ですが、結構良いスケジュールになっている ように思えます。
多くの卒業予定者は9月にならないと時間が取れないことと思います。
上記の設定は、非常に余裕をもって考えた日程です。
能力による個人差、研究の内容なども考慮にいれてこの例のように
自分でおおまかな目安を立ててみてください。
 

そして、自分で立てた予定よりも進むのが遅いときは研究規模の見直しを 薦めます。
 

最後に一言
「予定は未定であって、決定ではない。」
自分の、あるいは人が立てた予定は絶対の確定事項ではありません。
早く進んだ場合は、研究規模を大きくすればよいし、
遅い場合は研究規模の縮小を図って柔軟に対処してみてください。
 


扉へ
TOPへ