プログラマyasuhoの隠れ家

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

最高のプログラマは環境が作る


最高のプログラマというものは環境が作るものだと思います。新しいアイデアや発想を受け入れ、果敢にチャレンジする。みんなで製品をよくしようとする意欲がある。そういう雰囲気の環境では、個人が能力以上の才能を発揮することが出来るはずです。そんな環境から「最高のプログラマ」は生まれてくるのではないでしょうか。

優秀な技術者が持つ能力


Joel on Software Translation Projectより:


ソフトウェアにおける高音域

凡庸な歌手は最高の歌手がいつでも出している高音域を決して出すことができない。モーツァルトの夜の女王のF6を出せるプリマはごくわずかしかいない。そしてあのF6が出せなければ、夜の女王を演じることはできないのだ。


優秀なプログラマには私のような平凡以下のプログラマには超えられない「何か」があるような気がします。それはとても奇抜な発想であったり、複雑な問題の原因を一瞬のうちに発見することができる才能であったりします。


最高のプログラマとは何でしょう。そして、最高のプログラマが能力を発揮できる現場とは何か。ちょっと考えてみたいと思います。

優秀なプログラマの種類


私は優秀なプログラマの持つ技術というものには、以下の二種類があると思います。

優れた発想を持つプログラマ


画期的なインタフェースや高速なアルゴリズムを発想できる。誰も思いつかなかったアイデアを考えて実装する。そういったことができるプログラマは優秀であると言えるでしょう。


パズルや数学のように発想力を必要とする能力は、ある種の才能ではないかと思います。こういった能力は努力や経験だけで磨くことは難しいです。様々な経験を積むことで多様な発想力をつけることは可能かと思いますが。

実践に強いプログラマ


シンプルで読みやすいコードが書ける。バグを素早く発見できる。新たなバグを生み出さないようにプログラムを修正できる。こういった実践に強いプログラマも優秀であると言えるでしょう。


これは才能ではなく経験と実践によってのみ身につけることが出来ます。長年一つのコンポーネントを担当することでも能力は上がりますが、多種多様なコンポーネントや業務を担当する方がよいようです。

最高のプログラマとは


そして最高のプログラマは、この両方を兼ね備えた人だと思います。豊かな発想力を持ち、実践力を持つ人ならば、優れたアイデアを素早く実現してくれるでしょう。どちらが欠けてもよいソフトウェアを作ることは出来ません。


そして仮に最高のプログラマがいたとしても、それを生かす環境がなければ、その実力を発揮することは出来ないと思います。新しいアイデアがあっても「売れるかどうか分からないから採用できない」というような保守的な会社。責任の所在が不明確で、結局プログラマが苦労するような職場。そのようなところではプログラマに限らず、メンバーのやる気を出すことは難しいでしょう。

最高のプログラマは環境が作る


私は最高のプログラマというものは環境が作るものだと思います。


新しいアイデアや発想を受け入れ、果敢にチャレンジする。みんなで製品をよくしようとする意欲がある。そういう雰囲気の環境では、個人が能力以上の才能を発揮することが出来るはずです。


いかに優秀な技術者がいたとしても、個人で出来ることは限られています。また、そういう人に負荷が集中し、やる気をなくしてしまうケースは多いですよね。個人の能力がいかんなく発揮できる職場。そんな環境から「最高のプログラマ」は生まれてくるのではないでしょうか。