今年の一月に、Rubyで約25年振りにコーディングを始めたと書きましたが、実はここしばらくはRubyをお休みし、Pythonでコーディングしています。ALTの与信エンジンをPythonで開発することにしたため、Rubyもまだまだマスターはできておらず心残りではあるのですが、今はPythonに集中しています。
PythonもRubyも近いと言えば近いので、RubyからPythonに切り替えても極端な違和感はありません。英語と日本語までの違いはなく、スペイン語とポルトガル語の違いというところでしょうか。ただ、思想の違いは感じます。私の限られた経験ですが、Rubyは気持ちよく、楽しく書けることにこだわりを持っているように感じますし、一方でPythonは効率よく書くことにこだわりを持っているような気がします。
それを顕著に示すのが、文の終わりの示し方。
Rubyの場合、
if ...
... # if文がTrueの場合に実行される処理
else
... # if文がFalseの場合に実行される処理
end
... # if文がTrueの場合に実行される処理
else
... # if文がFalseの場合に実行される処理
end
... # 次の処理
とif文の終わりが"end"で明示的に示されます。"}"や";"といった特殊記号はなく、最後が"end"ですから、自然言語(人間が普通に話す言葉)に近いですね。
これに対し、Pythonの場合、文の終わりを明示する必要がなく、その代わりインデント(行頭の空白)で暗黙的に示します。
if ...:
... # if文がTrueの場合に実行される処理
else:
... # if文がFalseの場合に実行される処理
... # if文がTrueの場合に実行される処理
else:
... # if文がFalseの場合に実行される処理
... # 次の処理
といったようにif文の終わりが明示されません。上の例では、elseの次の行にif文がFalseの場合に実行される処理が記述されていますが、その次の行でインデントがなくなることによって文が終わっていることが暗黙的に示されます。JavaなりC言語なり、だいたいの言語では"}"や";"で文(正確にはブロック)の終わりを明示的に示すので、最初はかなりの違和感です(が、すぐに慣れます)。
要はPythonの場合は、最小の記述で済むようになっています。効率性重視。またインデントによって行の終わりが示されますので、必ずインデントしなければいけない = 構造がわかりやすく可視化されるというメリットもあります。気持ちよく書けるというよりは、効率的に書けることを重視しているのがPythonの特徴かと思います。
ただ、効率的に書けるだけではPythonを選ぶ理由にはなりません。Pythonは、統計処理のライブラリが充実していることが大きな強み。最近はやりの機械学習も、Pythonであれば簡単に実装することができます。
色々と書いていますが、私もまだまだPython初心者です。ALTでは、Pythonを使って、新時代の与信エンジンを開発したいというプロフェッショナルを募集しています。C++/C#でも、Javaでも他の言語のプロフェッショナルの方であれば、Pythonの経験は問いません。短期間でPythonを習得する意欲のある方であればもちろんWelcomeです。ちなみに、Web系はRubyですので、Rubyをとことん極めたいという方も鋭意募集中です。