こんにちは.changです.
今日は技術ネタで,Pythonについて僕が思うところを書きます. トータルで考えるとC言語よりも難しいんじゃね?って話です.
1. Pythonを書き始めたきっかけ
Deep Learningを始めた事がきっかけです. 当ブログを見返してみると,随分と稚拙な事をやってましたね. 2019年に始めたと思うので,かれこれ6年位Pythonを書いている事になります.
因みに,僕が学生時代の研究と就職後の業務の中で書いてきたコンピュータ言語は主にC言語,Matlab(Octabe),C#,Pythonです. 最も最近書き始めたのがPythonですね. C言語を使った開発経験が一応あり,研究でMatlabを書く事もあったので,文法的な難しさは感じませんでした. "Pythonは簡単"と繁く(?)言われますが,C言語を書ける僕からすれば確かに"Pythonを書くのは簡単"でした.
2. Pythonの不思議なところ
C言語をやってきたオッサンからすると,Pythonにはいくつか不思議なところがあります.
2. 1 直ぐに動かなくなる
以前に動いていたソースコードが動かなくなるという事態は,多かれ少なかれ,あらゆるコンピュータ言語で起きます. ただ,その頻度がPythonでは圧倒的に多いです.これにはいくつかの要因があります.
(1) Pythonそのもののver.
僕がPythonを始めた当時は未だPython2が残ってましたが,現在Python2をメインで書く人は少ないでしょう. 当時,Ubuntu 19.04 LTSを使っていたので,Python 3.7から使い始めたのではないかと思います. 因みに,2025年10月現在の最新Pythonは3.13.3です. 僕自身は,サポート終了になったPython 3.8に見切りを付け,Python 3.10に移行している最中です.
この様に,Pythonには頻繁にver.アップがあります. 上位互換は比較的確保されますが,下位互換はほぼありません. 実際,"githubからソースを落としたら新しいバージョンのPythonで書かれていて動かせない"事が繁くあります.
(2) 依存ライブラリのver.
Pythonでプログラムを作るとき,Python単独で書くという事はほぼありません. numpyやsckit-learn等のライブラリを必ず使います. このライブラリの豊富さがPythonの利便性なのですが,諸刃の剣で,開発者を悩ませる原因にもなります.
ライブラリには動作要件があります. "Pythonのver. ○.○○〜○.○○,内部依存ライブラリ○○○○のver. ○.○○〜○.○○で使用して下さい"という感じです. 1つのパソコンで一つのアプリしか作らないなら問題ないのですが,そんな事は有りえないですよね. ほぼ全ての開発者や研究者の方は,1つの開発用パソコンで複数のアプリの開発,メンテをしている筈です. アプリ毎に必要なライブラリを,動作要件に合わせてインストールする必要があります. 僕自身の経験としても,或るソースを動かそうとしてPythonや依存ライブラリのver.をいじったら,別のソースが動かなくなる事がしょっちゅうです. この為,Pythonはプロジェクト毎に開発環境を分けて書くのが基本です. これを実現しているのが当ブログでも紹介しているvirtualenv(venv)やDockerです.
(3) NVIDIA環境のver.
2. 4に書きます.
2. 2 遅い
Pythonはインタプリタですので,実行が遅いです. 同じ計算をC言語とPythonで処理したとすると,総じて,PythonではC言語の10倍程の時間が掛かります. 昔よりもパソコンが速いからいいじゃん!って言うのが,Python派の主張なんですが...💦 そもそも,Pythonしか書いた事がない若者にとっては"C言語と比較する"と言う感覚が無いのかも知れないですね.
一応,メーカーでの開発環境があって,そこそこのレベルで研究をしてきた僕からすると,Pythonのみで開発や研究を完結する事はあり得ません. 重たい計算はC言語で処理したり,ライブラリ化したりします. 老害と言われそうですが,"だったら初めから全部C言語で書けば同じじゃん!"と言うのがオッサンの本音です.
2. 3 ソース&開発環境をセットで納品
前述した様にPythonはインタプリタです. Pythonで作ったアプリをユーザーや同僚に配布する場合,ソースファイルと,開発者が使ったものと同じ開発環境を渡す必要があります. これ,C言語を書いてきたオッサンからするとあり得ません.
例えば,Microsoft Visual Studioを使ってC言語でアプリを作り,ユーザーに販売するとします. この場合,ユーザーに提供するのは,コンパイルした実行ファイル(exeとか,エグゼキュータブルと呼ばれます)と,実行ファイルを動かすためのランタイム(VC++ Runtimeや.Net Framework)です. 多くの企業にとって機密情報であるソースファイルは公開しません. また,実行ファイルはコンパイラによってその処理に特化されたバイナリに変換されるので,高速に動きます. その代わり,ユーザー側で処理内容を変更する事は出来ません.
一方Pythonでは,ユーザーにソースファイルと開発環境(上記の例で言うところのVisual Studio)を渡します. ユーザー側としては,自身の要求に応じてソースを改変出来るので便利です. 一方,メーカー側からすると大きなリスクになり得ます. 納品先で勝手にソースを変えて動かなくなったにも関わらず,"不具合だ!"とクレームを受ける可能性があるからです.
2. 4 NVIDIA連携
AI系アプリを開発する場合,Pythonや関連ライブラリに加えて,NVIDIAのver.を管理する必要があります. 具体的に言うと,GPUアーキテクチャ,NVIDIA Driver,CUDAです.
* Google TensorflowやMeta(旧Facebook) PyTorchのver.管理も大切なのですが,本記事では省略します.
Pythonパッケージの環境分離であれば,venvやvirtualenvで事足ります. ところが,CUDAが絡んでくると途端に大変になります. 同じパソコンの中に複数のCUDAを入れて無理やり使うか,Dockerで分離します. ここまでは何とかなるでしょう. しかし,ハードウェアに近いNVIDIA DriverやGPUアーキテクチャはどうにもなりません. 古いGPUが壊れたとき,下手をすると,それと共に動いていたアプリも未来永劫で動かなくなってしまうのです.
繰り返しになりますが,Pythonでは,ハードウェアや依存ライブラリとの互換が崩れる事によってアプリが動かなくなる頻度が非常に高いです. 古くなった端末と一緒にアプリを使い捨てていく感じです. その結果,現在のgituhubは,現行のGPUアーキテクチャでは動かないゴミソースで溢れています.
WindowsやLinuxは,一つのパソコンの中でたくさんのアプリやゲームを動かせたからこそ,一般に普及しました. それが変わりつつあります. パソコンの拡張部品であった筈のGPUが,過剰に前面に出てきたからです. NVIDIA様がもう少し親切だったらそれもアリなんですが...
3. 時代は変わって...
ソフトウェアの提供方法も変わって来ています.
一昔前,ソフトウェア開発と言えばWindows(デスクトップ)アプリでした. スマフォの台頭で端末が変わったりしましたが,アプリをユーザーの端末にインストールするという点は変わりませんでした.
これが更に代わり,今後はWebアプリが主流になって来そうです. Webアプリが流行っている理由は色々ありますが,1つはこの記事でお話したPythonの不思議への対応です. アプリごとに専用のサーバー(あるいはVM)を立て,そのサーバーがそのアプリ専用で動くようにすれば,2. 1で解説したPythonの環境維持問題が解決されます. また,ユーザーのパソコンにインストールしない訳ですので,2. 3で取り上げたユーザーへの動作環境の渡し方を考える必要もなくなりますし,ソースも隠せます.
* パソコンオタクとしては複雑ですが,家庭用のパーソナルコンピュータは,WebアプリやVMを閲覧するためのモニタ&インタフェースみたいになっていくでしょう.
僕自身もHuggingFaceでWebアプリにトライし始めているのですが,非常に面倒臭いです. インターネットの先に在る,目に見えない,触れない,捉え所の無いパソコン上でアプリを動かすのだから当たり前です. ローカルでは動くソースがアップロードすると動かないケースが多々有ります. また,この手のクラウドサービスではサービス元がオプション提供するOSやGPUしか使えないので,自身の作りたいソフトをどうやっても構築出来ない場合も出てくるでしょう.
* HuggingFaceは研究者向けなので,ソースコードは隠せません.
C言語を書いていた時代,アプリが動かない時には基本的にソースの中に在るバグを探していました. つまり,プログラマはコーディングとデバッグだけ頑張れば良かったのです. しかし,PythonやWebアプリでは,コードを動かす環境を作ったり,維持する事に神経を使います. 個人的には,C言語よりも大変になったと感じます.
4. むすび
ソフト屋の仕事も変わりました. あちこちで言われる様に,プログラマはAIに食われる職業です. 僕自身も,特にPythonについてはChatGPTに書かせたソースをそのまま使ってしまうケースが増えてきました.
そんな時代になったにも関わらず,ソフトウェア関係の技術書やセミナーの多くが"IF文だ","While文だ"と,相も変わらず文法作法ばかりを解説しています. 言葉を綺麗に使う勉強は最早🙂↔️です. オッサンだから感じる”Pythonの不思議さ”が少しでも世の中の役に立てば嬉しいです.