就活生がITエンジニアを目指す前に伝えておきたい業界の真実と現役エンジニアからのアドバイス

はじめに

日本のIT業界では、技術職求人に対して、ちゃんと専門教育を受けていない(独学で身につけたわけでもない)人の応募の割合がとても高く、絶大なる不幸を生み出しているのが現状です。
これから社会人になる就活生の皆さんには、できれば不幸な人生ではなく幸せな人生を歩める選択をしてほしいとの願いから、このエントリーを書きました。

注意:ITエンジニアとして就活をしてプログラマー的な仕事が主な業務になる人が多いと思うので、この記事に出てくるITエンジニアという言葉は、プログラマーのことだと思って読んでいただけると幸いです。広い括りの題名をつけてしまってすみませんが、インフラ/ネットワークエンジニアやメーカーのエンジニアの話は出てきませんので、ご容赦ください。

目次

  1. 背景
  2. プログラミング言語を覚えよう
  3. データベースの使い方を覚えよう
  4. オリジナル作品を作ろう(ここが一番大事)
  5. IT系の勉強会に参加しよう
  6. GitHubで自分のプログラムを公開しよう
  7. インターネット上に自分のソフトウェアを公開しよう
  8. 自分がプログラマーに向いているかどうか判断しよう
  9. アマとプロのプログラミングの違いを知っておこう(二番目に大事)
  10. 個人的にオススメな応募先

背景

プログラマーの適性(向き不向き)の差は、他の職種よりも非常に大きいです。
ソフトウエア開発 55の真実と10のウソ』に書かれている調査によると、向いていない人は、向いてる人と28倍も生産性が違うという結果が得られたそうです。同じ仕事をこなすために何倍もの時間がかかったり、作った物のクオリティも何倍も低い(バグが多いなど)ということです。

仮に、向いていない人が職業としてのプログラマーになったら、どうなるでしょうか。
他の人と同じように仕事が与えられれば、向いていない人は、深夜残業を毎日して徹夜も普通という生活を強いられることになりかねません。その上、仕事のクオリティも低ければ、給料アップの望みもないでしょう。

最近は、ブラック企業が社会的に大きな問題になっています。ブラック企業のやり方はもちろん問題なのですが、あなた自身でブラックな状況を作ってしまうことも有りうると認識しておいて下さい。

まともに利益を上げてまともに社員に給料を払う気がある会社なら、適性によって生産性が何倍も違う職種の採用で「プログラミング未経験者歓迎」と本当に思っているわけがないことを理解しておきましょう。適性のない人を採用したら、納期を守るのも難しくなってしまいますし、残業代も沢山払わなければいけなくなってしまいます(払ってもらえればマシなんですが)。「未経験でもプログラミングができるよう教育します」といううたい文句の会社も沢山あります。教育されればプログラミング言語の一つぐらいは文法を覚えて書けるようになるかもしれませんが、第一線で活躍できるレベルは全然別物です。最低限はできるけど向いてない人を丁寧に面倒見てくれるほど余裕のある会社はあまりないでしょう。もし、未経験(とか、ほぼ未経験)でエンジニア採用されることが普通な会社に入社したら、相当の修羅場を覚悟した方がいいですよ。

あと、日本の大学の情報なんとか科でちゃんと勉強せずに生ぬるく卒業してITエンジニア人生を安泰に送ろうと思っている人も危ないです。
念のために言っておくと、パソコンの使い方やインターネットに詳しいとか、エクセルがちゃんと使えるとかはプログラミングの適性とあんまり関係ないです(必要なスキルではあります)ので、そこを勘違いをしていると後で苦労します。

そうならないために、ソフトウェアエンジニアを目指すと決める前に最低でもこれぐらいやっておいた方が良いことをあげておきますので、実践した上で応募を検討してみてください。

プログラミング言語を覚えよう

何かを作って適性を見ようというのがこのページの趣旨なので、プログラマーの向き不向きが分かる前にくじけてしまわないように、初心者が手っ取り早く自分の作りたいものを作れるようになる言語としてPHPで話を進めたいと思います(プログラマーになる決意の固い人は、RubyとかPython、ScalaあるいはiPhoneアプリ作りたいならSwiftとかをじっくり勉強した方がいいかもしれません。こっちができた方がイケてる会社の面接では受けがいいと思われます)。

作る内容によりますが、PHPが多分一番簡単にWebサービスを作れます。
ちゃんと勉強すれば他の言語にも応用が利く知識が身につくと思います。

PHPの勉強は、書籍やWeb上のチュートリアルを参考にしてください。
[asin:B00JA179KY:detail]


(ここに挙げる参考書・サイトは一例なので、なるべく自分にあった参考書を探してください。以下同様)

データベースの使い方を覚えよう

現実的なプログラムでデータベースを使わないものはまずないので、データベースも基本知識として必須です。
データベースも色々ありますが、無料で使えて、PHPと合わせて開発しやすいMySQL(マイエスキューエルと読みます)をお勧めしておきます。
MySQL公式サイト MySQL

Web上にたくさん解説記事がありますし、上記のPHPの書籍でMySQLの使い方も解説されているので、一通り勉強するにはちょうど良いと思います。
[asin:B00JA179KY:detail]

オリジナル作品を作ろう

さて、ここが一番大事なところです

教科書や書籍、参考サイトに書いてある通り作るだけなら誰でもできてしまうことなので、向いてるかどうかは判断できません。本当にそれができるというには怪しいところです。

自分の作りたいものを考えて、オリジナル作品を作りましょう!

斬新である必要はありませんし、独自性も高くなくて構いません。
教科書や書籍に書いてあった通りに作ったというのでなければOKです。
色を変えただけとかはダメですよ^^;

見た感じツイッターっぽいものを中身は自分で考えて作るといった程度のことです。
少しで良いので、そのサービスが魅力的であるために自分なりの工夫を入れましょう

実際に自分で作ってみると、分からないことが沢山あったり、エラーがいっぱい出てどうすればいいか分からなくなってしまうと思います。
そこで諦めずに、本や検索で調べたり、詳しい人に聞いたりしてください。
後述の勉強会に参加して、教えてもらうのもよいと思います。
そういうことがソフトウェア開発現場での仕事です。

(作ろうとした機能が意外と難しい場合は部分的に削ってもいいので)
とにかく完成させましょう!

IT系の勉強会に参加しよう

この業界はオープンな勉強会がよく開催されていて、いろいろな会社からモチベーションの高い現役のエンジニアが参加しています。
無料のものが多いですし、懇親会があったりして、公式の会社説明会では聞くことができない(それよりももっと重要な)現場の生の情報を聞けるので、参加しない手はないです。企業が主催の勉強会は、主催側の話を鵜呑みにするのではなく、参加者の先輩エンジニアからも話を聞くように注意しましょう。

IT系勉強会を検索できるconnpassやATEND、dots.などのサービスで勉強会を検索してみてください。

何を選ぶにしろ、三、四回ぐらいは行った方がいいと思うので、ここでは具体的にオススメは挙げません。
なんでも良いので、なるはやで入門的な名前が付いているものに行ってみて、知り合った人にオススメを聞いてみてください。

GitHubで自分のプログラムを公開しよう

最近は、採用面接でエンジニアが面接官になり、実際に自分の書いたコードについて話をすることも多いです。
その場でコードを書く面接も増えています。

GitHubは、共同開発できるようにプログラムを管理・共有するためのサービスです。

ここにプログラムをアップロードしておくと他の人に見てもらえるようになります。
確かにプログラムをかけるということの証拠になりますし、GitHubのアカウントを持っていることが応募の条件という会社すらあります。
逆に他の人のプログラムを見て参考にすることもできますので活用しましょう。

GitHubなどを利用して自分の書いたコードをきちんと管理することはプロとして必須スキルなので、コード管理はなるべく早めに身につけましょう。
使い方は、



などを参考にしてください。

エンジニアがコードを見る面接の場合は、プログラムのクオリティも審査されると思いますが、こちらの本を参考にして作り方にもある程度の工夫がしてあれば、申し分ないです。

就職前にこの本に書いてあること全部ができてる必要はないと思いますが、もし出来ていれば、技術レベルとしては、ほぼ全ての会社から内定がもらえるレベルです。

インターネット上に自分のソフトウェアを公開しよう

インターネット上に自分の作品を公開しておけば、採用担当の人事の方に見てもらうこともできます。
これはとてもよいアピールになるので、エントリーとか初期段階で落とされなくなると思います。

自分でサーバーを持っていなくても、無料でインターネット上に作品が公開できるherokuというサービス(ヘロクと読みます)があります。
Cloud Application Platform | Heroku

使い方は、




などを参考にしてください。

自分がソフトウェアエンジニアに向いているかどうか判断しよう

まずは、オリジナル作品の作成や公開の作業が楽しい・やりがいがあると思えたかどうかが、最低限のプログラマーの向き不向きの判断基準となります。
自分の作りたいものを作ったはずなので、この作業があまり楽しいと思えなかったのなら、プログラマーには向いていません。仕事だと、自分が作りたいものを作らせてもらえるとは限りませんし、くだらなくてつまらなくて苦痛な作業もあるので、モチベーションは続かないでしょう。

この基準をクリアしたとして、ちょっとだけ向いてるのか、すごく向いてるのかを短期間で判断するのは難しいですが、プログラマー職に応募する意味があるレベルだと思います。やる気と時間の余裕がある人は、プログラミングのコンテストに出てみたりするといいと思います。

アマとプロのプログラミングの違いを知っておこう

採用ページとか説明会ではよく分からないと思いますが、実際のプログラマーの仕事の内容を、ちゃんと知ってから応募したほうがいいです。

職業としてのプログラマーになるということは、単に動くプログラムが書ければ良いということではありません。

初めてオリジナルのソフトウェアを作った人は、おそらくエラー処理はほとんどしていないと思いますが、仕事ならあらゆるエラーに対応できるように面倒臭いコードも沢山書かなければいけません。
ユーザーから遅いと言われたら、速く動くアルゴリズムを考えたり、実装方法を工夫して速くなるように作り直さなければいけません。

アルゴリズムを学ぼう

アルゴリズムを学ぼう

機能追加や修正がしやすいようにプログラムを構成する工夫も必要です。

仕事は共同作業ですから、他の人にも読みやすいように書かなければいけません。

動作テストもちゃんとしなければいけませんし、バグがあれば、何千、何万行もあるプログラムの中からバグを探したりもします。

色々と難しそうなことを書きましたが、プログラマーの仕事は、言語を使って複雑なパズルを解くような仕事なので、パズルの解き方を考えるのが好きで文字を読むのが好きな人と相性が良いと思います。

現実的には、Webサービスやアプリを安定稼働させるためにサーバーやネットワークの知識も勉強する必要があります。

変化の早い業界なので、時代や目的に合わせてプログラミング言語や関連技術を常に新しく勉強する学習意欲や向上心も必要です。プログラミング言語は10個ぐらいは覚えることになると思います。


そういったことを踏まえた上で、「もっと勉強して上達したい」「この仕事にチャレンジしたい」と思える人は、きっとプログラマーに向いています。
是非、ソフトウェアエンジニアになってください!

個人的にオススメな応募先


クックパッドさん、一番オススメしたいのにリンクの埋め込みが表示されません >< 助けて*1
http://hr.yahoo.co.jp/fresh/



などなど、他にも私の知らない範囲でもあると思います。

自分がWeb業界の人間なので、挙げるのがWeb系ばかりになってしまいました。ごめんなさい。BtoBやSIerにも良い会社あると思います。でも、Web業界も楽しいです。

IT系の勉強会に参加して、転職経験者の経緯とか聞いてみると良いですよ!

オススメできない応募先はここにはちょっと書けない(笑)ので、自己判断してください。

面接について


あとがき

今までの日本のIT業界は歴史的な事情で、向いていない人もたくさんプログラマーになっているので、向いている人にとってはむしろチャンスの大きい職種とも言えます。現に、トップレベルのプログラマーは年収1000万円以上もらっていたり、ベンチャー企業を立ち上げて資産が何十億円という人もいます向いてそうなのに他の業界や職種を目指しているお知り合いがいらっしゃいましたら、是非ともプログラマー職の応募を勧めてみてください

おすすめ記事




*1:クックパッドさんにご対応いただきました。ありがとうございます。こうやってネット上のエンジニアの話題にも敏感で、採用活動にも真剣さが感じられ、エンジニアに対するリスペクトのあるふっふはっほさん、やっぱり素敵です