プログラマにとってコミュニケーションはとても重要なことです。

プログラマの仕事を始めたばかりの頃は、コミュニケーションと言えば、人間相手よりも、専らコンピュータ相手のコミュニケーションということになるでしょう。より正確に言えば、コンピュータ上で動作するプログラムとのコミュニケーションです。このコミュニケーションにおいては、概念をコンピュータに理解できるかたちで表現する、つまりプログラミングが必要です。プログラムを書くことで、頭の中にあった概念が現実化されるのです。現実化される際に、実体のある物質がほとんど関わらないというのがプログラムの面白いところです。

プログラマには、コンピュータに理解できる言語を上手く操る能力が必要です。その言語には、様々な種類があります。ハードウェアに直接に語りかけるような言語もあれば、仮想的なコンピュータと対話するものもあります。抽象度が言語によって、また開発ツールによって違うということです。プログラマにとって、抽象度の異なる複数の言語を学ぶことは重要です。1種類の言語だけでは、中には非常に表現することが困難な概念もあります。優秀なプログラマなら、日々の業務をこなす以外に、自分の時間を割いて別の言語を学ぶ努力をするでしょう。業務で使うものとは目的が異なり、違った概念の表現に適した言語を学ぶのです。この努力は、いつか必ず報われるはずです。

コンピュータとのコミュニケーション以上に、プロジェクトチームのメンバーとのコミュニケーションが大切です。特に大規模なプロジェクトになると、1人でこつこつプログラムを書く「職人仕事」の部分はとても小さいと言えます。他人と話し合いながら進めるチームワークの部分が大きいでしょう。自分の考えていること、やろうとしていることを、コンピュータにわからせるだけでは不十分なのです。他人の言うことをよく理解し、自分の言いたいことを他人にわかりやすく伝えることが必要です。私の知る限り、優秀なプログラマはプログラミング言語を巧みに操るだけでなく、自然言語も非常にうまく使うことができます。話す力が大事なのは、他人とのコミュニケーションが円滑にできるからだけではありません。自分の思考を明確にするためにも、話す能力は重要なのです。この能力は問題を抽象化する際には欠かせません。そして抽象化こそ、プログラミングの核心です。

ソフトウェア開発に関わるのは、コンピュータとプロジェクトチームのメンバーだけではありません。他にも多くの人が関わります。その中には、同じ社内にいてもプログラムのコードは書かないという人もいれば、社外の人もいます。自分の仕事については知っていても、コンピュータについては知識がない人も大勢いるでしょう。そういう人たちとのコミュニケーションもやはり重要です。テストや品質管理、デプロイ、マーケティング、販売などに携わる人たち、そしてエンドユーザ(製品を企業内で使うユーザもいれば家庭で使うユーザもいます)とのコミュニケーションは欠かせません。コミュニケーションのためには、相手がどういう人たちで、どういうことに関心を持ち、どんな問題を抱えているかを知る必要があるでしょう。そのためには、相手と同じ言葉を話す必要があります。相手の住む世界の言葉、それぞれの専門分野の言葉を話さなくてはならないのです。もしそれができなければ、仮に会話がうまく成り立っているように思えても、実際には成り立っていないということになります。

たとえば、話す相手が会計士ならば、原価センタ会計、投資資本、使用資本、といった概念についての基本的な知識が必要です。マーケティング担当者にも、弁護士にも、やはりそれぞれに特有の言葉や概念があるので、それを多少は知っておかなければうまく話ができません。対応すべき分野はプロジェクトごとに違うでしょうが、その分野に固有の言語を話せる人は、プロジェクトに必ず何人かは必要です。その人自身がプログラマであることが理想的です。コンピュータを使って概念を現実化するのは最終的にはプログラマの仕事だからです。

プログラマはただコードを書くだけの存在ではないのです。カール大帝の言葉にもあるとおり「他者の言葉を知ることは、新たな魂を持つこと」です。ソフトウェア業界の外にいる人とコミュニケーションをしてみれば、他の世界の言葉を知ることの大切さがよくわかるでしょう。大事なのは自分が話すこと以上に、相手の話に耳を傾けることです。言葉にならない言葉の存在を知ることが大事なのです。

語り得ぬものについては沈黙しなければならない ルートヴィヒ・ウィトゲンシュタイン