アルゴリズムは「計算の順序や手順」を表すものです。アルゴリズムとデータ構造はエンジニアの基礎であるため、アルゴリズム形式のコーディングテストを出すことは、基礎的でエンジニアの素質を見る上で重要なことです。
コーディング形式には「アルゴリズム」と「データベース」が含まれます。
Googleはなぜアルゴリズムをインタビューに取り入れるのか
この記事を興味深く読んでいるあなたと同じ様に、海外に目を向けると同じ様なことを思っている人はいます。例えばこのQuoraに投稿された質問は同じ疑問をぶつけています。
様々な人が投稿している内容を簡単に要約すると以下のことが挙げられます。
・アルゴリズムとデータ構造は全ての始まりである。
・アルゴリズムだけが全てではなく、テスト、アサーション、ライブラリの使用など様々なことを知る必要がある。
・物事を微調整するには原理を理解している必要があるから
一般的に優秀といわれるエンジニアにも様々な方がいますが、問題解決能力や原理原則を理解していることなどはどの人にも共通するのではないでしょうか。
なぜアルゴリズムが問題解決能力や原理原則を理解していることに繋がるのか考えてみましょう。
アルゴリズムが重要な理由
テクノロジーの発展によりサーバーを利用するときは AWSやGCPを利用することで、サーバールームやデータセンターを意識することは減りました。フレームワークやライブラリの発展により、細かい裏側を理解していなくてもアプリケーションを作ることができる様になりました。
現代はこの様に、あまり裏側を理解していなくても何かものは作れてしまうのがリアルです。そのため、アルゴリズムは不要と語る人がいます。
しかしながら、アルゴリズムはただのテストのためにあるものではありません。世の中にある様々なシステムはアルゴリズムに支えられています。ランキングを作る際のソート、Mapアプリで最短経路を探索する際に使われるダイクストラ法、機械学習で使われる確率的勾配降下法など様々に存在しています。
誰もが簡単に作れるアプリケーション、それは他社も真似が簡単であり、プロダクトでの差別化が難しいことを示します。それ故に、他社との差別化を生むプロダクトを作るには圧倒的なエンジニア力が必要なのです。
もう一つアルゴリズムが重要な理由は「物事が日々変化」するからです。1995年ごろピュアな Javascript を書いていた時代から2006年には jQuery が発表され、その後TypeScriptが発表されるなど、Javascriptを一つとっても主要な言語は変わってきています。フロントの実装も HTML, CSS, JS から React や Vue などのフレームワークを使うことも増えてきました。
アプリケーションフレームワークはこのブログで使用した以下画像の赤色と青色の部分に該当します。特定の技能、例えば PHP ができるエンジニアかどうか、を評価して採用したとします。組織変更になり別のプロジェクトでPythonを使うことになりました。この時点でそのPHPを使えるかどうか、特定技能をみて採用することは意味がなくなりました。
それに対し、アルゴリズムやデータ構造はどの言語でも基礎に当たる能力なので、言語やフレームワークが変わったとしても、活用ができる重要なスキルです。だからこそ採用の段階で見極める必要があるのです。
どのような問題を選ぶべきか
レベルとしては新卒においては「易しい」レベルを、中途に対しては「易しい」と「普通」もしくは「普通」と「難しい」を組み合わせると効果的です。どこまで理解しているのか判断がつきやすいためです。コーディングテストの目的は候補者の悪いところを見て落とすことではなく、その候補者のスキルをきちんと確認し合否を判断することにあります。あまり難しい問題を出す必要はありません。
現在対応しているプログラミング言語はこちらから確認が可能です。また、コーディング形式の問題でリクエストがある場合はこちらのフォームよりご要望ください。