Pythonを極める!エンジニアに聞く勉強方法や習得のコツ

この記事では、Pythonを使いこなしているエンジニアに活用方法や学びかたのコツについて話を聞いていきます。

新社会人でありながら外部のプロジェクトにも参加

――今回のパイセンは、河原圭佑さんです。よろしくお願いします。

はい、よろしくお願いします。


――現在どういったお仕事をされているのか教えてください。

今年の4月から大手電機メーカーに新卒入社しまして、次世代商品の研究開発に携わることになりました。次世代商品なので「そのうち出てくるかも知れない新商品」の研究開発ですね。とは言ってもまだ研修中で、自社の商品について学んでいる段階です。それから、「PLAYERS」という組織にも学生時代から参画していて、現在もその延長で協力させていただいています。

――「PLAYERS」とはどういった組織ですか?

以前にこちらの媒体でもご紹介いただいた『「アンドハンド」プロジェクト』などを推進している一般社団法人です。PLAYERSは「一緒になってワクワクし世の中の問題に立ち向かう」をスローガンとしていて、体に障害を抱えている方や高齢者の方々などにまつわる社会的な課題をテクノロジーや面白いアイデアによって解決できないかという活動を現在はしています。ほぼ全員がそれぞれ企業に勤めている有志メンバーのチームですけども。

――まだ大学生だったのに、何故ここに参加するようになったのでしょうか?

もともと大学の時にやっていた研究が聴覚障害者のコミュニケーション支援だったというのもあって、元々社会や困っている人の助けになりたいという気持ちが強くありました。ある日、ネットでこのチームの活動を知って「自分も協力したいです」とメールを送ってメンバーに入れてもらいました。

――新入社員でありながら外部のプロジェクトにも積極的に参加しているなんて、とても現代的ですよね。大学の時にやっていた研究についてもう少し詳しく教えてください。

はい。例えば周囲の障害物を検出して安全な方向へ力でアシストしてくれる視覚障害者用の「ロボット白杖」や、手話の指文字をカメラで認識して音声翻訳してくれる機器などを開発していました。


Pythonでハムスターのトラッキング?

――そういった開発でPythonを使っていたというわけですね。

すべてではありませんが、Pythonは画像処理系やデータ解析、機械学習の部分などで使っていました。

――他にもPythonを使用して開発したものがあれば教えてください。

大学では研究室での予算とは別に自分で予算も取ってプロジェクトをいくつも回していましたが、Pythonを使ったものでいうと、例えば趣味で作っていたハムスターのトラッキングとか。

――ハムスターのトラッキング?

ええ。飼っていたハムスターの自宅での様子を観察したくて、ハムスターが動いたら自動的に動画を撮影してデータをDropboxに入れ、通知を飛ばすというものをPythonで書いていました。ハムスターが動き過ぎてスマホが通知だらけになりましたけども(笑)



――ものすごくプライベートですね(笑)

他にも、ノイズキャンセリングヘッドフォンを使ってデスク仕事をしていると後ろから人が近づいていることに気付かなくてビックリしてしまうので、席の後ろに人感センサーを付けて「後ろに人がいます」という通知をPC画面に出す機能とか。


これはセンサーの認識の部分はC++で書いていましたが、最終的なPC側の表示とかはPythonで書いていますね。


あとは、これは作品っぽいのですが、キーボードの叩く強さに応じて文字の大きさを変えるシステムとか。



――色々と作っていたんですね。

はい、在学中は2~3ケ月に1つのペースで何かしら作って発表していたりしました。


落合陽一さんの研究室にも足を運んでいた

――何かを作る際のコンセプトはあるんでしょうか。

私のモットーとして、『テクノロジーでもっと優しくて、もっと面白い世界へ』というのを掲げています。大学では人工知能研究室というところにいて「もっと優しく」の部分として聴覚障害者のコミュニケーション支援などに取り組んでいましたが、もう1つ「もっと面白い世界」という方向で落合陽一先生のデジタルネイチャー研究室にも足を運んでいました。

――2つの研究室に所属していたということですか?

ええ、正式に所属していたのは人工知能研究室で落合さんの研究室のほうは共同研究生という形です。忙しいときは日が上がっているうちは自分の研究室にいて、日が落ちたら落合先生の研究室に行くという感じでした。どうしても行きたかったんです(笑) 私のモットーの話に戻しますが、大学を卒業した今は「もっと優しい世界」に関してはPLAYERSに参画していて、「もっと面白い世界」の方は就職したメーカーで面白い研究開発ができればと思っています。


卒業式に落合陽一さんと


――大学でもいろんなことをやり、新社会人としてもすでに社外での活動をしている、と。

ええ、だから「何をしている人なのか」と聞かれても一言では表せないんですよね。でも、時代的にそういう人ってこれから多くなっていくと思います。 外部の活動で得られた知識や経験を本業で活かすこともできると思います。


プログラミング言語は刃物に似ている

――プログラミング言語はどういったものを使っていますか?

そうですね、Pythonだけでなく、JavaやUnity、C++など色々使っています。そもそもプログラミング言語自身に得意不得意があって、刃物によく似ていると思っています。

――プログラミング言語が刃物に似ている?

ええ、刃物って色々種類がありますよね。ハサミとかカッターとか、大きいものだと斧とかチェーンソーとか。でも、ケーキを切り分けようとするときにチェーンソーで切る人はいないですよね。逆に木を切る時にケーキナイフを使う人もいない。それと同じで、RubyはWEBに強いけどVRには弱い、とか得意不得意があるわけです。

――なるほど、状況に応じて使い分けをしているということですね。

はい。Pythonであれば先ほど言ったように画像処理系やデータ解析、機械学習の部分が得意だったりします。

――そもそもプログラミングはいつから学び始めたんですか?

大学に入ってからC言語を自分で勉強し始めて、ロボットを作っていた時があったんです。ロボットのような小さいコンピュータの中はC言語しか使えないんですよね。その後、WEBとかデータ解析をしたいと思ってRubyやPythonを学んでいきました。

――それぞれのプログラミング言語の違いをどう捉えていますか?

プログラミングで書いたソースコードを事前に機械語に翻訳して実行ファイルを作る。これをコンパイルと言いますが、Pythonは事前に機械語に変換(コンパイル)しないで、処理毎にソースコードを解釈するというスタイルを取っています。その結果、コンパイルを必要とする言語は事前に設計するのが大変だったりします。一方でPythonのようなその都度ソースコードを解釈するスクリプト言語はコンピュータが柔軟に解釈してくれるので楽に書けるんですよね。

――まずしっかりしたものを身に付けてそれから手軽なものを身に付けた、ということですね。

そうですね。チェーンソー(C/C++)は持っているので、今度はバタフライナイフ(RubyやPython)を持ちたいな、という感じで身に付けていったわけです。


――Pythonについてはどのような特性を感じていますでしょうか?

たとえばRubyは日本人が開発したというのもあって、表現方法が多くプログラマーによって「十人十色」のコードになります。一方Pythonは表現方法が少ないので「同じコードを書ける」という特徴がありますね。日本語だと自分のことを「私は」「俺は」「ぼくは」などいろんな表現をしますよね。これがRubyのイメージです。ただ英語だと、自分のことを「I」と表現するのみですよね。これがPythonのイメージです。

――なるほど、分かりやすい喩えですね。Pythonは非常に軽くてシンプルなナイフなんですね。

ええ、ただ最近は機能も拡充してきていて、「サバイバルナイフ」状態になってきているように思います。逆にPythonの弱点としてはスピードですかね。これはスクリプト言語全体の弱点でもあるのですが、ディープラーニングや画像処理などの速度が求められたり計算量が多い問題だと場合によっては不向きな場合があります。

――そうすると実装する際にデメリットになってしまいそうですね。

ですので、開発する際にはPythonでまず書いてみて、動くのを確認してからC++で書き直す、ということをよくやっています。

――なるほど、まずプロトタイプを作るのに向いているって感じですか。

そうですね。大学で作った先ほどの「ロボット白杖」の動作アルゴリズムもPythonでシミュレーションして確認してからC++で実機用に書き直して完成させました。


プログラミングはどう勉強すべきか?

――これからプログラミングを勉強する人にアドバイスはありますか?

そうですね、C言語やC++にいきなり入ると挫折しやすいので、RubyとかPythonから入った方が分かりやすいと思います。

――やはりこれからはPythonを覚えておくべきでしょうか。

Pythonは1997年からありましたが、プログラミング言語の人気ランキングではここ数年ずっとPythonが上位にあります。JavaScriptも人気はありますが、他の言語にはない仕様があったりクセがあったりするので入門者にはPythonが一番オススメですね。


――実際に勉強しようとしたら、具体的にどうしたら良いでしょう?

本当にプログラミングを初めてやるという人は本を買ってその通りにやってみるといいでしょうね。ただ、1回読むだけではダメで、その言語で何かを作ってみることが大事です。僕もはじめは「数独」の問題を入れると勝手に答えを計算してくれるプログラムを書いたんですが、試行錯誤しながら「あーでもない。こーでもない」とやっていて、遂に完成すると「できた!」という達成感があり、脳内にアドレナリンが出て「もっと勉強しよう」という学習欲に繋がっていきます。

――先ほどの刃物の例でいえば、刃物を持つだけでなく何かを切ってみろということですね。

そうですね。実際に作るものは「好きなもの」でいいと思います。アニメ好きの後輩にPythonを教えたら、1年後にはアニメのキャラクターの顔の特徴を解析していました。そんな感じでいいと思います。

――そうか。さっきの河原さんの「ハムスターの動きを調べるプログラム」っていうのもそうですよね。

まさに。自分が飼っている好きなハムスターだからこそモチベーションに繋がっていたわけです。


これからのプログラマーに求められることとは?

――では、これからのプログラマーに求められることは何だとお考えですか?

現代は世界のAPI化が進んできています。APIというのはApplication Programing Interface の略で、プログラムでプログラムを呼び出す時の仕組みの話です。簡単に言うとブラックボックス化ということですね。スマホでメッセージを送る時も仕組みなど分からずに送れます。クレジットカードを使う時も、仕組みなど分からずに使えます。これってAPIとAPIをくっつけてモノが作れているわけですから、まるで画家が絵を描くようにプログラマーがモノを作れる時代になってきたと言えます。

――画家が絵を描くようにモノを作れる時代、ですか。

はい。ですからこれからのプログラマーは、いくつかの筆(言語)を持っていて、それを組み合わせて絵を描くことができるというのが大切です。油絵だとこういう絵が描けて、水彩画だとこういう絵が描けると知っているわけです。一方で、ファームウェアや低レイヤーの言語処理など、新しい絵の具をつくっていくことも大切になります。

――絵を描く側と画材をつくる側の2つが大切、ということですか。

ええ、その両方が必要だと思います。まあ、同じ絵を描くにしてもPythonはデッサン用で、清書としてしっかり描こうとするとC++が適していますけど。いずれにしても、絵を描く側と画材をつくる側の2極化が起きていくと思っています。だから、自分がどっちをやりたいのか、どっちが向いているのかを理解することが重要ではないでしょうか。

――昔は一つの言語を極めるような流れだったと思いますが、それが変わってきたわけですね。

はい。ちょっと図を書きながら説明しますね。


人は言語を話します。機械は人の言葉が分からないので、人がやりたいことをプログラミング言語に変換してやるわけです。


※河原さんがその場で作った図


2極化というのは、これが真ん中で左右に分かれるイメージですね。アイデアを考えて絵を描く側と、フレームワークやAPIを作る画材を作る側の二極化です。

――なるほど。そうやって図をすぐ作れるのもPythonを使いこなしている人っぽいですね。

いえいえ。

――ではこれからプログラムを勉強したい人に向けて最後に一言お願いします。

今は様々なことがAPI化されていて、とりあえずPythonだけできてしまえばいろんなことできてしまいます。ぜひPythonを覚えていきましょう。


Pythonのパイセンである河原さん。ありがとうございました!




≪ 河原さんの恩師であり人生のパイセンでもある落合陽一さんからコメントをいただきました!≫



河原さんの写真を指しながらコメントしてくれた落合陽一さん


河原くんは僕が研究室を立ち上げたばかりの時に来てくれて、もともと別の研究室の子だったのに、シンパシーを持ってわざわざ掛け持ちで入ってきて3年くらい一緒に研究をしてくれたので、個人的にもとても思い入れがある学生です。

校内で表彰されたほど優秀な彼ですが、具体的に何が優秀かといえば「自分で自分のことが不完全であることを知っている」ということでしょうか。研究をしながら上手くいかないことがあっても「上手くいかないなあ」とちゃんと受け止めて、それでも頑張れる。

世の中には「ツラくてもう動けない」と弱音を吐く人が多いですが、「ツラい」だとか「こんなのブラックだ」とか言い出したら何も上手くいかないんです。本当にツライのならやめればいいわけですし。

世の中に“ただ楽しいだけ”のことなんて滅多になくて、価値があるのは「ハードファン」、つまり楽しくてツライことなんです。そんなハードファンにしっかり向き合って楽しむのが得意な学生でしたね。

ぜひこれからも、楽しみながら頑張っていってもらいたいですね。



落合陽一さん、「Pythonのパイセン」への激励コメントありがとうございます!


取材協力:河原圭佑
取材+文:プラスドライブ/原 正彦

この記事が気に入ったらいいね!しよう

いいね!するとi:Engineerの最新情報をお届けします

プライバシーマーク