新卒の子にどこまで勉強すれば良いですかね？と聞かれた件

ちょっと、簡単に答えられなかったので、休み中にまとめました。
**「どこまで勉強すれば良いか？」** という質問には、
自分の立ち位置や、今後の目標など関わるので、
それらを踏まえて考える必要があると思います。

職種によっても違いますが、質問された時の状況は、
Web系エンジニアが新卒の子に聞かれた形なので、
考慮いただきたいです。

また、そもそも、どんな背景をもったやつが書いてるんだ？と思う方も
いらっしゃるかと思いましたので、簡単に自己紹介してから書きます。

# 書いている人の自己紹介
現在33歳で、エンジニアスタートしたのが、
2005年08月だったので、エンジニア歴は11年となります。
ほとんどの現場がデスマーチ状態だったので、2ヶ月くらい前に転職して、
現在はホワイトな会社のリクルート住まいカンパニーで、PHPを書いています。
言語歴としては、最初にJP1スクリプトを１年半くらいやって、次に
JavaとNode.jsを、それぞれ4年半ずつくらい経験しています。
前職はサイバーエージェントに勤めてました。
派遣やフリーランスや正社員と様々な就職形態を経験しています。

ざっくり以上です。

# 目の前の仕事が最優先
まず、仕事がうまいこと回せないと、色々と辛いですし、周りにも迷惑がかかります。
なので、最優先すべきは、仕事に関わる技術の勉強です。

個人的には、ともかく手を動かしつつ、家や通勤時間では技術本を読むと良いと思います。
技術本のおすすめは、他の方の記事で申し訳ないですが、下記などを参考にすると良いと思います。
[新卒ソフトウェアエンジニアのための技術書100冊](http://techlife.cookpad.com/entry/2015/03/31/093000)

# 仕事から吸収できる知識の限界
ある程度、勉強と仕事をこなしていくと目新しさが無くなって、
ルーチン作業が多くなります。プログラミングが全くの初めてでも、
2年位で、ほぼルーチン化すると思います。
ここで停滞してしまうともったいないので、何かしたい所です。

# 自分の立ち位置を考える

## どの分野で戦っていくか？

会社にもよるかと思いますが、エンジニアはある程度、担当が分かれています。

[ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】](http://qiita.com/jacksuzuki/items/b2fa6b44962e73a53d08)
も言っていますが、ざっくりと、

* Application Engineer
* Infrastructure Engineer
* Database Administrator
* Security Engineer
* Technical Program Manager

５種類です。
自分の仕事がどこに属するかを意識して勉強してほしいです。
上記の記事には、[Googleの無料学習コースのリンク](https://www.google.com/about/careers/students/guide-to-technical-development.html)も書いてあるので、
そちらで勉強するもおすすめです。
（ただし、無料学習コースは英語です。）

## エースになりたいのか？そこそこでよいのか？

ここが重要なのですが、プライベートを重視して、幸せな家庭を築きたい場合、
仕事や勉強をしている場合じゃないです。仕事やエンジニアの学習はそこそこに抑えて、
家族サービスに徹するべきです。

逆にエースになりたい場合は、プライベートの犠牲は必要になると思います。

プライベートの犠牲は辛いという方に、僕からの見解なのですが、
一人で最強を目指すのではなく、
チームで最強を目指すと良いと、思います。

[羽生善治さんの学習の高速道路論](http://pixy10.org/archives/585508.html)が、参考になるかと思いますが、
チームで勉強する範囲を明確に決めて、
お互いに引っ張り合うことが出来れば（高速道路を整える）、学習速度を加速できて、
プライベートと学習の両立を図ることが出来ると思っています。

そして、それが出来るチームは強いと思います。

## 目指したい人やロールモデルを決めたい

何事も目標設定して、努力していかないと達成できないと思います。
そのための指針として目指したい人を決めると良いと思います。
目指すべきじゃなくて、目指したいというところがポイントです。

この世にすべきことは無いので、自分がしたいことを中心に据えて、
それをするにはどうすればよいか？と、考えていくと良いと思います。

無理にべき論で突っ走ると、続かなかったりしますしね。。。

## 就業形態の話（フリーランスや派遣や正社員）

全部経験している僕からのおすすめは、正社員です。
理由は、下記です。

* 高速道路理論のためのチーム作業が出来る（学習の加速作用）
* 会社の作業で重要な部分を担当出来る（学習した結果を実践できる）
* 少なくとも年単位で仕事と収入が確保出来る（ある程度の安定感）

逆に、他の就業形態でも↑が満たせるなら、形態はなんでも良いと思います。

## 変更がある領域とあまりない領域

僕はWeb業界のエンジニアなので、その視点から見たものです。

### 変更がある領域
* プログラミング言語
* 業務知識（金融や不動産など）
* フレームワーク
* ライブラリ
* 特定クラウドの機能など

### 変更があまりない領域
* OS（Linuxなど）
* RDBMS
* CPUなどハードウェアの動作原理
* 物理法則（データセンターからの距離による遅延など）
* 設計（レイヤ型アーキテクチャなど）

僕自身、JP1script、Java、Node.js、PHPと言語が変わっています。
Web業界だと、同じ言語をずっと続けていくということは、あまり無いと思います。

逆に、OSやRDBMSやシステム設計などの領域は、10年以上続いていたりするので、
あまり変更が無いと言えると思います。

変更がある領域の勉強ばかりしていると、いざ変更になった時にダメージがでかいので、
ハードウェアの動作原理やアプリの設計方法など、
基本部分の勉強をメインにやっていくと良いと思います。

## 自分の得意・不得意（16/07/11追記）

[伊藤直也・増井雄一郎・橋本善久が「キャリアチェンジ」を語った『CodeIQ感謝祭』#codeiq39](http://getnews.jp/archives/1286534/amp)

> 「自分の好きなことが得意なことではない」と書かれていた。
> 自分の好きなことが得意なことであり、やりたいことと思っていたり、
> 自分がやりたいこととやりたくないことを、
> 自分が得意なことと得意ではないこととイコールだと思っている人は意外に多い。
> しかしそうではないというのだ。

自分の立ち位置が、得意なことであるかどうかも重要なので、
こういうこともあると、頭に入れながら仕事＆勉強していくと良いと思います。


# いつ転職しても良い働き方

しっかりと仕事と勉強をして、会社で評価も得られれば、
他の企業が欲しがる人材になれている可能性が高いです。
また、会社に長く居ると、場所にもよるかと思いますが、
雑用など、本来必要の無い作業が多くなるかもしれません。

そんなときは、いつでも転職出来るようにしておくと良いと思います。
そのために、勉強会で発表したりするなどで名前を広めたり、
他社の技術者と交流して、人脈を作っておくと良いと思います。

## 余裕のある企業とスタートアップ

* 安定的に収入を得て暮らしていくのが良いのか？
* スタートアップでストック・オプションを貰いつつ、
上場狙いの一攫千金を目指すのか？
* フリーランスで働いて、悠々自適に暮らすのか？
* エンジニア辞めて他の職種で頑張ってみるのか？

[エンジニアで年収４ケタってどうやったらなれるの？稼いでる人に聞いてきた](https://codeiq.jp/magazine/2016/06/42239/)

色々とあると思います。転職するなら、この辺も考慮していくと良いと思います。

# 残業が無いのは偉大

常にデスマーチの現場だと、勉強時間が削られるので、
残業が無い会社で働ければ理想です。
（デスマーチ現場が多かったですが、勉強出来ないというわけではないです。）

ただ、早く帰れる現場でも、家に帰るとテレビ見たりしちゃうので、
電車の中や会社のMTGルームなど、
勉強できる場所を確保したほうが良いかと思います。
（家で集中できる人は、関係ないかもですが。。。）
（会社だと部活感覚で、ペアプロしたりとか面白いと思います。）

# 英語も出来たほうが良い（16/07/11追記）

* 英語圏で作成されたライブラリが多く、ドキュメントが英語で書かれている
* Googleのチュートリアルなど、良質な英語のチュートリアルを出来るようになる
* 海外のトップエンジニアの記事や動画を見て勉強できる
* OSSに参加して議論したり、プルリクエストを送ってコミッターになれる。

ライブラリ選定時に、日本語記事が多いかどうか？という理由で、
フレームワークの選定している場面が見受けられます。

ライブラリ選定時は、そのライブラリが優れているかどうか？や、
メンテナンスが続くかどうか？とか、他にも色々ありますが、
日本語記事の有無で決めるべきでは無いと思います。

書いている僕も、33歳ですが英語の勉強しているので、
こんなおっさんでも勉強してるんだと、励みにやってみてほしいです。

[最短ルートで英語をマスターする現実的かつ効率的な勉強法をまとめてみる](http://tsukuruiroiro.hatenablog.com/entry/2014/09/02/205648)
↑を参考に行っております。

# ビジネスマナーもある程度こなす（16/07/11追記）

基本的なビジネスマナーを押さえることも重要ですが、
ポイントは、相手のことを第一に考えることです。

そうすれば、待ち合わせの時間に遅刻することが
相手の時間を奪うことになるという視点も持てますし、
メールの返信が遅ければ、送信相手の作業が遅れることになる
という視点も持てます。

優秀なエンジニアで、だらしなく見える人も居ますが、
そういう人でも、重要な所ではしっかりしていたりするので、
そういう部分も学んでおくと良いと思います。

# 楽しく働こう

なんか、勉強するべきとか、憂鬱じゃなければ仕事じゃないとか、
変なこと言う人がいますが、それぞれ自分の立ち位置があると思うので、
給料分、与えられた業務が遂行できる能力があるのであれば、
それ以上、文句言わないでほしいです。

[残業は悪か？あるいは日本人の生産性が低い最大の理由](http://nippondanji.blogspot.jp/2016/01/blog-post.html)
[Infrastructure as Codeと組織文化](http://slide.meguro.ryuzee.com/slides/75)

↑にもありますが、エンジニア人生楽しむには、会社の運営方針や人が重要です。
社員を奴隷のように働かせることが目的のブラック企業などに、
長居は無用です。ある程度、経験を積ませてもらったら即転職しましょう。

エンジニアにとって桃源郷のような会社は、スタートアップも含め
たくさん出てきています。そんな会社で楽しく働きたいですね。

また、個人的な話なのですが、仕事は遊び場だと思っています。
自分が楽しんで、会社も成長したらwin winです(ﾟ∀ﾟ)

エンジニアは、それが出来る良い職種だと思っています。

# まとめ

ざっくりまとめると下記です。

1. 自分の立ち位置を決める
1. それに沿った形で、勉強量と勉強する分野を決める
1. チームで効率よく勉強する
1. 楽しくはたらく

現状、システムも複雑化しており、
[Intelのサーバー戦略の要となるXeon PhiとFPGA](http://pc.watch.impress.co.jp/docs/column/kaigai/1008797.html)

Web業界の先頭を走る企業では、CPUですら変革期に入っているようです。

一人で勉強しても効率が悪いですし、すでに網羅しきれる量ではないです。
なので、チームで[T字型](http://learningpatterns.sfc.keio.ac.jp/LearningPattern_No20.html)に勉強して、お互いに高めあって、
楽しく仕事していければ良いのでは？と思います。

この記事、月曜日に質問してきた新卒の子に見せるのですが、なんと言われるかドキドキです。
老害とか言われたら凹むなぁｗ

（16/07/11追記）
あとで見返して、書いていたけど抜けていた項目があり、3項目ほど追記しましたm(_ _)m

（16/07/12追記）
新卒の子には、良かった系の返事をもらえたので、とりあえずほっとしましたε-(´∀｀*)ﾎｯ