選ばれたのはPythonでした。~機械学習でPythonが主流言語の理由~
どうも、totokoです。
昨今のITエンジニア界隈にてお仕事量がある言語として「Python」が台頭してきました。
実際にもビズリーチの調査 でも、言語別の収入ランキングでPythonは第二位となっていました。
実際にW.I.の勉強会でもPythonの勉強会を行っており、機械学習においても、Pythonがメイン言語となっています。
書店に行っても以前よりもPython関連の書籍が多く並んでおり、また機械学習やAIに関する参考書籍でも扱われている言語は、その多くがPythonでした。
すべてがすべてというわけではありませんが、書店に並んでいる=世の中的に非常にニーズがあると考えても言い過ぎではないです。
さて、今回はどうしてPythonがよく使われるのかを簡単にお話しましょう。 あ、いつもどおり僕はエンジニアではないのであしからず。
そもそも必ずPythonでやれというわけではない
まず忘れないでほしいことがありまして、「機械学習はPythonでやれ」というわけじゃないということです。
C言語でもいいですし、Javaでもいいんです。というか、やろうと思えばPHPなどでもできるはずです。
開発における言語選択のキモは「何を開発するのか、その場合最も適している言語はなにか」ということです。
この世界にたくさんのプログラミング言語があるのは、様々な開発シチュエーションがあり、それが時代と共に多様化してきたので、それに適した言語がどんどん生まれてきているということなのです。
例えば最近のWEBブラウザ上で遊べるゲームは前まではFlashゲームとしてFlashが中心でしたが、今はJavaScriptがメインの言語となっています。
これはWEBの世界で「もうFlashは使わないようにしようぜ」というお達しがあり、またそれに合わせて、今までFlashでやってきた表現をFlash以外でやるにはどうしたらいいだろうか? という課題に対してJavaScriptが適していると考えられたのです。
それに合わせるようにHTML5やCSSの機能が増え、また多くのフレームワーク等も作られてきました。
このように、開発するものや場所、環境等によって都度都度言語を変えていく必要ができているわけです。
なので、今回の話はそういう良し悪しがあるなかで、Pythonが「機械学習を行う上」で選ばれた言語である。ということをまずは認識しておきましょう。
要するにPython=ウルトラ万能言語ではないよということです。
Pythonが使われる理由1「信頼性」
さて、実際にプロダクト(商品)を開発しようとなったときにエンジニアチームは様々なことを考えます。
データベースはどこのを使うのかとか、ソース等の成果物はどこで管理するのかとかとか、その考えるものの一つに言語があります。
「今回開発するものは、〇〇という言語の方がモデルケースが沢山あるし、WEB上に情報があるからこっちを使おう」的な感じです。
実際には現場にいるエンジニアのスキル等やお上の意向とかも考慮する必要があるので、単純ではないですが……。
その言語選択を決める要素として「言語信頼性」というものがあります。
要するに過去にこの言語を用いてどんなプロダクトが作られたのか、とかその言語を主な開発言語として採用している会社はあるのかとかそういうものです。
それが多ければ「信頼」はできるはずです。信頼あるところに人が集まりますからね。これは以前にも書いた分散システムの話にも繋がります。
盤石なシステムでサービスを安定稼働していれば、「このサービスは不安定だから使うのやめておこう」となる人が減るという話のやつですね。
実際、PythonはYouTubeやInstagramなどのサービスで使われています。これだけで十分信頼に値しますよね。
会社のお偉いさんが「Python? なぜ蛇をつかうのだ?」と言われた時に、このような使用例をお話するとミーハーなお偉いさんは「YouTube? そうかー俺の孫がYouTuber好きなんだよなあ。よし、Pythonの使用を許可する!」となるはずです。
圧倒的に初心者向き
前回記事でIT技術の向上により、僕らは以前よりも簡単に技術にふれる機会が増え、より手軽に勉強することができるようになったと言いました。
つまり、今までは学校だったり、雑誌だったりで少し手間のかかっていたことが、WEB検索で簡単に入門サイトへたどり着くことができるようになったわけです。
ではPythonはどうかというと、初心者向きの言語に分類されるでしょう。
もっとわかりやすく言うと、「取っ掛かりは簡単で奥が深い」という最近のバトロワ系ゲームが流行っている理由と同じような感じです。
といいますのも、Pythonって言語、結構きれいに書かれているんですよね。
シンプルな記載により、多くの人が読みやすいコードをさほど意識せずともコーディング(プログラムを書くこと)できるのです。
プログラミング言語って「言語」と名のつくように、別の見方をすれば言葉なんですね。
つまり、エンジニアはプログラミング言語で会話をしているのです。それはコンピュータだったり、他のエンジニア仲間だったり……。
その時にシンプルで分かりやすい言葉だと、誰でも読めちゃいますよね?
そして、分かりやすいということはその分初心者向きでもあると考えられるのです。
初心者向きであると何がよいのかというと、その言語を扱える人が単純に増えます。
この扱える人の中に、今まで統計学だったり物理学だったり数学だったりとプログラミングを直接触ってきていない人が含まれます。
そして機械学習、ビッグデータ分析においては彼らのような「異業種の人」の力が必要不可欠となります。
そんな彼らがPythonで書かれたコードを理解したり、また自分たちで記述できるようになれば、効率がいいですよね?
情報が探しやすい
さきほどの入門サイトのお話にも通じるところがあるのですが、このように使用例が多く、初心者向きの言語であると、その言語に関する情報がすぐに見つけることができるのです。
現代のプログラミングに置いて、大事なのは「調べる力」とまで言われています。
ちょっとわからないことがあったり、どうするんだ? となった時にすぐに調べられ、かつ、すぐに解答が見つかれば便利ですよね。
そうすれば今度は調べ、解決した人たちがその情報を共有し、またそれを見つけた別の人が……。
と、「技術情報共有のサイクル」が回っていきます。
当然、そうなると海外の事例などのニュースを日本語に訳して解説してくれる人も現れて、総合的にレベルが上がりできることが増えていきます。
昔から、技術の発展というのは、共有から始まったのだと思います。海外の技術を持ち込んでそれをアレンジし、さらに良くする……。
完全に言語をマスターする必要はないと思う
他にも、エコシステムができているとかシンタックスがシンプルだとか様々な理由がありますし、Python以外にも機械学習に適した言語はあります。
ですが、それらを全てマスターする必要はないかな? と思います。
正直そこまで覚えることはできませんし……。
大切なのはそういう技術があることを知っていることが大事だと思います。
知らなかったらいつまでも知らないままですが、少しでも名前や存在に感心があれば、ちょっとしたニュースを見た時にとりあえず、見てみるかと行動に移せます。
それはプログラミング言語に限らず、技術的な分野の話ではなんでも言えると思います。
AIを勉強したい、AIエンジニアになりたいのならば、単純なプログラミング能力だけではなく、現在使われている事例や、その周りのこと。
例えばAIによる自動運転ならば、現在のクルマ社会の事情、メジャーな車の駆動方式、道路事情などなど……。
ぱっと思いついただけでも色々と出てきます。
「俺はコードさえかければいいやー」で済んでいた時代は多分終わりを迎えるのだと思います。
これからは、自分の強みとなる能力にプラスして、他に何を知っているのかということが価値を上げるのだと思います。