競技プログラミングの経験が、いつのまにかくらしをより良くする家電IoT開発に役立っていた!?
創業以来、変わることのない使命である「物と心が共に豊かな理想の社会の実現」を目指すために、変化する世界の中でお客さま一人ひとりの幸せを生みだす「チカラ」であり続けたい。そのため、2022年4月に事業会社制へと移行したパナソニックグループ。
事業会社制に関する詳細はこちら
同社は近年、AI領域に注力し研究開発を行っており、その高い技術力に注目しているITエンジニアの方は多いでしょう。
また、技術への投資は社内だけに止まらず、競技プログラミングコンテストへの積極的な協賛を続けています。
「競技プログラミングを『単なる競技』とは考えていません。データがあふれる時代では競技プログラミングで培った力はモノづくりの現場で必ず求められます。」と話すのは、パナソニックグループでIoT家電プラットフォームの開発に携わっている山口拓也氏です。
競技プログラミングの経験が開発業務にどう役立っているのか。同じく競技プログラミング経験者のQiitaプロダクトマネージャー清野がインタビューしました。
プロフィール
IoT家電プラットフォーム事業にてソフトウェア開発・研究を担当。
IoT家電の開発は「ソフトとハードのせめぎ合い」
機械系出身で、いまはソフトウェアエンジニア
清野 : Qiitaが運営している3つのプロダクトのプロダクトマネジメントと開発統括を行っている清野です。学生時代からずっとAtCoderで競技プログラミングに参加してきたので、今日はいろいろお話を聞けるのが楽しみです。
山口 : AtCoderは前から気になってはいたものの、数年前にようやく始めたばかりなので、レートもそんなに高くありません。なので、競技プログラミングをバリバリやっているパナソニックグループ代表だとは思わないでくださいね(笑)
社内でも、AtCoderが盛り上がってきてはいますが、レートがすごい人ばかりというわけではありません。それでも、私のように競技プログラミングが仕事に役立っているという方も多くいます。本日はそんなエピソードをぜひお伝えしたいと思っています。
清野 : 山口さんは現在、どのような仕事に携わっているのですか?
山口 : 大学院から新卒で入社して、約8年になります。現在は家電のIoTソフトウェアプラットフォームで、家電をIoT化するために必要なモジュールの企画開発を行っています。電子レンジや炊飯器といった白物家電製品は、メカ、電気回路、制御ソフトで成り立っていますが、最近の家電はインターネットへ接続するいわゆるIoT化が進んでいます。
清野 : 業務で実際に開発・プログラミングをしていらっしゃるわけですね。ということは、大学でも情報系だったのですか?
山口 : 大学院は機械理工学専攻なので、いわゆる機械系ですが、ハードとソフトを横断的に学びました。入社してからは、基本的にはソフトの人材としてスキルを伸ばしてきました。学生の頃からプログラミングは好きでしたけど、ここまで完全にソフトウェア開発者になるとは思っていませんでしたね。
清野 : 多くの会社がある中で、なぜパナソニックグループを選んだのですか?
山口 : パナソニックグループは社員数に対する製品数がすごく多いんですよ。それに、新製品が出るスパンも短いです。つまり、少人数で1つの製品を作っていることになります。
そうなると「これは自分が作った」と言えるようなレベルで製品開発に携われるということなので、そこが直感的にいいなと感じたのが入社のきっかけです。
現在の仕事の内容とやりがい
清野 : 実際に働いてみて、特によかったと思うことはありますか。
山口 : 特に感じるのは様々な経験をしてきた歴戦の強者とも言えるエンジニアから学べることですね。
電子回路が組み込まれた家電製品は、ハードウェアとソフトウェアがほぼ同時進行で作られていくため、バグを発見しても原因がハード側にあるのかソフト側にあるのかわかりません。お互いにギリギリのところでせめぎ合っているわけです。
それが一番激しいのが、かつてデジタル化に力を注いできたテレビなどの黒物家電です。
そのため社内には歴戦の強者が先輩にいて、その人たちから学べることが多くあります。私の手に負えない問題があっても粘り強く対応して、どこをどう見ていけば解決できるかをソフトウェアだけでなく、ハードウェアも含めて見つける方法を目の前で示してくれます。その技術やノウハウは市販の専門書や技術書には書いていません。
例えば、ハードウェアのチップには仕様のクセがあって、それが原因でソフトウェアだけを見てもわからないような、意図しない動作が発生してしまうことがあります。ハードウェアとソフトウェアの境界面で起きているような不具合やバグを見つけて対処しなければならないのです。大変ですが、それが面白さでもありますね。
清野 : いまはソフトウェアに集中しているものの、マシン(ハード)系の経験や知識が活きているわけですね。
山口 : そうですね。例えば、コンパイラ*¹が壊れていることって、ほぼありませんよね。でも、組み込み向けのコンパイラはたまに壊れているんですよ。だからコンパイラのバグの可能性も視野にいれないといけません。
あとは、回路が壊れていたり、もしかしたらノイズが乗っているかもしれない……など、様々な問題に目を向ける必要があります。こうしたハードとソフトのグラデーションの部分をお互いに掘り進まないと解決できない問題を診ていくときに、ハード側を学んでいた経験がすごく活きています。ソフトウェアエンジニアだけどオシロスコープも使わないといけないし、はんだ付けもします。
清野 : ハードウェアに触れるからこその難しさであり、面白さですね。
*¹ プログラミング言語で書かれたソースコードをコンピュータで実行可能な形式に変換するソフトウェア
競技プログラミングとの出会い
「もっと早く始めればよかった」
清野 : さて、ここから競技プログラミングのお話をしていきましょう。改めて、いつから競技プログラミングを始めたのでしょうか?
山口 : 競技プログラミングの存在自体は大学生の頃から知っていたのですが、実際にコンテストに出てはいませんでした。当時はまだTopCoderなど英語のサイトしか存在しない状況で、手を出しづらかったからです。
その後、日本語で競技プログラミングができる大規模なサイト「AtCoder」が登場。さらにパナソニックグループがスポンサードするコンテストが開催されると聞いて、さすがに参加しないわけにはいかないかなと思いました。そのコンテストに参加したときに3問ぐらい解けて、すごく楽しいというか、回答を提出したらAC*²が返ってくるのが快感でした。こんなに楽しいのなら、もっと早く始めればよかったなって思いました。
清野 : 同感ですね。私は学生時代にAtCoderを始めたのですが、好きだった理由は同じようにACが出るときでした。
山口 : ドキドキしますよね。例えばWJ*³からWA*⁴出て、ダメだったみたいなときに。
そんな経緯なので、業務に生かすことを考えているのではなく、競技プログラミングは趣味です。楽しいからやっています。それがたまたま仕事にも活きているという感覚ですね。
清野 : そうですよね。楽しんでやれるからこそ、結果として力がついていきますよね。
*² Accepted. AtCoder上で提出したプログラムが正しいプログラムだと判定された状態
*³ Waiting for Judging. AtCoder上で提出したプログラムが判定されている状態
*⁴ Wrong Answer. AtCoder上で提出したプログラムが謝っていると判定された状態
競技プログラミングだから得られる快感
清野 : 競技プログラミングで印象的な思い出はありますか?
山口 : AtCoderのコンテストは問題がAからFまで(いまはGまで)難易度があるなかで、すぐにDぐらいまで解けるようになったんですけど、5問目のEを解くのに壁があって、そこを超えられなくて、実力がついてきている感じがするのに、結果が出ないという状態が続きました。ところが2カ月ぐらい経ったある日、ポンと解けて、しかも結構難しかったときのE問題だったので、高いパフォーマンスが出て、めちゃくちゃ嬉しかったですね。
清野 : ものすごくわかります。競技プログラミングで面白いなって思うのは、実力によって解ける問題と解けない問題の境界がはっきりしていることですね。次の問題が解けるようになる瞬間のところが、競技プログラミングをやっている時で一番のアハ体験があるというか。
プログラミングでそういう感情を得られる機会ってあまりないと思います。「やってやったぞ」感というか。プログラミングは正解があってないような仕事なので、競技プログラミングならではなのかなと思います。
競技プログラミングは家電開発にどう役立つ?
アルゴリズムを実装する瞬発力が身につく
清野 : 競技プログラミングが、業務で活かされた経験があれば教えてください。
山口 : 「AtCoderって、ソフトウェア開発現場とあまりマッチしないよね」って言う人もいるようですけど、個人的にはそうではないと思っています。実装できる人が作った仕様ってやっぱりよくできていると思います。それに、実装できるところは自分で実装してしまうこともできるので、少人数体制の家電開発においては特に役立っているといえます。
それから、AtCoderはすごいスピードで問題を見て、それを動くコードにしなければいけないので、アルゴリズムを実装する瞬発力が鍛えられました。それが仕様を作る上でも役に立っているし、自分でコードを書く余裕にもなっていると感じます。ソフトウェアの仕様を作る段階から、ある程度具体的な実装がイメージできるようになりましたし、こうすればもっと効率的になるなとか、最終的なコードをイメージできるようになりました。
清野 : その力はAtCoderならではだと思いますね。レベルが上がれば上がるほど、同じ問題に対してできあがるコードは、誰が書いてもほぼ一緒になっていきますよね。それは、ベストプラクティスみたいなのがあるからだと思います。問題からコードへのマッピング力を培えるのが、競技プログラミングなのかなと。
山口 : それはありますね。とりあえず動くコードではなく、上手い人のコードを何回も見て学ぶので、ソースコードでの表現力が高まる。「いい文章」みたいなものがソースコードにもあると思うのですが、それを鍛えるトレーニングになっているなって思いますね。
それから、問題制作者と、先輩回答者と、自分が擬似的にコミュニケーションをしている感じがします。こう書いたら実装が曖昧になるけど、こう書けば厳密に決められるな、とか。AtCoderを通して鍛えられて、結果的に仕事に活きているなって思います。楽しいからやっていますが、結果的には仕事に役立っていますね。
パナソニックグループだからこそ役立つ場面も多い
清野 : 競技プログラミングの経験を、「パナソニックグループだからこそ」活かせる場面はありますか。
山口 : 競技プログラミングでは、大量のデータを効率的に処理することが、アルゴリズムで一番のポイントです。計算量をどうやって減らすかですね。これが、製品を作る上で、すごく役に立ちます。
家電をインターネットに接続すると、大量の生活の足跡が集まってきます。パナソニックグループの場合は、家電だけでなく、住宅や車載なども作っていて、それらのオンライン化が進んでいます。
つまり、現実世界の人が暮らしている膨大なログが吸い上げられているんですよ。今はまだデータの量が限られていますが、これからIoT化が本格化していくと、データがあふれて困るケースも出てくるでしょう。
それをどのように処理するのかは、競技プログラミングで磨いたアルゴリズムの力や、鍛えられた嗅覚的なものが役に立つはずです。競技プログラミングでアルゴリズム力を鍛えてきた人にとっては一番面白いし、やりがいのある仕事になるのかなと思います。
清野 : 競技プログラミングで磨いてきた問題解決力や読解力が、実生活を良くしていくために活かせるわけですね。
山口 : 学生の方には、そういうデータの世界がもう始まっていることを知ってほしいですし、最近のAtCoderはレベルが上がりすぎている気がするので、スコアはそんなに気にしないでいいということをお伝えしたいです。
清野 : まずは競技プログラミングを経験していること自体が強みだと、知っていただけるとうれしいですね。
山口 : 競技プログラマーにとっては当たり前の知識や嗅覚を持っていない人も意外と多いです。工夫して計算量を減らさないと実時間で回らないとか、サーバー代が膨れ上がるとか、いろいろ考えないといけないことがありますが、いわゆる理系の人でも、そこまで意識が届きにくいものなんです。
Twitterではレートが高い人ばかり目に付きますが、自信を失わなくても大丈夫です。競技プログラミングをやっているだけでも実務では十分な戦力になるし、これからも伸ばしていけばいいです。レートが低いからといって、落ちこぼれというわけではありません。
社内コミュニケーションの潤滑油にも
清野 : パナソニックグループが競技プログラミングのコンテストをスポンサードする機会があったというお話でしたが、もともと競技プログラミングに力を入れていこうとする文化や雰囲気があったのですか。
山口 : 会社の方針で力を入れているというより、草の根的に参加者が集まっていったようです。社内のSNSに競技プログラミングのコミュニティがあって、そこに所属会社・部署関係なく、様々な人が集まっています。
特にパナソニックグループのスポンサードするコンテストがあるときは、「参加しましょう」、「頑張りましょう」といった話題になって、終わったら「◯問目まで解けました」「あれはひっかけ問題でしたね」とか、コンテストを振り返っています。それから、初心者が入ってきたらフォローする活動もしています。
清野 : 社内で反省会ができるとか、新しく始める人の支援ができる文化があるのが、本当に素晴らしいし羨ましいと思いました。
競技プログラミングを始めたからこそできたつながりとかありましたか。
山口 : なんとなく面識ができるので、たまたま業務上で関わりがあったときに、話がスムーズに進んだりしますね。それから、AtCoderのコミュニティでは、自分に近い立場やスキルを持った人と相談できるので、もっと拡大していけたらより仕事が進めやすくなるなと感じています。
清野 : 競技プログラミングをきっかけに、横のつながりが強まっているわけですね。仕事内容の文脈だけだと、関われる人は限られてしまいますよね。その中で、共通の取り組みがあることで、距離感がある人たちともつながっていける。それも競技プログラミングの良さかもしれないですね。
家電が進化するからこそ競技プログラミングの経験は価値がある
家電はまだまだソフトウェアで進化する
清野 : 今後実現していきたいことは何ですか。
山口 : まず私の考える「家電」とはというものをお話したいのですが、端的に言えば「人を作業から解放してくれるもの」です。家電の源流をたどれば、人間がしていた作業を楽にして、作業から人間の負担を減らしてくれるものだと思っています。
そうやって家事から人が開放されるのは素晴らしいなと思っています。ですが、こうした進化は基本的にはハードウェアの進化によるもので、現状のソフトウェアは、まだまだオマケのような位置づけです。でも今後、ソフトウェアをうまく使うことで進化を加速できるだけでなく、今まで代替できなかった作業から解放できるはずです。
例えば、全自動ロボット掃除機は、ソフトウェアが部屋の中を把握することで、掃除機を動かすことすらしなくてよくなったわけですが、まだまだ気づいてないようなことも、ソフトウェアとハードウェアの力をミックスすることで解決していけると思います。
今は感覚的にはソフトウェア1に対してハードウェア9ぐらいだと思うのですが、5対5とか7対3とか、ソフトウェアの力をもっと伸ばすことができると思います。
もっともっと人から作業を解放して、もっと楽なくらし、いいくらしができるようにしたいなと、ソフトウェアエンジニアとして思っています。
清野 : ソフトウェアの魅力は、すごいスピードで進化し続けられることだと思います。そして、距離の葛藤さえも越えられる。コロナ禍のいま、ソフトウェアの力は生活を豊かにしていけるでしょうし、今後新たな危機に直面しても乗り越え、より豊かにし続けることができるのではないでしょうか。
清野 : 最後に、パナソニックグループではどんな人が求められていると思いますか?
山口 : ソフトウェアに携わる場合には、手が動く、行動できる人です。三振してもいいから、なるべくたくさんバットを振ってほしいなって思っています。見送るよりもバットを振って三振してくれることが、特に新入社員や学生さんの役割なんですよ。既存のメンバーが知らないような新しいものを持ち込んでほしいです。空気を読まずに「なんで」を言ってくれる人が絶対に大事ですし、そういう方を求めています。
編集後記
お話を伺う前は「パナソニック=家電」というイメージを持っていたため、「競技プログラミングをする社員がいる」と聞いたときは正直驚きました。
しかしお話を伺う中で、コンテストにスポンサーとして参加したり、社内にコミュニティがあったり、さらには仕事にまで競技プログラミングの経験が活かせるパナソニックグループさまは、競技プログラミング経験者にとって非常に魅力的な環境であることが分かりました。
2022年4月に事業会社制に移行し、様々な分野で技術を活用した社会課題の解決や世界文化の進展を目指すパナソニックグループさまで、競技プログラミングをはじめとしたソフトウェアの知識を活かしてみませんか。
取材/文/撮影:ノーバジェット