Javaで作るのは他人のためのプログラム、Pythonで作るのは自分のためのプログラム

JavaやCで組むのは他人のためのプログラムで、Pythonで組むのは自分のためのプログラム、という違いがないかなという話。

TIOBEでとうとうPythonが1位になったというニュースが流れてました。
https://internet.watch.impress.co.jp/docs/yajiuma/1357645.html

でも、Pythonが1位になったとはいえ、CやJavaであったような、世の中のプログラム全部Pythonになるみたいな雰囲気はないなと思いました。

で、こんなツイートをしたわけです。

Pythonの入門書で「ざっくりこういうことをするのにこのくらいのコードが必要というのがわかればいい」ということが書いてあって、Javaの入門書ではそうならないよなと思ったことがありました。
それで、そもそもJavaPythonでは勉強のモチベーションが違うということに気づきました。

Javaでプログラミングの勉強を始める人というのは、基本的に転職目的が多いと思います。この場合、プログラムを作る仕事をしたいわけで、そこで作ることになるのは他人のためのプログラムです。
一方でPythonでプログラミングを始める人は、手元の作業を効率化したり、手元のデータを分析したり、純粋にプログラミングの勉強だったり、自分のためのプログラムを作ることを目的としていることが多いと思います。

つまりはJavaPythonで作るプログラムが違うなと。

Javaでは他人のために、プログラマのいないところで動くプログラムを作ります。そうすると、正しく動くことを保証する必要性は高くなり、必要な機能をすべて実装する必要もあります。
一方でPythonでは自分のために、プログラマの目の前で動くプログラムを作ります。そうすると、正しく動かなかったらそのときにやりなおせばいいし、手早く動かせる必要があります。*1

C++を作ったBjarne StroustrupC++の静的型検査についてこういうことを書いてます。

タイプミスマッチの問題をコンパイル時に検出することが、なぜこれほどまでに重要なのか?・・・それは、C++のプログラムの多くが、プログラマのいないところで使われるからだ。
C++の設計と進化

ここではJavaの話ばかりを書きましたが、静的型をはじめ、プログラムが正しく動くことを保証する仕組みというのは、プログラマをはなれて動くプログラムだからこそ重要なのだなと思った話でした。

*1: 傾向の話であって、Javaでも自分のためのプログラム作るとか、Pythonでも他人のためのプログラム作るとか、そいういう話はここではしない