Java
20年以上付き合っている言語。Java 8 からかなりモダンになった。OSS 界隈では RxJava など C# 由来の技術が取り込まれたりもしている。Java EE 9 / Java EE 8 がリリースされ Java EEの策定が Eclpse Foundation に移り、Spring の開発もまだまだ活発。 Scala / Kotlin など後発 JVM 言語からのフィードバックを受けて言語自体もまだ進化が続いている。
JDK 1.0 - 1.1
Windows 95 で C++ 一辺倒だった96年。SRA の人から「これからは Java ですよ」と言われ「ジャバ?」と聞き返したのが出会い。この時は Applet 書いて遊んだだけ。開発環境は teikade とか jEdit を触った。Visual Studio にも J++ という謎言語があって、IE でのアプレット開発がサポートされてた。
J2SE 1.2 - 1.3
ゼロ年代前後 Servlet & JSP で Web アプリ開発を開始。プロダクションで使い始めた。JSP は CGI と違ってプレゼンテーション層とロジックを分離できて見通し良くなった。DB 接続は Oracle や PostgreSQL の JDBC ドライバを 自作 DAO + 自作コネクションプールでラップする程度。まだ Web アプリのアーキテクチャがプアだった。開発環境は ターミナルの vi だった。
J2SE 1.4
2001-2年 JFC で Groove のようなコラボレーションツールを開発。JFC で UI を作るのは非常に楽しかった。まだ UI 標準みたいな概念が希薄だった気がする。 開発環境は、Emacs (Meadow) で JDE を使っていたが Windows では頻繁にフリーズするので JBuilder Professional を会社で買ってもらい Java 開発で初めて IDE を使用した。JBuilder はその後すぐに無償化された。 J2SE 5.0
2002-3年 Java でも C++ Template ほど強力ではないけどジェネリクスが使えるようになった。Kent Beck が JUnit と XP を世に出して、当時いた会社でも、ペアプロとかテスティングなどのプラクティスを導入していた。 C++ の仕事がメインだったが、触発されて CppUnit を導入したりした。
Java の Agent フレームワークである Jade を会社の有志で研究してて多少は Java のコードは書いていたものの、C++ / .NET 系の仕事が続き 5.0 はほぼスルー。J2EE や CORBA は少し使ったけど「めんどくさい」という印象だった。 Spring とか Seasor もあまり馴染みがなかった。
Java SE 6
豆蔵入社7年目の 2010年、初めて Spring / Hibernate による大規模な業務システム刷新プロジェクトに参画。DI や AOP は .NET ネイティブにはないので新鮮だった。最初は業務共通部品を開発するチームにいた。Spring MVC と jQuery で共通 UI 部品を書いたり、Bean Validator でドメイン(データ型)毎の検証部品を書いたり、それらを生成するツールを開発したり。業務アプリチームで hql で DAO 作成、設計書からビジネスロジックを実装する部分の支援をしたり。
DDD 採用プロジェクトだったので業務の概念をピュアに表現するクラスを設計し保守性高いコードを書くということに心を砕いた。業務ロジックもいっぱい書いたので、これまでになく JUnit と EasyMock でクラス単位のテストを熱心に書いた。Eclipse を Emacs キーバインドで。最後の方は人の書いたコードをひたすらリファクタリングする日々だった。
Java SE 7 / Java EE 6
Java 6 案件が長かったので Java 7 は 8 が既に出てかなり経った 2014年に初体験。Java EE も初。JSF 2.1 による Web アプリ開発を1か月ほどやった後、JAX-RS な Web API を Jersy + Jackson で書いて jQuery から Promise 使って叩くといったフロントエンド寄りな開発に半年ぐらい従事。 JetBrains の IntelliJ IDEA の Ultimate ライセンスを購入して個人で使い始めた
Java SE 8 / Java EE 7
2016年、大規模な業務システム刷新プロジェクトに参画。Java EE が採用され CDI 1.1 / JSF 2.1 / JPA 2.1 / JTA 1.2 ベースのフレームワーク構築。Java 8 の Lambda / Optional / Stream が普通に使われるようになった。アプリケーションサーバ (コンテナ) が必要な結合テストは Arquillian で自動化した。 2018 年 Spring Boot + Docker でのアプリ開発を少しやった。環境構築がとても楽になってた。
JShell とかローカル変数型推論のお試しにとどまっていた
その後、Apache のプロダクトを色々触るようになり、これらは Java 11 がメインなためよく使うようになった
Jakarta EE は触る機会なし
Java SE 17
2021-2023 Spring Boot アプリの開発を結構長くやった。
VS Code に Java の拡張を入れて IntelliJ とはさよならした。
https://gyazo.com/55d4387be61ff2dcb98da40b5b80be6d