私は今、Web系の会社で転部してとあるASPサービスのバックエンドを開発・改修するJavaエンジニアとして2ヶ月働いたので、Javaと真面目に向き合って思った事を書いてみようと思う。
問題点
一つのサービス内でも実装する内容によって必要な知識が全く違う
これは主に依存しているF/W、ライブラリが多岐にわたるため、単純な言語の知識より使うメソッドがどういう働きをするのかを知って扱わなければいけないため。
既に退職した人のクラスの可読性を意地しながら機能追加することは基本として、その機能追加に必要なメソッドはどのライブラリを使えば良いかは知識として持っていなければいけない。
手戻りに関するコストの高さも意識されるが、実装のスピードも重要
BtoBサービスであるためか、実装内容・期日に関してはスマホアプリ等比較して非常にシビアに感じた。
GitHubでリポジトリを管理している割に急ぎのPRはあまり指摘されずにマージできたりするので、マージされた後に「これこうした方が良いよね」といった事が放置されてしまう。これはよくない(自戒)
そのため、手戻りせずに爆速で実装するための手段を身に着けなければならない(そんなものあるの?)
決め打ちがかんたんに見つからない(あるいは腐ったノイズが多い)
そのまま。目的が完全に決まってるUnityやスマホアプリと違ってJavaという単語と目的からググってもかんたんに答えにたどり着かせてくれない。
むしろ長い言語の歴史が邪魔してJava8ではもっと良い書き方がある所をわざわざ長いコードで解決しているハウツーもある。
ORマッパーと仲良くない時代のJavaのDAOの実装見てると辛い気持ちになる。
対応策
言語仕様へのキャッチアップ
「ラムダは大して便利じゃない」とはいえJava9も間近に控えて非推奨のメソッドが出てきたのでどんどん新しい言語仕様に付いていく。Webに転がっている情報に対しては新しい場所から見てうまく取捨選択する目を身につける。
納得行くまで好きに書ける時間をもつ
アンチパターンに陥らないためと、自分の中で最適解を見つけて実装する時に迷わないようにするため。
興味のあるライブラリがあったら触ってみる
基本的にライブラリは流行り廃りがあるので、少しでもイケるような雰囲気を感じたらとりあえず触ってみる癖を作る。
JacksonとGsonの違いは?JAX-RSとREST APIって何が違うの?とかそういったとっかかりから知識の幅を広げる。
結論:プライベートで何か作る。
あれ…すごい凡庸な結論に…?
エンジニアとして働く90年生まれ。Web系技術を追っかけたり、PCガジェットや自転車いじりが趣味。オーディオオタク。