プロのプログラマーになるということ
12歳くらいの頃、プロのプログラマーになるという目標を立てました。
そう言えるのは、その頃、左利きなのにマウスを右手で操作すると意識して決めたからです。
その理由は、いつか同僚のコンピューターのトラブルを手伝うことになったとき、作業を始める前に相手のマウスを反対側へ移動させるのは絶対に避けたいと思ったからです。そんなのは気まずいですからね。(もちろん、ワイヤレスマウスの登場までは予想していませんでした……。実際のところ、今でも習慣で右手を使っています。)
ずっと知りたいと思っていたことの一つに、プログラマーの典型的な一日がどんなものか、というものがありました。この仕事を目指しているのは、時間を無駄にしているだけではないのか。答えが見つかったのは、ずっと後のことです。しかも、自分自身がプロのプログラマーにならなければなりませんでした。この記事が、あなたの何年にもわたる不確かな気持ちを少しでも減らせればと思います。
この記事を読み進める前に、このシリーズの第1回「なぜ私はプログラミングが好きなのか」もぜひ読んでください。
「プロのプログラミング」と「趣味のプログラミング」の違いは何か?
一言で言えば、説明責任です。
責任を持って取り組むことが求められます。
自由な時間にプログラミングをするのは、後片付けをしなくていいパーティーのようなものです。純粋に楽しい。飽きたら、いつでも別のことに移れます。プロのプログラミングはそうはいきません。仕事を最後までやり遂げることを期待されます。
どんなアプリケーションにも、継続的なバグ修正やリファクタリング、ときにはモンキーパッチまで必要です。コードの保守は遊園地ではありません。まして、それが自分の書いたコードでないならなおさらです。
ジュニア開発者であるということ
学校を出たばかりの頃は、自分はかなりイケてるプログラマーだと思うかもしれません。はっきり言いますが、そんなことはありません。あの点滅する機械を使って、才能のある人たちが何を成し遂げられるかなど、想像もつかないでしょう。最初の数年には、学ぶべきことが山ほどあります。
プロのソフトウェア開発は、長いプロセスです。読みやすく、十分にテストされ、きちんとドキュメント化されたコードを書くには、大変な労力が必要です。忍耐力も必要になります。それも、たっぷりと。自分に対しても、他人に対してもです。
ジュニアのうちは、物事を白か黒かでしか考えません。コードを見て、すべて間違っていると思うのです。いったい正気の人間の誰が、こんなひどい化け物を作ったんだ?!経験を積むにつれて、グレーの濃淡が見えるようになります。
やがて、あのひげを生やした古参の連中は、あなたより遅かったのではなく、より慎重だったのだと理解するでしょう。コードのテスト方法や、ドキュメントの書き方を学びます。ついには、UML図にさえ価値を見いだすようになります。
時代遅れになる
「世の中の変化は速すぎる。今日学んだことが、明日には時代遅れになる。そんなことに何の意味があるんだ?」。私はキャリアを通じて、この言葉を数え切れないほど耳にしてきました。よく聞く言葉ですが、間違っています。
あるスキルが時代遅れになるのなら、それはスキルではありません。キャリアを通じて、「Jenkinsに詳しい人」として知られたいわけではないでしょう。目指すべきは、ソフトウェア品質の専門家です。ヒントを言うと、Jenkinsが何なのか知らないなら、まさにそれがポイントです。視野を狭めすぎてはいけません。本当に価値のあるスキルは、決して時代遅れにはなりません。
ときには、新しい会社の方針によって、自分が丹精込めて作ったものが時代遅れになることもあります。気が滅入る話に聞こえるでしょうが、ソフトウェア業界ではよくあることです。適応しなければなりません。私から言えるアドバイスは、深刻に受け止めすぎないことです。プロジェクトは手放し、知恵は残しましょう。変化を受け入れてください。
完璧ではない世界でソフトウェアを書く
プロのプログラマーは、常にさまざまな制約や不備に向き合わなければなりません。このゲームの名前は「制約のバランス取り」です。納期、予算、コード品質は、考慮しなければならない競合する制約のほんの一部にすぎません。現実を前にすると、エレガントな設計は色あせます。結局のところ、ソフトウェアでお金を稼ぎたいのですから、リリースしなければなりません。
私が知る最高の開発者たちは、実用性とエレガンスのバランスを保っています。どの部分が重要で、どの部分が重要でないかを知っているのです。そうでない人は、必要になれば別の人に置き換えられます。
私はいつも、どちらかといえばエレガンスのほうに傾いていました。これは、完璧主義者だったということを少し格好よく言い換えただけです。実用的な考え方は、厳しい仕事を通じて学ぶ必要がありました。
経験の浅いプログラマーを指導する
プログラミングが上達するほど、コードを書く量は減っていきます。
その代わり、ソフトウェアアーキテクチャや高レベルの設計について考えたり、他の開発者が扱えるように作業を小さな単位へ分割したりする時間が増えます。ジュニア開発者の指導も始めるでしょう。採用にも多くの注意を払わなければなりません。ビジネス側の人たちとプロジェクトの目標について話し合う会議に、時間を使うことになります。仲介役を担うようになる、と言う人もいるでしょう。マネージャーと呼ぶ人もいるかもしれません。
ビジネスの内情を理解すると、会社にとって欠かせない人材になります。マネージャーにならないかと声をかけられるかもしれませんし、少なくとも、プロジェクトを管理することが責任の自然な延長に感じられるようになるでしょう。ただし、注意してください。このゆっくりとした段階的な変化は危険です。フルタイムのプログラマーに戻るのは簡単ではありません。あなたがプロジェクト管理に追われている間に、他の人たちはコーディングのスキルを磨いています。空いた時間に最新情報を追い続けることはできますが、容易ではありません。
優れた開発者が、素晴らしいマネージャーになる姿を私は見てきました。キャリアのどこかの時点で、これは自分自身で決めなければならないことです。
どちらを選ぶにしても、コミュニケーションの方法を学ぶために時間を投資する価値はあります。その中でも、共感は重要な役割を果たします。チームでソフトウェアを開発するのはとても複雑なので、目標をすり合わせたり、問題を伝え合ったりすることに多くの時間を費やします。実際、報酬を受け取っているのはコミュニケーションに対してなのです。ドキュメントも、テストも、コードそのものも、そこに含まれます。
他の人と話し、その人たちの問題に耳を傾けてください。自分はマネージャーになりたいわけではないとしても、ソフトウェアプロジェクト管理に関する本を読みましょう。上司の役割を理解する助けになります。
お金について一言
IT業界で働く理由はたくさんありますが、お金はその一つではありません。
将来の給与をもとにキャリアの決断をしたくなるかもしれませんが、やめておきましょう。きっと、とても不幸になります。点滅するカーソルを前にして、毎日8時間、あるいはそれ以上座ることになるのです。これは長い時間です。そして時間は、お金よりずっと価値があります。
誤解しないでください。給与の高い仕事はたくさんあります。ただ、よほどのお金持ちになれる可能性は低いでしょう。大金を稼ぎたいなら、私には助けられません。不動産などを検討してみてください……。開発者として金持ちになる唯一の方法は、本当に難しいことに取り組み、膨大な時間を費やし、運にも恵まれることです。要するに、スタートアップですね。覚えておいてください。ビル・ゲイツが1人現れるには、1,000回の失敗が必要です。もう一つの方法は、プログラマーをやめてマネージャーになることです。その点についての私の意見は、前のセクションですでに述べました。
最後に
コードを読めるようになり、(できれば)書けるようになるべきではありますが、プロのプログラマーとして働くことが誰にでも向いているわけではありません。「それだけの価値はあるのか?」と自問するかもしれません。私にとっては、正しい選択でした。あなた自身の答えを見つける手助けができていれば幸いです。
記事をランダムに読む