Pythonはプログラミング言語のプリウスなのか

    • このページをはてなブックマークに追加

    公開日:2021年02月16日 最終更新日:2021年02月17日

    この記事を書いた人
    インターノウス株式会社 技術顧問 伊澤 伸

    楽天「ぴたっとアド」「ぐるなび」「びあ」などのwebを担当。元株式会社ノボットCTO。

    1996年日本オラクル株式会社。2004年ネクストコム株式会社(現三井情報株式会社)に参加後、米国において会社を設立。オフショア開発部隊を率いて「ぐるなび」「びあ」などのWEBリニューアルを担当。

    2007年マイクロアドのアドネットーク向けに行動ターゲティング広告システム、不正クリック排除システムを構築。2008年楽天株式会社において、 「ぴたっとアド」の立ち上げを完了させた。2009年株式会社ノボットに参画。CTOとしてシステム基盤を構築し、ノボットバイアウトに貢献。

    世の中にはプログラミング言語の解説記事が溢れかえっていますが、実務的にはその言語はどのように使われているのかということを紹介している記事は少ないと思います。
    そこで開発現場から見た言語トレンドや特徴、案件の傾向などについてご紹介してく記事を書いていきたいと思います。最初はPythonからはじめましょうか。

    Pythonは1991年のリリースですから、最新の言語というわけではありません。私の記憶ではPythonという言語があるということは知られていたものの、案件で使われることはほとんどなかったと思います。Perlの後継としてシステム周りで使っている人がいるかなぁくらいだったPythonが案件の内容として再浮上してきたのはビッグデータブームとそれに続くディープ・ラーニングブームの頃からだったと記憶しています。

    1. Pythonのプログラミングパラダイム

    Pythonはパラダイム的にはよく言えば「マルチパラダイム」というか、割と無難な感じの悪く言えばこれと言って特徴のない言語です。Haskellの「純粋関数型プログラミング言語」みたいな強い個性はないんですね。「よく使う言語はなんですか?」と聞かれて「Haskellです」と答えれば「ほう!」という感じですが、「Pythonです」だと「ふーん」で終わりですね。できるからと言ってドヤ顔できないみたいな。純粋関数型プログラミング言語!なら特に「純粋」の辺りが厨二病的にシビレますよね。プログラミング言語はかくあるべしみたいな議論を吹っかけてきそうで。Pythonにはそういう尖ったこだわりは感じないですね。「パラダイムなんてなんぼあってもいいですからね」と言ってそう。

    ▲ページトップへ戻る

    2. Pythonの言語仕様

    特徴のない言語と書いてきましたが、構文に関してはひとつ特徴があります。それはインデントが構文として意味を持つということです。Wikipediaで紹介されているコードを引用して説明します。例えばCで書いたら以下のような関数があるとします。

    int factorial(int x) {
      if (x == 0) {
        return 1;
      } else {
        return x * factorial(x - 1);
      }
    }
    

    出典:Wikipedia

    Pythonで書いたらこうなります。

    def factorial(x):
      if x == 0:
        return 1
      else:
        return x * factorial(x - 1)
    

    出典:Wikipedia

    中括弧{}がなくなってインデントがその代わりにスコープを示します。defの次行のifはひとつインデントされてますから、defの中にあるという意味です。YAML的?いやYAMLの方がPythonの影響を受けているのかも知れませんね。

    うーん、これはどうでしょうかね。中括弧の位置とかはC++とかJavaのプロジェクトでコーディング規約を作るときは宗教戦争が勃発しますよね。
    例えばさっきの関数であれば

    
    int factorial(int x)
    {
      if (x == 0)
      {
        return 1;
      } 
      else
      {
        return x * factorial(x - 1);
      }
    }
    

    こういう風に書いたらオールドスクールっぽいですよね。この例だと間延びした感じですけど、if節の中に長々と書く人はこっちのほうがいいかも知れません。{の後ろにコメント書いたりとか。僕みたいなおじさんはこういうスタイルで書きがち。Pythonってこういう自分が思う「美しい」コーディングができないのでフラストレーションが貯まるというか「カッコ悪い」んじゃないかと思ってしまうんですよね。

    Pythonの場合はスタイルも何もインデントが構文なんだから誰が書いても同じになります。だから他の人が書いたプログラムも読みやすい、すっきりしているというコンセプトなんでしょう。

    ▲ページトップへ戻る

    3. Pythonのライブラリ

    Pythonをdisった感じになってしまいましたが、それではなぜPythonが最近注目を浴びているかというと豊富で強力なライブラリを簡単に使うことができるからだと思います。
    以下のようなライブラリがあります。

    NumPy 行列演算ライブラリ
    matplotlib グラフ描画ライブラリ
    pandas データ解析
    Scikit-learn 機械学習
    Pillow 画像処理
    pickle データシリアライズ
    scrapelib スクレイピング

    参照:ウィキペディア

    俄然コーディングスタイルなんてどうでもいいから使ってみたい!という気持ちになってきますね。Pythonという言語に魅力があってその言語で記述してみたいというよりも、まず使いたいライブラリがあるからPythonを使う、というシチュエーションが多いように思います。ビッグデータ解析とかディープ・ラーニングの解説本だとまずPythonのインスールから始まることが多いです。

    ▲ページトップへ戻る

    4. Pythonの開発環境

    人気のライブラリを挙げましたが、これを見ているとやはりデータ解析系が多いですよね。データ解析なんて僕とは関係ないやと思われるかも知れませんが、最近ではどんな分野でもログを多くとって、ユーザの行動解析とか販売データの傾向とか調べたり、機械学習に学習させて新しい機能を作るとかデータ解析のニーズはかなり多くなってきています。

    データ解析のワークフローだと、生データをゴニョゴニョ加工して解析して結果をグラフにしてみたり、学習させてみて結果を試したり、またパラメータを変えて解析するみたいなことを繰り返していくことになります。そうした場合に便利なのはREPL(Read-Eval-Print-Loop)ですよね。「対話的実行環境」とも呼ばれますけど、入力したものをすぐに実行して試せる環境です。JavaやC++みたいにIDEでガッツリ書いてビルドしてデプロイするのはすぐに試してまたちょっとだけ直すみたいな作業に向いてないですからね。

    PythonのREPLは標準でもついてきますけど、さらに高度に便利にしたのがJupyter Notebookです。

    出典:Jupyter

    Pythonの実行と結果をノートのようにまとめていけるので、すごく使いやすくなっています。一昔前なら数百万円する解析ツールでしかできなったようなことが、無料でできちゃうんですから便利な時代になったものです。

    ▲ページトップへ戻る

    5. Python案件の現状

    Pythonの案件についてはコロナの影響を特に受けていないと個人的に認識しています。自身のクライアントからはコロナ前と変わらず案件も出てきていますし、金額も落ちていないです。ただ、フリーランスで契約されたい方のうちスキルに自信がない方は、コロナで案件が減っているかもと想定されているようで、自身の受注金額を下げている方がいらっしゃいますね。フリーランスではない求人への応募も少なくなっています。いまは転職時期ではないと判断されている方が多いのかも知れません。Python案件に関しては特に市場が悪くなっていないので、積極的にフリーランスの案件にチャレンジしたり、転職活動をした方が良いと思います。逆に今がチャンスです。

    ▲ページトップへ戻る

    6. まとめ

    トヨタのプリウスという車がありますよね。この車はクルマ好きの方々からはあまり評判が良くないと思います。バッテリーを積む関係でちょっと腰高な印象ですし、ブレーキも回生ブレーキなのでちょっとだけ違和感があります。でもプリウスのパワートレーンは他の車とは別格の複雑な制御を行ってモーターとエンジンの出力を駆動力に効率良く変換していきます。複雑さだけではなくてプリウスのタクシーもあるくらい耐久性も優れています。

    唐突にプリウスの話をしましたが、Pythonってなんだかプリウスに似てるなーと思います。ゴリゴリの開発者みたいな人たちからはちょっとカッコ悪い感じで思われてますけど、コーディングスタイルとかそんな些末なことに拘らないデータアナリストとかのイケてる人たちは強力なライブラリを使いこなしてサクサク実績をあげてるみたいな。まさにこう実用的な道具として使われる感じですね。

    案件的にもPythonを道具として使うものがほとんだと思います。つまりPythonが使えるだけではダメで統計学の知識があったり、機械学習の経験を必要とするものが多いということですね。PythonにもWebサービスを構築するフレームワークがありますから、Pythonで構築されたサイトのメンテナンスみたいな案件もあることはありますが少ないです。もしあなたがプログラマを目指しているひとで、どのような言語を学ぶべきか決めようとしているならPythonではなくPHPやRubyにしましょう。最初に書いたようにPythonは言語仕様的にはあまり特徴がないので、後にPythonが必要になってからでもPHP、Rubyからは簡単に移行できます。

    ▲トップへ戻る

    Pythonの求人情報をチェック!

    月額単価70万円〜80万円
    勤務地 東京都 新宿区
    • このページをはてなブックマークに追加

    おすすめ記事

  • ピックアップ

    フリーランス

    【C#.net/PHP/Python】Webエンジニア★官公庁向けセキュリティパッケージ製品開発及び機能強化 NEW

    月額単価 :70万円〜80万円

    下記の業務をご担当いただきます。 ・Webクローリング及びWebスクレイピングに関する開発業務 ・上記...

    正社員

    【Python】バックエンドエンジニア|Webアプリケーションにおける新機能の設計・開発

    年収 :500万円〜800万円

    【ポジションの魅力】 ■自社サービス開発、新規サービス/プロダクト開発ができる ■レガシーな開発手...

    株式会社 KDDI ウェブコミュニケーションズ

    正社員

    【Java】システムエンジニア|新規サービスの開発

    年収 :300万円〜

    新規サービスの開発、及びメンテナンス自社での新規に検討している製品、サービスの開発 顧客サポート...

    株式会社デジタルトランスフォーメーション

    正社員

    【python】プログラマ|画像処理技術の開発

    年収 :400万円〜

    Liquid では、生体認証を用い、スマホでかんたんに本人確認できるサービスを展開しています。 ■ 業務...

    株式会社Liquid