十数年Javaの仕事をやってきて、数年前よりJavaに飽きたしもっと効率よく開発できる言語があるのではないかと思ってPythonを使っていて社内でも新人にはじめからPythonを教えてきた。
2年前こんな記事を書いたりした。
Pythonはいい。環境構築がかなり手軽でかつスクリプト言語ならではの実装とデバッグの速さがある。
ただ、エンジニア志望の初学者はやはりJavaをやった方がいいと思った。もし、最初はJavaではないにしても一度は通ってほしい。
Pythonから初めてJavaやる人に面倒くさいという拒否感が起こるのも問題かなと思う。
JavaからやってPythonに触れると楽ちんだなと思う程度で拒否感が少ない。(気がする)
「面倒くさい」という感覚はエンジニアとして大事だが、きっちり書く部分はきっちり書いてほしい。エンジニア初心者のPythonコードはかなり追いづらい。
「型はなんなのか」「クラスなのかインスタンスなのか」「変数のスコープは?」などを考慮できるのがベテランへの道だと思う。
javaとpythonの違いについてもまとめていくつもり。
型宣言はやっぱりいい
- 数値を入れてた変数に文字列入れたり好き放題はやめてほしい。
- でもプログラミング始めたばかりだとやってしまいがち。
- 混乱するし、型はしっかり意識したいところ。
- IDEでメソッドの引数や戻り値の型が明確にわかるのはかなり便利
- 一人で作るなら問題ないけど、複数人で作ると一気に嬉しさが際立つ
- Pythonから学んだ人がJavaをやり始めるときに型を書くのは面倒だというがそのメリットは絶大
オブジェクト指向やるなら
オブジェクト指向の一通りを学ぶにもJavaはいい。インタフェース、インスタンス変数、クラス変数などが概念に近い書き方をする。
他の言語でも学べなくはないけど概念のイメージがしやすいのはJavaだと思う。
pythonだとコンストラクタの中にインスタンス変数宣言をするのでメンバーフィールドという感じがしない。
また、pythonにはインターフェースという概念自体がなかったりするのでオブジェクト指向の話をするときにいちいちpythonだと変りに抽象クラスを使ってという説明になる。
pythonでWebやるぐらいだと関数型プログラミングになって、オブジェクト指向っぽい作りとは縁遠い。
pythonのWebフレームワークdjangoを使うならmodelの部分ぐらいがオブジェクト指向だろうか。。
Javaで定番のフレームワークSpringを使うとDIという考え方とか出てくるのでオブジェクト指向の学習は避けられないはず。
他の言語の学習がしやすい
PythonやRubyは人気上位の他の言語に構文が似ているものが少ないく、
Web技術で必須のJavascriptを学ぶ際にも抵抗感ができる。
Javaと構文が似ている言語たち
- Javascript(Web技術に必須)・・・Web技術
- C#(Unityも使える)・・・ゲーム
- Kotlin(似ているというか派生だけど)・・・Androidアプリ
- C言語(C言語の影響を受けてるから似てるところ多い)・・・制御系 それ以外もいけるけど
- C++・・・なんでも来い?^^
C#は便利すぎる!?
これまでの特徴ならC#でもいい。
C#の書き方はほぼJavaのそれと変わりない。
C#はよくできていてC#が提供する部品内でほとんどのことができる。多少他のライブラリに頼るときもあるがJavaなどのように最初からいろんなライブラリを組み合わせないと始まらないということはない。
ずっとC#しかやらないと決めたならそれもありだが高見を目指すエンジニアとしてはいろんな技術を身につけたいと思うだろう。Javaだと最初キツイけどそのあとの伸び率に期待できると思った。
C言語もいいけど
プログラム基礎としてはかなりいいけど、初心者にはハードルが高い。ポインターという概念が難しい。
またオブジェクト指向が使えないから、やるならC++だけど、さらにハードルが高い。。
Webとかやろうと思うとキツイのも初心者には向かない理由かな。
対応できる幅が広い
Javaは業務システム、ECサイト、機械学習、帳票出力、バッチ、ほぼなんでも来い状態。
苦手なものがほとんどないのは強い。
他の技術でキツイときはJavaでやれば実現できるという保険にもなる。
Javaで作りたくないものだとデスクトップアプリ。デスクトップアプリ作るなら、node.js + ExpressかC#が作りやすいと思う。
Pythonをやっていると帳票とかちょっとつらい。定番のWingarc SVF使うにも都合がよくない。CSV連携でなんとかできそうではあるが。。PDFも得意ではない。
Pythonを仕事で使ってみて圧倒的に不便だったのがデータベースアクセス。
Pythonで有名なWebフレームワークのdjangoは、複合主キーに対応してなかったり楽観排他は対応してないなど業務アプリケーションを作るには不便。
仕事の数が多い
日本ではPHPの次に仕事の数が多いと思われる。
PHPは小規模向けの仕事が多いのに対して、大規模システムとなるとダントツにJavaが多い。
仕事を見つけやすいという意味でもエンジニアを目指すならまずJavaを選択するのがいいだろう。
まとめ
なにごとも基礎は大事。Javaは基礎になる要素がふんだんにあると再認識した。
十数年たってなんて面倒な技術なんだと感じたけど、その面倒な技術は私を強くしてくれた。
面倒くさいことがしっかりできたら他のことがやりやすいよ。と現時点はそんな結論に達した。
ただし、それはエンジニア志望の人向けのおすすめであって、大学の研究で使うなどエンジニアでなければこの限りではない。都合のいい技術をさくっと身につけてその特性を把握しながら使ったらいいと思う。