トライ & エラーの功罪


前職ではモーターのチューニングをやってました。
(「チューニングなんていやだぁ!モノ作らせろー」と転職したのですが)

そのチューニングってのが結構泥臭い事をやってて、モータを機械に取り付けて発振する限界まで応答性を高める設定値をトライ & エラーで割り出し、そこから安全率をかけた値を設定値にするようにしてたんです。
モータを取り付ける対象は何億円って機械なんで、その機械がエラい音をだして振動するのを見るのは、最初の頃は恐怖でしたね。
そして、その機械に何トンもの重りをのっけたり、下ろしたりといろいろ手間が多かったので、金額的にも手間的にも、大変なトライ & エラーでした。

そんな高価なトライ & エラーをやってきた経験があるんで、プログラミングでのトライ & エラーって行為は凄くお手軽なんですよね。
今のソフトウェア開発って何度でもお手軽に試すことができるけど、このお手軽さが考えることをなくさせている気がします。
これって自分だけなのかもしれないけど、もうちょっと考えてから手を動かすべきだと自省しています。
「手を動かす前にもう一度考えろ」を座右の銘にしているインフラ管理者がいたけど、この辺ってインフラ管理者に見習うべき所があるのかもしれないと思ってます。

テストファーストなんかは、ともすればトライ & エラーの連続になってしまうのかもしれないけども、
プログラミングをやる前にできるだけ完成形をイメージして、プログラミングに入るかってのが自分の場合重要な気がします。
全体を見渡せる目と、細部を見てきっちりテストしていく目をもてるかがポイントなんでしょうね。

Comment

  1. Saxman
    2008-09-03 Wed 01:31

    私の場合、大学で統計物理学やってたのですが、
    1.理論がある
    2.それをシュミレーションするプログラムを組む
    3.最小試行回数で手計算とプログラムが同一値を出すか検証
    4.最小試行回数でテストパターンを実行
    5.本番実行
    って流れでやってました。
    ここでの方法って結果的に業務に役立っているように感じます。
    もちろん、テスト手法などは変わってきていますが、何より理論が確立するまでモノを作らないところが重要に感じています。

    また、全体を見る目を養うためには、全体ができてから動かすと言うのも経験のひとつになるかもしれませんね。
    私は元々C++なので、コンパイルの所要時間などの問題で(何度もコンパイルなんてしてられないため)自然と身に付いてきましたが、昨今の環境では意識しなければ身に付けるのが難しいように感じています。

  2. tma
    2008-09-03 Wed 06:26

    >昨今の環境では意識しなければ身に付けるのが難しいように感じています。

    そうなんですよね、余りに作成と実行の過程がお手軽なので、意識しないとなかなかこの感覚を磨くことができないんですよ。

    理系の人なら実験とかでこういう感覚が身についているのかもしれませんね。思い返すと私の研究って実物の作成まではいかなくて、シミュレーション結果をだす所までだったんです。
    実物を作る過程まで踏めていないのが惜しいなぁ。