列挙、列挙、列挙、まずは列挙

ちょっと久方ぶりの「宗教」。

毎日自分に言い聞かせておかなければならないこと、なんてのは結構あるわけなんだけれど、「何かを始めるなら、まずは列挙」という基本中の基本を、あろうことか一週間以上も忘れ、結構な時間を無駄にしてしまった、というオハナシ。

タスクリスト、チェックリスト、など、とにかく「すべきこと」を予め洗い出しておくことは、日々の習慣にすると「オイシイ」。あえて「すべき」とは言わん。「オイシイ」のだ。こういうのはやってる人には当たり前過ぎることだし、やってない人は想像もつかないから、先輩から言われても「めんどくせぇ」と思うだけなんだろうけど、だったら一生やらんでも死にはしないんでやらなきゃいいとは思う。いずれわかるかもよ、とも思うし、「いずれ」すらわからないくらいの人は、周りに迷惑を撒き散らしても平気なタイプのはずだから、まぁそのまま生き続けてください。そういう人はこんな文章どうせ読まないし。

ここ数年流行の「見える化」ってあるでしょう? この話について以前職場向けに結構なボリュームのを書いたことがあるんで、いずれ一般向けに書き換える余力があったらお見せしたいと思う。ともあれ、この「まずは列挙」は、この「見える化」の第一歩である。「何か作業を始める」場合のタスクの列挙は、突き詰めていけば「作業計画」にも直結していく、が、そう大仰にしなくて良い「日々の小さな仕事」のためにも、作業効率を高めるのでオススメだ。

そうした「リアルワールド」での列挙もとても優れたツールなんだけれど、これは当然仮想世界についても言えて、今回「あーやっちまった」のはまさにこっち。

「色んなファイル形式を扱いたい道具」の適用対象が、「たくさんのフォルダの中にある複数のファイル群」だったりする、とする。たとえば:

 1 me@host: ~$ find  . -name '*.png'
 2 ./Hoge-4.9.8-src/HogFiles/Scripts.png
 3 ./Hoge-4.9.8-src/Hoge.png
 4 ./Hige2/Hige2.png
 5 ./Hige2/zig/zag/Samples/Aero/Aero.png
 6 ./Hige2/zig/zag/Samples/Alpha/Alpha.png
 7 ./Hige2/zig/zag/Samples/BmpView/BmpView.png
 8 ./Hige2/zig/zag/Samples/GuidGen/GuidGen.png
 9 ./Hige2/zig/zag/Samples/ImageView/ImageView.png
10    ...

これをな、一週間くらいずっとこうしちゃってたのな:

1 me@host: ~$ mydeveloppingapp ./Hoge-4.9.8-src/HogFiles/Scripts.png
2    ...
3 me@host: ~$ mydeveloppingapp ./Hige2/zig/zag/Samples/ImageView/ImageView.png
4    ...

適用してみたい対象が限られてたうちは無論これで事足りてはいたけれど、もちろん「もっともっと」と色々に適用してみたくなればなるほど「うぅどこだっけ」になるのであった。

そもそも最初からリストを作っておくべきなのだ。

1 me@host: ~$ find  . -name '*.png' > targets.txt
2 me@host: ~$ for i in `cat targets.txt` ; do mydeveloppingapp $i ; done
3    ...
4 me@host: ~$ for i in `grep Hige targets.txt` ; do mydeveloppingapp $i ; done
5    ...

こうしたことは「道具を使う」場合だけでなく「道具内部の設計」についても結構なケースで当てはまり、「まずは適用対象を列挙する」という設計を取ると、スッキリとしたプログラムになることも多い。大規模なソフトウェアほどそうである。

この「うざい宗教話」は実は数年前から大流行の「ビッグデータ」にも大いに関係がある。「ビッグデータ」の流行の元を作った google の「マップ-リデュース」は、ぶっちゃけて言ってしまえば「シンプルな列挙だけ先に大規模に並列、ののちにそのまとめあげを大規模に並列」するという設計。知らなかった人で、興味を持ったら、是非調べてみて欲しい。元となった発想がいかに単純で「当たり前」のことなのか、きっと驚くと思う。

てな大仰な話まで行くまでもなく…、なんというか、「とにかく念仏のように日々唱えとけ」てことよね、「まずは列挙」てさ。