【重要】優秀なJavaエンジニアが抑えている事

Java
まとめ
  • フレームワークを使い倒せる
  • 可読性が高いコードが書ける
  • パフォーマンスを配慮できる(SQLにも詳しい)
  • セキュリティを配慮できる
  • レビューで指摘できる

Javaエンジニアに求められる事

Javaを用いた開発プロジェクトは、以下の理由から大規模プロジェクトである事が多く、1人で全てを担う事は事はまず無いと言っていいでしょう。

0から1人で全てを行うのではなく、チームで分担して数多くのバッチ処理や画面の開発、業務ロジックの実装などを手分けして実施しますが、人によって全くテイストの違うコードはバグを生みやすく、プロジェクト全体としてもある程度の型にはめた実装が必要になってきます。

大規模プロジェクトとなる理由

Javaは、実行する際にアプリケーションサーバ(Tomcat,GlassFish等)が必要な言語になります。

そのため、Webサーバ+アプリケーションサーバの構成は必須となり、他の言語よりもコストがかかります。

ただ、Webサーバとアプリケーションサーバの責務がカッチリ分かれているため堅牢なシステムを構築可能と言えます。

その為、サーバコストに予算を投資できる規模が大きいプロジェクトである傾向が強いです。

ではJavaエンジニアに本当に必要な事とは何か?

間違いなく言えるのが、「コードリーディング能力」に他なりません。

人のコードを正しく読めないと、誰かのコードを参考にする事もできず自分勝手なコードをただひたすら実装し、ソースコードレビューに耐えられないものとなってしまいます。

負債を入れてしまうと、その先で大きなリスクとなりうる為、負債を入れない為にも人のコードはきちんと読んで理解できる実力が必要不可欠になります。

筆者は駆け出しの時に下記の書籍を何十回も読んで良いコードと悪いコードの違いから理解していきました。

https://amzn.to/441oDAe

フレームワークを使い倒す

Javaのフレームワークが何個あるか知ってますか?

消滅してしまったものもありますが、20〜30は存在します。

筆者はSpring、Struts、SAStruts、CFramework、PlayFramework、Seesaa2等を利用した経験がありますが、導入後の使い勝手はどれも大差ありませんでした。

SpringやSeesaa2等はアノテーションを独自拡張してコード量を減らせたり、

SpringBoot等は導入時にコマンドベースでWebアプリケーションやバッチ、

APIのテンプレートが自動生成出来たり、ORマッパーが初回から梱包されていたりと、

それぞれにメリットは存在します。

昨今の流行りもありますが、今後も踏まえるとSpringBootをしっかり使い倒すようになる事をお勧めします。

SpringBootの特徴
  • Routingに用いるXML(ApplicationContext.xml)が不要になりアノテーションでOK
  • DIコンテナの利用によりアノテーションで大半の呼び出し処理が不要になる
  • Spring+Thymeleaf+Mybatisが標準梱包
  • RestAPIの作成が一瞬
  • SpringBatchを利用するとバッチ処理がテンプレート化される

パフォーマンスを意識する

エンジニアはただコーディングができれば良いというものではありません。

なるべく処理の時間が短くなる(レスポンスタイムを少なくする)事を考えたいです。

大手の有名なシステムを開発する場合は、同一時間帯に自分が書いたコードが大量に流れることもあり得ます。

筆者は最低限以下のことに注意をする事をお勧めします。

筆者がパフォーマンスにおいて気をつけている箇所
  • ループ処理の中で重たいSQLを発行させないようにする
  • continueを駆使してループ回数を減らしたい
  • 無駄な初期化は避ける
  • オブジェクトの再利用を意識したい
  • SQLは極力軽量化したい

セキュリティを意識する

筆者がセキュリティ面で気をつけている事

レビューで指摘が出来る

筆者がコードレビューでよく見るポイント
  • 可読性を意識したコードになっているか
    リーダブルコードが頭に入っていると指摘が出しやすい
  • 旧構文の利用がないか
  • Deep Copy or Shallow Copy
  • スレッドセーフとなっているか
  • チェック処理が妥当か(入っているか)
  • カプセル化を意識できているか
  • メソッド単位での責務違反がないか

コメント

タイトルとURLをコピーしました