プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

優秀なプログラマって、効率的に仕事する人なのかな?

今回は生産的なプログラマについて書きました。技術への理解,問題解決への洞察力,コーディングの力といったプログラマとしての基本的な能力が重要であることは言うまでもありませんが,今回述べたようなその他の能力も生産性を決める大きな要素だと思います。

第6回 [最終回]プログラマについて|gihyo.jp … 技術評論社

 会ったときにその人が頭がいいか判断するのは通常難しくありません。しかし物事を成し遂げる人かどうか知るのはもう少し難しくて、実際にその人がうまく物事を成し遂げてきたという実績を見る必要があります。

 もうひとつおまけのルールがあって、それは嫌なやつでないということです。おまけだと言ったのは、会社によっては嫌なやつでもかまわず採用し、それで問題なくやっているところもあるからです。

Joelに聞く、「優れた開発者」の要件・心構え・努力すべきこと (1/3):CodeZine


こうして考えてみると、優秀なプログラマって、別にソフトウェア業界以外でも優秀な人なのかもしれないね。


自分のためだけにソフトウェアを作る人だったら、プログラミング技術だけに精通していればいいのかもしれない。けど、通常そういうプログラムは少なくて、誰かが使うためにソフトウェアがあり、使ってもらうためにソフトウェアを作るプログラマがいる。

じゃあどんな人が優秀なのかな?


プログラマにとって必要な機能を実装するための技術力はもちろん大事なことなんだけど、もっと大事なことは

  • 相手が何を言っているのか正しく理解し
  • さらに相手が本当に求めていることを探り
  • それを自分の中で分析し、実現できる機能を相手に説明し
  • 何がベストなのか、互いに納得できるまで話し合った上で実装し
  • 完成したソフトウェアを誠意を持ってメンテナンスする

というサイクルがスマートにできるかどうかってことじゃないかと思うんだ。


全ての人が正しいと認める仕様やデザインなんて、たぶん存在しない。ソフトウェアやシステムがどうあるべきかは結局個人の主張によるところでしかなくて、つまるところそれぞれの価値観の行き着く先でしかないという気がする。


とかくデザインは個人攻撃や主義主張に陥りやすいんだけど、優秀な人は相手も自分もちょっと離れた位置から見て議論を進めるのが得意な気がする。なんていうのかな。問題を原点に返すのが上手っていうか。本質を見誤りそうになった時に「で、元々なんの話だったっけ!?」というようにコントロールできる人のような気がするんだよね。

yasuhoの場合は


もちろん現場じゃそう簡単にはいきません。かく言うyasuhoもいつも失敗ばかり。そんなぼくが一つ心がけていること。

  • 相手の意見を否定しない

人によって何が正しいかは違うのだから、それを否定してしまうと議論がスタックしちゃう。人の意見は認めた上で「ぼくはこういう理由から、この方法がいいんじゃないかと思う」って主張するように心がけてる。必ずしもそうはならなくて、後で反省したりもするけどね。


プログラマはそうでない人よりプログラムのロジックを知っているから、とかくソフトウェアの実装を「仕様」と主張して相手をねじ伏せてしまいがち。その時は議論に勝利したって思うかもしれないけど、相手にしてみたら、不信感だけが残るってことにならないだろうか。

じゃあ優秀な人って?


そう考えると「優秀な人」って「誠実な人」ってことになるんじゃないかなあ。


優秀って聞くと、なんか物事を効率よく片付ける人のようなイメージがある。でも、ぼくの考える優秀って

  • 相手のことを思いやり
  • 後に障害となることを予測し
  • 間違いは素直に認め
  • 問題を一緒になって考える

っていう誠実さなんじゃないかと思う。長い目で見たら、そういうのは信頼につながって、自然と「あの人って優秀なんだよね」って言われるようになる。そんな気がするんだよね。