私はかつて言ったことがある。プログラマーは普通の人ではなく、ある種の超能力を持った人たちだ。だが問題は、プログラマーが往々にして自分のこの特殊能力に気づいていないことだ。彼らの目には、自分は普通で、常人と同じだと思っている。だから、プログラマーにできることは、他の人、例えば彼らの顧客やソフトウェアのユーザーにも簡単にできるはずだと思ってしまう。しかし実際には、ほとんどの人、いや圧倒の多数の人(ソフトウェア開発会社の顧客やソフトウェアを購入するユーザーを含む)は、コンピューター初心者(コンピューター/IT/ソフトウェアに関する知識がほとんどない人)である。プログラマーにとっては当たり前のソフトウェア操作でも、顧客にやらせると、さまざまな奇妙なことが起こる。これがプログラマーを非常に苦しめる。
ある時、一人の顧客から電話がかかってきて、「パソコンのデスクトップにある大きなeが見つからない」と言った。私は「大きなeが見つからないとは?」と意味がわからなかった。顧客が説明した。「大きな英字のeのような形をしたアイコンが消えたんです」。私はあ然とした。ようやく、彼が言っているのはデスクトップのIEブラウザのアイコンが無くなったことだと理解した。
また別の時、ある顧客が「ページに検索機能を追加してほしい」と要件を出した。私は「システムにすでに検索機能がありますが、なぜここに新しい検索機能を追加する必要があるのですか?」と尋ねた。すると彼は「私が欲しいのはその検索ではありません。このページで特定のキーワードを検索したいのです」と言った。さらに話し合って、彼が欲しかったのはブラウザのショートカットキー「CTRL+F」の機能だと分かった。
顧客のこうした特徴のために、プログラマーが完璧だと思うプログラムも、顧客の手に渡ると、極めて使いにくいソフトウェアになってしまう。苦情の電話は、田舎でがなりたてる悍婦のように鳴り止まない。そして事後に分析してみると、根本的な原因は、プログラマーがユーザーのソフトウェアを扱う能力を過大評価し、自分たちのソフトウェアを開発する能力を過小評価していたことにある。その結果、彼らには、顧客が自分たちの開発したソフトウェアを使っている姿が、下の図のようにすべて笑える行動に見えてしまうのだ。

もし気性の荒いプログラマーなら、こんな状況に遭遇すると、顧客に愚痴の一つも言いたくなるだろう。しかもプログラマーは概して気性があまり良くないので、通常、顧客とコミュニケーションを取る際には、プロジェクトマネージャーが一緒に同席することが多い。事態が激化しないようにするためだ。
顧客はプログラマーに多くの面倒をかけるが、実はプログラマーのすべての誇りは顧客からもたらされる。顧客が満足して使ってくれてこそ、プログラマーは達成感を得られるからだ。例えば、下の写真の顧客たちが新しいソフトウェアを使っているときに見せる表情は、北京の重度のスモッグの午後にいるプログラマーでさえも笑顔にさせる力がある。

プログラマーは気性が良くないかもしれないが、みな仕事のことを第一に考えており、個人的な恨みは一切ない。ソフトウェア開発に緊急のタスクがあれば、文句も言わずに残業や徹夜を重ねる。リリース済みのソフトウェアに重大なバグが見つかれば、深く自責し、徹夜で急遽バグ修正パッチを作り上げる。もし最初の時点でユーザーを満足させられなければ、食事も喉を通らず、眠ることもできない。たとえ短期的に完全な是正措置がどうしてもない場合でも、奇抜なアイデアを絞り出し、それはそれで効果のある方法で、ユーザーはひとまず難局を乗り切れる。例えば、下の写真は緊急修正パッチである。

顧客はプログラマーを理解すべきだ。プログラマーの生活は、実際には非常に矛盾した状態にある。プログラミングは他の業種とは違う。例えば、左官がレンガを積む場合は、レンガを一層積めば壁が一段高くなる。しかしプログラミングはそうではない。あるプログラマーが一日中コードを書いて、必死に頭を抱えても、開発の進捗が進まないこともしばしばあり、時には後退することさえある。ソフトウェアプログラミングは虚実入り混じった世界であり、あるコードがなぜうまく動くのか分からないこともあれば、あんなコードで構成されたソフトウェアがよく動くな、と驚くこともある。まさに下の図に示す通りだ。

最後に、プログラマーと付き合う際の注意事項をいくつか述べます。プログラマーは一日中プログラミングロジックと向き合っているため、因果関係に特に敏感です。あなたの言葉の因果関係が明確でないと、彼らは困惑します。あなたの言葉の因果関係が不完全だと、彼らは間違ったことをしてしまいます。もしあなたの言葉の中にif、その後に用いるのが良いthen締めくくりとするか、または用いるelse選択肢を示す。主語は明確にすべきだ。明確でないと、下の図のような事故が発生します。

もしあなたがプログラマーなら、私の言っていることがわかるでしょう。