ゲスト紹介、エンジニアコミュニティの紹介
日本最大級のエンジニアコミュニティ Qiita プロダクトマネージャーの
清野俊文です。この番組では、日本で活躍するエンジニアをゲストに迎え、
キャリアやモチベーションの話を深掘りしながら、エンジニアの皆さんに役立つヒントを発信していきます。
今回のテーマは道具としてのアルゴリズムです。
はい、今日はですね、アルゴリズムについていろいろお話ししていければなと思っています。
本日のゲストを紹介します。
株式会社NTTデータスイルシステムコモンで、小野草株式会社コンテンツアーキテクトのけんちょんさんです。
けんちょんこと大月です。よろしくお願いします。
はい、よろしくお願いします。
前回はですね、けんちょんさんとエンジニアのキャリアチェンジについてお話ししました。
今回はですね、道具としてのアルゴリズムについてお話ししていければなと思っています。
ということで、早速お伺いしていきたいんですけど、
前回も大学時代アルゴリズムに興味を持ち始めて、いろいろ始めたというお話があったと思うんですけど、
そこを今は啓蒙活動もしていらっしゃると思っています。
そこの最初、自分が好きで興味を持って、そこから啓蒙活動とかそういうところに入っていった流れとかきっかけというところをお伺いしてもいいですか。
アルゴリズムの啓蒙活動、競プロの楽しみ方
もともとそういうのが好きというのは大きいと思います。
いつかは、例えば教プロとかやっていたときに、自分がやっている問題の解説とかは、自信が持てれば外に出したいって思いは学生時代からずっとありました。
そうなんですね。
やりたいという気持ちはずっと多分あったんですけど、
きっかけはやっぱりあの数理システムの先輩が、そういう発信とか、あとその自分の作った成果物を、例えばGitHubとかで出していくとか、そういう活動の重要性を訴えられていて、
じゃあ僕も聞いたり、やってみようっていうのを始めたことがきっかけ。
そうなんですね。そこのアウトプットの文化みたいなのが、NTTデータ数理システムさんの中でもあったみたいな感じですか。
それともその先輩の方が、もともとやっぱりそういうアウトプットというか外部に出していくのが好きな方だったって感じですかね。
先輩は、多分好きというよりも戦略的に思考に基づくものだったと思います。
やっぱりその会社として、こういうのやってるよっていうのをちゃんとどんどん示していかないと、プレゼンス高めていかないと、っていうすごい課題の意識が強い感じだったと。
で、そこに僕が、僕はそういうのやりたかったけど、自信を持てなかった。
だけど、実際やってみると、周りからすごい好意的反応が多くて、どんどんどんどん役に立ったとか、わかりやすかったみたいな声を聞いていくうちに、少しずつ自信が深まっていったってことだと思います。
なるほど。県庁さんのお話聞いてて思ったのが、なんて言うんですかね、いわゆるエンジニアってみんなこうアウトプットした方がいいとは漠然と思ってる気がしてて、
どっちかっていうとそこが、した方がいいのはわかってるけど、結構そこが大変で、頑張ってやってるって方の方が多い気がしてるんですけど、県庁さんはそこがそもそもやりたくてやってるっていうのが、結構そこも新鮮だなとお話聞いてて思ってて、
なんかそういうこうアウトプットとか、そういう啓蒙的な活動が、やりたいなとか好きだなって感じる、こうなんて言うんですかね、理由というか、そこの思いってどういうのがあったりするんですか。
反応をもらえることが好きっていうのは、あんまり好きだと思います。
はいはいはいはい。
人に何かして、その反応が返ってくるとか、多分人が好きなんですよね。
えー。
人が好きだから、人に何かアクションする、話しかける、で、何か反応が返ってくる、で、そのなんだろう、自分が何かして、相手から反応が返ってくる、っていうことが多分単純に好きっていうのがあって、
自分にとって、世の中に問いかけることがしやすいものっていうと、やっぱりアルゴリズムとか、プロとか数学だったり、なので、そういったものを問いかけて、反応が返ってくる、それが楽しい、嬉しいってとこだと思います。
えー。じゃあもう、なんていうんですかね、アウトプットそれ自体がいいことだからしてるってよりも、本当に何かそこが、こうして人が喜んでくれるとか、それ反応をもらえること自体が好きで、アウトプットとかそういうのもやってらっしゃるって感じなんですね。
そうですね。
えー、そうなんですね。いやもう、けんちょんさんみたいな、やっぱりすごいいろんなことを知ってらっしゃる方が、そういう思いを持って活動してらっしゃるの、本当にすごいありがたいなって、僕自身もこう、本当に学ばせてもらってる側なので、今、温めて感じました。
なるほど。じゃあ、その中で、自分が得意な数学とかアルゴリズム的なところの掛け算というか、好きなものとやりたいことってところを合わせていらっしゃるって感じなんですね。
またちょっとそこで気になったのが、そもそもアルゴリズムとか数学が好きな理由みたいなところにお伺いしてみたくて、エンジニアも結構そこタイプ分かれると思ってて、プログラミング、コード書くこと自体は好きだけど、そういうの苦手なタイプと、逆にそういう数値計算は好きだけど、コードはあんまり好きじゃない、
結構いろいろいる気がしてて、けんちょうさん、そのなんか数理的なところが好きで、ずっとやってらっしゃる理由みたいな、どこら辺が好きなのかお伺いしてみたくなりました。
まあ、体験は結構幼少期に遡る気がします。
で、クモ式っていうのは、幼稚園の頃とか小学生の頃とかやってたんですけど、もともとそういうところをやっていくうちに、多分数に対する感覚みたいなのが養われて、そこから自然に数学が好きになったという感じなんだろうな。
じゃあ、結構幼少期からそういうのが好きだったんですね。
そうですね。
数学の何が好きかっていうところは、結構難しいとこなんですけど、僕自身は問題解くのが好きっていうのが大きいと思います。
結構数学好きな人の中でも、タイプいろいろ分かれるんですよ。
いわゆる純粋な論理体系が好きだとか、その論理体系が好きっていうタイプの人は、むしろ受験とかあまり好きじゃなかったりして。
いわゆる定理とかそういうの美しいみたいな。
いわゆる定義、証明みたいな好きなタイプの人はもう大学入ってから生き生きと数学やってますよね。
僕は多分そこまででもなくて、もちろんある程度好きなんですけど、
いっぱい問題解く、問題が与えられる、与えられた問題を解く、そうすると先生から褒められるみたいなところが好きだったと思います。
じゃあ結構パズル的な感覚に近い感じなんですかね。
そうですね、パズルですね。教プロなんかもその延長って感じですよね。
たまに言いますもんね、競技プログラミングってパズルコンテストだみたいな言ってる方とかいますもんね。
そうですね。
そこの延長線上で教プロとかも好きだったりするんですか。
はい、もうそうだ、もう完全にそうです。
なるほど、ありがとうございます。競技プログラミングとかになると、そこの得たのしさに加えて競技っていう概念も入ったりするんですか。いわゆるレートとかハイキングとか。
そこらへんってどういうふうに感じてらっしゃったりするんですか。
多分競争が好きかどうかに関しては、競争は多分好きなんですけど、
自分にとってレーティングは資格試験を受けているような感覚に近いです。
例えば、数研とか英研とか受ける方いるじゃないですか。
で、難級を取るとその難級の、なんだろう、その難級っていうものを取っている人たちと交流する資格が得られるみたいなイメージあるじゃないですか。
で、同じように競技プロもそのレーティングに達するとそのレーティングの人と交流する資格が得られるみたいな感覚。
実際は多分そんな、もう本当になんだろう、そのレーティングにならなきゃ交流できないとかそんなことないんですけど、
自分の中ではちょっとそのレーティングに達することで、そのレーティングの人と初めて、なんだろう、より有意義な交流ができるみたいなイメージがあるので、
そのための資格試験っていう感じのイメージです。
なるほど、確かに。なんか結構やっぱり、今コロナ禍入って減っちゃいましたけど昔だとオンサイトというか、決勝行くとリアルであえて一緒にご飯とか食べて仲良くなるみたいなのがあった気がしてて。
確かにそういう、なんて言うんですかね、競技プログラミングって競技と言いつつ、結構コミュニティに近いというか、なんかそういう感覚の楽しさとかはあるかもしれないですね。
なるほど、そこからもう今競技プログラミングの話も入ってたので、その色々お伺いしていきたいなと思うんですけど、今競技プログラミング、結構やっぱりメジャーにはなってきてると思ってて、結構学生さんとかもやってる方多いと思うんですけど、
どうしても途中で、いまいちやっぱり問題解けなくて挫折しちゃうとか、レート上がらなくてしんどいとかって結構みんな感じてるところあると思ってて、
そこをどう楽しんでいくといいかというか、始めた、初期、中期、後期って色々あると思うんですけど、競技プログラミングをどう面白く感じるといいかとか、どう楽しむといいかみたいなところもぜひ何かあったらお伺いしてみたいです。
言ってしまえば人それぞれ納得が大きいと思うので、自分がどういうタイプなのかっていうのを知ることが結構大事かなと思ってます。
例えば、問題をひたすら解くことが好きなタイプであれば、そういう楽しみ方もできますし、競技プロって本当に無数の過去問があるので、それを解くことをひたすら楽しむ。
強プロの実用性、アルゴリズムを道具にする
問題を解くことが好きだったら、そこをひたすら問題を解くことを楽しむっていうのはいいと思いますし、競争が好きであれば、その競争のとこにコミットするのはいいと思いますし、結構人それぞれの楽しみ方ができるので、自分に合った楽しみ方を見つけるってとこが大事かなと思いました。
なるほど。ありがとうございます。
IT・インターネット業界に強い転職アプリ、Greenは、今話題のテック企業、プロダクト開発、DX案件など、Greenだけの良質な求人を数多く揃えています。
正式応募前に企業の中の人とカジュアル面談ができるので、仕事内容やメンバーのことをしっかり理解した後に先行に進めます。カジュアルに始める転職活動にGreenをご活用ください。
これも聞いてみたいなと思ってたんですけど、強プロ、まさにアルゴリズムを色々勉強して、能力を身につけていって、それにレートでついていったりするじゃないですか。
それって、インターネットでもたまによく議論されていることはあるかなと思うんですけど、仕事でそれって実際役立つのかどうかみたいなところって、けんちょんさんどう思ってますか。
僕自身は、とても役に立ってると感じてます。
これも人によって感覚違うんですけどね。
特に推理システムで社員として働いていた頃は、強プロで培った知見とかかなり生かす機会がありましたし、それこそDP、いわゆる動的計画を使って解決した問題とかもたくさんありますし、
あとネットワークフローみたいなのを流すとか、そういった話もありましたし、ちょっと特殊なデータ構造を実装しようみたいな案件もありましたし、やっぱり強プロをやってて、その延長で今の仕事できてるって感じはありました。
なるほど。確かにそういう推理系だったらめちゃくちゃ役に立ちそうですよね。
あとそれ以外にも、やっぱり教育プログラミングの中で問題を見て、その問題に合う、自分でその問題を読んで理解して、別の問題に再定義し直してアルゴリズムを適用していって、そういうプロセスの考え方とかって結構共通の考え方というかスキルな気がしてて、
ウェブ開発とかでもこういう機能を作りたいってなった時に、こういう機能って言い換えるとこういう要件を持っていて、それを作るためにはこういうツールを使うとかアルゴリズムとかアーキテクチャを採用するみたいな話になる気がするので、そこはすごい僕自身も強プロやってる中で培われた力だなっていうのは感じたりはしますね。
ちょっと今、アルゴリズム的な話にも入っていったので、いろいろお話、またちょっと話題化させて伺いたいなと思うんですけど、2020年にけんじょんさん本を出版されてるじゃないですか。問題解決力を鍛えるアルゴリズムとデータ構造っていう。
アルゴリズムを自分の道具にしたい方向けにこの本を書かれてらっしゃると思うんですけど、結局その、今強プロ役に立つかみたいなお話もあったと思うんですけど、道具にするって結局どういうことなんだろうなみたいなところももうちょっと詳しくお伺いしたいなと思ってて、アルゴリズムを道具にするってどういう感じなんですか。
アルゴリズムの役割と意義
例えばアルゴリズム勉強してて、まさにそのなんだろう、これ何の役に立つかわからないって感じてる学生さんいたりすると思うんですよ。そんなことなくて、アルゴリズムって役に立たせようと思うと、いろんな問題解決できるよ、なんかこれやると、ほんとなんか自分の力になるよっていうところを見せたいって思いで書きましたね。
だからアルゴリズムを自分の道具にするっていうのは、そのアルゴリズムを学んだことを使って、実際こんな問題も解けそうだとか、こんなことができそうだとか、そういったイメージが湧く状態になるってことかなと思います。
はいはいはい。じゃあそのアルゴリズムを勉強するだけじゃなくて、実際それがこういう場面だと使えるよねとか、こういう使い方できるよねみたいなところのアイディアを培っていくっていうのが道具として使えるみたいなイメージになるって感じなんですかね。
なるほど。ありがとうございます。確かに競技プログラミングの中で出てくる問題とかも、本当に問題として見るだけなら、本当にただの問題になっちゃうと思うんですけど、それじゃあ実生活とか自分の仕事の中で言い換えるとどうなんだろうみたいな見方も全然できる気がしてて。
だから、A子さんB子さんみたいな話だけではなくて、じゃあそれは実世界でユーザーとか自分たちのサービスに当て込んだときのデータ量とか計算量でユーザーにどのくらいのスピード感で届けたいかみたいな、自分でその設定をしていってなると、そういうアルゴリズムを活用するタイミングとか、そもそもその問題設定の仕方とか、そういうのはまさに道具としてアルゴリズムを使うってことなのかなって今お話してて思ったので。
なるほどなって思いました。ありがとうございます。
いろいろアルゴリズムのところについてお伺いしてきて、やっぱりアルゴリズム大事だなって思った一方、僕自身も教プロとか大学で勉強してるときに感じてたところで言うと、やっぱりアルゴリズムって難しいなって理解するのとか、自分で考え方は理解してもそれをコードに落とし込むところが結構難しいとか、その逆のパターンもあると思うんですけど。
書くのは簡単だけど、考え方とかが難しいとか、結構その何て言うんですかね、そこのターニングポイント的なのでよく語られるのがやっぱりDPとかかなと思うんですけど、DP分かる分からないで初級者から入門と初級の間が分かれるみたいな。
そこら辺の、どうやってアルゴリズムってものを理解していった方がいいかとか、勉強していった方がいいかみたいなところも、もしアドバイスとかアイディアあればお伺いしてみたいんですけど、なかったりしますか。
それ、その目的だったらまさに今日プロはジャストフィットするかなって思います。
はいはいはい。
自然に問題解くことで、アルゴリズムの理解が深まるとか、そういうことってすごいありますし、逆に例えば問題自体がそのアルゴリズムの中身をちゃんと分かってないと解けないような問題が出されることもありますし。
はいはいはい。
やっぱり問題解くっていうのが、結構アルゴリズムで見つけるのに有効かなと思ってます。
はいはいはい。なるほど。ありがとうございます。
アルゴリズムの現実世界への応用
結構最近だと、新しめの言語とかだと、よく使うアルゴリズムとかってライブラリ化されていることも多いですしね。
はいはい。
本当にプライオリティ級とかも全然あったりするじゃないですか。
そこら辺って、そういうツールを今日プロの中でもすぐ去って使っちゃっていいのか、それとももう一回自分で書き直して理解したほうがいいのかというと、どっちなんですかね、そこら辺って。
僕は全然使っちゃっていいと思っている。
そうなんですね。
行動の再利用って決して悪いことじゃないっていうか、むしろ積極的にやっていくことだと思うので、理想はやっぱり中身ちゃんと分かった上でガンガン使っていくっていうのは理想系なんだろうなって思います。
じゃあ使うとしてもやっぱりその中身の仕組みの理解というか、それがなんでこう例えば計算量が落ちて落ちているのかとかパフォーマンスがいいのかとか、なんかそういうところはちゃんと関心を持って使っていったほうがいいっていうような感じなんですかね。
それはそうだと思います。
結構もう相当とかに関してはドット相当とか相当関数使うと結構それだけで最適なのがアルゴリズムで選ばれて最速になっちゃうみたいなのも結構ある気がするので、なんかやっぱりそういうところを改めて自分でこう書いてみたりとかするのは大事そうかもしれないですね。
あともう一個お伺いしたいのが、勉強しててこうアルゴリズム描いてて、今日プロでこの問題こういうアルゴリズム使えそうみたいなのって培われていった次の課題として、それをじゃあ道具としてまさに使うってなったときの、
どうやってそのアルゴリズムとかを実生活の問題の中でもパッと想起する能力を身につけるかとか、適応していくかみたいなところも結構もう一個の難しさとしてあるなみたいな僕は思ってて、なんか別の話として捉えがちというか、今日プロは別になっちゃうみたいな。
今日プロは今日プロとしてスポーツとしてやってて、まあなんかそれはこう仕事とは違う話みたいな感覚でやってる方も結構いらっしゃったりするんじゃないかなって僕は思ってて。
なんかそこら辺をこううまくつなげていくためのこう練習とか、こう考え方とか、なんかそこら辺もなんかアイデアあったりしますか?
僕も元々数理工学の畑の人間なんで。
アルゴリズムの習得と応用能力
確かに。
数理工学って、例えば現実世界って本当にいろんな分野が、いろんな世界があると思うんですけど、そのどの世界で見てもこういう部分って似てるよねみたいな、その分野横断的に適応できるような考え方を抽出して、でそれを深めていくって学問なんですよね。
で、元々その畑にいたので、その現実世界の問題を見て、これ数学的にはこういう感じだなみたいなことを感じ取る習慣は元々あったってことなんだと思います。
なので、現実世界の問題であろうと、今日プロの問題であろうと、同じように見えるってとこがあります。
それで言うと、さっきも話したところにはなるかもしれないんですけど、やっぱり世の中の問題をちゃんと自分で理解して、問題を置き換えるというか、自分でそういう問題設定をちゃんとできるみたいな能力みたいなところに、癖づけてやっていくっていうのが大事なのかもしれないですね。
はい、けんちょんさん、今回もありがとうございました。
ありがとうございました。
まだまだですね、お話ししたいないので、次回もですね、けんちょんさんとお送りできればなと思ってます。
はい、今回はですね、けんちょんさんとアルゴリズムについていろいろお伺いしてきました。
僕も学生時代、競技プログラミングやってた口なので、改めてアルゴリズムとかって、いろいろ勉強していくの大事だなとか、そこら辺ちゃんと仕事で使えるように癖づけていかないとなみたいなのをいろいろ感じることができました。
ありがとうございました。
けんちょんさんとはですね、エンジンやキャリアチェンジについてお話しした前回のエピソードもあるので、ぜひお聞きください。
さて、この番組では感想や質問、リクエストなどお待ちしております。
番組詳細欄にあるリンクよりお気軽にご投稿ください。
Twitterではハッシュタグエンジニアストーリーをつけてツイートしてください。
そしてApple PodcastやSpotifyのPodcastではレビューもできますので、こちらにも感想を書いてもらえると嬉しいです。
Kiita株式会社はエンジニアを最高に幸せにするというミッションのもと、
エンジニアに関する知識を記録・共有するためのサービスKiita、
エンジニアと企業のマッチングサービスKiitaJobs、
社内向け情報共有サービスKiitaチームを運営しています。
ぜひカタカナでKiitaと検索してチェックしてみてください。
お相手はKiitaプロダクトマネージャーのKiyono Toshifumiでした。