私はまさに騙し騙しのやり方でプログラマーの世界に入り、その後ひたすら突っ走ってきた。26歳までにコードを書いた経験はほとんど皆無だったが、大学院卒業時に、よりによって研修を提供してくれるはずもないスタートアップを選んだ。毎日、会社の倒産を心配し、クビになるのを恐れ、同僚から冷たい目で見られるという三重のプレッシャーの下で逆流を上るように頑張り、1年半後に退職した時には、500万ユーザーを抱えるプロダクトのバックエンド主任プログラマーになっていた。かつて私はコンピュータ技術を恐れ、技術の達人には必ず仏陀の光が降り注いでいて、昼夜を問わず鍵盤を叩き、1日に何万行ものコードを生み出すのだと思い込んでいた。今はそれなりに世間も見てきた。あの落ち着かず初夜のような日々を振り返っても、私はそこに何らの勵ましめいた意味も見出さず、むしろ当然のこととして捉えている。理想のプログラマーは、理想の建築家、理想の経理担当者、理想のマッサージ師と何ら変わりがない。彼らは本質的にみな職人なのだ。私は理想のプログラマーは誰にでもなれると信じている。



この3年ほどずっとインターネット業界で揉まれてきて、私は何人かのプログラマーと知り合い、何人かと一緒に仕事をし、何人かを率い、また何人かを面接してきた。彼らの学歴はさまざまで、北京大学出身もいれば、職業訓練機関出身もいる。博士もいれば、高校中退もいる。経歴もさまざまで、BAT出身もいれば、とある破産したファンド会社(しかも営業職)出身もいる。経験年数も0年から15年までまちまちだ。しかし私はプログラマーは3種類に分けるだけで十分だと思う:天才のプログラマー、理想のプログラマー、凡庸なプログラマー。天才のプログラマーには私は3人しか接したことがないと言わざるを得ない。これは天命だ。7分は精子だった時点で決まっている。絶妙な数学の才能、冷静で緻密な論理力、難題を解くためなら徹夜も厭わずそれを深く喜びとする技術への情熱。3分はスタートの早さによる。同年代が泥遊びをしている頃にコンピュータをいじり始め、大学卒業前に1万時間の法則を突破してしまい、その後はもう人生を遊んでいるようなものだ。


天才のプログラマーは出会おうと思って出会えるものではなく、常にいるものでもない。私が見る限り、90%は依然として凡庸なプログラマーだ。IT時代の膨張により、プログラマーはルネサンス期の印刷職人のように普通になった。多くがこの道に入るのも、より大きな飯の種、より高い待遇、より良い生計のためだけだ。凡庸なプログラマーは腐ったコードを書き、規範や一貫性がなく、古い世界の言語に固執し、大きなアーキテクチャやパフォーマンスについて語るのが好きで、やることより言うことの方が美しい。そして例外なく、彼らは技術に将来性はないと決めつけ、プロダクト作りやマーケティング、マネジメントこそがより高尚な職人技だと思っている。そして彼らの99%は、自分にはまさにその方面の才能があると自然にアピールする。プロセスがなぜクラッシュするのかといった小さな問題を理解しようとすることは、彼らにとっては価値のないことなのだ。


そして私は理想のプログラマーと過ごすのが一番好きだ。できれば彼らと同じ釜の飯を食い、同じ部屋に住みたいほどだ。許されるなら、自分のチームを彼らの旗で埋め尽くしたい。理想のプログラマーは根は悪くない(彼らは決して職場政治の寵児ではなく、単純で明るく楽しい職人たちだ)。無邪気な好奇心を持っている(彼らの目にはしばしば「わあ、これはどうやってやっているんだ!」という輝きがある)。常により完璧を目指している(彼らの口癖は「もう少し研究してみる」)。そして分かち合いを喜ぶ(彼らはGitHubや各Q&Aコミュニティ、そしてあなたの身の回りで活躍し、貴重な時間を新人を助けるために惜しみなく使う)。そう、彼らは管理される必要はない。大きな方向性をとえるだけで、いつも予想外の結果を返してくれる。


理想的プログラマーと凡庸なプログラマーの間には、ただ一枚の壁があるだけだ。両者の差はほんの少しが6つあるだけだが、人と人の差は、まさにこの日々の積み重ねの「ほんの少し」の中で、永遠に開かれていく。面白いことに、この6つの「ほんの少し」はすべて意識に関係していることに気づいた。つまりプログラマーも他のすべての新興産業の職種と同じで、意識と時間による錬磨があれば、誰でも理想の段階に達することができるのだ。理想的プログラマーは必ずや優れたproblem-solverでもある。


1つ目の「ほんの少し」:目の前のことに集中する


心ここにあらずのプログラマーを数多く見てきた私は、「目の前のことに集中する」を何よりも大事な第一条にせざるを得ない。彼らは往々にしてさまざまな小さな夢を持っている。例えば、小さな茶農家になるとか、小さなガチョウ商人になるとか、プロダクト作り、営業、投資といった具合だ。しかしプログラマーの高給や転職する勇気のなさに「邪魔」され、集中しないがゆえに、自分の本分をしっかりやること、自分のスキルを磨くこと、新しい技術を学ぶことに関心を持たない。否定できないのは、この世界には偉大なプロダクト(ジョブズ氏のような)、偉大な営業(エリソン氏のような)、偉大な投資家(ピーターフィ氏のような)が存在するが、彼らは例外なくプログラマー出身だということだ。だが、バフェットがゲイツについて語った言葉を聞いたことがあるだろうか。「ビル・ゲイツがもし転職して犬を売るなら、彼は間違いなく世界最大の犬商人になるだろう」と。私は、少数の天才を除けば、多くの人は十分な集中を保てさえすれば、複数の分野で成功を収めることができると固く信じている。たとえ来年には犬を売りに行くつもりでも、プログラマーとしての経験は強力な論理の思考、慎重さ、忍耐力を鍛えてくれる。それはどの業界でもかなり有力な競争力になる。


2つ目の「ほんの少し」:思考力と推進力


私は、バグやクラッシュ、チューニング、侵入といった突発的な問題への対応こそ、プログラミング自体よりも凡庸なプログラマーと理想的プログラマーの差をよく示すと思う。未知の問題に直面したとき、複雑な条件の中で核心的な問題をどう特定するか、糸をほぐすように問題の潜在的な原因をどう分析するか、干渉を排除して最小の再現可能なシナリオをどう復元するか、重要なデータを捉えて自分の推測と実験をどう検証するか。これらはすべてプログラマーの思考力を示す最良の場面だ。そう、理想的プログラマーを測る基準において、思考力は経験よりも重要なのである。


時々、仲間が走ってきて「タスクを提出したら詰まってしまったんだけど、どうすればいい?」と聞くことがあるが、私はいつも彼ならもっとうまくやれるのになと思っている。例えば、別のタスクを試して、コード自体に原因がないか排除することができる。Web UIで異常を確認できる(アカウントがなければ、私に提供してもらえばいい)。ホストのログを調べたりキャッシュを削除したりできる。それもだめなら、少なくともタスクIDとコンソールログを私に渡すべきだ。理想的プログラマーは決して物事が進むのを待ったりしない。彼らはあらゆる手段を尽くして物事を前進させる。


3つ目の「ほんの少し」:Never Say No


{'translated': '{'translated': '以前の会社を辞める前に、社長と話をしたことを覚えている。彼は、私の最大の長所は「それはできない」と一度も言わなかったことだと言った。その後、多くのチームに技術とプロダクトの対立が存在することに気づいた。プログラマーは往々にして「技術的に実現不可能だ」とプロダクトの要求を拒否し、プロダクト側も往々にして「Facebookができるのに、なぜ我々にはできないんだ」とプログラマーを嘲笑する。この2つの言葉は禁句にすべきだ。根本的にどちらもプログラマーとプロダクトマネージャーの相思相愛には不利なのである。'}'}


「技術のに実現不可能だ」の一言は口に出すのは簡単だ。しかし、この言葉を口にするとき、心の底から100%確信している人がどれだけいるだろうか?確信がないのなら、なぜ戻ってググってから答えることができないのか?元々私はプログラマーは想像力に満ちていると思っていた。想像力があるからこそ、私たちの生活を変える数多くのソフトウェアやインターネット製品が生まれたのだ。経験を積んで初めて、多くのプログラマーがバグとの戦いの中で保守のになり、リスクを負いたがらなくなっていることを理解した。同時に、多くのチームも失敗を寛容に受け入れたがらない。こうして「Say No」は習慣のな拒絶反応になる。曽国藩がなぜ湘軍を解散したか覚えているだろうか?彼はあの軍隊には「暮気(衰退の気配)が次第に深く」、戦えなくなったと言った。理想のプログラマーになるためには、自分に暮気が生まれる機会をとえてはならない。不合理な要求に直面したら、時間コストを提示し、迂回策を示すべきで、単純で乱暴な「Say No」は取るに足らないものだ。


4つ目の「ほんの少し」:未来への投資


プログラマーは非常に残酷な職業だ。自分が学び使っている言語、フレームワーク、パターンは、数年経てば過去のものになっているかもしれない。今自分が嘲笑している別のプログラマーたちが、すぐに振り向いて自分を嘲笑するかもしれない。だから理想のプログラマーは自分の本分をしっかりやるだけでなく、未来への投資に時間を費やす必要がある。「投資」とは何か?投資とは、今投入した時間が、将来より多くの時間やお金(数年前にiOSを学び始めたプログラマーの現在の給与を見てみよう!)として自分に返ってくることだ。自分の分野——データマイニングを例に挙げよう。08年頃にHadoopが台頭し始め、一時は「ビッグデータ」の概念が熱く、Hadoopエンジニアは求むべくもないほどの人気で、各インターネット企業はこぞってデータ統計、データ分析、データマイニングの業務を分散プラットフォームに切り替えた。ここ数年、Hadoopが絶えず反復開発されていると思っているうちに、Sparkがまたもや風雲急を告げて登場し、Hadoopが保持していたソート記録を一気に塗り替えた。中間データをメモリに格納することで得られるパフォーマンス上の優位性と豊かなデータ構造は愛らしくてたまらない一方、奇妙な小さなバグの数々と急峻な学習曲線がまた人々に尻込みさせる。ならば、目が利く人なら誰でもSparkが未来のトレンドだと分かる(メモリはますます安くなる)。メインの業務をHadoopに置いたまま、小さいモジュールのいくつかを適宜Sparkに切り替え、同時にSparkコミュニティの発展にも注目すればよい。やがてSparkから得られるパフォーマンスの恩恵が、以前に投入した学習時間を十分に回収してくれるだろう。


5つ目の「ほんの少し」:ツールを活用する


ツールの活用は4つのレベルに分けられる:

  • 検索エンジン
  • 重複を信じない
  • コードスニペット
  • 自動化

私がこの業界に入ったばかりの頃、コンピュータ専攻なのに公務員になった友人が私に尋ねた。君はプログラミングを全然学んだことがないのに、普段どうやってコードを書いているんだ?私は答えた、「Googleだ」。すると容赦なく嘲笑された。そのため、私はどこでもアカウント名を「2shou」にして、自分が恥知らずな二流プログラマーであることを戒めている。これは笑い話だが、今同じ質問をされても、私はやはり「Google」と答えるだろう。プログラマーの成長は膨張する円盤のようなものだ。外は果てしない大海原であり、円盤が大きくなるほど、海と接する面も大きくなる。知ることが増えれば増えるほど、知らないことも増える。そしてコンピュータ科学は世代交代が異常に速い学問であり、同時に知識のインターネット化が最も進んでいる学問でもある。伝統のな学校式の教え学びの方法を利用するのは難しく、逆に検索エンジンを通せば最新の知識を容易に得ることができる。


重複を信じないことは、達人の言葉で言えばDRY原則(Dont repeat yourself)と呼ばれる。コードをたくさん書いてくると、良いコードと悪いコードを直感的に判断できるようになる。私の基準は簡潔さと規範性だ。簡潔さは美的な基準ではなく、重複が少なければ少ないほど、自分がミスをする機会も減り、後々のメンテナンスコストも減るのだ。


もし不幸にも3週間前のコードを失くしてしまったとしても、優れた記憶力で頭の中に残った断片を書き出せるかもしれない。しかし、3か月前のコードを失くした場合は、そううまくはいかないだろう。理想的なプログラマーは、効果的な資料の保存方法を工夫し、仕事の中でひらめいて書いたコード、スクリプト、設定、経験などの短い断片を保存しておき、いつでも見直せるようにする。


理想的なプログラマーは怠惰でなければならない。彼らにとって、繰り返しの手順は繰り返しのコードと同じくらい醜いものだ。ある作業が長期間繰り返される可能性があると気づいたなら、自動化するタイミングは常に早ければ早いほど良い。


6つ目の「ほんの少し」:時間管理


時間管理がプログラマーという仕事にとって特に重要であるのは、タスクを遂行する際に、荒野の狼のように「独りで進む」ことが求められるからだ。外部からの束縛がない状況でも自分を安定してコントロールし、高い効率で仕事や学習を続けられれば、長い年月を経て必ず普通の人より優れた存在になれるだろう。


プログラマーの仕事は高強度の頭脳労働であり、通常は1日4〜5時間を集中して本業に充てれば十分だ。しかし、仕事の外では必ず学習のための時間を確保しなければならない。学習だけでなく、自分を空っぽにする時間も必要だ。お茶やコーヒーを淹れる合間を利用して、貴重な時間を自分のために確保し、前を考えたり後ろを振り返ったりすることで、半分の労力で倍の効果を得られる。


ここまでいろいろと言ってきたが、きっとこう疑問に思う人もいるだろう。わざわざ理想的なプログラマーになることに、いったい何の意味があるのか?高給がもらえるのか?いいえ。昇進できるのか?それも保証できない。裕福で美しい女性と結婚できるのか?そんなことなら犬でも売っているほうがましだ。


稲盛和夫がかつてこんな話をしたことがある。明治時代の職人は天皇に召し出されたが、彼らは本を読まない田舎者だったものの、一生懸命に一つのことをやり続けたことで、自然と気高い風格を身につけていた。理想的なプログラマーとは、きっとそうした気高い風格を追い求める存在なのだろう。

作者:Sandy
原文リンク:http://mdsa.51cto.com/art/201511/496267.htm#topx