良いプログラマの条件とは?

  • このエントリーをはてなブックマークに追加

   

80fc5381d1bd8157ed20170f2cf563e9_s

野球の打者は、少なくとも30%の確率でヒットを打つことに成功すれば良いとされている。ゴルファーなら、いつもアンダーパーでプレイできれば良いと言われる。射撃手は的の中心に命中させるべきだし、銀行家は裕福であるべきだ。

今挙げたものはすべて、少なくとも同じ分野の人と比較すれば、彼らが優れているかそうでないのか、比較的簡単に測ることができる。

プログラマの素養を測るのは、それよりもずっと難しい。この「素養」が何を差しているのかを説明することすら、ほぼ不可能だ。それでも、プログラマには明らかに優れた人がいるし、ひどく下手な人もいれば、平均的な人もたくさんいる。

私は、この仕事を1981年からずっとやってきて、様々な環境、業界、技術分野で多くのプログラマたちと働いてきた。その間、私はあらゆる種類のプログラマを見てきたので、優れたプログラマというのは、どのような人を指すのかは見分けがつくようになった。とは言っても、その理由を定義するのはまだ難しいけれど。

プログラミングは、かなり複雑な業界で、言語も技術も環境も業界も多ければ、アプリケーションやターゲットの種類も様々で、コードの書き方も多種多様だ。だから、人を比較することは難しい。そのせいで、人の採用も難しい。同じように、その人の経歴や見かけ上の能力が、採用する会社のニーズに合うかどうかを見極めることも難しい。

土木工学のように、特定のタイプのエンジニアリングには複雑な試験があり、技術士の資格を得る前に、特定の知識と経験が必要とされる。つまり、基礎知識を十分に理解していることを証明することになる。しかし土木工学は、何千年も前から続く考え方に基づいていて、重力、風、温度など、私たちが実際に住む現実世界での物質を扱っている。

一方のプログラミングはたいてい、完全に自分たちの作品の世界だ。私たちは、知らないハードウェアデバイスの、どこかのクラウド内にある、仮想プロセッサ上の仮想マシンで実行するコードを書くことができる。現実世界では、私たちが書いたプログラムを触ることは絶対にできない。私たちは、異なる何百種類もの言語やオペレーティングシステムを使い、実に様々な規模で、クライアント、サーバ、またはその中間に、リアルタイムでも、本当に長い時間をかけてもコードを書くことができる。あらゆるアプリケーションは過去の作業とは無関係だ。しかし、それらすべてがプログラミングとされ、それをやる人がプログラマと呼ばれる。

私は、長年に渡り一緒に働いてきたプログラマたちの多くをまだ覚えているし、その能力に驚かされた人のことも、遠くまで逃げ出したくなるような人のことも思い出せる。前者と後者を分けるのは、一体何だったのだろうか?

その違いを簡単に説明する方法はない。これは、野球のヒットやバスケットボールのダンクシュートのように、簡単に説明したり比べたりできることではないのだ。

一覧表を作るべきかと思ったが、それでも私が万事心得ていると誰かに思わせるだけの説得力は多分ないと思う。もしそれができたら、立派な人材スカウト会社を作っているだろうね!

  1. 良いプログラマは、準備が整ったと認識してから納品することを望む。
  2. 良いプログラマは、不具合を受け入れるが、それを二度と発生させないように全力を尽くす。
  3. 良いプログラマは、新しいものを学ぶタイミングと、古いものにこだわるタイミングを心得ている。
  4. 良いプログラマは、言うべきことへの発言を厭わず、やるべきことをやり、修正すべきものを修正する。
  5. 良いプログラマは、周りの人を向上させる。
  6. 良いプログラマは、やるべき動きをし、やるべきでない動きは決してしないプログラムを納品するため、誰かを驚かせることはない。
  7. 良いプログラマは、将来の計画を立てる時と、計画を諦める時を知っている。つまり、解決策を事前に考えるタイミングと、何が次に起こるかを見極めるタイミングを心得ている。彼らは進路に従う時を分かっているが、崖に向かっている進路を見極められるように、油断せず見張っている。
  8. 良いプログラマは、自分の知識に満足したらおしまいだと分かっている。
  9. 良いプログラマは、間違っていたことを認められる。
  10. 良いプログラマは、ゴミを納品しないように最大の努力を尽くす。

これは妥当なリストだと思うが、もちろん極めて主観的なものだ。私が今までに働いたことのある素晴らしいプログラマたちの優秀さを説明しようと試みた。そしてそれは、私がそうなれるよう努めていることでもある。プログラマは皆、やっていることが違うため、具体的にするのが難しかったので、少し曖昧になった。

悪いプログラマとは何かというリストは、もっと難しいので、作りたくない。だが、もしこのリストの反対のことをやる人がいたとすれば、多分あまり優秀なプログラマではないだろう。普通のプログラマは、リストのうち、いくつかの項目はできているかもしれないが、それ以外はできていなかったりする。

面接で、このリストを上手にこなす人を見分けられるだろうか?もちろん、そんなことはできない。誰かと一緒に何ヶ月も働いて、その人が本当に優秀なのかどうかを見極めるのは時間がかかる。優秀さの多くは、時間をかけて現れてくるもので、その人が本当に良いと気づくまで、たくさんのプロジェクトと何年もの時間を費やすことだってあるかもしれない。私は、自分が採用担当ならすぐに採用するであろう、本当に頭の切れる人たちと一緒に働く機会に恵まれてきた。同時に、ことごとく失敗する人々にものろわれてきたけれど!

当然、誰もが自分のことを優秀だろうと思っているのだが、実際に優秀であるかどうかは、一緒に働いてみないと分からない。実際には大して優秀でなくても、自分の能力を高く評価してしまうのは人として当然のことだ。リストの上位にいる人が多い素晴らしいチームと働くと、もはや仕事が仕事っぽくなくなるが、そのような機会には滅多に恵まれないし、私が自分のキャリアの中で見てきたのは、極端な人か、たくさんの平均的な人たちだ。

結局は、可能な限り1番であろうとすることと、あなたの仕事に周りの人が感謝してくれることを望むしかない。当然、一緒に働く素晴らしいチームを見つけるまで、転職しなければならないこともあるだろう。

原文:http://thecodist.com/article/what_makes_a_programmer_good (2016-12-15)
※元記事の筆者には直接翻訳の許可を頂いて、翻訳・公開しております。

 -プログラミング

FAworksではプロのコンサルタントが案件をお探しします

  関連記事

キャリアアップに有利!?ITエンジニアが取得しておきたい資格まとめ

ITエンジニアの中でも「システムエンジニア」「ネットワークエンジニア」など様々な種類があり、資格も幅

今、なぜフルスタックエンジニアになる必要が?

by Jim Pennucci 既にバズワードにもなりつつありますが、今、まさに現在進行中で、フルス

フルスタックエンジニアを目指すには。

フルスタックエンジニアを目指すには。

by Shunsuke Kobayashi 習うより慣れろと言うことわざがありますが、 エンジニアで

Linux OSのジッタを体系的に削減する黒魔術

Linux OSのジッタを体系的に削減する黒魔術

低遅延性の求められるトレードシステムにおいて、ジッタの原因をどのように体系的に発見してひとつずつ削除

フリーランスエンジニアになるにはスクールに通った方がよい?

【関連リンク】 ❏フリーエンジニアにおすすめの交流会・勉強会の存在 ❏フリーエンジニアの生活はどんな

aerospike

【翻訳】Aerospike on Amazon EC2 で 100万TPS をたった 1.68 ドル/時 で実現する方法

原文: http://highscalability.com/blog/2014/8/18/1-ae

100万ppsを受信するプログラムを書くのはどのくらい難しいのか?【翻訳】CloudFlare ブログ

無料枠が充実していることでも人気なコンテンツデリバリネットワーク (CDN) を提供するCloudF

PHPのフレームワーク最新情報まとめ2017年度版

【関連ページ】 ❏Laravelの案件一覧 ❏PHPエンジニアのキャリアパスと年収の遷移モデル ❏P

今夜が頑張り時のエンジニアのために。徹夜しても生産性を落とさない10のコツ

「徹夜したくないけど、今日は避けられない」というあなたに まず前提として、徹夜はすべきではありません

この Readme がすごい! 2014

みなさん、GitHub は使っていますか? ソーシャルコーディングという言葉が一昔前に流行りましたが