いまどきのJavaエンジニアが転職する時の選択肢
「今後も需要あるよね?あると言ってくれぇーー!!?」
「将来性ある会社に入りたいな」
Javaは、2000年くらいからWebアプリケーション開発に使われるようになり、業務システム開発のデファクトスタンダードになりました。当時Javaの仕事と言ったら、ほとんどがWebのサーバーサイドでしたが、現在は選択肢が広がっています。
私はこれまでに3回転職して、
業務システム → ECサイト → スマホゲーム
と様々な仕事をしてきました。そんな経験を踏まえて、「いまどきのJavaエンジニア転職市場」を紹介します。
Contents
選択肢はこんなにある!
Javaを使った主な求人は以下のようなものがあります。
- 業務システムのサーバーサイドエンジニア
- Webサービスのサーバーサイドエンジニア
- Androidアプリのクライアントエンジニア
- スマホアプリのサーバーサイドエンジニア
- スマホゲームのサーバーサイドエンジニア
この他にJavaから他の言語のエンジニアに転身する道もあります。これについては後述します。まずはJavaを使った仕事から見ていきましょう。
1. 業務システムのサーバーサイドエンジニア
いわゆるSIerのSE種です。システムを発注した顧客企業の要望を聞いてそれをシステムとして実装します。
- Servlet
- JSP(HTML,css,JavaScript含む)
- JDBC, DB, SQL
- フレームワーク
の技術スキルが必要です。
技術スキルの他に、顧客の要望をヒアリングして仕様に落とし込むなどのコミュニケーション能力や分析能力も必要とされます。
2. Webサービスのサーバーサイドエンジニア
WebサービスのサーバーサイドというとPHPやRubyなどのLL言語で作られているイメージが強いですが、Javaで作られているWebサービスもたくさんあります。
Javaは、PHPやRubyのようなLL言語に比べて、CPU処理の効率が良いので、大量アクセスをさばくWebサービスに向いています。もちろんPHPやRubyでも可能ですが、Javaの方がより効率的にマシンパワーを使うことができます。JavaVMに搭載されているJIT(Just In Time)コンパイラがうまく効く時にはC言語よりも高速に動作するケースもあるほどです。
使っている技術は業務システム開発と同じですが、Webサービスの方が、動的に画面を切り替えるリッチなUIになっているものが多いので、AjaxやJQuery、AngularJS, React.js, Vue.js等のフロントエンド開発のスキルがあると重宝されます。
3. Androidアプリのクライアントエンジニア
Androidアプリの開発言語はJavaです。同じJavaでもサーバーサイドとは全く違うスキル(AndroidのSDKやAPI、UIの知識)が要求されます。サーバーサイドに飽きた人はチャレンジしてみるといいと思います。
4. スマホアプリのサーバーサイドエンジニア
スマホアプリのサーバーサイド開発にJavaを採用している企業はたくさんあります。
スマホアプリのサーバーサイドでは、レスポンスをJSON形式で返すJSON APIを開発します。
SpringMVCやJersey(JAX-RS)などを使えばかんたんにJSON APIを開発できます。
5. スマホゲームのサーバーサイドエンジニア
スマホアプリと同様にゲームのサーバーサイドでもJavaを採用している企業はたくさんあります。
使っている技術はスマホアプリのサーバーサイドと同じでJSON APIを開発するスキルがあれば採用してもらえるでしょう。
Javaから別言語のエンジニアへ転身するなら何が良い?
私は業務システムのJavaエンジニアでしたが、その後、Webサービスやスマホゲームのエンジニアへと転身しました。
Javaの他にPHP、Ruby、node.js、C#などを覚えました。やってみると意外とかんたんだったんです。それぞれ見ていきましょう。
PHP、Ruby等のLLへの転身はかんたん
私がPHPを初めて使った時に感じたのは「コンパイルがないから、なんかふわふわしてるな」というものでした。
ブラウザ側の処理はJavaScriptで書いていたのでコンパイルしない言語が初めてだったわけではないのですが、サーバーサイドはコンパイルして文法に誤りがないのが保証されているものっていう感覚が強かったので、初めの内はふわふわした不思議な感覚に襲われてましたが、慣れると快適に感じるようになりました。
コンパイルで文法チェックされなくてもちゃんとプログラムは書けますし、コードをちょっと変えて実行して確認してというスピーディでリズミカルな開発ができて気に入っています。
JavaってEclipse立ち上げてから依存性の確認でしばらく待たされるとか、コードを変えるたびにTomcatを再起動しなきゃ、と待つ時間が多いですが、PHPやRubyだとそういったことがなく、サクサク作業が進む気持ちよさがあります。
node.jsはしんどい
node.jsとはサーバーサイドJavaScriptの処理系です。
WebSocketを使ったリアルタイムすごろくゲームを作りたくてnode.jsをやってみたのですが、正直しんどかったです。
node.jsのアーキテクチャーってちょっと変わってて、シングルスレッドノンブロッキングIOなんです。
「はぁ?なにそれ?」って思われたかもしれませんが、Javaなどの一般的なWebアプリケーションサーバーはマルチスレッドブロッキングIOです。全てが逆なんです。
シングルスレッドで同時アクセスをさばくためにIOをブロックしないんです。
コードのイメージで言うとJavaでSQLを実行するのはこんな感じですよね。
ResultSet rs = stmt.executeQuery("SELECT * FROM users"); //以下SQL実行結果を受け取った後の処理を書く
executeQueryをメソッドを実行したらDBとのIOが発生してIOが終わったら結果が戻り値としてrsに入ると。このコードはマルチスレッドで並行で処理されるから同時アクセスをさばけますと。
それに対してnode.jsは以下のようなイメージのコードになります。(Javaと対比させるために実際とは違うメソッド名などにしてあります。)
stmt.executeQuery("SELECT * FROM users", function(rs) { //以下SQL実行結果を受け取った後の処理を書く });
IOがブロックされません。そのため、IOが終わったらコールバックされる関数を渡しています。ですからIOが発生する度にコールバック関数を渡す必要があり、IOが3回あったらコールバック関数が三回ネストすることになります。以下のような感じです。
stmt.executeQuery("SELECT * FROM users", function(rs) { stmt.executeQuery("SELECT * FROM items WHERE user_id=" + rs.getInt("user_id"), function(rs2) { stmt.executeQuery("UPDATE users SET money = money - " rs2.getInt("item_price"), function(rs3) { }); }); });
いわゆるコールバック地獄です。正直しんどいです。node.jsをしばらくやった後、JavaやPHPに戻ったら、「なんて楽なんだぁ」と喜びに満ち溢れました(笑)
修行する意味でnode.jsを使うのはいいと思います。
C#はJavaとそっくりかつ先進的
スマホゲーム開発ではUnityというゲームエンジンがよく使われています。その開発言語がC#なんです。
ゲーム開発の仕事してみたいなと思ってUnityとC#を独学したのですが、思っていた以上にかんたんに修得できました。
ゲームのプログラミングって難しいイメージがあったのですが、Unityの場合、ローレベルな難しい処理はゲームエンジン側がやってくれますし、GUIでオブジェクトを配置したりすることでコードを書かなくても作り込める部分が多いので、初心者でもそこそこちゃんとしたゲームが作れます。
それに、C#の文法はほとんどJavaと同じなのでかんたんでした。Javaに比べてC#には
- プロパティ
- インデクサ
- デリゲート
- 型推論による型の省略
など、便利な文法がたくさんあり、現代的で簡潔な書き方ができるので、書いててとても楽しいです。言うなれば、C#はRubyっぽいJavaって印象です。
それで、いくつかゲームを作って、それを実績としてゲーム会社の面接を受けたらエンジニアとして採用してもらえました。案外できちゃうもんです。
まとめ
- Javaエンジニアの仕事は業務システム・Web・スマホと多彩
- Java以外の言語への転身もかんたん(プログラミング言語は皆似てる)
ぜひ、参考にしてください!