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