現在JavaScriptの設定が無効になっています。このページを利用するにはJavaScriptの設定を有効にしてください。データプラットフォーム本部の鯵坂(@ajis_ka)です。Hadoop(以下、Hadoop)コミュニティで開発を続ける傍ら、昨年から趣味として競技プログラミングを始め、オンラインやオンサイトのコンテストに参加しています。Negotiator)の2つのコンポーネントで主に構成されています。JAPANでも利用されています。Committee)メンバに就任して、パッチ投稿やレビューなどのいわゆるOSSコミュニティでの開発に加え、リリースマネージャ、脆弱性の修正/公表、新規Committerの選出といったコアな活動も実施してきました。2.9.2をリリースした話これらコミュニティでの活動の詳細については、2月中旬に別枠で記事を投稿する予定です。よろしければそちらも併せてご覧ください。競技プログラミングに興味を持ったきっかけ私は2018年9月にヤフーに転職してきたのですが、その際に採用選考の1つとしてコーディングテストを受験しました。これまでHadoopコミュニティで長く活動しており、その間コーディングはずっと続けていたので、さすがに全問解けるだろうと高をくくっていました。最後の1問が難しくて、当時の私では全く歯が立ちませんでした。上位7%)になることができました。コーディングテストの最後の1問が解けるくらいの実力はすでに身についたと思っていますが、過去問を解いたりコンテストに参加すること自体が楽しくて、今でも競技プログラミングを続けています。上位3%)になることを目指して、コンテストの過去問を解く、頻出のデータ構造やアルゴリズムをライブラリ化するなどの精進をしています。実のところ、大学4年で研究室に配属されたときに研究室の先輩から競技プログラミングに誘われていました。それから10年以上たった今になってから競技プログラミングにのめりこんでいるなんて当時の自分には信じられないだろうなぁと思いますし、誘われたときに始めておけばよかったと若干後悔しています。逆に、社会人から競技プログラミングを始めても十分に楽しめると思うので、「競技プログラミングをやってみたいと思っているけど、やってる人は学生ばかりだし...」と躊躇している社会人にもぜひ参加してほしいな、と思います。私は競技プログラミングを始めてまだ半年ほどなのですが、Hadoopの開発と競技プログラミングには関連があると考えています。Hadoopは大規模データを高速に処理するためのミドルウエアなので、そのミドルウエア自体が高速であることは非常に重要です。そのため、ミドルウエア内部でも時間計算量を気にしながら開発することになります。Hadoopの上で動作するアプリケーションになるべく多くのメモリを割り当てたいため、Hadoop自体が利用するメモリはできる限り節約しなければなりません。そのため、空間計算量にも気を配る必要があります。これらは競技プログラミングで求められるスキルと本質的に同じであると考えています。Hadoopというコーディング規約を書いており、そこでも計算量やデータ構造に関して注意すべきポイントが詳細に記載されています。Arrayといった基本的なデータ構造はHadoopの開発を通じてひととおり自在に扱えるようになっていたのでAtCoderでいうところの水コーダー(レート1200~1599)になるのはあまり苦労しませんでした。Hadoopの開発と違う点Hadoopの開発と競技プログラミングの最大の違いは、分散処理かそうでないかだと考えています。Jamなど一部の例外を除くと分散処理には対応していませんが、Hadoop上で動作するアプリケーションは、多数の物理サーバーで分散実行されます。そのため、アプリケーションを実装するときやチューニングを実施するときには、分散実行された状態でどれだけ処理が高速になるかを考える必要があります。Flinkなど、分散処理であることを意識させずに分散処理を実装するためのミドルウエアやフレームワークが整いつつあります。それらのフレームワークを利用して実装されたアプリケーションをチューニングをするためには、そのアプリケーション内で分散処理される部分とそうでない部分をWebUIやログ、ソースコードなどを見ながら確認し、分散処理されなかった部分をなるべく減らすにはどうすればよいか、といった考慮をする必要があります(他にもチューニングの観点は多数ありますが、ここでは省略します)。分散処理に向かないアルゴリズムで記載されている場合には、処理を丸ごと書き換えるようなこともありえます。いえ、計算量のオーダーを正しく見積もることは分散処理であっても非常に重要です。N件のレコードを処理するのにO(NlogN)かかるプログラムとO(N^2)かかるプログラムがあり、定数部分は同じだと仮定します。それら2種類のプログラムに1億件のレコードを処理させると前者のほうが10万倍以上高速となり、仮にO(N^2)のプログラムをサーバー10000台で分散処理させたとしても、サーバー1台で動作させたO(NlogN)のプログラムの性能に勝ることは絶対にありません。競技プログラミング同好会での取り組みヤフー社内には競技プログラミング同好会があり、新入会員として参加しています。最近は、社内のプログラミングコンテストに向けて作問やテストを実施しています。作問をするのは初めての経験だったのですが、問題に応じたストーリーを考えるなど、問題を解くのとはまた違った楽しさがあります。作問では問題文を作成するだけではなくテストケースの作成も必要ですが、そこでコーナーケースを考えるのも面白いです(これは業務での開発と似たところがあります)。最後にヤフー株式会社では、2/9(土)に「みんなのプロコン2019」を開催します。コンテストの詳細はこちらよりご確認ください。今年で3回目になるヤフー主催の競技プログラミングコンテストです。ヤフーに応募する前は、ヤフーが競技プログラミングのコンテストを主催していることは全く知らなかったのですが、同好会があったり、社内コンテストの参加者も多く、自分を含め競技プログラミングを楽しんでいる人が多くいるように感じています。Foundationの米国およびその他の国における登録商標または商標です。JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。JAPANのサービス開発を支える技術やデザイン、文化を発信しています。Reserved.このページの先頭へ。