プログラマーという伝説

お客さんとかあんまり親しくない友人とか知り合いと話しているとプログラマーはいったい何をやっているのかという話になります。多めに見積もって尊敬が半分、謎と懐疑が半分といった感じがするような話題です。実際にプログラムを書く作業はおもしろいものではありませんし、正直いうと辛い作業ですし、決して天才的な作業ではありません。読み書きソロバン(現代版でいうと、英語・パソコン・マーケティング)ができれば誰でもできることです。しかし誰でもできると言っても「日本人なら誰でも英語ができるようになれる」というようないった感じで、結局できない人には全くできません。逆に何の努力もしなくてもできる人にはできてしまうといった代物です。
プログラマーが最も最初に考えていることはアイディアの選別です。個人的なところでいうと、そのアイディアは実際におもしろいのかどうか、自分にとって有益なことなのかどうかということです。詰まらないアイディアに対してプログラマーは非常に冷たい(笑)。しかし逆におもしろいとなるとトコトンやってしまうという気質があります。またラリー・ウォールが言うようにプログラマーの三大美徳「無精(Laziness)、短気(Impatience)、傲慢(Hubris)」というものがあって、よきにしろ悪きにしろこれらは非常に的を得ています。まずは手打ちで何かをすることを極端に嫌います(Laziness)。そんな作業は時給アルバイトにでもやってもらえばいいと思っています。自分に時間があっても決して手をつけることがありません。数万行ある作業もすべて一括でプログラム処理してしまいたいのです。そして、それらの作業をすぐに終わらせてしまいたいと考えます。過去に自分が作ったソースコードがあればそれを使いまわし、誰かがそのソースコードを持っていたら拝借します(Impatience)。およそ長考を重ねコツコツ作業することを嫌います。またコードを書いている最終にチャチャが入ることを嫌います。集中するとその流れで一気に書いてしまいたいのです。最後に「システム的にできないものはできない」とやたらに空気を読まないで宣言し帰ってしまいます。ROOTのパスワードを教えて貰えないのだったらできないといって帰ってしまうのです。それ以外に方法がないのを熟知しているからです。またロジックがあやふやなものを嫌います。これらの美徳は実に実用的でできるプログラマーだったら正にこれらの美徳を備えています。
プログラムを書くという以前に我々はこのような気質でこのように傲慢です。
実際にプログラムを書く作業はどんな風にしているのかというと、我々が扱っている言語(つまり外国語)は、その意味そのままの言語です。端から見てどんなに不思議な記号であろうとそれらは文法から成り立っています。つまりきちんと意味を伝えるという言葉そのままなのです。ですから、我々は機械に対しての機械語を機械に向かって話しかけて、その反応を待ち、また話しかけます。機械と四六時中お喋りしていることになります。機械は先の三大美徳をもっと極端にした連中で、その断り方も酷いし馬鹿なプログラマーに対しては何も反応しません。無視を決め込む時もあれば、相手にさえしません。しかしできるプログラマーが話しかけるとかなり難解な作業も数秒でこなしてくれるという優しい側面もあります。我々はそのような性格の機械とお話しています。どの機械言語を話すのかは、その時々によって違いますが、例えばPerlという共通言語で話をする時には、

#!/usr/bin/perl

と我々が話かけると、「ん?何?」と反応してくれます。この#!/usr/bin/perlは、言語をネイティブで話す人にとっては特に意味がありません。「Hi, Perl!」と呼び出すか「すみません、Perl様でしょうか?」と言うか「Herr Perl, bitte!」と言うかはその言語によって違うというだけです。それ以上の意味もそれ以下の意味もありません。#!/usr/bin/perlを知っているというのは、天才であるか馬鹿かなどは全く関係ありませんし、ただその地域の文化とルールをよく知っているというだけです。ただ私の感覚で言えるのは、機械は人間以上に鬱屈した性格をしているので、それらの文化になじまないとこちらが疲れてくるというだけの話です。
また、などのソースコードを数千行も書くという作業がしばしばありますが、恋人とチャットで数時間話してしまったようなもので特にその数千行に驚くことはまるでありません。文脈上、そういう長話になってしまったというだけですし、その中には無駄な会話も含まれているからです。(無駄話が多いのは周囲の人々には好まれません。スピーチとスカートは短い方がよいのです。)
しかし得体のしれない不気味な呪文のようなコードを書いている人間は、本当に何をやっているのかわかりません。会社で営業の松田さんが私のところにやってきた時にPCのモニターを見て「文字しかないですね」と呟いていましたが、それもそのとおりで我々は機械と文字(殊にアルファベットと数字と記号)で話をします。画像とか見せても機械は反応してくれません。
さて、プログラム言語は言語であると同時にロジック中心の言語です。俳句や短歌のような雰囲気を理解してくれないのです。稀に我々の雰囲気を察していろいろ手を焼いてくれますが、彼らはロジックにうるさいので曖昧に雰囲気を察して処理してくれるようなことがあったら後々しっぺ返しをくらいます。若いころに付き合っていた彼女のようなもので「だって、あの時そういったじゃない?」と全く引かないのです。この頑固さは天下一品で引き下がろうとはしません。ですから、我々は最初から我々自身にも矛盾がないように慎重に言葉を選びます。またそのロジック中心の矛盾のない会話をすることを約束します。

use stricht;

約束と前提をかわせば、後々困ることも非常に少なくなります。
我々のやっていることはこのようなことです。これらの約束事を前提に「もし〜だったら、xxしてください。そうじゃない場合はzzをしてください。」と冷静に命令してゆくだけです。彼らはそれなりの処理をしてくれますが、「え!もし〜だったら、どうすんの?そういう場合もあるでしょ?」とは決して言ってくれません。「わし、そんなこと言われてないのでやってないっす。」と新人サラリーマンのように傲慢です。そういうのと日々付き合っています。
それらの言語に長けていても、やはり自分の生まれ育った地域での生活の方がやはり楽です。しかし、時折とんでもない外国で仕事をすることがあります。同じ言語を喋っていても約束事がいろいろ違うのです。はじめてゆく外国、しかも大都市となるとやはり地図が必要でしょう。にも関わらず、セキュリティー上の問題で地図を渡すことはできないと秘密裏にされてしまうことがあるのです。大企業の仕事に多いです。じゃ、どうやって目的の人物と話せばいいのですか(目的のファイルにコードを加えたり修正したりすればよいのですか)となると皆知らないといいます。そういう場合どうするのかというと、全文検索(grep)します。結局セキュリティー云々は嘘で我々は「全文」検索することになります。しかしgrepは端からみると魔法のようなものなので、皆プログラマーを魔法使いだと思っています。ただ全文検索しただけです。もっといろいろありますが、これらが我々の具体的な仕事です。少々おかしな性格の人間といろいろ会話をしているだけです。そのおかしな人間(機械)と話をしてみたいという生身の人間が結構希少というだけです。私自身もなんでこんなことをやっているのかわからないのですが、誰も機械を相手にしてくれないので仕方なくやるハメになって10年以上経っているというだけです。

Last update: 2016.07.02 (土)