1
/
5

PHPを捨てPythonを愛した理由

面倒なので、結論から箇条書しましょう。
あと、あくまでも個人的意見、見解であることをご了承ください。

・スパゲティになりにくい生産性、可読性の高さ
・Python+MongoDBの組み合わせが最強
・Web以外にも活かせる
・英語の勉強になる

よく遅い遅いと言われ、未だ日本では流行らないPythonくん。
for文でよく叩かれて可哀想でなりません。
実際問題、for文を100万回すケースはないんじゃないでしょうか。
実用性のないベンチマークで不当に叩かれちゃうのは、あまり科学的ではない。
軽自動車とスーパーカーを比較するようなもんです。
いくら速い車だって街乗りには向きませんよね。
プログラムは「本番で活かしてナンボ」です。
その上、ちゃんとチューニングすれば、なかなか大したもんです。
それに最近だとビッグデータの解析にも使われていたり。

ちょっと〜、評価にばらつきがない?

ということで、箇条書きの上から順に説明していきましょう。


・スパゲティになりにくい生産性、可読性の高さ

まあ、この辺は「Python 入門編」とかでググってください。
Pythonの一つの大きな特徴として「インデントされたものがひと塊」という点です。
その反面「Python インデント」でググると「Python インデント 気持ち悪い」とサジェストされます。

でも、気持ち悪いってその人の主観ですよね?

Pythonの文法は良くも悪くも「独裁的」です。
ガッチガチに文法を制御され、他のプログラムに比べて書き方の自由度は全くありません。
つまり、誰が書いても似たものになるんです。

つまり、誰が書いても似たものになるんです。大事なことなので(ry

さてこの特徴、本当にプログラマにとって不利益でしょうか?

否!他人のソースを簡単に理解できる!

ということなんです。
これは不利益でしょうか、いや不利益ではない。
寧ろ「チームでプログラムを書く場合、無駄な意思疎通を省くことができる」のですよ、奥さん!
いちいち「ここの処理の部分、どこがどうなってますか?」という必要性があまりない。
ソースを読めば大体理解できます。

PHPで同じレベルでそういうことできんの?できないでしょ!

仕様書を読み、プログラムを負い、どこで何をしているのかという手間。
その時間こそが無駄ってもんです。
独裁的であるからこそソースは均一化され可読性が高まる。
可読性が高まれば労力コストが減る。

削減できた労力で面白いことを考えたほうが有効じゃね?

プログラムはあくまで手段なんです。
インプット→処理→アウトプット、これがプログラムの役割。
つまりアウトプットこそ大事であって、その過程はエンドユーザーにとっては無意味なのです。
プログラマーの仕事はプログラムを書くことじゃなく「ちゃんとアウトプットできる処理を構築する」ことなんです。
スパゲティを解くより生産性が高いのは明白です。
その労力でチューニングしたり、さらに生産性の高いプログラムを書く時間ができるのです。
その結果、エンドユーザーにとって有益なアウトプットを提供できるわけです。

つまり、プログラムの本懐は最終的なアウトプットに有り!
好き嫌いしたら成長は無いですよ!


・Python+MongoDBの組み合わせが最強

知ってますか?MongoDB。NoSQLの代表格と言っていいでしょう。
この辺MongoDB、BSONというカタチでデータを保持します。
BSON?なにそれ。なんか似たようなものは知ってるけど。

それ、JSONですよね?

そうです、BSONとは「バイナリ型JSON」という意味なんです。
今のWeb制作現場に於いてJSONを使わないってことは滅多に無いでしょう。
ほとんどのサイトで、何らかのカタチで使われています。
jQueryとJSON、かなりの頻度で使っているはずです。

で、Pythonと何の関係があるの?

実はPythonには標準ライブラリでJSONのパース・変更・保存・出力ができるんです。
ざっくりいうとJSONを構文を変えないまま弄ることができる、ということなんです。
便利ですねえ。
更に便利なライブラリがあるんです。
JSONをJSONのまま処理して、MongoDBに保存・出力・検索など諸々が行えるライブラリ。

その名もPyMongo!

凄いんですよ、このライブラリ。
何が凄いって「JSONそのまま色々できる」わけですから。
なんやかんやの処理無く、一本道でデータを扱えるわけですから。
なのでその処理速度は爆速です。
またビッグデータの取り扱いに長けています。

だってMongoの意味はhumongous=バカでかいですから!

その上スケールアウトも簡単です。
JSONを取り扱う場合はPython+MongoDB、超オススメです。

だって、実績が有りますもん!

だいぶ昔のことですがTwitterのパスワード流出事故が有りました。
その際にこんなサイトを作りました。
https://gigazine.net/news/20120509-twipass/
今は閉鎖してますがWIWAという「野村の実験場」でこのサービスを提供しました(未だにドメイン持ってますよ)
Webサーバーには高速処理に定評があるNginxを使ったのもありますが、さくらのVPSで2時間で50万超のアクセスがあったのですが、平気の平左でした。
全くスピードは落ちなかったですね。

仕組みは至ってシンプルで
・MongoDBに流出したと思われるメールアドレスとアカウント名をぶち込む
・ユーザーからのPOSTでPythonを使って有無の判定
・結果をJSONで出力する
たったこれだけです。
Nginxのお陰もありましょうが、Pythonで手早く作ってMongoDBで判定してJSONで結果を出力。

これをたった30分で作れるんですよ!Python+MongoDBならば!

ホント、このスピード感にはニヤニヤしてしまいましたね。

一銭もお金になりませんでしたが!

当然NoSQLなのでトランザクション機能はないですし、リレーションも使えませんが、そこはトレードオフでしょう。
他のDBとの比較はしませんが、この融和性とスピードは凄まじいものがあります。


・Web以外にも活かせる

PHPって「Webに特化したプログラム」ですよね。Hypertext Preprocessorの略語ですから。
しかし、冒頭で書いたように最近ではビッグデータの分析やディープラーニング、AIなどにPythonを使うケースが非常に増えています。
また、元々はクロスプラットフォームの言語である故、ローカルのアプリ開発にも使われてます。
ゲームもPythonで作れるらしいですよ。ググってみてください。

これってプログラマーとしての価値が高まるんじゃね?

例えばWebプログラマーとして身を立てて、その先のキャリアパスをイメージした場合。
余程盲目的でない限り、またはWebプログラマーとして絶対の自身を持っていない限り、他の道への可能性を視野に入れてくることでしょう。

しかし、できるのはPHP(とPerl)だけ。

それって悲しいですよね

選択肢としてはCやScala、Goなどがあるでしょう。
でもこのサイトをご覧ください。
https://tech-camp.in/note/careerchange/49077/

2018年度の年収ランキング3位がPython!

年収が高いということは需要が高いということ。
それにビッグデータの分析やディープラーニング、AIは「これからが本格的に熱くなる」じゃないですか。
その中にPythonがある。将来性がある。可能性がある。

ならばやろうぜPython!


・英語の勉強になる

まあよく言われています。
「日本語のドキュメントが少ない」
え〜とですねえ

日本語ドキュメントを待つばかりの人間になりたい?

PHPにしろJavascriptにしろjQueryにしろ、そのベースはなんですか?
勿論英語ですよね。
タイ語ベースのプログラミング言語はありますか?
フィンランド語ベースのプログラミング言語はありますか?

探せばあるのかもしれませんし、実際日本語ベースのプログラミング言語も存在してます。

ただしかし、ほぼ全てが英語がベースなんです。
HTMLもCSSもそうじゃないですか。Pythonに限らず。
つまり我々プログラマーは「英語を書いている」のとほぼ同じなんですよ。
英語はいわば「商売道具」なんですよ。

なんで英語の勉強を避けるの?

英語の勉強は商売道具の手入れなんです。
例えばPHPのバグがありました、英語で解決方法が書かれています。
でもよくわかりません。
それはプロの仕事ですか?
道を全く知らないタクシーの運転手と同じじゃないですか。
それに日本語圏以外のプログラマーとやり取りをする場合、英語が必須ですよね。
現状に甘えちゃいけませんよ。


以上が自分が「PHPを捨てPythonを愛した理由」です。
もう8年くらい前ですか、PHPにうんざりしまして。
昔自分が書いたソースが、今の自分には読めない。
ガッカリですよ。
凹みますよ。
時間が無駄になりますよ。

その点、Pythonは優れています。
スッと思い出せますから。
それに意外とWebとの親和性が高いですから。
DropboxはPythonで書かれていることは有名な話。
DjangoやBotlleといったWebフレームワークもあります。
30分でサイト作った!ってのはオレオレフレームワークですね。
公開はしてないですが、MongoDBと組み合わせたものでトータルで100KB未満です。
具体的にいうと要求されたURLに対するClassとHTMLテンプレートをMongoDBから参照して、値とHTMLを出力。
こうすることでね、値の使い回しができるんですよ。
HTMLテンプレート側を弄るだけで、処理は一緒でも違うページが出力できる。
基本的にURLを参照しているので。

URLとClass、HTMLテンプレートの参照管理はAdminページで行います。
それをMongoDBに持たせるわけです。
書き込み頻度が少ないのでトランザクションとか気にしなくていいですし、NginxとMongoDBの処理の速さを利用して、コンパクトでわかりやすく設計しました。

ただ、フルスクラッチ中に色々あって放置してますが!Python3.7.2じゃ動かないんです!

ということで、Python面白いぜという話でした。

15 Likes
15 Likes