Javaを取り巻く状況とOracle認定Java資格(第1回)
ITエンジニアがこの先生きのこるための技術は?
ITエンジニアの確保が困難と言われる昨今。この傾向は、2015年問題の大規模開発案件の多くが終息する見込みの2016年末頃までとも東京オリンピック・パラリンピックが開催される2020年頃までとも言われています。そしてこれらの需要が終息すると、一転して人材過剰となることが予想できます。
開発対象のシステムに目を向けてみると、コンピューティング環境の変化から従来の企業情報システムだけでなく、クラウドやビッグデータ、ソーシャル、モバイル、IoT(Internet of Things)にまで広がりを見せ、求められる技術も多様化してきていると言うことができます。
こうした状況において、ITエンジニアとしてこの先を生き残っていくには、長く使えて、幅広く適用可能な技術を軸にスキルを広げていくことがポイントだと言えそうです。この観点では、Javaはとても有益な技術のひとつと言うことができます。
20周年を迎えたJavaのいま
1995年に登場したJavaは、コアAPIを提供する「Java Platform, Standard Edition(Java SE)」、企業システム向けの「Java Platform, Enterprise Edition(Java EE)」、さらに組み込み系システムに向けの「Java Platform, Micro Edition(Java ME)」という3つのエディションが存在し、これら3つの領域それぞれにおいて、『継承と革新』による歩みを進めてきました。Javaは、企業システムから日常生活を支える多種多様なデバイスまで、様々な領域において欠かすことができないプログラミング言語、実行基盤になってきています。
Javaの『継承と革新』とは、大まかに「下位互換性の維持」と「最新テクノロジーへの対応」と言い換えることができます。Java SEでは、2014年3月に最新のJava SE 8がリリースされていますが、旧バージョンで記述されたほとんどのプログラムが変更を加えずにJava SE 8で動作する見込み[1]です。このリリースにおけるラムダ式の導入なども、クラウド上の統合されたアプリケーション実行環境やビッグデータ処理など、いま求められているコンピューティング・ニーズを見据えたものになっています。
Java SEでは、J2SE 5.0とJava SE 8で言語仕様に大きな拡張が加えられています。
- J2SE 5.0
- 総称型(ジェネリクス)の追加
- 注釈(アノテーション)のサポート
- 列挙型(enum)、オートボクシング、拡張for文、静的インポート、可変長引数
- Java SE 8
- ラムダ式の導入
- 型アノテーション
- Date and Time API
Java SE 8ではプログラミングの方法はどう変わっていくのでしょうか?
ここでは、コレクションから特定の文字列を含む要素を抽出する処理を考えてみましょう。
List<String> list = Arrays.asList("abc", "bcd", "cde", "def", "efg");
従来(Java SE 7まで)のアプローチでは、for文を使って次のようなコードを記述します。
for (String data : list) { if (data.contains("c")) { System.out.printf("%s ", data); } }
Java SE 8では、ラムダ式とStream APIを使った新しいコードの書き方を使うことができます。
System.out.println(list.stream().filter(data -> data.contains("c")).collect(Collectors.joining(" ")));
新しい書き方では、メソッドの引数の型が省略されていたり、アロー演算子(->)が登場していたりと見た目の違いに目がいってしまいがちですが、次のように記述するとかんたんに並列処理にすることができます。
System.out.println(list.stream().parallel().filter(data -> data.contains("c")).collect(Collectors.joining(" ")));
並列処理は、これまでもExecutorsやFork/Joinフレームワークを利用することで実装できましたが、Java SE 8ではさらにかんたん・便利な書き方に進化していることがわかると思います。
このように、Java では時代とともに必要とされる機能をよりかんたん・便利に実装できるように進化を続けてきています。開発者が新しい機能のメリットを享受するには、新しいバージョンにあったプログラミング・スタイルを身につけることが必要になります。
資格の使いどころは?
ところで、Javaを「きちんと使える」とはどういうことなのでしょうか?
それには「知識」と「経験」が両立していることが求められます。多くの開発者は、年数を経ることで経験を積み重ねてきています。しかし、エンジニア個人の経験だけでJava技術のすべてを網羅できるかというと困難であると言わざるを得ません。いままで経験してきた業務に未知の技術要件が加わったら?そのとき経験不足を補うのは知識なのではないでしょうか。
認定資格は、エンジニアが対象の技術について網羅的かつ体系的にまとまった知識を習得していることを証明することができる客観的な指標です。Java認定資格は、エンジニアがJavaを「きちんと使える」ことを知識の側面から証明する指標と言うことができます。
とはいえ、知識だけでは必要なときにそれを適切に活用できないリスクが残ります。知識は実際に活用することで定着していきます。つまり、どちらか一方だけでは充分とは言えないのです。
“業務で使っている” と “理解している” は違う!?
当社で現役のJava開発者約800名に対してJavaプログラミングの基礎テスト[2]を行ったところ、次のような結果でした。この結果からは、残念ながら“業務でJavaを使っている”だけでは、必ずしもJavaを「きちんと使える」とは言い切れない状況が見えてきます。
トピック | 正答率 |
---|---|
変数の宣言や配列の使用 | 53.3% |
制御構文 | 47.6% |
オブジェクト指向の概念 | 32.7% |
継承やインタフェースの使用 | 37.3% |
パッケージ | 60.8% |
Oracle認定Java資格が証明するもの
Java SE 8に対応したOracle認定Java資格(Oracle Certified Java Programmer:OCJP)は、Bronze・Silver・Goldに分けられた資格体系で、Java SE 8時代のプログラミングに関する体系的な知識を証明します。
Java SE 8対応Oracle認定Java資格は、OCJP Silver SE 8とOCJP Gold SE 8の2つの資格で、Java SE 8仕様を網羅的にカバーし体系的なプログラミング知識を証明する世界共通の認定資格です。OCJP Silver SE 8資格では、Javaによるオブジェクト指向プログラミングをJava SE 8仕様に準拠して理解できているかどうかが問われ、OCJP Gold SE 8資格では、Stream APIを含むコアAPIを適切に使用できるかどうかが問われます。Java開発者として、新しいプログラミング・スタイルを含むJava SE 8時代のプログラミングの包括的な知識の証明を目指す方は、OCJP Gold SE 8まで取得することをオススメします。
また、OCJP Gold SE 7資格やJava SE 6以前のプログラマ資格を取得済みの方には、Java SE 8への移行試験[3]が提供されていますので、一試験でOCJP Gold SE 8資格を取得することができます。
OCJP Bronze SE 7/8資格
OCJP Bronze 7/8資格は、はじめてプログラミング言語を学習する学生や、新卒でIT企業に就職した方を対象にしており、Javaプログラミングに関して最低限必要な基礎知識を習得していることを証明する日本独自の資格です。
そのため、OCJP Bronze SE 7/8資格試験では、特定のバージョンに依存するような出題は行われていません。
どのバージョンの資格が人気?
Java SE 7資格の登場以降、日本では新しいバージョンの資格試験への移行が進んでいます。さらに、2015年の資格試験受験者数は前年比38%増と、資格試験にチャレンジする方自体も増え続けています。
これは、エンジニアの皆さんが新しい技術を習得する必要性を感じていることの現れと考えることができます。
まとめ
それでは、今回のまとめをしましょう。
- 変化の速度が急激になっている今こそ標準ベースの技術を身につけよう
→Java は有力な選択肢です。 - Javaを「きちんと使う」ためには知識と経験の両立が必要
→知識を証明するための客観的な指標 として認定資格は有益です。
次回は、Java SE 8対応のOracle認定Java資格試験ではどんな内容が問われているのか?について詳しく説明していきます。
[1] 詳細は、JDK 8の互換性ガイドを参照ください。
[2] 基礎テストは2015年春期に実施したもので、Oracle Certified Java Programmer, Bronze SE 7/8試験に準じるレベルの模擬問題を使用しています。
[3] Oracle認定Java資格の詳細は、education.oracle.co.jp/jse8certを参照ください。