>良いプログラマの条件とは?Tweet2016/12/21野球の打者は、少なくとも30%の確率でヒットを打つことに成功すれば良いとされている。ゴルファーなら、いつもアンダーパーでプレイできれば良いと言われる。射撃手は的の中心に命中させるべきだし、銀行家は裕福であるべきだ。今挙げたものはすべて、少なくとも同じ分野の人と比較すれば、彼らが優れているかそうでないのか、比較的簡単に測ることができる。プログラマの素養を測るのは、それよりもずっと難しい。この「素養」が何を差しているのかを説明することすら、ほぼ不可能だ。それでも、プログラマには明らかに優れた人がいるし、ひどく下手な人もいれば、平均的な人もたくさんいる。多くのプログラマたちと働いてきた。その間、私はあらゆる種類のプログラマを見てきたので、優れたプログラマというのは、どのような人を指すのかは見分けがつくようになった。言っても、その理由を定義するのはまだ難しいけれど。プログラミングは、かなり複雑な業界で、言語も技術も環境も業界も多ければ、アプリケーションやターゲットの種類も様々で、コードの書き方も多種多様だ。人を比較することは難しい。そのせいで、人の採用も難しい。同じように、その人の経歴や見かけ上の能力が、採用する会社のニーズに合うかどうかを見極めることも難しい。土木工学のように、特定のタイプのエンジニアリングには複雑な試験があり、技術士の資格を得る前に、特定の知識と経験が必要とされる。基礎知識を十分に理解していることを証明することになる。土木工学は、何千年も前から続く考え方に基づいていて、重力、風、温度など、私たちが実際に住む現実世界での物質を扱っている。一方のプログラミングはたいてい、完全に自分たちの作品の世界だ。私たちは、知らないハードウェアデバイスの、どこかのクラウド内にある、仮想プロセッサ上の仮想マシンで実行するコードを書くことができる。現実世界では、私たちが書いたプログラムを触ることは絶対にできない。私たちは、異なる何百種類もの言語やオペレーティングシステムを使い、実に様々な規模で、クライアント、サーバ、またはその中間に、リアルタイムでも、本当に長い時間をかけてもコードを書くことができる。あらゆるアプリケーションは過去の作業とは無関係だ。それらすべてがプログラミングとされ、それをやる人がプログラマと呼ばれる。私は、長年に渡り一緒に働いてきたプログラマたちの多くをまだ覚えているし、その能力に驚かされた人のことも、遠くまで逃げ出したくなるような人のことも思い出せる。前者と後者を分けるのは、一体何だったのだろうか?その違いを簡単に説明する方法はない。これは、野球のヒットやバスケットボールのダンクシュートのように、簡単に説明したり比べたりできることではないのだ。一覧表を作るべきかと思ったが、それでも私が万事心得ていると誰かに思わせるだけの説得力は多分ないと思う。それができたら、立派な人材スカウト会社を作っているだろうね!良いプログラマは、準備が整ったと認識してから納品することを望む。良いプログラマは、不具合を受け入れるが、それを二度と発生させないように全力を尽くす。良いプログラマは、新しいものを学ぶタイミングと、古いものにこだわるタイミングを心得ている。良いプログラマは、言うべきことへの発言を厭わず、やるべきことをやり、修正すべきものを修正する。良いプログラマは、周りの人を向上させる。良いプログラマは、やるべき動きをし、やるべきでない動きは決してしないプログラムを納品するため、誰かを驚かせることはない。良いプログラマは、将来の計画を立てる時と、計画を諦める時を知っている。解決策を事前に考えるタイミングと、何が次に起こるかを見極めるタイミングを心得ている。彼らは進路に従う時を分かっているが、崖に向かっている進路を見極められるように、油断せず見張っている。良いプログラマは、自分の知識に満足したらおしまいだと分かっている。良いプログラマは、間違っていたことを認められる。良いプログラマは、ゴミを納品しないように最大の努力を尽くす。これは妥当なリストだと思うが、もちろん極めて主観的なものだ。私が今までに働いたことのある素晴らしいプログラマたちの優秀さを説明しようと試みた。それは、私がそうなれるよう努めていることでもある。プログラマは皆、やっていることが違うため、具体的にするのが難しかったので、少し曖昧になった。悪いプログラマとは何かというリストは、もっと難しいので、作りたくない。このリストの反対のことをやる人がいたとすれば、多分あまり優秀なプログラマではないだろう。普通のプログラマは、リストのうち、いくつかの項目はできているかもしれないが、それ以外はできていなかったりする。面接で、このリストを上手にこなす人を見分けられるだろうか?もちろん、そんなことはできない。誰かと一緒に何ヶ月も働いて、その人が本当に優秀なのかどうかを見極めるのは時間がかかる。優秀さの多くは、時間をかけて現れてくるもので、その人が本当に良いと気づくまで、たくさんのプロジェクトと何年もの時間を費やすことだってあるかもしれない。私は、自分が採用担当ならすぐに採用するであろう、本当に頭の切れる人たちと一緒に働く機会に恵まれてきた。同時に、ことごとく失敗する人々にものろわれてきたけれど!当然、誰もが自分のことを優秀だろうと思っているのだが、実際に優秀であるかどうかは、一緒に働いてみないと分からない。実際には大して優秀でなくても、自分の能力を高く評価してしまうのは人として当然のことだ。リストの上位にいる人が多い素晴らしいチームと働くと、もはや仕事が仕事っぽくなくなるが、そのような機会には滅多に恵まれないし、私が自分のキャリアの中で見てきたのは、極端な人か、たくさんの平均的な人たちだ。結局は、可能な限り1番であろうとすることと、あなたの仕事に周りの人が感謝してくれることを望むしかない。一緒に働く素晴らしいチームを見つけるまで、転職しなければならないこともあるだろう。(2016-12-15)※元記事の筆者には直接翻訳の許可を頂いて、翻訳・公開しております。低遅延性の求められるトレードシステムにおいて、ジッタの原因をどのように体系的に発見してひとつずつ削除これでもうコーディングに集中できる!デスクで暑さ対策グッツ7選あっという間に夏も後半ですが、まだまだ暑い日が続きますね。Cluster―MySQLはいかに2億QPSのスケーリングを実現したかこの記事は、オラクル社MySQL主任プロダクトマネージャ、アンドリュー・モルガン氏からのゲスト投稿で今夜が頑張り時のエンジニアのために。前提として、徹夜はすべきではありません生まれてから100種以上に騎乗してきた僕が選ぶ本命ワーキングチェア。