外資・日系トップ企業を目指す学生のための就職活動サイト「外資就活ドットコム」

【お知らせ】 現在Internet Explorerにおいて、一部機能が正常に表示されない不具合が発生しております。
ご利用中の皆様にはご迷惑をおかけしまして申し訳ございません。現在復旧に向けて対応中でございます。
※他ブラウザ、アプリにおいては正常に表示されております。

AtCoder高橋社長がLINEのコーディング試験を見て驚いた理由―。「競プロとこんなに違うとは……」

会員登録するとこのコラムを保存して、いつでも見返せます


ITエンジニア志望者にとって、時に「避けては通れない道」となるコーディング選考。実際に人気企業では、どのような試験や採点が行われるのだろうか。今回はLINE株式会社の協力の下、外資就活ドットコムの会員が参加(*1)する模擬コーディング試験を開催。LINEが実際の選考で出すような問題を、参加者に解いてもらった。

その解答内容を題材に、LINEの新卒採用でコーディング試験を担当する大澤和宏さんと、特別ゲストのAtCoder高橋直大社長の対談を実施。2人の言葉から、「良い解答」「そうでない解答」の差、そしてコーディング選考と競技プログラミングの違いなどが見えてくる。【藤崎竜介】

*1 AtCoderで中級者とされる茶色もしくは緑色レベル、かつ2024年卒業予定の学生を対象に参加者を募集(AtCoderのランクについては、公式ページで詳細を確認できる)

〈Profile〉
写真左/高橋直大(たかはし・なおひろ)
AtCoder株式会社 代表取締役社長。
慶應義塾大学大学院政策・メディア研究科修士課程修了。2012年にAtCoderを創業。2008年にマイクロソフト主催の「Imagine Cup 2008」Algorithm部門で3位入賞したのを皮切りに、世界的なプログラミングコンテストで高成績を出し続けている。

同右/大澤和宏(おおさわ・かずひろ)
LINE株式会社 開発3センター サービス開発1室 室長。
2011年にLINEへ入社。現在はエンターテインメント系サービスなどを開発する部署を統括しつつ、エンジニア新卒採用にも関わる。

◆内容や肩書は2022年10月の記事公開当時のものです。

油断すると時間切れに……。コードを書く力に加え、問題を「読む」力も試されるLINEのコーディング試験

<対談実施までの流れ>
① 外資就活ドットコムの会員を対象に模擬コーディング試験への参加者を募集

② 応募理由などを基に選出した参加者9人が、LINEが作成した試験をオンラインコーディング試験プラットフォーム「Track Test」上で受験

③ LINEが全解答を採点した上で、内容をAtCoder高橋直大社長と共有

④ 対談当日
(取り上げる解答は全9件の中から選びだした、計4件)

――最初にLINEの大澤さんから、今回出題した問題やLINEが実施しているコーディング試験について簡単な説明をお願いします。

 
大澤:LINEのコーディング試験では通常、「アルゴリズム問題」と「業務志向の実装問題」の2問を出していて、今回参加者の皆さんに解いてもらったのは後者です。前者は競プロでよく出てくるような一般的なアルゴリズムの知識を問う内容で、競プロをやっている人なら割とすんなりクリアすると思います。

一方、業務志向の問題は人によって結果に結構差が出るので、この企画の対象に選びました。

高橋:問題文がかなり長いのが特徴的ですね。

大澤:はい。LINEのようなWebサービスに限らず、あらゆるシステムの開発はまず自然文で書かれた仕様書があって、それを基にエンジニアが全体のアーキテクチャやデータ構造を考えつつ、どんなコードに落とし込むかを決めますよね。

なので業務志向の問題は毎回、仕様書にあたる問題文をしっかり読み込んで実装する実力があるかが、問われる内容にしています。

高橋:だから実務に近いという意味で、業務志向という位置づけなんですね。

大澤:その通りです。

高橋:問題文が長く解答時間も2時間半に限られているので、競プロとはかなり違う向き合い方が求められそうですね。競プロだと大抵、問題の内容自体はもっとシンプルなので、いろいろなアプローチでコードを書きながら効率の良い方法を探って、方向性がしっかり固まってから実装することが多いと思います。

でもこの問題だと、アプローチを決めるのに集中しすぎると時間が経ってしまいますね。

大澤:はい。そうなると実装にかける時間がなくなってしまいます。なので説明会などでは、「問題を読みながら、ラフでもいいのでデータ構造の設計とかを考えたほうがいい」みたいなことを言っています。

高橋:ここまで問題が長いと、国語力も試されますね。

大澤:そうですね。もちろん国語力を主に見たいのではないのですが、一方で実務だと機能を1つ作るだけでもかなり長い仕様をインプットしたりしますよね。なので問題を誤解なく読む力も、良いサービスを作る上で大事だと捉えています。
◆試験はTrack Test上で実施

スコアだけでなく、コードの“中身”も評価対象

――では、いくつか解答を取り上げつつ、大澤さんと高橋社長にディスカッションしてもらいたいと思います。まずは1人目、Aさんについてです。

 
大澤:これはあまり良くない例として取り上げました。競プロ向けのテクニック集などを参考にしているのかもしれませんが、forループをマクロでコンパクトにして書いています。効率的にループを回したいという意図なのだと思いますが、これくらいのループならば普通にfor文を書いてほしいですね。

理由は、LINEの開発では基本的にチームプレーを大事にしているからです。十数人、数十人といった規模のメンバーで1つのソースコードを作り上げていったりするので、誰が見てもすぐに分かるようなコードを書くことが大切です。

この書き方が致命的な減点になるものかというと、そうでもありません。でも評価する側としてこういう書き方はしてほしくないので、ここで取り上げました。

高橋:評価が難しい解答ですね。個人的には、実装の時間が限られることを踏まえると、このやり方をするのも理解できるんです。こういうふうにマクロを使った方が、慣れている人なら絶対に速いですから。

評価の対象を、出題の時点で明示した方がいいかもしれないですね。大澤さんの話を聞くとスコアと同じくコードの“中身”も重視するということなので、それを出題の時点で示してあげるわけです。純粋にスコアだけで評価されるならこのマクロの使い方は自然でしょうし、コードの中身が評価されるならこういうアプローチが良くないことは競プロの人たちも分かるはずです。

大澤:確かに、そこは改善点ですね。新卒採用向けのコーディング試験自体、まだ模索中というのが正直なところです。これまで3回実施しましたが、解答内容を検証しつつ毎年少しずつ変えて、より良いものになるようにしています。

高橋:ところでこの業務志向の問題だと、明確な「正解」を定めているのですか。

大澤:共通のテストデータをインプットした際に出力される値として、正解はあります。他方で、その値を得るためのアプローチは完全に参加者一人一人に委ねていて、自由です。

LINEのコーディング試験は再挑戦も可能。何度か落ちた後に合格し、入社した人も

――次の解答についても、解説などを聞かせて下さい。2人目、Bさんについてです。

 
大澤:良い部分と悪い部分があります。良かったのは、この問題の肝である配達時間の計算を関数で処理して効率化している点ですね。あとは、配達に2時間以上かかる場合に注文を受け付けない形にするための、分岐処理みたいな仕組みも関数を使って構築できています。2時間以上かのチェックと、それに該当する際にエラーを出力する部分ですね。

求められる機能を設計しようとする意図は、コードから伝わってきます。

――良くなかった点は。

大澤:データ構造を全部リストで作っていて、可読性とメンテナンス性が低くなっています。どのインデックスに何が入っているかはコメントに記されていますが、それを都度確認するのは効率的とはいえませんし……。既に述べたようにチームプレーを重視しているので、可読性は大事です。

――では3人目、Cさんはどうでしょう。

 
大澤:クエリに対応したクラスをちゃんと作ってデータ構造を設計しようという意図が見えるので、そこは良いポイントです。問題文では入力用のクエリを用意した上で処理を求めているので、その大事な部分を整理して読みやすくしている点は特に評価したいですね。

一方、main関数の中に全てのコードを書いているのは改善点です。この問題内容に対して速く解く手法としては、必ずしも間違ってはいません。良い点数を取れていますしね。ただ、我々はプログラム全体を設計する力を重視していて、関数を分けるとか構造化した書き方がされていないと、そのあたりの力が見えてこないというのが正直なところです。

高橋:この人は特に競技プログラマーっぽい書き方ですね。今までの人も競プロをやってそうなコードでしたが。実際の試験でも、こういう書き方が多いですか。

大澤:そうですね。逆に、しっかりクラス構造を作る人もいますが、割合としては多くありません。

高橋:ところでこの問題、時間が限られることもあってどうしても「運」の要素も出てくる気がします。そこはどう考えていますか。

大澤:それは否定しません。だから、というわけではないのですがLINEのコーディング試験は最大7回まで受けられるようになっていて、つまりたとえ落ちても、ある回数までは再挑戦できるんです(2022年7月時点、問題内容は毎回異なる)。それによって、ある程度公平性は担保できていると考えています。

高橋:それなら納得できます。7回やって結果が出なかったなら、それは実力ですね。

大澤:実際に入社したエンジニアの中にも、何回か落ちた後に数度目の受験でクリアした人が結構います。人によっては、最初は緊張して実力を出せなかったりしますしね。

高橋:よくよく考えてみると、「できる人」が実力以外の部分で1回や2回落ちてしまう可能性がある半面、「できない人」が受かってしまうことはなさそうですね。その意味では、採用試験の問題としてよくできている印象です。

スコアより、読みやすさを評価。「人に見せるコード」が求められるコーディング試験は、競プロとは別物

――最後の4人目、Dさんについてもコメントをお願いします。この人を最も高く評価しているようですね。

 
大澤:はい、その通りです。

高橋:あ、こっちの方が高評価なんですね。スコアが一番高いのはCさんですが……。

大澤:そうですね。コードの中身を評価した結果です。今回の参加者で唯一ちゃんとクラスを設計して、構成要素を的確に分割した書き方をしてくれています。パーサ(*2)もちゃんと関数に分けて書いていますね。エンジニアが簡単なバッチ処理を作る時にさらっと書くような感じに書けているというか。即戦力になりそうなコードです。
*2 各プログラミング言語の規則に則った構文になっているかをチェックするためのプログラム

高橋:少し驚きました。僕からしてみるとCさんとの違いはさほど大きくないんですが、スコアのビハインドが覆るほどDさんを高く評価しているわけですね。

大澤:そうですね。実務でコードを書けるかを重視する結果、こうなっている感じですね。繰り返しになりますが、まずはクラス設計をちゃんとやれているかどうか。必ずしも100%正しい設計である必要はありません。クラスに属するメソッドの位置づけとかもクリアな書き方がされていれば、我々と同じ目線でコードを書けることが分かるので、評価は高くなりますね。

高橋:ちなみに、例えば書き方はDさんみたいな感じで、ケアレスミスによってスコアが0点だったとしたら評価はどうなりますか。

大澤:さすがに低くなるでしょうね。これまで述べてきた通りスコアだけでなくコードの中身も評価対象ですが、とはいえ毎回、最低限取ってほしいスコアを“足切りライン”として設定していて、それを下回ると基本的には合格にしません。

高橋:逆に、Cさんが今回提出したのと同じような書き方で満点を取ったとしたら、Dさんとどっちを評価しますか。

大澤:やっぱりDさんですね。もちろん、ハイスコアを叩き出せる人が優秀なのは確かです。Cさんもコードが読みにくいわけではないので、低評価というわけではありません。

――今回対象にする4つの解答全てに対して、コメントをいただきました。高橋社長は全体を通してどんな感想を抱きましたか。

高橋:面白いですね。競プロだとやっぱり、スコアが全てじゃないですか。選考は競技じゃないのでスコア以外の部分も評価されるだろうなと思っていましたが、こんなに違うとは……。

なので、競プロとは別物だとあらためて感じました。確かに、一緒に開発する人のことを考えてコードを書けるかは大事です。LINEさんに限らず、どの会社も採用で重視しそうですよね。

だから、競プロよりも「人に見せるコード」を意識する必要があるんだと思います。コードはコンピューターだけが読むものじゃないんだよ、ということですね。

あと、コーディング試験ではなくてコーディング面接をやる企業もあるじゃないですか。これまで僕は、「コーディング試験はスコアが大事だから書き方はあまり気にしなくていい」「コーディング面接は問題を解けたかはさほど重要でなくて、良いコミュニケーションを取れるかがポイント」みたいな感じで言及することが多かったと思います。

でも、少なくともLINEさんの場合はコーディング試験だけど書き方がかなり見られるんですね。これは大きな発見でした。

――最後に大澤さんに聞きたいのですが、コーディング試験以外の選考、つまり面接などではどんなことを主に評価するのでしょうか。

大澤:候補者によって見る部分は変わるので一概には言いにくいですが、共通項があるとすれば実はコーディング試験にもつながっていて、チームで力を発揮できそうかですね。面接では、インターンや研究活動におけるチームプレーの経験を聞くことが多いはずです。チーム内でどういう立ち回りをしていたか、とかですね。

あとは、広い意味で課題解決に寄与ができる人かどうか。エンジニアリングって、結局課題解決じゃないですか。例えば「こういうシステムを作ってほしい」と言われたときに、仮にその必要がなければ「これをやればシステムを開発しなくて済みます」みたいな感じで、エンジニアリングのこと以外も考えつつ提案できる人は、採用したいですね。

エンジニアの仕事はコードを書くだけではありません。それに、コードを書いた瞬間から技術的負債が生じるので、そのメンテナンスなどトータルのコストも念頭に入れて課題解決を考えられる人は貴重だと捉えています。

エンジニア/データサイエンティストのためのイベント「Terminal」バナー

マッキンゼー ゴールドマン 三菱商事
P&G アクセンチュア
内定攻略 会員限定公開

トップ企業内定者が利用する外資就活ドットコム

もっと記事を読む

マッキンゼー BCG ベイン・アンド・カンパニー アクセンチュア 等の内定攻略記事会員限定に公開しています

このページを閲覧した人が見ているページ

募集情報

{{r.GsRecruitingItemType.name}} {{r.GsRecruitingItem.target_year | targetYearLabel}} {{label.short_name}}

{{r.GsRecruitingItem.name}}

{{r.GsRecruitingItem.description}}

{{s.entry_end_date}} ({{s.entry_end_day_of_week}}) {{s.entry_end_time}} {{s.apply_method_label}}

{{s.name}}

日程: {{s.event_date}}

場所: {{' ' + s.place}}


外資就活ドットコムに会員登録すると、様々な就職支援サービスをご利用いただけます。現在、会員の約7割が東大・京大・慶応・早稲田・東工大・一橋大などの上位校の学生です

新規会員登録
このページを閲覧した人が見ているコラム

会員限定コンテンツ多数!

無料会員登録はこちら