ソフトウェア エンジニアリングの仕事に就こうとすると、おそらく、動作設計やシステム設計など、いくつかの面接を受ける必要があります。しかし、結局のところ、すべてはあなたのコーディング スキルにかかっています。コーディングの熟練度は、その役割に最適かどうかを決定する重要な要素です。
経験レベルに関係なく、経験豊富な開発者であろうと大学を卒業したばかりであろうと、コーディング面接に合格するのは難しいかもしれませんが、粘り強く努力すれば報われます。 1 年間の準備期間を経て Facebook からオファーを獲得した者として、私はこのことを直接知っています。この記事では、私がその過程で学んだいくつかのヒントと戦略を共有したいと思います。
飛び込んでみましょう。
ソフトウェア エンジニアとしての日常の仕事では、アルゴリズムやデータをあまり使用しないかもしれません。それでも、これらは知っておく必要がある重要な基本です。では、どうすればそれらがうまくなるでしょうか?アルゴリズムとデータ構造を学ぶのは難しい場合がありますが、それはロケット科学でも秘密の技術でもありません。主な問題はそれらを習得するのにかかる時間であるため、計画と練習が重要です。
コーディング スキルを向上させることは、筋肉を鍛えることと同じだと考えてください。たった数週間の集中的な運動で、すべてが引き締まり、引き締まった状態になることは期待できません。同様に、アルゴリズムも数日で習得できるものではありません。重要なのは、望む結果を得るために、長期間にわたって一貫して着実な努力を続けることです。
2019 年に遡って、コーディング面接の準備を始めたとき、私は二分探索などの最も基本的なアルゴリズムの書き方さえも知りませんでした。 Google との最初のオンサイト面接を受けるまでに、約 6 か月の継続的な練習を要しました。どうだった?私は失敗しました。
しかし、私はあきらめましたか?いいえ、私はさらに 1 年間練習を続けましたが、最終的に Facebook (現在は Meta として知られています) からオファーをもらいました。つまり、これらのスキルの習得には時間と労力がかかりますが、その見返りは人生を変える可能性があるということです。
初めてコーディングの問題に取り組み始めるとき、少し圧倒されてしまうのはごく普通のことです。 「私の何が間違っているの?なぜ最も簡単な問題さえも解決できないの?」と考えることさえあるかもしれません。それは学習プロセスのごく自然な部分です。時間が経つにつれて良くなります。
圧倒された気持ちに対処するための効果的で実証済みの戦略は、大きなタスクを管理可能な部分に分割し、達成可能な目標を設定することです。
毎日 1 ~ 2 つの簡単または中レベルの問題から始めて、それぞれに約 15 ~ 30 分を費やすことをお勧めします。そうすることで、問題解決スキルを徐々に身につけ、圧倒されるのを避けることができます。自信が持てるようになったら、1 日に最大 3 ~ 4 個の問題に取り組むことで強度を高めることができます。
一貫した練習で何が可能になるかについて説明すると、大手テック企業から最初の内定を得るまで、私は 1 年間で約 200 個の問題 (50% 中級、40% 簡単、10% 難問) を個人的に解きました。誰もが自分のペースで学習するため、自分にとって最適な練習量を決定するようにしてください。重要なのは、集中力を維持し、継続することです。
コーディングを練習し、面接スキルを磨くための優れたリソースを見つけたい場合は、いくつかのオプションを検討できます。最も優れたプラットフォームには、 Leetcode 、 Hackerrank 、 Codeforces などがあります。これらのプラットフォームは、コーディング能力を磨くのに役立つさまざまな困難な問題を提供します。
ただし、さらに詳しい構造やガイダンスが必要な場合は、Interviews.school などのリソースや、Algoexpert.io などの有料コースもあります。これらは、始めたばかりの場合、またはどこから始めればよいかわからない場合に特に役立ちます。
私自身の面接準備の過程でこれらのリソースをすべて使用しており、その品質を保証できます。
自分の技術スキルと問題解決能力を最大限に発揮するには、使用する言語をしっかりと使いこなすことが重要です。通常、アルゴリズム コーディングに使用する言語を選択できますが、面接官が特定の言語要件を持っている場合もあります。事前に必ずご確認ください。
たとえそれが主な言語でなくても、最も使いやすい言語を使用してください。一般的なデータ構造、ショートカット、メモリ管理を必ず理解してください。私は毎日 PHP を使って仕事をしていますが、コーディングの面接では Python を選択しました。 Python の簡単な構文は、ソリューションのプロトタイプを迅速に作成するのに役立ち、$ 記号、括弧、セミコロンなどについて心配する必要がありません。
プログラミング言語のスキルを向上させるには、プログラミング言語の基礎を学び、コーディングを練習し、他のプログラマーのソリューションを研究することに時間を費やしてください。 Leetcode をチェックすることをお勧めします。そのコメントとディスカッションのセクションには、学ぶべき素晴らしい例やテクニックがいくつかあります。
最初に質問せずに、急いで問題を解決しないでください。これはよくある間違いで、面接官にとって危険信号となる可能性があります。問題を正しく理解していると確信している場合でも、いくつかの明確な質問をしてください。
コーディングの問題は意図的に曖昧であり、面接官は必要な詳細をすべて事前に提供しません。
代わりに、面接官はあなたが詳細を明確にすることを期待しているため、いくつかの質問をして、あなたと面接官が同じ認識を持っていることを完全に確認してください。
さらに、この方法で、エッジケースを特定して明確にすることができます。たとえば、入力の形式、関係するデータ型、問題に制約があるかどうかなどを尋ねることができます。具体的な詳細を知ることで時間を節約し、目の前のタスクに集中できるようになります。
面接で問題を解決しているときは、急いでコーディングを始めないでください。まず時間をかけて解決策について話し合ってください。これは、問題を明確にし、本格的に取り組む前にしっかりとした計画を立てていることを確認するのに役立ちます。話し合うことで時間を節約し、不必要な間違いを防ぐこともできます。
私自身もこの罠に陥りそうになったことがあります。あるインタビューで、文字列のプレフィックス マッチングを実装するように求められました。私はすぐに、トライを使用したかなり複雑な解決策を思いつきました。しかし、私が自分のアイデアを大声で説明し始めると、面接官は私を止めて、2 つの文字列を繰り返すだけのもっと簡単な方法を尋ねました。
もし私がすぐにコーディングを始めていたら、面接官が求めてもいない複雑すぎる解決策に時間を無駄にしていたでしょう。
ソリューションについて十分に話し、面接官がそれに満足したら、初めてその実装を開始できます。
コーディング面接中、面接官はあなたが実際に解決策にたどり着くかどうかにはあまり興味がありません。
彼らは、あなたが問題解決プロセスにどのようにアプローチするかを知りたがっています。
自分の考えを詳しく説明し、その理由を説明してください。
面接官はあなたの味方であり、あなたの成功をサポートしてくれる存在であることを忘れないでください。面接は、あなたと面接官が協力して解決策を見つけるチームの取り組みであると考えてください。ただし、ほとんどの会話はあなたが行う必要があります (時間の約 70 ~ 80%)。面接官は場合によってはフィードバックを提供したり、あなたを修正したりすることがあります。オープンマインドで、面接官のフィードバックから積極的に学び、それを自分の利点に活かしてください。
面接中はフレンドリーに対応してください。集中する時間が必要な場合は、面接官にその旨を伝えてください。少し休憩して考えをまとめますが、あまり長く引きずらないようにしてください。
完了したら、コードを厳密にテストすることを忘れないでください。テストは、見落としていた間違いや問題を発見するために重要です。
コードが期待どおりの出力を生成することを確認するには、面接官が提供する入力例を使用してください。入力境界、入力の書式設定や種類、空、null、または負の値、小さすぎるまたは大きすぎる入力などのエッジ ケースをテストすることを検討してください。
テストするときは、コードを 1 行ずつ調べて、変数と式の値を確認します。こうすることで、コードを一目見るだけでは発見するのが難しいエラーを見つけることができます。
すべてをテストしたら、一歩下がって、コードをさらに改善する方法を考えてください。おそらく、問題を解決するためのより効率的な方法があるか、コードを読みやすく理解しやすくすることができます。
コーディング面接は困難ですが、徹底的な準備と練習を行うことで成功の可能性を大幅に高めることができます。
重要なポイントをまとめてみましょう。
落ち着いて、協力して問題を解決するプロセスとして面接に臨んでください。
今後のコーディング面接も頑張ってください!
リード画像は、HackerNoon の Stable DiffusionAI Image Generator機能を使用し、「Facebook でのコーディング インタビュー」というプロンプトを介して生成されました。