見出し画像

演繹と帰納 - 出口から考える

「演繹、帰納」とは何だか小難しい単語で、一般的には数学用語として使われます。今回はそんなに難しい話ではなくて、何かをする時などに〇〇だから△△になるので、結果は◇◇になるという考え方をとるのか、最終的に◇◇となるためには△△であることが必要だから、まず〇〇をやる。みたいな話です。

小難しい人に限って、前者の論調で「あー言えば、こう言う」みたいな表現をしがちな気がします。これを聞いていると一見、緻密な論理で正しく聞こえるような気がしますが、無難なことを並べて、その関係、関連性がゴールに近づくにつれ(聞いている人が疲れてくるにつれ)破綻しているのではないかと怪しまれるようなケースも多いようにも思います。

私もご多分に漏れず、特に子供の頃はこれをやらかしていた頃があり、父親からは「もう少し帰納的に考えろ」と叱られたことがありました。つまりゴールを明確に設定して、そこに至る最短コースを遡れというのです。そうしないと無限に時間が必要になるよみたいな話もされました。わりと考えるよりも行動しろで、いつも時間が無いとこぼしていた私へのアドバイスでもあったのでしょう。

この話はなかなか深い話で、例えば日々の仕事にしても、ひとつひとつの仕事をきちんと済ませて積み上げていくことも大事ですが、昇進や転職などを考えると、その時に必要な事柄は何かというのを理解して、それを成し遂げるために今の仕事をしていったほうが、モチベーションもあがります。そうではない仕事もたくさんあるでしょうが、時間は有限です。

これをもう少し違う向きから見てみましょう。プロダクトを設計する場合、最初にプロダクトが「使われなくなる時点」を想定します。ここから必要なサポートを考え、それだけの寿命に耐えうる部品で設計するのです。ソフトウェアの場合、それまでの期間のサポートが得られるパッケージを選択する必要があります。最初にこれを煮詰めておかないと、後から利用期間を延長することは高くつくことも多いです。この期間が明確であれば、それ以前にリプレースなどの計画を立てることも容易になります。

プログラムを書く話であれば、最初にやることは正しい動作と性能を決めることです。一般的には仕様書という形で、これをまず用意しますよね。これを元に試験仕様を決めて、パーツに分解し、ここのパーツの仕様とコードを詰めていきます。経験的には詳細仕様が先に明確にならないことも多いので、できれば次期バージョンまでの範囲で仕様を決めて、今回は、そのうちここまでを実装するみたいな大きめな風呂敷で進めたほうが、結果的に困らないことが多いように思います。仕様に変更があっても「想定内」に収めるのがコツです。

コードを書いていく時にも、最初は処理単位が大きな部分から攻めていきます。最初に細かい部分から始めると全体像が把握しにくいですし、どのパーツがネックになるかの判断が遅れます。ここで大事な部分であると把握したところに時間をかける必要があります。また細かいパーツは既にあるものが再利用できることもあります。実績があるコードを多く利用したほうが安心感が増します。

ところで、それぞれの関数というかモジュールを書く時に、どの順序で書いていきますか?大抵は呼び出し側から渡された情報を参照するところから書きがちですよね。ここで渡された情報をどこまで信用するかで、書き方のスタイルは大きく変わるのですが、例えばCなりC++の場合は、かなり厳重にassert文を書きます。これは環境変数NDEBUGで外せるのがメリットなのですが、わざわざrassertというNDEBUGでもなくならないマクロを書いておくことすらあります。いくら安全だと言われても救命胴衣を無くせませんよね。特にオーナーが変わったときには方針変更がありがちです。

そして次は出口を書きます。この関数/モジュールを実行した結果、何が求められる答えなのかをハッキリさせます。想定通りの処理や答えが出れば問題はないのですが、いろいろな理由で求める処理や計算ができないことがあります。このときは懐かしのMS-DOSではありませんが、中止/再試行/無視/失敗を決めなければなりません。その関数で外部のファイルなりに変更を加えた場合、必要に応じてロールバックしておくこともあります。その上でグローバル変数にエラー値を設定したり、例外をスルーするなどをするわけです。

C++であれば、コンストラクタを書いたら、次はデストラクタな訳です。デストラクタをきちんと書くのはけっこう大変で、例外にかかわるタイミングでの動作や、ガベージコレクタで消されるときなども、本編の処理とかけ離れたところで実行されるので、きちんと始末するのは思いの外、苦労します。ここを先にきちんとさせておかないと、メモリだけではなく必要なグローバルな資源が解放されないなど問題が残ります。

このように生まれでたオブジェクトが無事に昇天できることが担保できたら、安心して人生設計ができるわけです。いやぁ、なかなか深いでしょ。途中がいい加減でも、最後がしっかりしていれば、結果オーライですよ。

演繹 (帰納はこの中のリンクから飛んでください)


ヘッダ写真は混沌の代表である新宿駅の案内板。


この記事が気に入ったらサポートをしてみませんか?