id:ukiya:20070203:1170501286 の続き。
「現在のディレクトリにあるファイルのうち、一定の規則に沿ったファイル名を、一定の規則で書き換える」
プログラムを組むとします。
ふつう、プログラムはプログラム言語で組むのですが、
ここでは少し視点を変えて、この仕事を、誰か他の人にやらせるとします。
その人は融通がきかず、与えたマニュアル通りの仕事しかしませんが、
マニュアルは明確である限りどんなに複雑なものでも良くて、仕事の速度は猛烈に速いです。
さて、どうやってマニュアルを与えるでしょうか。
たとえばこんな感じに書いたマニュアルを与えるとします。
- 現在のディレクトリにあるファイルをリストにしなさい。
- リストの全てのファイルに対して、以下の作業をしなさい。
- ファイル名が(規則1)に沿っていたら
-
- ファイル名を(規則2)に従って変更しなさい。
-
- ファイル名が(規則1)に沿っていたら
さて、これをそのまま、何となく謎言語っぽくするとこんな感じでしょうか。
- list is all files in this directory - for each filename in list do below -- if filename matches rule1 --- change filename according to rule2
英語としては滅茶苦茶ですが、何となく雰囲気は伝わるかと思います。
もう少しプログラム言語に近づけてみます。
list = all_files_in_this_directory; foreach(filename in list) { if ( filename_matches_rule1 ){ change_filename_according_to_rule2; } }
書いてある内容は殆ど変わりません。
しかし、この書き方なら(若干言語毎の単語のクセはあるにせよ)
色々なプログラム言語に極めて近いと言っていいでしょう。
ただし、(規則1)と(規則2)は明らかにされていませんので、
まだ中身は書かれていません。
私が昔、プログラム言語初心者に言語の基礎を教えていた時、
「問題をどう処理にすればいいのか分からない」
というところで詰まっていた人には、上記のように、
「ならばまずは、日本語でいいので、融通のきかない誰かに
仕事をやらせると思って、マニュアルを書いてみてください。」
と言っていました。
言語を使っていて、本質的にこの表記に近い書き方ができる言語は、
思考をそのままプログラムにできるのでとても楽です。
逆に、上記の他にたくさん色々と書かなければならない言語は、ちょっと大変です。
上記は手続き型言語の場合の話ですが、世の中には上記と本質的に異なる
考え方をしないと書けない言語もあります。関数型言語などがそうですね。
だから何だという話でもないのですが、プログラムについて今ぼーっと思ったことでした。