わくわく計算ライフ

ドムプラをキメつづけるブログになりつつある。

今更だけどPythonを勧める

ディープラーニングが2016年ぐらいに国内企業でも流行り出してから一気に拡がった感のあるPython
日常的に使ってる身としては「使い方を間違えなければ便利な言語」という認識です。
開発のスキマを埋める感じで使ってます。
利用者としてPythonの良いところ悪いところを紹介していきたいと思います。

1. どんだけ使ってるの?

業務では大体5年ぐらい書いてる。
プロトタイピングと機械学習が多い感じ。
プロトタイプ作った後企画がぽしゃる時が多いと、本番コード書かないので業務のPython率が上がるという悲しみが発生する。

2. ライブラリ(パッケージ)が超絶豊富

万事においてライブラリが豊富です。
余りにライブラリが豊富過ぎて自分の存在価値に疑問を覚えることもしばしば。
ある意味完璧主義で何も作れないマンには向かないかもしれん。

適切なパッケージ(ググれば大体出てくる)を導入すれば、ちょっとしたことなら50行程度でできます。
400行も書けば大したものができます。
例として今まで自分で作ってきたものの中からいくつか挙げてみる

  • FX業者から価格のデータをリアルタイムに取得して売買判断をする
  • ディープラーニングハンバーガーの画像を分類する
  • ラズパイでLチカする
  • Outlookのメールを自動生成する
  • Excelのファイルを読んだり生成したりする
  • グラフを書く
  • PDFからデータを抽出する
  • 画面の変化を検出して音声を再生する
  • ファイルを良い感じにリネームする

他にもありますがキャッチー(?)なところではこんなとこです。
ライブラリが他分野に渡って豊富ということは、仮に今やってることに興味がなくなっても他の分野でもPythonを使える可能性が高いのでそういう意味では損失が低い言語と言えるでしょう。

3. 少人数向き

良い点としては少ない人数でもそれなりに動くものが作れる。
悪い点としては記法が(特にアクセス指定子)が緩すぎるので、モラルの低いメンバーがいると地獄の様な実装が発生する。
ので、メンバーを管理教育できる範囲の少人数で使うのが良いと思ってる。

4. プロトタイピング向き

ライブラリ豊富で「とりあえずこんな感じ~」で短納期で動くものが見せられる。
そして、偉い人に勘違いされる。
作ったものを簡単に弄られたくないので、製品としてはコンパイル言語使いたいですよねって気持ちで一杯。
オススメの開発フローとしては

  • Pythonでプロトタイピングしながら短期で設計を詰める
    ⇒短期でイメージを見せることで、ふわふわな仕様を固めるたたき台にする& 偉い人をときめかせる。
  • 設計が固まったら別の言語で最終成果物は実装
    ⇒これによりリファクタリングも行える。

これをやる上で必ず守らなければいけないのは2点

  • 「最初っから、製品向けの言語で組めば?」って意見をねじ伏せる
    ⇒「プロトはPythonのが圧倒的に速くつくれるし。その分、設計変更も何度も試せるから…」とか言って押し切ってください。
  • 「もうPythonで製品出せば良くね?」って意見をねじ伏せる
    自社サーバのバックエンドで動く製品以外はこれは辞めといた方が良い。
    パフォーマンスは出ないし、コードの隠蔽もメンドクサイ。

脚が重くなりがちな、初期検討を高速プロトで回して、言語を変えることでリファクタリングを強制し品質をキープする流れが理想です。
そのための方便なら何でもつかうわ。

5. くっそ遅い

豊富なライブラリはインターフェースの向こう側がC++とかなので結構速いですが、Python自体の部分はかなり遅いです。
特にfor文は遅いと感じます。
これが、高度な最終製品に使えない理由の一つでもあります。

6. 機械学習デファクトスタンダード

DeepLearningをはじめ、機械学習デファクトスタンダート研究言語です。
最新の論文は大体PytorchかTensorflowでコードが出るので、そのまま使いたいのであればPythonです。
そして、組み込みなどの場合はC++とかから推論モデルを実行できるようにするためポーティングする作業が発生する。
めんどい of めんどい。

7. 年収高いの?

古来の中小企業レベルだと、言われたことをPythonで作るだけでも、結構年収高くなると思います。

ただし、Pythonというか機械学習界隈での「言われたこと」って

なんか、先端のDeepLearningで人間以上の性能でお願い

みたいなやつなんで、要するにめっちゃ上流工程できる必要あるので「そりゃ、給料高くなるわ...」ってやつです。
しかも、結構推論モデルが意図通り(ただし、意図の仕様は大体出てこない)動いてるか証明して!みたいな注文も飛んでくるので、確率・統計の知識とかちゃんとしたデータ整理とかプログラム以外の仕事が多いです。
偉い人の中に何でも機械学習入れたいマンが居ると、その人を止めるための資料とかいう、結構不毛な資料を頑張って作る工数とかも発生します。
ただ、この辺ができる人は大体くいっぱぐれないので、確率統計や数学知識とセットでご飯食べる言語としては良いと思います。

テック系の若い会社だと、開発や研究関係はみんなPython使えますが、あくまで道具でメインはそれより上の数学力や企画・設計能力での話になりますしね。
そういう意味では、年収高い人が使っていることが多い言語であるけど、Python使っているからという理由では年収は高くならない、というのが正解っぽい。

数学もやれ。

8. 数学勉強用ツールとして優秀

書籍での勉強だとイメージつかめなくても、Pythonで手軽に試してみてイメージを掴みながら学習ができるし、応用例もやたら転がっているので、これが理解できれば作れるものが増える!と感じられる。
学習の障壁を低くし、モチベーションを保ちやすい言語だと思う。

9. サボりツールとして優秀

日報の自動生成とか、決まったフォーマットのExcelを自動で埋めるとか、面倒なルーチンをパパっとやらせるのには便利ですね。
特にWindowsコマンドプロンプトPowerShellがイマイチなんで…。
文字列処理が得意なのもあって、多量のファイルリネームとかもお手のものです。