Pythonは1991年に初めてリリースされました。
それから30年以上経った今でも、Pythonは世界中のホビーユーザーやプロの開発者の間で最も人気のあるプログラミング言語の1つです。
TIOBEは、2021年にPythonを年間最優秀プログラミング言語と宣言しました。
Pythonがこれらの栄誉を獲得したのは、過去5年間だけで3度目です。
Pythonの開発者は、しばしば自らをPythonistaと呼ぶことがありそうです。Python言語には、「Zen of Python」という独自の哲学さえあります。
Pythonの開発者は、さまざまな業界で多様な使用例があるため、高い需要があります。では、あなたもPython開発者の仲間入りをして、Pythonistaになるべきでしょうか?
本日は、Pythonを学ぶべきかどうか、自信を持って判断するための一助となれば幸いです。
Pythonを学ぶ5つのメリットとデメリットを説明します。
Pythonは、世界で最も人気のあるプログラミング言語の1つです。
スタックオーバーフローの2021年開発者調査では、回答者の48%がPythonを使って仕事をしていると回答しています。
また、他の回答者に学習意欲のある技術を聞いたところ、Pythonは開発者の間で最も欲しい技術として1位となりました。
Pythonの大規模なオープンソースコミュニティは、Pythonistが強力なピアサポートと有用なドキュメントを享受できることを意味します。
もし障害にぶつかったら、いつでもPythonフォーラムやミートアップをチェックして、他のPython開発者から助けてもらうことができます。
Pythonがあなたの最初のプログラミング言語である場合、このコミュニティサポートは特に役に立ちます。
Pythonには、様々なアプリケーションで利用できるライブラリが豊富に用意されています。
ライブラリは、アプリケーションの開発を効率化するためのリソースの集合体です。
すべてのコードをゼロから書く代わりに、あらかじめ書かれた関数やクラスが多数含まれるライブラリを利用することができます。
Pythonの人気ライブラリには以下のようなものがあります。
Pythonは非常に簡潔な構文を持っています。
これは、Javaなどの他の高級プログラミング言語と比較しても顕著です。
Pythonの「Hello World」プログラムをJavaと比較すると、Pythonの構文がより簡潔であることが分かります。
Pythonのシンプルな構文と豊富なライブラリは、より少ないコード行数でより多くのことを行うことを可能にします。
これは開発時間の短縮につながり、Pythonの人気の理由の1つとなっています。
ポータビリティもPythonの強みの1つです。
ポータビリティとは、アプリケーションが様々なオペレーティングシステム(OS)で動作する能力のことです。
プログラムにシステム固有の呼び出しが含まれていない限り、プログラムコードを修正することなく、Windows、Mac OS、LinuxでPythonプログラムを実行することができます。
選択したプラットフォームに適したPythonインタプリタを使用すればよいだけです。
Pythonのポータビリティは、コンパイラの代わりにインタープリタを使っていることに大きく起因しています。
インタープリタとコンパイラはどちらもソースコードをマシンコードに変換します。
しかし、そのタイミングや方法は異なります。
インタープリタはプログラムの実行時にソースコードを変換し、コンパイラはプログラムの実行前にソースコードを変換する。
具体的には、Pythonのソースコードはバイトコードと呼ばれる中間形式に変換され、Pythonインタプリタがあるプラットフォームであれば、どのプラットフォームでも実行することができる。
これに対し、コンパイラはソースコードを特定のプラットフォームでしか実行できない非可搬型の機械語に変換する。
プログラミング言語Pythonは、以下のような多くの成長分野で様々なユースケースを持っています。
Pythonは、他の高級プログラミング言語と比較すると、パフォーマンスが遅いです。
Pythonは、それなりのメリットがある機能とのトレードオフとして、パフォーマンスで打撃を与えています。
Pythonのパフォーマンスに影響を与える要因としては、以下のようなものがあります。
Pythonはメモリ効率の良い言語として設計されていません。
そのため、リソースに制約のあるシステムでアプリケーションを構築する場合には、プログラミング言語として最適な選択とは言えません。
同じ理由で、リアルタイムで高度な並行処理を行うシステムなど、性能の高いアプリケーションを構築する場合は、他の言語を選択した方がよい場合が多いでしょう。
Pythonはシンプルな構文を優先するため、明確な命名規則を持っています。
Pythonの命名規則がシンプルであることはデメリットではありません。
しかし、Pythonの命名法は、他のプログラミング言語が同意する規範から逸脱していることに注目すべきです。
Pythonの特徴的な命名法の例としては、以下のようなものがあります。
Pythonのユニークな特徴は、他のプログラミング言語に簡単に転用できるものではありません。
Pythonを学ぶのが先でも、他の言語を学んだ後でも、Pythonに特有の性質に遭遇することが予想されます。
サイズが小さいうちは、Pythonのコードは理解しやすいものです。
しかし、Pythonは多くのコーディング標準を強制しません。
つまり、コーディングのベストプラクティスに注意深く従わないと、Pythonのコードはすぐに大きくなりすぎてしまうのです。
このような状態に陥ると、大きなコードベースは理解や拡張がより困難になります。
Pythonの構文は、大きなコードをさらに読みづらくすることがあります。
例えば、動的に型付けされた変数に対して適切なコメント付けを行わないと、コードが誤解を招きかねません。
さらに付け加えると、Pythonで深くネストされたコードも、変数のスコープが容易にわからないため、理解するのが難しくなることがあります。
さらに、Pythonでは(CやJavaで行うような)括弧や他のスコープ識別子の代わりに空白を使うため、ネストしたコードは読みづらくなります。
Pythonの最も一般的な実装であるCPythonは、GIL(Global Interpreter Lock)を採用しています。
GILは利点と欠点がある機構です。
GILはインタプリタがプロセスごとに実行可能なスレッドを制限するために使用されます。
具体的には、GILは任意の時間に実行できるスレッドを1つだけ許可します。
GILが使われるのは、CPythonではメモリ管理がスレッドセーフでないためです。
一度に1つのスレッドしか許可しないことで、GILはPythonプログラム内のデータ構造間の意図しない相互作用を防ぐことができます。
しかし、これはマルチスレッドのCPythonプログラムでは、並列処理を行うことでマルチプロセッサシステムを最大限に活用することができないことを意味します。
PythonのGILとスレッドの制限は、Pythonの最も人気のある実装であるCPythonを使う場合に影響を及ぼします。
そのため、プログラムでマルチスレッドや並行処理を実装する予定がある場合は、GILを使用しない方がよいかもしれません。
IronPythonやRPythonのような他のPythonの解釈では、GILを使いません。
様々なユースケースがあるにも関わらず、Pythonはモバイル開発の候補としては弱いです。
主要なモバイルプラットフォームのうち、AndroidとiOSのどちらも公式言語としてPythonをサポートしていません。
ネイティブプラットフォームのサポートがなくても、Pythonでモバイルアプリケーションを開発することは可能です。
しかし、それを実現するためのフレームワークやライブラリが必要になります。
とはいえ、Pythonのモバイル開発をサポートする成熟したフレームワークやライブラリは、まだ不足しています。
Kivyフレームワークのような技術は存在します。
しかし、それらはあまり開発されていないため、学習曲線が急で、コミュニティのサポートもほとんどない可能性があります。
また、Pythonのユーザーインターフェース(UI)ライブラリも不足しており、Pythonのモバイルアプリで優れたユーザー体験を実現することは困難です。