新卒エンジニア採用で必要なプログラミング能力はどの程度か
「エンジニアとして新卒採用されるのに必要なプログラミング能力はどれくらいですか」とよく質問されるので記事にしました。
結論から言うと企業によって違います。企業をざっくり分類して説明します。
また前提として新卒採用の話をします。
新卒採用の特徴としては「現時点の能力だけでなく入社してから成長しそうかを評価する」ことだと思います。
前半はタイプ別のプログラミング能力を定義して、後半は企業別に求めるタイプを分類します。
前半: タイプ別のプログラミング能力
ざっくりA~Fのタイプに分けます。
A. プログラミングって何ですか?
全くのプログラミング未経験。文系。タイピングは一応できる。
B. プログラミング、昔授業でやってたなぁ。
授業でプログラミングはやったことある。でも忘れている。とりあえず基本的な文法とオブジェクト指向は習ったが完全に忘れているレベル。
プログラミングに苦手意識がある人もいるがちゃんと時間をとって研修で教えれば実務レベルまでちゃんと引き上がるタイプ。
C. 個人でアプリ作ってます!!
個人でアプリを作ったりして日常的にプログラミングをしている。プログラミングおもしれーーと思っており、朝起きたら技術系のニュースを見たりしてる。新しいライブラリ、サービスが出たらとりあえず使ってみてる。Qiitaの記事もいくつか書いている。
プログラミング能力は千差万別だが一応目安として
「素数判定のプログラムを何も見ずに書ける」くらいのプログラミング能力はある。
素数判定という仕様が提示されればそれを理解し、数十行程度のプログラムで書くことができる。しかしオブジェクト指向がっつりのプログラムを自分で書くことはできない。かろうじて読むことはできる。テストコード、エラー処理を書くことはできない。
D. プログラミングのバイトやってました
学生の中では業務レベルに近いプログラミングができる。
他の人が読む前提でプログラムを書ける、他の人が書いたプログラムを読むことができる、テストコード、エラー処理の存在・目的を知り簡単なものなら実装できる。
↑上に書いたことをラフに語ると、要はプログラミングの愚痴を言えて盛り上がれるレベル。
「Javascriptってここが辛いですよねーwwww」とか
「AWSはここがクソ!!!Firebaseのここは最高!!」っていうテーマで話をしたら止まらないレベル。
愚痴じゃなくてもいいけどプログラミングや技術に関して、常に頭の中に考えているテーマがある感じ。「明日勉強会でライトニングトーク(10分程度のプレゼン)の時間用意したから何か話して」と言われたらすぐに話すテーマが見つかるレベル。
E. 研究でプログラミングやってました
大学の研究でプログラムを書いてたタイプ。研究で実現したいことをプログラムにすることができるレベル。
プログラムは基本自分しか読まないのでプログラムは汚いがちゃんと動く。プログラミング自体は嫌いではないが研究分野の方が興味がある。
F. 競技プログラミングやってました
コンピュータサイエンスにはアルゴリズムとデータ構造という分野がある。この分野の問題をスポーツのように競技形式で解いて参加者と競い合うことを「競技プログラミング」という。この競技プログラミングを日常的にやっているタイプ。おもにAtcoderやTopCoder。
アルゴリズムとデータ構造に精通しているが参加者おのおのにレベルの差がある。できる人は半端なくできる。
ここでは「競技プログラミングできますよ」のレベルの下限を「二分探索(binary search)の仕様を提示されたら何も見ずに好きなプログラミング言語で実装できる」とする。
(社会人2年目くらいの時に副業したくて面接受けたら「二分探索を実装してみて」と言われたことがある。その会社のトップの人がアルゴリズムとデータ構造の理解を重視している人だったので今回は二分探索を基準にしました。)
後半: 業界・企業別に求める人材
業界企業別に書いていきます。
IT土方SE
会社例
〇〇ソリューション、〇〇システムみたいな聞いたことないような会社
従順なA,B,Cが好まれる。簡単な研修を受けさせて戦場に送り込む兵隊要員として活躍できればそれでいい。逆にC,D,Fのような頭のいい奴はめんどくさい奴と思われ必要とされていない。
上流SIer
会社例
NTT Data, NRIなど
プログラミング実装ではなく主に上流の設計などの仕事する人たち。
採用時はプログラミング能力よりもコミュニケーション能力、頭の良さが評価される。偏差値がある程度高い大学の学生を採用しがち。高いプログラミング能力は必要としないのでA,B,Eタイプの学生が内定をもらう。
個人でアプリ作っていたCタイプで入社する人はいるがあくまでそれは趣味で就活でのアピールポイントではない。ちゃっかり大学や大学院で真面目に研究していた人が多い印象。
研修がしっかりしているので研修を受けると実務レベルの業務知識をきっちり身につけられる頭の良さと勤勉さを持っている。
人員は少ないがプログラミング実装を行う部署もありD,Fタイプの学生が採用されることもある。また研究職採用も設けている会社もあるのでEタイプの学生も取ることもある。
メーカー
会社例
Canonなど
基本的に上流SIerと同じ。研修で育成すると思う。(あんまり詳しくない)
通信
会社例
NTT Communicationsなど
プログラミングよりもネットワークとかインフラの知識が評価される。「ネットワークが好き!!!」という人が多い。大枠は上流SIerと同じ、研修で育成。大学や大学院でちゃんと勉強や研究をしていた人が多い。
Web系大企業
会社例
Yahoo! JAPAN, 楽天,LINEなど
コードが書ける学生は評価される。C,Dタイプは大好物。
といっても大企業でYahoo! JAPAN、楽天は人材育成する余力があるのでBタイプの学生も採用される。Bタイプはその分、成長力やコミュニケーション能力をアピールする必要がある。
LINEは即戦力気質が高くコーディングテストのレベルが高い。CかつDかつFタイプを持ち合わせてる学生じゃないと太刀打ちできない。
Yahoo! JAPANや楽天のような大企業ではコーティングテストが大量応募者を足切りする意味で実施される。大抵外部に委託される。(外部委託コーディングテストのcodilityというサービスを調べてみてください。)
研究職志望の学生も需要があるのでタイプEも欲しがられる。
Web系メガベンチャー
企業例
CyberAgent, DeNA, Cookpadなど
数年前までは前のめりなCタイプで評価されていたが、プログラミング人材も増えてきてCかつDタイプくらいないと目立てない気がする。結果として地方の学生より都心の学生の方が機会に恵まれているので有利だと思う。
E,Fタイプの学生の重要性も理解されている。育てる余力がYahoo! JAPANなどと比べると少ないので全体的に「成長してやる!!!」みたいな成長意欲の高い学生が好まれる。
ベンチャー(起業、共同創業)
自分でベンチャー起業。起業家は後先考えずに突っ走る人もいるのでタイプAの人もいる。そう言う人はタイプC,Dの人と組んで会社を作ることが多い。
稀にAタイプスタートでサービスの初期段階は自分でコードを書く人もいる。ZOZO前澤さんなど。
Eタイプで研究の知識をベースに起業する人もいる。Gunosyなど。
ベンチャー(社員1桁番目)
新卒採用は基本やっていない。採用方針は社長の考え、サービス事業の段階に依存する。
サービスが軌道に乗る前なら技術力よりも
・会社のビジョンに共感するか
・個人の性格
・成長意欲
を見る傾向にある。
サービスが軌道に乗っているなら技術的な課題が明確である場合が多い。新卒採用があるならDタイプが採用されやすいだろう。
ベンチャー(研究系)
企業例
Preferred Networksなど
機械学習の技術を背景にサービスを作っている会社。EかつFタイプの人で国際的な学会で論文を出してる東大生とかが採用されるイメージ。
世界規模でサービス展開してる外資系企業
企業例
EかつFタイプで英語がある程度話せる人。特にアルゴリズムとデータ構造の深い理解が必要。コンピュータサイエンスの学位を持っている人が半分くらい。最高難易度。本気で入社したいならインターンは行った方がいいと思う。
ゲームの会社
あまり詳しくない。ゲームそのものを作る人になりたいなら自分でゲームを作って公開していることが必須だと思う。
ゲームシステムを支えるバックエンドエンジニア志望ならWeb系メガベンチャーと同じ。
Web制作会社、受託系会社
あんまり知らない。C,Dタイプが重宝されると思う。
のんびり自社開発
企業例
ヒナプロジェクト(小説家になろう)
地方で自社開発。ベンチャーみたいに会社をデカくしようとしていないような企業。こういう生き方もいい。新卒採用やってない笑。調和を重んじると思うから成長意欲が高すぎるとノリが合わないかもしれない。
フリーランス
雇い主が求める技術力があれば仕事は取れる。自分にあった雇い主を見つけることが大事。それは技術力とはまた別の能力。
以上です。
サポートは動画制作費に使わせて頂きます。