読者です 読者をやめる 読者になる 読者になる

プログラマに持っていて欲しい資質のひとつ

生活

 たまに、「プログラマに必要なのは設計能力だ!」的な断言をした人へ「いや分からないことを調べる能力だ!」「いやいやコミュニケーション力だ!」という反応を返すような、そんなやりとりを見ます。で、そのうち誰かが「プログラマに必要なものは環境によって異なるんだから、その場で何が最も大切かを見極める力だ!(どやぁ」的なことを言います。で、まぁそれが決定打になってその場は治まるのですが、「おぉ、確かにそうだ!それが一番だ!」と呼応する人は皆無です。何で呼応する人がいないかっていうと、
 (いや、それつまり何も言ってなくね?)
 ってことだからですよね。
 まぁこれはいつもの展開なのでw、Twitter でこのネタが始まると、正直、つまんねー話だなぁと思ったりします。(最近そういう話した人、居たらすみません)
 
 さて。
 とはいえ僕は、「何が最も大切かが分からなくて迷っているなら、何に向かって頑張れば良いかも分からない」というそもそもの問題が解決されずに残るモヤモヤは理解できるつもりです。「そんなの気にならないよ!そんなことグジグジ考えてバカじゃないの!」と思った人はお帰り下さい。この先の文章を読むのは時間の無駄ですので。
 
 まぁプログラマが 持っていた方が良い 資質なんて上げればキリがないのは大前提としても、発揮して欲しくない能力はあると思うんですよ。例えば、他人の足を引っ張る能力とか…ですね。
 で、まぁここまでは「それプログラマに限った話じゃねーよ」って一蹴されちゃう程度の結論なので面白く無いんですが、プログラマに話を限定するならもうちょっと話を続けられるような気がします。
 えぇまずプログラマの仕事の一つにプログラムを書く能力があると思います。巷には Excel で仕様書を書くことを生業としているプログラマもいるそうですが、この記事ではそれはちょっと横に置いておきましょう。
 「プログラムを書く」という行為に必要なのは、問題を切り分ける能力です。
 これはつまりデータとデータを切り分けて取り出すことであったり、処理をひとまとめにしてそれ以外の世界と切り分けることであったりします。プログラムは名前が 8 割だと言う人もいるそうですが*1、名前をつけて意味づけすることだって、別の名前と切り分けるためにやるんです。この問題とあの問題は別だから、それぞれをこういう風にトリートしよう、ということをプログラマはごく自然にやってますよね。
 で、この能力が欠落するということは「どうやったら仕事を手っ取り早く終わらせるか」という問題すらも切り分けて取り組むことができない、ということだと思うのです。例えばプログラムの技術的な解説をしている場でこうやって足を引っ張る発言をするのを目にします。
 「いま使うわけではない技術を知ってる奴はただの勉強バカ」
 「それを知ろう・教えようとする態度そのものが害悪」
 「それよりも残業体質の改善が…」「それよりも上司が…」「それよりも同僚が…」「それよりも客が…」
 いやまぁ、その気持は分かるんだけどもwww と言いたくなります。
 そもそも技術的なトピックが、なぜ、残業体質や上司の在り方といった比較的重要であろう原因そっちのけで解説されるのかというと、
 「ある問題 A や別の問題 B があったとして、
  その中で技術で解決できるかもしれない程度に切り分けられた部分に対して有効かどうか」
 を判断できるようにするためです。
 例えば残業体質が問題だったとしても、それが問題としてそこにあり続ける理由は恐らく複合的な要因に依るものです。理由を分解しましょう。顧客とのどういう関係が原因の一部なのか、上司のどういう性格が原因の一部なのか、経営のどういう習慣が原因の一部なのか、…といった、たくさんの原因たちに混ざって、技術のどういう不足が原因の一部なのか、という見方があるだけだと思います。
 それぞれのファクターで、それぞれの解決をしましょう。
 「いま使うわけではない技術を知ってる奴はただの勉強バカ」と一蹴するのではなく「いま使うべきかどうかを適切に判断するために知っておく態度は悪くない」と泳がせる人の方が僕は好きです。
 さて、技術というものは本質的にハイコンテキストです(ハイコンテキストっていうのは、その背景にある文脈が長い、もしくはそこに到達するための裾野が広いということです)。何でもないものを技術とは呼ばないんですよね。「アレとコレとソレをこう組み合わせると、ようやくこういう価値を提供できるようになる」というものを技術と呼ぶわけです。加えて、プログラム技術というものはそもそも情報工学の一端なので、ネジも歯車も無いのに技術と呼ぶんですね。情報は物理的には見えない。でも、見えないからこそ頭の中で組み上げたり切り分けたりすることが瞬時に出来るんですよ。プログラマの生産性に大きく個人差が出るのは、頭の中で行う作業のわずかな個人差の掛け算が、アウトプットされる頃には猛烈な差になっているということですね。
 まぁスーパープログラマはさておき、そういう能力を発揮することを労働とする「プログラマという職」は、問題を切り分けて考える職能を持っていてしかるべきだと思うんです。少なくとも、問題解決に対するそういう姿勢は、プログラマという職種に求めても良いはずです。まぁそんなわけで僕は、ものごとを切り分けて考える能力を、プログラマに持っていて欲しい資質のひとつとして据えています。

*1:あぁ、何かこれ前も言ったな