torutkのブログ

ソフトウェア・エンジニアのブログ

Javaプログラミングスキルの更新

最新のJavaプログラミングスキルへの追従

Javaは、1995年の登場から26年を経過し、その間に言語仕様、API、実行環境に様々な改善が加えられてきました。 また、今年9月にリリースされる予定のJava SE 17(OpenJDK 17)は、LTS版として長期間の利用を想定したバージョンとなります。

そこで、Java SE 17で利用可能な言語仕様、API、実行環境へのプログラミングスキルの更新を図るには何を押さえればよいかを整理してみます。 段階的にスキルを更新できるよう、Java SE 8水準、Java SE 11水準、Java SE 17水準の3段階に分けて整理しました。

Java SE 8水準のプログラミングスキル

まず、2014年にリリースされたJava SE 8(JDK 8)の水準に達するには次のプログラミングスキルを獲得しているべきと思います。

  • ラムダ式およびStream APIを扱える
  • Optional型の意義と活用すべき箇所・すべきでない箇所を知っている
  • Java Date and Time APIを扱える
  • ファイルI/Oには、NIOおよびNIO.2のAPIを積極的に使う
  • try-with-resource構文を使い、リソースリークを防止している
  • interfaceのdefaultメソッド、staticメソッドを扱える
  • 例外のマルチキャッチ
  • 数値リテラルの表現改善(2進リテラル、数値リテラルの区切り文字
  • enum型を活用できる(整数・文字列リテラルの定数ではなく)
  • ジェネリックス型を活用できる
  • マルチスレッドの記述にコンカレントAPIを活用できる
  • ガベージコレクションGC)の基本的な理解とアプリケーションの特性に応じたGCの選択、パラメータ設定ができる
    • シリアルGC、パラレルGC、コンカレントマーク&スイープGC、G1GC)

上述のリストにはJava SE 7までに導入された機能もありますが、Java SE 8水準として押さえておくべきものとしてまとめています。

Java SE 11水準のプログラミングスキル

2018年にリリースされたLTS*1であるJava SE 11(OpenJDK 11)の水準に達するには次のプログラミングスキルを獲得しているべきと思います。

  • ローカル変数の型推論(var)
  • ラムダ式の引数に型推論と型アノテーションを適用できる
  • HTTPクライアント API
  • interfaceのprivateメソッド
  • try-with-resource の改良点を知っている
  • 削除された標準API(CORBA、JAXB、JAX-WS
  • Flight RecorderとMission Controlツールを用いた問題解析
  • Java Platform Module System によるモジュラーJARの利用・作成
  • AppCDS*2の知識とJavaVM起動速度向上が必要なときに活用できる
  • 単一ソースファイルの実行を知っている
  • jshellでREPL環境(対話的インタープリター)を使える
  • マルチリリースJARファイルの作り方を知っている

Java SE 17水準のプログラミングスキル

2021年9月にリリース予定のLTSであるJava SE 17(OpenJDK 17)の水準に達するには次のプログラミングスキルを獲得しているべきと思います。

  • switch式を扱える
  • テキストブロックを扱える
  • instanceofパターンマッチングを扱える
  • record型を扱える
  • sealedクラスを扱える
  • 新しいGCの基本的な理解と、これまでのGCを含めてアプリケーションに応じたGCの選択ができる
    • ZGC、Shenandoah GC
  • 自己完結型アプリケーションのパッケージングおよびOSネイティブなインストーラ作成(jlink、jpackage)ができる

感想

今回の整理は、特にAPIに関しては大枠でしかリストアップしていないので、既存のAPIへの追加による改善までは含められていません。

こうして整理してみると、自分でもJava SE 8水準に至っていない項目があり、Java SE 17水準のスキルへの更新は大変なかなか大変だなと思います。

*1:LTS:Long Time Support、アプリケーションの運用期間を考慮し長期間サポートを提供するバージョン。Javaでは3年毎にLTS版をリリースし、最新のLTSと次のLTSの間は半年毎の非LTS版をリリース。

*2:Application Class Data Sharing