以前から、既にPythonは初心者向けとしては残念な言語と化してる、と言い続けてきた。
理由はいつも言ってたが、Pythonにはとにかくロクなプログラミング入門書がないから、だ。Pythonを良く知ってる層が書いてない。ホント「買ってはいけない」本が溢れていて、この中から「ズブの素人」が良書を選ぶ、ってのはハードルが高すぎる、んだ。
現在、本邦で出版されていて、唯一推薦出来る「Pythonを使ったプログラミング入門書」は次の本しか存在しない。
値段は高めだが、これが唯一「買って良い」Pythonによるプログラミング入門書、だ。
これ以外だと日本人が書いた本だとマジでロクな本は存在しない、んだ。
ところが、今までは「書籍の劣悪さ」でPythonを推薦するには良くない状況だったんだが、いよいよシステム的に見てもPythonが「マズい」領域に入ってきた。
断っておくが、「プロ用」を考慮して「ソフトウェアを書くツールとして」Pythonがマズい、って言ってるわけじゃない。単に「初心者に易しい」プログラミング言語としては適さなくなっていくだろう、って事を言ってるんだ。
今までも、Python3.xになってからはイテレータばっかになって「これはちと初心者向けじゃねぇんじゃねぇの?」と思うトコはあった。これは根本的に、概念としては然程難しくはないんだけど、つまり「Pythonの根幹」になってるにも関わらず、「入門書」では後回しになってるか、あるいはキチンと説明してない本ばっかだから「マズい」って話だったわけだ。要は「Pythonを理解してない」層はこの機能を理解していない。あるいは「分かってない」ワケだよ(笑)。分かってないヤツはこの機能をほぼ最初の方で「取り上げざるを得ない」って決断が出来ないわけだ。
イテレータを使いこなせないヤツがイテレータに付いて書けるわけがねぇ、ってこっちゃ。
でもまぁその辺はまだ許容しよう。
そうじゃなくって、現在表面化してきた問題は、Pythonは要仮想環境になってきた、って辺りなんだ。
初心者用プログラミング言語として考えた場合、要仮想環境、ってのは致命的だ。
要はPythonは、「起動してプログラムを書いて遊ぶ」には向かないプログラミング言語化しつつある。
前にも書いたが、そもそもPythonはヴァージョン違いで互換性がない、と言う致命的な欠点を持っている。つまり、小数点以下の違いで動くプログラムが動かなくなる事があり得る処理系なんだ。3.12で動いてたプログラムが3.13だと動かない事がある。
つまり、開発環境としては「全部HDDに保全しとかなきゃならない」と言うアタマの悪い処理系なわけだ。
当然外部ライブラリを導入するとすれば、3.12用と3.13用、等と全く同じライブラリをヴァージョン違い向けにインストールせなアカン。
そんな状態なのに、じゃあ、自在にPythonのヴァージョンを切り替えるにはどーすんだ、ってのが昔からあった問題だったんだ。
それで導入されたのがPythonの仮想環境(venv)なんだ。Pythonで開発する際にはこの仮想環境を切り替えつつ開発する、と。プロフェッショナルやエキスパート向けには悪い機能じゃないんだ。これで書いたコードが「全ヴァージョンで」問題なく動くかテスト可能となる。
しかし、これは今まではある種オプショナル、だった。問題はこれが必須化されつつある、って辺りなんだ。
断っておくけど、プロ用で考えて、この機能がダメだ、って言ってるわけじゃない。また、必須化、っつっても現時点でWindowsの環境だとどうなってんだかは分からない。ただし、どうやら必須化になりつつある、って話だ。
少なくともDebian系Ubuntuだと24.04LTSに於いて仮想環境はほぼ必須化、となった。それはPythonに於けるPEP668と言う提案に依る。
本題に入る前にPythonのPEPに付いてちょっと説明しよう。
PEPとはPython Enhancement Proposals(Python強化提案集)の略称だ。
性質的に言うと、SchemeのSRFIに近いがもうちょっと緩い。SRFIの場合、Schemeの仕様及び実装に於いて「追加した方が良いモノ」を提案しているが、PEPの場合は、有名なPython上のコーディング規約(PEP8)なんかも提案してて(※1)、Pythonの「機能」以外の提案も含んでいる。と同時に、Python3.10から導入されたmatch文なんかはいくつかのPEPでの提案を積み上げてPEP636を経て採択されたモノだ。
さて、PEP668が何を提案したのか。
平たく言うと、外部ライブラリ導入ツール、pipの全面的な禁止だ。
いや、全面的、っつーのは言い過ぎか。素のPythonでは使えなくしよう、って言う提案だ。言い換えると、仮想環境外ではpipを使えないようにしよう、ってのが提案だ。
これにはこういう背景がある。
現在の主だったUNIX系OS、つまりLinuxディストロだよな、は、OSに合わせた「ソフトウェアアーカイヴ」と言うのをネット上に備えている。つまり、何らかのソフトウェアをダウンロード/インストールしたい場合、そのソフトウェアアーカイヴ上から持ってくる、ってのが基本設計になっている。
実の事を言うと「ソフトウェア開発環境」として優秀なOSであるUNIX系OSに於いて、Pythonの外部ライブラリも、このソフトウェアアーカイヴからダウンロード及びインストールする、ってのがスジなんだよ。Debian系なんかだと
sudo apt install 特定のPythonライブラリ
でダウンロード/インストールするのが前提で、原則、pipを使うのは考慮してないんだ。
ところが、だ。
例えば超保守的OSであるDebianなんかだと、それで「最新ヴァージョンのPythonライブラリ」がダウンロード/インストールされるたぁ限らない。大体反映するのが遅いし、「全Python外部ライブラリ」が揃ってるたぁ限らないわけだ。「新しいヴァージョンを使いたい」と言う望みが、このテのシステムだと叶えられるとは言えないんだよな。
Ubuntu系ディストロもこの辺は同様で、結果としてPythonを使う奴らは必然的にpipに頼る事になる。
ところが、だ。これで起こるのが「衝突」なんだよ。システムにインストールされてるライブラリとpipでhomeにインストールされたライブラリとどっちを優先すべきか、と。
しかも例えばDebian/Ubuntuだとsudoでpipしちまうと、インストール対象はhomeディレクトリじゃなくて、/usr以下の「システムファイル」部分を書き換えちまうわけだ。
これが宜しくねぇんじゃね?って話になったわけだ。
結果、pipでインストールする外部ライブラリはhome上、しかも仮想環境上でしか許さないようにしようぜ?ってのがこの提案の真意なわけだな。
一見悪くない提案に見える。そして「プロ用開発環境」を考えると当然悪くない提案なんだわ。
ところが、だ。
これだとPythonに対してのニューカマーとか、あるいはプログラミング初心者に対してはホンマ七面倒臭い状態になる、ってこった。
大体、プログラミングを始めよう、って奴らが端末に向かってまずは仮想環境構築せよ、とか馬鹿臭いだろ(笑)。そして起動もメンドイ。仮にenvって仮想環境を作ったとしたら、端末から
source env/bin/activate
って長ったらしいコマンドを毎回打たな外部ライブラリ込みのPythonを起動出来ない、ってこった。プロのプログラマ向けならともかくとして、プログラミング初心者にこんなの毎回打ちなさい、とか強要するとか、どないなっとんねん、って話じゃないか?
まぁ、「初心者は外部ライブラリは使うな」って提言はアリ、って言えばアリだけどな。教えて!gooで「Pythonの使い方自体が良く分かっていないのに」NumpyやらPandasを含めたコードを投下するヤツは減るから良い事なのかもしんないが(笑)。
いや、恐らく、仮想環境の使い方も良く分かってないヤツが激増して、ああいったQ&Aサイトの質問がますますカオティックになる方に賭けるわ(笑)。教える側が「仮想環境で〜」とか言いながら学生にロクなサポートをせん、と言う残念な未来が見える(笑)。
それだけじゃない。
Pythonは何度も言うように、「全部入りマシマシ」であるIDLEが簡単に起動出来るプログラミング言語だ。IDE付き処理系、ってのは非常にメリットがデカイ、ってのはこのブログでは何度も言っている。「他に余計なモノが要らない」ってのは極めて重要なんだ。
しかし、今度はIDLEを立ち上げたからと言ってそれが仮想環境を起動するわけじゃない。つまり、外部ライブラリを使ったプログラムをIDLEで書いたとしたらそれは立ち上がらずエラーになる、んだ。そして仮想環境内でIDLEを立ち上げようとすれば、それはまた要コマンドラインとなる。
IDLE側から仮想環境を自在に操れないのなら、これはクソな決定と見てイイんだ。ホンマ何を考えてるのだろうか(笑)。ここにはもはや「万人に優しい」Pythonじゃなくって「プロ用開発環境」しか想定していないPythonしか存在しない。
タイトルに書いただろ?「Pythonは初心者向け言語ではなくなる」と。
もちろん、GNU Emacsとかなら仮想環境を操れる。Visual Studio Codeでも可能だろう。
ただし、そういったIDEを「プログラミング初心者に押し付ける」のは間違っているんだ。
しかしながらPEP668下のPythonだと「プログラミング初心者でさえ」数多くの設定を要する可能性が出てきたわけだ。もうIDLEを起動さえすれば万全、とはならなくなってきた。Windowsの状況下だとまだ分からんけど、将来的には似たような状態になる可能性が高い、んだ。
従って、「初心者用プログラミング言語」としてはPythonを排する時期に来ていると思う。かなり確実だ。
現在、goo blogでも初心者向けPythonプログラミングの記事を頑張って書いてる人もいるが、残念ながら「そっちの水は甘くない」と思っている。
現時点、やっぱ初心者向け言語としてはRubyの方が良いんじゃないか、とは思うが、本当の事を言えばSchemeがやっぱ良いのでは、と思っている。シンプルなクセに高機能だ。従ってScheme一本槍で色んな「プログラミング上の概念」が学べる。そして良く言われる「実用的なプログラムは書けない」って程でもない。何故ならRacketがある、からだよな。
しかしながら、良質なSchemeによるプログラミング入門書は存在しない。やっぱRacket入門を書くしかねぇのかなぁ、ってちょっと思ってる僕がここにいるんだ(※2)。
いずれにせよ、「入門者向け言語」としてはPythonは完全に「ダメ」な領域に入ってきてるんだ。
※1: 個人的には全く従った事はない(笑)。マナー程度のモノなんで、会社で開発するならさておき、個人的な開発ではそんなモンは無視しても構わんだろ、ってのが意見だ。
ちなみに、こう言った「記述ルール」を覚えておくのはメンド臭いんで、通例だと、IDEでテキトーに書いた後、pylint等の性的静的解析ツール等を利用して自動でソースコードを整形してもらった方がラクだろう。
Qiitaで珍しく役立つ記事があったので参考にして欲しい。
※2: 書くのはやぶさかではないにしても、LaTeXを使うのがメンド臭かったりする。
なお、LaTeXとMicrosoft Wordを比較して「Wordは汚くて・・・」とか言う輩がいるが、比較対象を間違っていて、LaTeXはワープロではない。と言うかワープロとして見るとLaTeXは殆どサイテーだ(笑)。
LaTeXはあくまで組版ソフトであり、比較すべきは本来ならAdobe InDesignとかQuarkXPress等のDTPソフトになる。