ちょっと、簡単に答えられなかったので、休み中にまとめました。
「どこまで勉強すれば良いか?」 という質問には、
自分の立ち位置や、今後の目標など関わるので、
それらを踏まえて考える必要があると思います。
職種によっても違いますが、質問された時の状況は、
Web系エンジニアが新卒の子に聞かれた形なので、
考慮いただきたいです。
また、そもそも、どんな背景をもったやつが書いてるんだ?と思う方も
いらっしゃるかと思いましたので、簡単に自己紹介してから書きます。
書いている人の自己紹介
現在33歳で、エンジニアスタートしたのが、
2005年08月だったので、エンジニア歴は11年となります。
ほとんどの現場がデスマーチ状態だったので、2ヶ月くらい前に転職して、
現在はホワイトな会社のリクルート住まいカンパニーで、PHPを書いています。
言語歴としては、最初にJP1スクリプトを1年半くらいやって、次に
JavaとNode.jsを、それぞれ4年半ずつくらい経験しています。
前職はサイバーエージェントに勤めてました。
派遣やフリーランスや正社員と様々な就職形態を経験しています。
ざっくり以上です。
目の前の仕事が最優先
まず、仕事がうまいこと回せないと、色々と辛いですし、周りにも迷惑がかかります。
なので、最優先すべきは、仕事に関わる技術の勉強です。
個人的には、ともかく手を動かしつつ、家や通勤時間では技術本を読むと良いと思います。
技術本のおすすめは、他の方の記事で申し訳ないですが、下記などを参考にすると良いと思います。
新卒ソフトウェアエンジニアのための技術書100冊
仕事から吸収できる知識の限界
ある程度、勉強と仕事をこなしていくと目新しさが無くなって、
ルーチン作業が多くなります。プログラミングが全くの初めてでも、
2年位で、ほぼルーチン化すると思います。
ここで停滞してしまうともったいないので、何かしたい所です。
自分の立ち位置を考える
どの分野で戦っていくか?
会社にもよるかと思いますが、エンジニアはある程度、担当が分かれています。
ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】
も言っていますが、ざっくりと、
- Application Engineer
- Infrastructure Engineer
- Database Administrator
- Security Engineer
- Technical Program Manager
5種類です。
自分の仕事がどこに属するかを意識して勉強してほしいです。
上記の記事には、Googleの無料学習コースのリンクも書いてあるので、
そちらで勉強するもおすすめです。
(ただし、無料学習コースは英語です。)
エースになりたいのか?そこそこでよいのか?
ここが重要なのですが、プライベートを重視して、幸せな家庭を築きたい場合、
仕事や勉強をしている場合じゃないです。仕事やエンジニアの学習はそこそこに抑えて、
家族サービスに徹するべきです。
逆にエースになりたい場合は、プライベートの犠牲は必要になると思います。
プライベートの犠牲は辛いという方に、僕からの見解なのですが、
一人で最強を目指すのではなく、
チームで最強を目指すと良いと、思います。
羽生善治さんの学習の高速道路論が、参考になるかと思いますが、
チームで勉強する範囲を明確に決めて、
お互いに引っ張り合うことが出来れば(高速道路を整える)、学習速度を加速できて、
プライベートと学習の両立を図ることが出来ると思っています。
そして、それが出来るチームは強いと思います。
目指したい人やロールモデルを決めたい
何事も目標設定して、努力していかないと達成できないと思います。
そのための指針として目指したい人を決めると良いと思います。
目指すべきじゃなくて、目指したいというところがポイントです。
この世にすべきことは無いので、自分がしたいことを中心に据えて、
それをするにはどうすればよいか?と、考えていくと良いと思います。
無理にべき論で突っ走ると、続かなかったりしますしね。。。
就業形態の話(フリーランスや派遣や正社員)
全部経験している僕からのおすすめは、正社員です。
理由は、下記です。
- 高速道路理論のためのチーム作業が出来る(学習の加速作用)
- 会社の作業で重要な部分を担当出来る(学習した結果を実践できる)
- 少なくとも年単位で仕事と収入が確保出来る(ある程度の安定感)
逆に、他の就業形態でも↑が満たせるなら、形態はなんでも良いと思います。
変更がある領域とあまりない領域
僕はWeb業界のエンジニアなので、その視点から見たものです。
変更がある領域
- プログラミング言語
- 業務知識(金融や不動産など)
- フレームワーク
- ライブラリ
- 特定クラウドの機能など
変更があまりない領域
- OS(Linuxなど)
- RDBMS
- CPUなどハードウェアの動作原理
- 物理法則(データセンターからの距離による遅延など)
- 設計(レイヤ型アーキテクチャなど)
僕自身、JP1script、Java、Node.js、PHPと言語が変わっています。
Web業界だと、同じ言語をずっと続けていくということは、あまり無いと思います。
逆に、OSやRDBMSやシステム設計などの領域は、10年以上続いていたりするので、
あまり変更が無いと言えると思います。
変更がある領域の勉強ばかりしていると、いざ変更になった時にダメージがでかいので、
ハードウェアの動作原理やアプリの設計方法など、
基本部分の勉強をメインにやっていくと良いと思います。
自分の得意・不得意(16/07/11追記)
伊藤直也・増井雄一郎・橋本善久が「キャリアチェンジ」を語った『CodeIQ感謝祭』#codeiq39
「自分の好きなことが得意なことではない」と書かれていた。
自分の好きなことが得意なことであり、やりたいことと思っていたり、
自分がやりたいこととやりたくないことを、
自分が得意なことと得意ではないこととイコールだと思っている人は意外に多い。
しかしそうではないというのだ。
自分の立ち位置が、得意なことであるかどうかも重要なので、
こういうこともあると、頭に入れながら仕事&勉強していくと良いと思います。
いつ転職しても良い働き方
しっかりと仕事と勉強をして、会社で評価も得られれば、
他の企業が欲しがる人材になれている可能性が高いです。
また、会社に長く居ると、場所にもよるかと思いますが、
雑用など、本来必要の無い作業が多くなるかもしれません。
そんなときは、いつでも転職出来るようにしておくと良いと思います。
そのために、勉強会で発表したりするなどで名前を広めたり、
他社の技術者と交流して、人脈を作っておくと良いと思います。
余裕のある企業とスタートアップ
- 安定的に収入を得て暮らしていくのが良いのか?
- スタートアップでストック・オプションを貰いつつ、
上場狙いの一攫千金を目指すのか? - フリーランスで働いて、悠々自適に暮らすのか?
- エンジニア辞めて他の職種で頑張ってみるのか?
エンジニアで年収4ケタってどうやったらなれるの?稼いでる人に聞いてきた
色々とあると思います。転職するなら、この辺も考慮していくと良いと思います。
残業が無いのは偉大
常にデスマーチの現場だと、勉強時間が削られるので、
残業が無い会社で働ければ理想です。
(デスマーチ現場が多かったですが、勉強出来ないというわけではないです。)
ただ、早く帰れる現場でも、家に帰るとテレビ見たりしちゃうので、
電車の中や会社のMTGルームなど、
勉強できる場所を確保したほうが良いかと思います。
(家で集中できる人は、関係ないかもですが。。。)
(会社だと部活感覚で、ペアプロしたりとか面白いと思います。)
英語も出来たほうが良い(16/07/11追記)
- 英語圏で作成されたライブラリが多く、ドキュメントが英語で書かれている
- Googleのチュートリアルなど、良質な英語のチュートリアルを出来るようになる
- 海外のトップエンジニアの記事や動画を見て勉強できる
- OSSに参加して議論したり、プルリクエストを送ってコミッターになれる。
ライブラリ選定時に、日本語記事が多いかどうか?という理由で、
フレームワークの選定している場面が見受けられます。
ライブラリ選定時は、そのライブラリが優れているかどうか?や、
メンテナンスが続くかどうか?とか、他にも色々ありますが、
日本語記事の有無で決めるべきでは無いと思います。
書いている僕も、33歳ですが英語の勉強しているので、
こんなおっさんでも勉強してるんだと、励みにやってみてほしいです。
最短ルートで英語をマスターする現実的かつ効率的な勉強法をまとめてみる
↑を参考に行っております。
ビジネスマナーもある程度こなす(16/07/11追記)
基本的なビジネスマナーを押さえることも重要ですが、
ポイントは、相手のことを第一に考えることです。
そうすれば、待ち合わせの時間に遅刻することが
相手の時間を奪うことになるという視点も持てますし、
メールの返信が遅ければ、送信相手の作業が遅れることになる
という視点も持てます。
優秀なエンジニアで、だらしなく見える人も居ますが、
そういう人でも、重要な所ではしっかりしていたりするので、
そういう部分も学んでおくと良いと思います。
楽しく働こう
なんか、勉強するべきとか、憂鬱じゃなければ仕事じゃないとか、
変なこと言う人がいますが、それぞれ自分の立ち位置があると思うので、
給料分、与えられた業務が遂行できる能力があるのであれば、
それ以上、文句言わないでほしいです。
残業は悪か?あるいは日本人の生産性が低い最大の理由
Infrastructure as Codeと組織文化
↑にもありますが、エンジニア人生楽しむには、会社の運営方針や人が重要です。
社員を奴隷のように働かせることが目的のブラック企業などに、
長居は無用です。ある程度、経験を積ませてもらったら即転職しましょう。
エンジニアにとって桃源郷のような会社は、スタートアップも含め
たくさん出てきています。そんな会社で楽しく働きたいですね。
また、個人的な話なのですが、仕事は遊び場だと思っています。
自分が楽しんで、会社も成長したらwin winです(゚∀゚)
エンジニアは、それが出来る良い職種だと思っています。
まとめ
ざっくりまとめると下記です。
- 自分の立ち位置を決める
- それに沿った形で、勉強量と勉強する分野を決める
- チームで効率よく勉強する
- 楽しくはたらく
現状、システムも複雑化しており、
Intelのサーバー戦略の要となるXeon PhiとFPGA
Web業界の先頭を走る企業では、CPUですら変革期に入っているようです。
一人で勉強しても効率が悪いですし、すでに網羅しきれる量ではないです。
なので、チームでT字型に勉強して、お互いに高めあって、
楽しく仕事していければ良いのでは?と思います。
この記事、月曜日に質問してきた新卒の子に見せるのですが、なんと言われるかドキドキです。
老害とか言われたら凹むなぁw
(16/07/11追記)
あとで見返して、書いていたけど抜けていた項目があり、3項目ほど追記しましたm(_ _)m
(16/07/12追記)
新卒の子には、良かった系の返事をもらえたので、とりあえずほっとしましたε-(´∀`*)ホッ