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

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

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

    楽天「ぴたっとアド」「ぐるなび」「びあ」などの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の求人情報をチェック!

    月額単価60万円〜90万円
    勤務地 東京都 千代田区
    月額単価70万円〜80万円
    勤務地 フルリモート
    月額単価70万円〜
    勤務地 東京都 渋谷区

    フリーランスの方でこのようなお悩みありませんか?

    • 定期的に案件を紹介してほしい
    • 完全フルリモートワークや、週1出勤など、働き方を選びたい
    • 単価交渉など営業周りが苦手なので、誰かに任せたい

    プロエンジニアにお任せください!

    プロエンジニアはほとんどEND直案件!高額単価案件ならお任せください。
    完全フルリモートや、週1出勤など、希望に合わせた働き方ができる案件を多数ご用意しています。
    単価や契約交渉などは弊社キャリアコンサルタントに全てお任せください。

    無料登録して、あなたの希望に合った案件をチェック!

    簡単60秒!無料登録はこちらから

    おすすめ記事

  • ピックアップ

    フリーランス

    NEW 【言語複数】フルスタックエンジニア★某有名経済情報サービスを展開している企業での開発

    今回は、BtobB向け経済情報プラットフォームの開発に関わっていただきます。 新しいチームが組成される...

    月額単価:60万円〜90万円

    フリーランス

    NEW 【Python】機械学習エンジニア★転職・採用支援サービスの開発

    自社サービスとして転職・採用支援サービスを展開している企業にて、機械学習エンジニアとしてご参画い...

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

    フリーランス

    NEW 【Ruby/React/Node.js】フルスタックエンジニア★動画配信プラットフォームの開発

    動画配信プラットフォームを提供する企業にて、Ruby / React、Node.js のフルスタックエンジニアとして...

    月額単価:70万円〜

    フリーランス

    【Java/JavaScript】サーバーサイドエンジニア★ソフトウェア・WEBアプリケーションの開発

    システム開発やDXのプロダクトを展開している企業にて、同社で請け負っている受託開発案件に携わって頂...

    月額単価:50万円〜60万円

SCROLL TOP