新卒ソフトウェアエンジニアの研修にJavaとPythonのどちらを使うべきかと言うお題が話題になっていた。この2つに限らず職場で使っているモノを優先し、この2つのどちらも使っている場合はJavaの方がよいとされている。Pythonの方がちょっとした事に使いやすく自発的に学びやすいから、穏当な考えに思える。
逆にちょっとした事にもJavaを使うと、Javaに慣れるようになる。テキストファイルの操作、ウェブ・スクレイピング、ウェブAPIクライアント、ブラウザーなどのアプリの自動化など、コマンドラインで動かす使い捨て色の強いちょっとした事をこなすコードは、Pythonで書かれることが多い。これらもJavaで書いてみよう。
Javaプログラマーを含めてPythonよりもかなり煩雑になりそうだと思った人は多いと思うが、そうでもない。なぜならば、
- 名前空間の記述やクラス名やメソッド名が長いが、統合開発環境のコード補完のおかげで書くことは少ない
- I/Oを厳密にやるとtry-catch-finally二重になる問題は、Java 7導入のAutoCloseableで解消した
- 標準APIのhttp(s)処理の貧弱さは、Java 12のHttpClient APIで解消した(それ以前のJavaはApache HttpClientという手段がある)
- 標準APIのDOM/SAXでXMLの処理ができ、JSONにはJackson、htmlにはjsoup、CSVにはApache Commons CSVというライブラリーがある
- ブラウザー自動化ミドルウェアSeleniumとRPAのSikuliXはJavaで書かれたミドルウェアで、Javaで制御もできる
- プロジェクト管理ツール(i.e. Maven, Gradle)がこれら便利なライブラリーをダウンロードしてくれるようになった
- 正規表現による文字列処理は、Java 1.4から標準APIでできるようになった
- 開発中のコンパイル時間は、IDEの保存時にコンパイルをするオプションで、体感が改善される
からだ。Javaのコード量は多く、ビルド設定とコンパイルが要るので、開発体験がPythonに勝るわけではないが、Javaの文法やAPIだけではなく、IDEの機能やショートカットへの習熟や、JVMのオプション変更による挙動の変化の理解が進む。
Javaの主な用途の一つがSpring Frameworkによるウェブアプリケーションで研修でもこれを教える事が多いようなのだが、Javaのアノテーションやリフレクションにより明確に記述されない処理が多くなっているし、html(やJavaScript)も同時に考えないといけないので、初学者にはかなり大変だ。すぐにSpringを使ったプロジェクトにアサインされるのでもなければ、簡単なことからはじめていこう。
Javaで書いておいたほうが、無難な面もある。Pythonはバッチ処理でデータ量が大規模になったときに、遅さが問題になったり、処理を完遂できないようなときもある*1。Pythonも2025年10月の3.14でGILが廃止されマルチスレッドが効果を発揮しやすくなり、2026年10月の3.15のJIT導入などで何割か高速化する予定なのだが、Javaとの速度差は何倍かから何十倍はあるし、動的型付の言語は型チェックで速度に限界が出る。
*1データサイエンス用途ではpolarsやpandasが強力なのでPythonの遅さが顕在化することはまず無く、むしろライブラリーの成熟度でもJavaよりも無難になるが。Javaにも深層学習を含む手軽な機械学習ライブラリ(e.g. SMILE, Deep Java Library)があるが、標準フロントエンドはPythonの世界である。


0 コメント:
コメントを投稿