こんにちは!レバテック営業の高橋です。
エアコンやテレビ、レコーダー、照明など複数の家電のリモコンをスマホにまとめられる話題のツール「Pluto」。
実はこのサービス、ほぼ2人のエンジニアがハード、インフラ、フロント構築。ハードとWebを組み合わせたサービスを展開しています。
今回はそんな株式会社Plutoの代表取締役 金田氏とCTOの市東氏に、なぜそれほど多くの言語を扱うことができるのかの手法を伺ってきました。
株式会社Pluto
スマートフォンから、場所を問わずにエアコンやテレビ等の家電を操作できるサービス「Pluto」。 サービスとハードウェアを組み合わせることで、Webサービスだけではできないことを可能にする。 MAUは非常に高い数値を出しており、非常に顧客満足度の高いサービスを提供している。
株式会社Pluto 代表取締役
金田賢哉氏
東京大学在学。1人暮らしをはじめ、手持ち無沙汰になったことをきっかけに家電の改造を始める。「家に帰るなら、電気がついた明るい部屋に帰りたいな」と考え、Plutoの元になる製品を開発。
自身もサーバーサイドの開発を務める。
株式会社Pluto CTO
市東 拓郎氏
現在は電気通信大学、博士課程にて量子力学の研究中。
独学で小学校より電子工作・プログラミングを始める。
扱える言語は、JavaScript、HTML、Perl、Ruby、Java、C、BASIC、アセンブラ、マシン語など
1. Plutoの開発環境は、ハードからフロントまで
高橋:では早速ですが、「Pluto」では、ほぼお二人でハードからフロントまで開発されているとのことなのですが、実際にはどのような言語で開発をしているのでしょうか
市東氏:私達はハードを作ることもプログラミングの一部だと考えてやってます。
ハードでは、回路設計、アセンブラ、C言語の3つの言語を使っています。
インフラは、Linux、Apache、Perl、MySQL。
サーバー自体は今後の移植性を考慮して一般的な言語を使い、普通の構成を心がけています。
フロントはHTML、CSS、JavaScriptで作っています。
こちらもサーバーと同じように拡大するタイミングで、人が増えることも想定しています。
ニッチな言語で開発してしまうと採用も苦労しますし、アサインされた方も苦労してしまうのでメジャーな言語での開発を心がけています。
2. 遊びながらアセンブラを習得!
高橋:今は幅広い言語を使われているお二方ですが、そもそもプログラミングとの出会いはいつ頃なんですか?
市東氏:プログラミングに初めて触れたのは小学校のときでしたね。
はじめは電子工作で遊んでいたのですが、気づいたらアセンブラを使えるようになってました。
高橋:えっ、気づいたらアセンブラをマスターされてたんですか!?
市東:そうなんですよ。
それから中学校の時にCとベーシックをはじめました。
当時はそれほど選択肢がなかったです。
高校生のころにi-modeが出始めたので、Javaを使い、大学でLinuxで、PerlやRubyに触れていました。
Plutoを立ち上げる際には、JavaScriptを勉強してフロントもできるようになりました。
金田:僕も、初めてプログラミングに触れたのは小学校の時ですね。
当時「マイルストーン」というレゴをマウスでプログラミングするもので遊びながらプログラミングを学んだんですよ。
その影響で、いまでもコードを書くときは、頭のなかでレゴを組み立てるようなイメージでやっています。
高橋:金田さんも初めは遊ぶようにプログラミングに触れてたんですね。本格的なプログラミングに触れたのはいつ頃からですか?
金田:ちゃんとしたプログラミングは、中学校の頃にC言語を触れたのが始まりです。C言語からアセンブラをいじるようになりました。それからしばらくして、これからはWebの時代が来るような気がして、Shellの代わりにPerlをいじるようにもなりました。
3. 頭のなかをコンピューターにする
高橋:恐ろしい中学生ですね(笑)。お2人は苦手な言語はないんですか?
市東氏:僕らは2人共ハードから入ったので、実はJavaScriptが苦手なんですよ。
マシン語を使う時は、頭の中をコンピューターの気持ちにしているんですが、JavaScriptだとそれが通用しなくて・・・。
高橋:頭のなかをコンピューターの気持ちに、ですか?
市東:そうです。例えるのであれば、行列計算のようなイメージですね。
JavaScriptは、その方法ではCPUの中のイメージができないので苦手なんですよ。
高橋:なかなかコアな話ですね。ちなみに、どうやってその苦手なJavaScriptを克服されたのですか?
市東:JavaScriptを扱うときはコンピューターの気持ちになるのではなく、集合論として捉えるように切り替えようにしました。すると上手くいくようになりました。
マシン語のときは、行列のイメージ。JavaScriptの時は集合論です。
頭の中のイメ-ジが混ざってしまうので、同じ日にマシン語とJavascriptを作業すると混乱してしまいますね(笑)。
金田:あとかっこの付け方で、頭を切り替えたりしますよ。
4. 複数の言語を学ぶことで、プログラミングの原理がわかる
高橋:うーん、僕にはあまりない感覚ですね。エンジニアの方はみなさんそのような感覚をお持ちなのかが気になります。ちなみに、お2人が考える、複数の言語を学ぶメリットって何ですか?
金田:ハード、サーバー、フロント、カテゴリの異なる言語を学ぶことのメリットですと、まずプログラミングの原理が学べるようになることですね。
プログラミングの原理やシステムの原理が分かっていることで、どのような問題にも対応できるようになっていきます。
よくエンジニアの方から謎のバグに悩まされる話を聞くのですが、大抵はOSやハードの内部処理を考えれば理由が分かったりします。
中の仕組みがおおざっぱにも分かれば、謎のバグに悩むことはほとんどないですよ。
高橋:プログラミングの原理ですか。お2人がおすすめする言語の効率的な勉強法はありますか?
市東:僕は、昔から新しい言語を学ぶときはあんまり勉強しないです。
とりあえず、サンプルコードを打ち込んで、ある程度は自分でどのように動くのかを予想する所から始めます。動きがわかってきてから、仕様書を読み始めます。
これは中学の頃から変わらないですね。
いきなり勉強するとよく分からないまま勉強することになってしまい、逆に非効率なんですよ。
だから、今でも「まず書いてみる」勉強法で言語を学んでいます。
高橋:まずは自分で触ることが近道なんですね。複数ある言語を使い分けるポイントはどういう所にあるのでしょうか?
金田:まずは、言語の目的を抑えることが重要だと思います。
やむなく使うことはありますが、基本的には目的に沿った言語を使います。
学ぶ上で重要なポイントは興味のある言語ではなく、一番目的にあう言語を選び抜くことですね。
最近の流行はRailsですが、開発のスピードが早いので、スタートアップフェーズでは良いです。ただ、将来的にサービスを大きくする際にはRailsは重いので、その時点で最適な言語ではなくなるんですよ。
言語がどのような目的で使われ、どれほどのパフォーマンスを出すのかを把握しておくことが、複数の言語を学び使い分けることの重要なポイントです。