Previous ToC Next

1. 楽をしよう、ということ。(2009/6/8)

シミュレーションに限ったことではないが、研究、開発、といった行為の中で は、必ず「同じことを(少しどこかを変更しながら)繰り返し、その結果を整理、 比較する」ということが起こる。

例えば、あるプログラムでマジックナンバーで埋め込まれている(そのこと自 体が問題だが)パラメータを、5個それぞれ20種類、但し、1つを変える時には 他は全て初期値固定でよいので、全部で100通り(あれ?本当は96通り?)のパ ターンでテストしよう、という時に、ある人は以下のようにしていた。

  1. 1つのパラメータだけをループで変化させてテストするプログラムを書く。
  2. それでテストする。テスト終了まで待つ。
  3. 他のパラメータのテストの度にプログラムを書き直す。

おそらく、そういうことをしてもプログラム修正を間違えない自信があるのか もしれないが、初めから2重ループで全部自動化したほうがよい。 一度プログラム書いたらテストは計算機にまかせて寝ててもよいし、 他の作業をすることもできるし、また後でテスト全体をやり直すことも 容易だからである。

これが、手作業で行なう実験であれば繰り返すのもしかたがないかもしれない。 もっとも、これも、手作業でがんばってしまうようでは科学の発展はなく、自 動化して大量に均一な処理を行うことで新しいサイエンスができる、というの は天文学では近年の様々な大規模サーベイを見るまでもなく、例えば APM サー ベイのころからそうなわけだ。

プログラム開発やデバッグの時の繰り返し作業の自動化、省力化のための有用 な道具には、基礎的なものだけでも以下のようなものがある。(以下、 Windows のことは無視する。UNIX にある基本的なツールだけを扱う)

これらはそれぞれ極めて奥深いものであるが、全く基礎的なところだけでも知 らないと知っている、また、知っていても使うと使わないでは作業能率が桁で 変わってくる。桁で、というと大袈裟に聞こえるかもしれないが、これはそう ではない。例えば、それほど規模が大きくなく、コンパイルして実行すれば結 果がわかる、というようなプログラムのデバッグサイクルを考えてみる。何も ツールを使わないなら、例えば、

  # cd ../src
  # emacs foo.c
  # cd ../bin
  # cc --some_option --more_options .... -o foo.o ../src.foo.c
  # cc --some_option -o xxx xxx.o yyy.o ... foo.o  -lm -lxxx -lyyy   ...
  # ./xxx input_parameter1  input_parameter2 ....
というような作業を繰り返すことになるであろう。

1.1. エディタは常駐させよう

まず、するべきことはエディタは別ウインドウで開き、その中でセーブするだ けで毎回新しく立ち上げたりはしないようにすることである。そんなことは 当たり前である、と多くの読者が思ってくれるといいのだが、最近の学生・ポ スドクにはそうでない人、つまり、編集操作毎に emacs を起動したり、はて は複数のマシンで別に emacs を起動して同じファイルをオープンしたりといっ たことをする人も見受けられる。

複数のエディタを同時に開くことの問題点は、作業の整合性が失われる可能性 があることである。もちろん、エディタ自体に、そういう時に人間が阿呆なこ とをしないように警告する機能はある。しかし、その警告をオーバーライドし てでも阿呆なことをするのが人間というものである。このような阿呆なことを すると数時間から数日といったオーダーで時間を無駄にすることになる。

エディタを常時開いていれば、上の操作手順から

  (エディタでファイルを変更、セーブ)
  # cc --some_option --more_options .... -o foo.o ../src.foo.c
  # cc --some_option -o xxx xxx.o yyy.o ... foo.o  -lm -lxxx -lyyy   ...
  # ./xxx input_parameter1  input_parameter2 ....
となって、無駄なディレクトリ移動をしなくてもよくなる。また、それ以上に 重要なのは、ファイル操作の整合性が維持されやすくなることである。

1.2. make を使おう

次に重要なのは、コンパイル・リンクに make を使うことである。実際の使い かたの解説の例は例えば make を使おうといったものをみてみよう。これを使うと

  (エディタでファイルを変更、セーブ)
  # make
  # ./xxx input_parameter1  input_parameter2 ....
となる。make の重要なところは色々あるが、その一つは、コンパイルに失敗し た時にはターゲットとなる実行ファイルは rm されているので、コンパイルに 失敗しているのにちゃんと出来ているつもりになって延々時間を無駄にするこ とがない(そんなのは当たり前だと多くの読者が思うことを望む)ことである。

1.3. ヒストリー機能を使おう

シェルのヒストリー機能は、基本的なことは今の大抵のシェルなら Ctrl-P/N やカーソルキーで前に実行したコマンドを呼び出し、カーソルキー等で編集し て実行、とできる、というものである。上の、コマンド2つを繰り返す場合だ と、それぞれのコマンド実行が Ctrl-P Ctrl-P RET ですむので、1度の実行が 6ストロークですむことになる。もちろん、

  (エディタでファイルを変更、セーブ)
  # make;  ./xxx input_parameter1  input_parameter2 ....
とした上でヒストリー機能を使えば 2 ストロークである。

ここで重要なのは、単純にストローク数がいくつ、ということではなく、繰り 返し作業において間違いが起きる可能性がほぼ 0 になる、ということである。

エディタ操作については次の項に。
Previous ToC Next