プログラマーとして働きたいなら、覚悟しておくべきこと【転職・就職】
「プログラマーとして就職したい」「プログラマーに転職したい」という声が年々増えています。私の周りにもプログラマー志望の人が多く、よく相談をもちかけられます。
日本にプログラマーが増えることは良いことだと思う一方で、『量産型プログラマを撲滅したい – kuranuki – Medium』という記事でも言及されているように、生産性の低いプログラマー比率が高くなってもそれはそれで大変。
きっとプログラマーの母数が増えてもレベル別階層の比率は大きく変化しないか、むしろ全体のレベルの底上げに繋がるはずなので個人的にはこれからプログラマーを目指す人は日本や世界のプログラマー全体のレベルが上がることにつながってほしいと思っています。
ただし、安易な気持ちでプログラマーとして働くことを目指すと、思いもよらない想定外の出来事にくじけてしまうことがあります。なので、プログラマーとして働くことの辛い面もしっかり理解しておく必要があります。
プライベートの時間を犠牲にして勉強するのが当たり前
プログラマーは常に勉強し続けることが当たり前です。勉強する内容については後述しますが、勉強をしないプログラマーは周りのプログラマーに追い抜かれ、スキルが陳腐化し、市場価値が下がります。
勉強するといっても、もちろん就業時間内に勉強する時間を確保できることは少ないため、基本的には平日の就業時間後や週末の休日を勉強に充てることになります。
社会人になってからプライベートの時間にも勉強しなければいけないことはどの職種にも通ずるとは思いますが、プログラマーに関しては特に重要な項目です。
技術トレンドの変化のサイクルに追随する
プログラミング言語の進化は早いです。数年前にiOSアプリ開発のための言語、Swiftが新たに登場したように新しいプログラミング言語が登場することもあれば、既存の言語がバージョンアップされることもあります。
また、開発設計思想なども一定のサイクルで新しい概念やトレンドが生まれます。さらに、インフラの面ではAWSを始めとし、様々なツールが出てきます。
このような変化を常にキャッチアップし、スキル化することがプログラマーには求められます。プログラミング言語は英語とは違います。英語は一度習得すれば、基本的にそれで十分使えます。5年後に英語の文法が変わっている可能性は限りなく低く、長いスパンでそのスキルを使うことが可能です。
プログラミング言語は英語のようにはいきません。一度何かの言語を習得したとしても、その言語自体がアップデートされることで、そのアップデートの内容をキャッチアップする必要があり、それに合わせてあなたの開発しているプロダクトもバージョンアップをする可能性があります。Swiftのバージョンがどんどん上がっていったり、新しいRailsのバージョンが生まれたように。
また、個々のプログラミング言語自体にもトレンドが存在するため、習得済みの言語以外にも新たな言語を学習する必要が出てくる場合があります。例えば、5年前にphpを習得した人は、もしかすると今はRubyも使えるようになっているかもしれません。もしくは、SwiftやGoを勉強しているかもしれません。
昨年あたりからはDeep Learningが盛り上がりを見せており、このトレンドは少なくともあと2−3年は続くように思えます。機械学習の分野は間違いなく今後のプログラミングの世界の主役に踊り出、その分野にいるプログラマーの市場価値は向上するでしょう。
機械学習を習得しようと思うと、プログラミング言語の勉強だけでは十分ではありません。現在機械学習に使われる代表的な言語はPythonですが、Pythonというプログラミング言語を習得し、TensorFlowなどもフレームワークの使い方も勉強しつつ、そもそもの数学の勉強も一部やる必要があります。
Twitterなどの投稿を見ていると「2017年は機械学習の基礎を身につける」という目標を書いている人を多く目にしました。既にプログラミングの経験があるプログラマーでさえ、今年の1年も目標として機械学習という一つのテーマを挙げるということはつまり、1年間は機械学習の勉強をし続ける必要があるということだと言えます。
細かな説明は省きますが、つまるところ「新しいプログラミング言語の習得」「プログラミング言語自体のアップデートへのキャッチアップ」「言語ではなく開発や設計に関する勉強」「インフラツールなどの習得」「その他トレンドへの追従」などが、プライベートの時間を割いてでも勉強すべき項目です。
勉強には終わりはない
プログラマーとして就職できる一定のスキルを身に着けたからといって、それが十分なスキルであることは言い難いです。様々なソースコードを週末に読んで、そのコードの設計思想を解読してみたり、よりキレイなコードを書くためにはどうしたら良いのかを探ったり、やることは山積しています。
3ヶ月前に書いた自分のコードを見たときに「誰がこんな汚いコードを書いたんだ」と思えるくらいに日々レベルアップしていないといけません。そのためには、レベルアップするための勉強が必要なわけです。
勉強は本を読むだけではだめです。ビジネス書なども読むだけではなく実践しなければいけませんが、プログラマーの勉強も同様に実践が必要です。新しい言語に挑戦するのなら、プライベートで簡易なアプリを開発してみるのがいいでしょう。大規模開発について学んだのなら本業の開発の方でチャレンジしてみるのがいいですね。
従事しているチームで実践できる内容ならいいですが、なかなか自分の勉強したことをすぐに業務に組み込むことができない場合も多いです。トレンドに柔軟な会社なら新たな技術への寛容度も高いですが、そうではない会社が多いことも事実。
例えば、2年前程前に盛り上がったReact.jsをあなたがプライベートで勉強したとします。「React.jsは今後フロントエンド開発において主要な技術となり得る完成度の高いライブラリだ」とあなたは感銘を受け、週末を犠牲にしてその技術を習得し、会社のプロダクトにも反映させたいと思ってもPMから「そんなことより売上に直結する開発の優先度が高い」と一蹴されることなんてザラです。
そもそもこんな会社にいること自体がいけていないので転職を考えたほうがいいかもしれませんが、そうもいかないのでそういう場合はプライベートでReact.jsを使ってプロダクトを開発してみることになります。
このような感じでプライベートの時間はどんどんプログラミングに奪われていきます。
「プライベートを犠牲にする」という感覚を捨てられるか?
そもそもプログラマーとして働いている人はそもそも開発が好きだったりするのでプライベートの時間を割いて勉強することを厭わない人が多いです。夫婦専用のchat botを作ってしまう人がいるように、世の中のめんどくさいことを出来る限り楽にするためにコードを書くことが快感だったりするので、業務時間外にそれをしても苦痛ではないわけです。
「平日の就業時間後に飲みに行かずにコードを書くなんて...」「休日はゆっくりテレビを見て過ごしたい。仕事は完全に忘れたい」というような人ははっきり言ってプログラマーになるのは辞めておいたほうがいいですね。
もちろん毎日、毎週末コードを書く必要があるわけではないので休みがない訳ではありません。ただし、気持ちの問題として「休日に業務に関することをやる」ことがあなたのライフプランに合うかどうか、ということですね。
周りの優秀なプログラマーは、平日の業務時間後には業務とは関係がないが、今後新たなスキルとして習得しておきたい技術を勉強していたり、家に帰ってからも技術ブログを読んだり、週末にはOSSに参加していたりします。どれだけの割合のプログラマーがこれに該当するかはわかりませんが、結構な割合でみんな勉強しているのではないでしょうか。
こういうプログラマーはプライベートで習得した技術を最終的にはプロダクトへフィードバックして活かすことができるため、みんなハッピーになるわけですね。
納期との戦い、仕様という大敵
営業職の人に締め日のノルマがあるように、プログラマーには納期という戦いが存在します。PMから降りてくる容赦ない仕様変更と戦いながら、納期を守るために連日深夜まで作業が及ぶことがリリース前にはよくあります。
開発工数の見積もりというのは経験を積んだプログラマーでも苦労する議題で、開発工数にバッファを取り込んだ納期を設定したとしても、納期ギリギリに開発が完了するようなことがザラにあります。
不幸なことに、そのような状況にも関わらず(そのような状況を作った当本人がPMである場合があるにも関わらず)、PMが「ここはやっぱりこうしよう」といった仕様変更をリリース数週間前に要求してくることがあります。
仕様変更自体には問題はないのですが、仕様が変わったのに納期が変わらないという不思議な現象が起こることがあります。「学期末テストの範囲にこの20ページも追加したけど100点取れよ」とテスト当日直前に言われる感じです。
上記のようなことはプログラマー界隈ではあるあるで、いかにそういったストレスや摩擦を減らすかが大切なのですが、事実としてかなりのストレスとの戦いがあるということを、プログラマーを目指す人には認識してもらっておいた方が良いかと思います。
他の職種でも似たようなことはあると思うので、「隣の芝は青く見える」だけかもしれませんが。
まとめ
他にも尋常じゃない程目の酷使をするため、視力が落ちる人が多くいます。MTG以外はパソコンにずっと向かっていることが多いですからね。
あと、ピザに飽きる日がきっときます。プログラマーはいろんな企業で開催される勉強会に行ったりするのですが、そこで提供される料理の多くがピザです。頑張って毎週いろんな勉強会に足を運べば運ぶほど、ピザが嫌いになってきます。
↓↓↓読者登録お願いします↓↓↓
あなたにオススメの記事
単月100万円稼ぐための具体的な案件獲得方法とは
本記事の第二弾として、より具体的な行動ベースのアプローチ方法を列挙。マインド面というよりは、実際にどんなツールを使って案件をGETしてきたかを全て書いています。未経験でもエンジニアに転職するために身につけるべきスキルと準備とは プログラミング経験がない人からプログラマーになりたいという相談を受けることが多くなったので、転職tipsをまとめました。