「増13.『プログラミングのメンタルモデル』についての一考察」で、「プログラミングは慌てないとできないのではないか?」と書きました。それなりに時間を置いて見てみても、筆者はそれが正しいと思っています。言葉足らずだったことは否めないとも思うようになりました。補足をしたいと思います。自分にとっての「プログラミング時の定言命法」ともいえるものを紹介します。「慌てるとはいえ、取りあえず習慣的に行っている規則のようなもの」です。事務計算の応用プログラマの言っていることですので、その背景や限界はお察しください。扱う量が多い(100万件なんて少ない方、もちろん今はやりのbigdataなんかと比べれば小さい)個々のレコードは均一(というより、均一でないとやっていられなかったので、無理にでも均一にしたというのが現状)です。1個でも2個でも100個でも1000個でも2GBに収まる個数でもなく、n個を目指す必要があります。n個を目指す具体的なやり方としては、レコードの集まり(レコードセットとかデータテーブルとかいわれているようなもの)を文脈自由言語と見なし、それを受理できる(最小の)ロジックを書く方法があります(文脈自由言語はn個を扱うのに適しています)。具体的には「前処理→主処理(終わるまで繰り返す)→後処理」です。入力が1個や2個の場合、あまりにオーバースキル的なロジックになってしまいますが、そこは大は小を兼ねるです。n個を目指すためには、逆に記憶領域(一時、永続問わず)に持つ状態は定数個になるようにする必要があります。ここを「可変」個にすると、その物理的な限界によりパンクするからです。●もっと制御を!もう1つの規則ですが、たとえその計算が作ろうとしているシステム全体の99.9999%を占めるものだとしても、あえて軽んじて脇に寄せ、その計算を滑らかに呼び出すためのロジック(制御ロジック)を重んじて正面に出す。これも、計算対象が1回や2回の場合、オーバースキルになりますが、たとえ本番実行が1回2回とはいえ、テストはその回数では済まないわけで、決して“オーバー”ではないと思います。「脇に寄せる」ということは、関数化やインスタンス化にもつながり、形式的に軽んじているだけで、決して“脇に寄せる=心の底から軽んじる”ではありません。制御を重んじることは、処理にシミュレーション的な要素がある場合、非常に重要になります。一般にレコードの集まりは事実を表します。事実のみから事実でないこと(未来の予測とか)を創り出すのは非常に困難で、どうしても「前処理→主処理(終わるまで繰り返す)→後処理」のループ処理が必要となります。シミュレーション的な要素がない場合でも、あると思ってプログラミングをすると、(虚数まで考えると見通しが良くなるように)見通しが良くなる場合が多々あります。●この規則の使える範囲バッチ処理なら使えると思います。それだけでなく、Webブラウザ上のJavaScriptの複雑な処理でも結局同様の規則で済んだこともありました。Select文のSumやMinなどの集計一発で済む場合に「前処理→主処理(終わるまで繰り返す)→後処理」を持ち出されては鼻白まれるかも知れませんが、何度も言いますが大は小を兼ねるの考え方をすると、慌てているときの一種のワンパターンとして支えになると、筆者は強く信じます。今回はこんなところです。●コラムのコメント欄の方針コメントに対し、当意即妙の回答を、それなりのタイミングでする自信がありません。このコラムで、わたしは基本的にコメントに答えないコメントを書く人は、回答がない前提で議論を進めていただくとさせていただきます。方が妥当だったかも知れません。select」の書き方が最適で、あえて「前処理→主処理(終わるまで繰り返す)→後処理」のぐるぐる回しを書く必要がないからです。名前を記憶しておくコメント:くわぢ初めてのPCはMZ-80Cでした。終わるまで」とか習わされました。書籍「プログラミング思考のレッスン」を読んでみた。利用規約ITmediaはアイティメディア株式会社の登録商標です。