Magicode logo
Magicode
0

なぜPythonを学ぶのか?5つのメリットとデメリット

7 min read

Pythonは1991年に初めてリリースされました。
それから30年以上経った今でも、Pythonは世界中のホビーユーザーやプロの開発者の間で最も人気のあるプログラミング言語の1つです。
TIOBEは、2021年にPythonを年間最優秀プログラミング言語と宣言しました。
Pythonがこれらの栄誉を獲得したのは、過去5年間だけで3度目です。

Pythonの開発者は、しばしば自らをPythonistaと呼ぶことがありそうです。Python言語には、「Zen of Python」という独自の哲学さえあります。
Pythonの開発者は、さまざまな業界で多様な使用例があるため、高い需要があります。では、あなたもPython開発者の仲間入りをして、Pythonistaになるべきでしょうか?

本日は、Pythonを学ぶべきかどうか、自信を持って判断するための一助となれば幸いです。
Pythonを学ぶ5つのメリットとデメリットを説明します。

Pythonの5つのメリット

1. 大規模な開発者コミュニティ

Pythonは、世界で最も人気のあるプログラミング言語の1つです。
スタックオーバーフローの2021年開発者調査では、回答者の48%がPythonを使って仕事をしていると回答しています。
また、他の回答者に学習意欲のある技術を聞いたところ、Pythonは開発者の間で最も欲しい技術として1位となりました。

Pythonの大規模なオープンソースコミュニティは、Pythonistが強力なピアサポートと有用なドキュメントを享受できることを意味します。
もし障害にぶつかったら、いつでもPythonフォーラムやミートアップをチェックして、他のPython開発者から助けてもらうことができます。 Pythonがあなたの最初のプログラミング言語である場合、このコミュニティサポートは特に役に立ちます。

2. 豊富なライブラリ

Pythonには、様々なアプリケーションで利用できるライブラリが豊富に用意されています。
ライブラリは、アプリケーションの開発を効率化するためのリソースの集合体です。
すべてのコードをゼロから書く代わりに、あらかじめ書かれた関数やクラスが多数含まれるライブラリを利用することができます。
Pythonの人気ライブラリには以下のようなものがあります。

  • Numpy、SciPy : 科学計算向け、線形代数や統計など幅広い関数、アルゴリズム、最適化機能を持つ
  • Keras、Seaborn、TensorFlow、およびSciKit-Learn : 機械学習、人工知能、自然言語処理、ニューラルネットワーク向け
  • Scrapy : データサイエンス向け、効果的なウェブクローラーやデータスクレイパーを作ることができる。
  • Pandas : データクリーニングや、リレーショナルデータ、ラベル付きデータの操作など、データ分析に。
  • Matplotlib、Plotly : データの可視化、グラフのプロット

3. より少なく書き、より多く行う

Pythonは非常に簡潔な構文を持っています。
これは、Javaなどの他の高級プログラミング言語と比較しても顕著です。
Pythonの「Hello World」プログラムをJavaと比較すると、Pythonの構文がより簡潔であることが分かります。



Pythonのシンプルな構文と豊富なライブラリは、より少ないコード行数でより多くのことを行うことを可能にします。
これは開発時間の短縮につながり、Pythonの人気の理由の1つとなっています。

4. ポータビリティ

ポータビリティもPythonの強みの1つです。
ポータビリティとは、アプリケーションが様々なオペレーティングシステム(OS)で動作する能力のことです。
プログラムにシステム固有の呼び出しが含まれていない限り、プログラムコードを修正することなく、Windows、Mac OS、LinuxでPythonプログラムを実行することができます。
選択したプラットフォームに適したPythonインタプリタを使用すればよいだけです。 Pythonのポータビリティは、コンパイラの代わりにインタープリタを使っていることに大きく起因しています。
インタープリタとコンパイラはどちらもソースコードをマシンコードに変換します。
しかし、そのタイミングや方法は異なります。
インタープリタはプログラムの実行時にソースコードを変換し、コンパイラはプログラムの実行前にソースコードを変換する。
具体的には、Pythonのソースコードはバイトコードと呼ばれる中間形式に変換され、Pythonインタプリタがあるプラットフォームであれば、どのプラットフォームでも実行することができる。
これに対し、コンパイラはソースコードを特定のプラットフォームでしか実行できない非可搬型の機械語に変換する。

5. 幅広いユースケース

プログラミング言語Pythonは、以下のような多くの成長分野で様々なユースケースを持っています。

  • データサイエンス
  • 機械学習
  • 統計学
  • サイバーセキュリティ
  • ゲーム開発
  • バックエンドWebアプリケーション開発
  • 組込みアプリケーション

Pythonの5つのデメリット

1. パフォーマンスが遅い

Pythonは、他の高級プログラミング言語と比較すると、パフォーマンスが遅いです。
Pythonは、それなりのメリットがある機能とのトレードオフとして、パフォーマンスで打撃を与えています。

Pythonのパフォーマンスに影響を与える要因としては、以下のようなものがあります。

  • インタプリタの使用 : インタープリタは、(コンパイラのように)実行前にコードを翻訳するのではなく、実行時にコードを翻訳します。
    実行時の翻訳によるオーバーヘッドが増えるため、インタープリタ言語はコンパイル言語よりもコードの実行速度が遅くなります。
  • 動的型付けを使用 : Pythonは静的型付けとは対照的に動的型付けを採用しています。
    動的型付けでは、型を宣言することなく変数を作成することができます。
    変数の型は実行時に決定されます。
    これは、プログラムが実行時にいくつかのタスクを行うことを意味し、パフォーマンスに影響を与えます。
  • ガベージコレクタの使用 : Pythonは、手動でのメモリ管理ではなく、自動的なメモリ管理をサポートしています。
    これは、私たちが手動でメモリを割り当てたり解放したりする代わりに、ガベージコレクタによって作業が自動的に行われることを意味し、実行時にメモリを要求し、アプリケーションの残りの性能に影響を与えます。
    Pythonのオブジェクトモデル Pythonのオブジェクトモデルは、効率的なメモリアクセスには向いていません。むしろ、多くのメモリを消費します。

Pythonはメモリ効率の良い言語として設計されていません。
そのため、リソースに制約のあるシステムでアプリケーションを構築する場合には、プログラミング言語として最適な選択とは言えません。
同じ理由で、リアルタイムで高度な並行処理を行うシステムなど、性能の高いアプリケーションを構築する場合は、他の言語を選択した方がよい場合が多いでしょう。

2. 特徴的な命名法

Pythonはシンプルな構文を優先するため、明確な命名規則を持っています。
Pythonの命名規則がシンプルであることはデメリットではありません。
しかし、Pythonの命名法は、他のプログラミング言語が同意する規範から逸脱していることに注目すべきです。
Pythonの特徴的な命名法の例としては、以下のようなものがあります。

  • 用語の違い
    Pythonで辞書と呼ばれているデータ型は、JavaやC++ではハッシュと呼ばれています。
  • 句読点の違い
    Pythonでは文字列を閉じるのにシングルクォーテーション(')を使っていますが、多くのプログラミング言語ではダブルクォーテーション(")を使っています。

Pythonのユニークな特徴は、他のプログラミング言語に簡単に転用できるものではありません。
Pythonを学ぶのが先でも、他の言語を学んだ後でも、Pythonに特有の性質に遭遇することが予想されます。

3. コードの大きさが手に負えなくなることがある

サイズが小さいうちは、Pythonのコードは理解しやすいものです。
しかし、Pythonは多くのコーディング標準を強制しません。
つまり、コーディングのベストプラクティスに注意深く従わないと、Pythonのコードはすぐに大きくなりすぎてしまうのです。
このような状態に陥ると、大きなコードベースは理解や拡張がより困難になります。
Pythonの構文は、大きなコードをさらに読みづらくすることがあります。
例えば、動的に型付けされた変数に対して適切なコメント付けを行わないと、コードが誤解を招きかねません。 さらに付け加えると、Pythonで深くネストされたコードも、変数のスコープが容易にわからないため、理解するのが難しくなることがあります。
さらに、Pythonでは(CやJavaで行うような)括弧や他のスコープ識別子の代わりに空白を使うため、ネストしたコードは読みづらくなります。

4. Global Interpreter Lock (GIL)とスレッドの制限

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を使いません。

5. モバイル開発への対応が弱い

様々なユースケースがあるにも関わらず、Pythonはモバイル開発の候補としては弱いです。
主要なモバイルプラットフォームのうち、AndroidとiOSのどちらも公式言語としてPythonをサポートしていません。
ネイティブプラットフォームのサポートがなくても、Pythonでモバイルアプリケーションを開発することは可能です。
しかし、それを実現するためのフレームワークやライブラリが必要になります。
とはいえ、Pythonのモバイル開発をサポートする成熟したフレームワークやライブラリは、まだ不足しています。
Kivyフレームワークのような技術は存在します。
しかし、それらはあまり開発されていないため、学習曲線が急で、コミュニティのサポートもほとんどない可能性があります。
また、Pythonのユーザーインターフェース(UI)ライブラリも不足しており、Pythonのモバイルアプリで優れたユーザー体験を実現することは困難です。

Discussion

コメントにはログインが必要です。