2012年9月7日金曜日

プログラマが理解されない理由

プログラマ?

プログラマは特殊な人間だというある種の誤解がある。
いや、誤解ではないのかもしれないが、とにかく理解されがたい部分が多いのは事実だ。

なんでこんなこと書こうと思ったか。
プログラマだけではシステムを作るのは難しいからである。
主にプログラマとやりとりを(ややうんざりと)しなければならない人たちがいる。最も多いのはデザイナではないだろうか。彼らとはうまくやっていかなくてはならない。分業し、きっぱりと作業境界を引き、責任の所在を明確にしたいと思うのがプログラマだと思う。

別にデザイナの頭が固いとか、プログラマが変人だということを言いたいわけではないのだが、なぜ「プログラマ」は特定の「人種」のような扱いを受けることが多いのか。自分なりに考えておきたい。


プログラマはプログラマ語を話す

最もコミュニケーションの障害になるのは、言葉の違いなんだと思う。同じ日本語なのにまるで行ったことのない土地の方言で会話させられているような気分になるんじゃないだろうか。
プログラマはなにも、嫌味でプログラマ語を話すわけではない。(普通は)

プログラマはその普段の風貌とは裏腹に、非常に繊細な思考をもっている。また流儀や思想を非常に重んじていて、それを共通認識としてもっているため、普通の日本語で表現するととってもとってもまどろっこしい、言いたいことより説明のほうが長くなってしまうような会話になってしまう。コード内の厳密でないコメントが嫌われるように、厳密さの低い説明を嫌う。
言語や技術は基礎的な論理の上に成り立っているので、うわべだけを説明してもそこに行き着くまでの前提を省略するほうが楽なのだ。
たとえば文字の"1"と数字の1の違いをいちいち明確に区別しながらアルゴリズムの説明をしようとすると、まず型とはなにか、オブジェクト指向とはなにか、プリミティブとはなにか、というプログラマなら誰しもわかっていることを意識して話さなくてはならない。これはやってられない。
結局、わかっていることは省略し、わからないことは厳密で思想的な表現が多いということになる。

もっというと、技術や能力が乏しいなどでプログラマ語を話せないプログラマに対して、多くのプログラマは苛立ちを覚える。話が通じない、話すまえに調べて来い、と思う。

嘘じゃないが本当じゃないことを言う

二値論理と三値論理の概念をコミュニケーションに持ち込みやすい。trueでもfalseでもない、「わからない」(=null)という状態が当然の世界で毎日過ごしている。絶対的にT/Fの場合の話も、nullがありえる話も特に区別せずにそのまま扱って話す。

しかも表現を厳密にすることが生活にしみこんでいるので、他者からすると余計にわかりにくい場合、認識の齟齬を発生しやすい場合が非常に多い。あるメールを送ったのにプログラマに届いていない場合に、「そのメールが送られていない」と「そのメールを受信していない」をプログラマは使い分ける。送られているかどうかはSMTPの問題で、受信していないのはそれ以降のネットワークやPOPなどの問題だから。「AがBにメールを送った」「BはAのメールを受信していない」は当然両立され、truefalseを両立できるということはそれぞれは別の事象であると考えて譲らない。「常識的に考えて同じことを指している」というのは通じない。

コードを書いているときが仕事をしているときではない

プログラミングという作業の性質上、作業量と成果がまったく関係しない。頑張れば頑張るほど作業が増えている場合なんて普通である。1時間まるまるかけて壮大なバグをコードに仕込むなんていうのは普通にある。

おそらくプログラマがもっとも仕事をしている時間というのは、画面をじっとみつめて、画面の裏側に焦点があっているときだ。そのときプログラマの頭のなかでアルゴリズムがめまぐるしく書かれては消え、消えては書かれ、数学計算や概念モデルがぐりぐりと動いている。(フロー状態というらしい)


プログラマはプログラムを書くのが仕事だ。だから書いている時間がプログラマがもっとも集中している。

これは明らかに間違いだということだ。
じっと画面を見つめているときに話しかけられるのはたまったもんじゃない。でも自然言語の場合は書いているときに考え、書いていないときは文法チェックや表現の精度、スペルチェックなどをしていたりするので、手を動かしていないと話しかけてもよさそうに見えてしまう。

プログラミングはまったく逆の作業だ。頭のなかで書いたものをファイルに書き出しているだけなので、そのときにスペルチェックなんかをしたりしている。そもそも、タイピングすることは会話することと同程度の負荷にしかならないので、書きながら会話をするのも別に苦じゃない。
プログラマ同士はタイピングしながら会話することが普通なのだが、プログラマ以外からみると「無礼」と感じる人も多いようだ。

嘘をつく

完全に、何のツッコミの余地もない、クリーンで、理路整然とした説明をプログラマ以外の人間にすることを、プログラマは半分以上あきらめている。
それでも伝えなければ仕事にならないので、なんとか噛み砕こうとするが、大体失敗する。

プログラマは「考え方を考える」ということにある程度の能力を割いて生きている。そこで成熟した「考え方」はプログラマのなかでは簡潔で完結したひとつの形として揺るがない。
なのであることを説明する場合、その「考え方」の外から説明するという意識に乏しく、むしろ説明するにはその考え方を理解してもらわなければならないとさえ考え、本題に入る前の説明がながったらしかったり、ロジックを間引きして説明しなければ伝わらないと感じ、最終的に嘘をつく。

与えるべき情報と実際の論理の整合性が取れると判断した場合、厳密さを捨ててインプットとアウトプットのみを説明し、間の部分は適当にしてしまうことが多い。プログラマ的にはそれは「本当は違う」程度なのだが、外からみると「嘘をついた」ことになる。




とりあえず今回はこれら4つの原因を考えてみた。
おそらく問題の根はもっと深いところにあるのだろうと思うので、また考えがまとまったらブログに起こしてみよう。


0 件のコメント:

コメントを投稿