見出し画像

Googleのソフトウェアエンジニアが面接と実務で求められる能力のギャップ

Googleのソフトウェアエンジニア採用プロセスは、常に注目を集めています。しかし、採用されたエンジニアが実務で必要とされるスキルを持っているかどうかは、必ずしも保証されているわけではありません。実際、採用面接で求められる能力と実務での成功に必要な能力には、大きなギャップが存在します。

本記事では、このギャップについて、技術とソフトスキルの両面から深く掘り下げます。あなたのキャリアに役立つ情報が見つかることを願っています。


私の経験に興味がある方はぜひこちらを読んでみてください。

面接で求められる能力

  1. アルゴリズムとデータ構造の知識と実装力: 面接で求められるほどの能力が必要かどうかはチームによりますが、実務上必要な能力の一つです。多数の候補者を公平に選別するために用いられています。問題解決能力、論理的思考、説明力、効率的なコーディング能力などが問われます。

  2. システムデザインパターンの理解と応用: クリーンな環境で、多数のユーザに耐えうる拡張性のあるシステムを設計できる能力が求められます。典型的なシステムデザインのパターンやミドルウェアの理解が必要です。

  3. 人間性と会社文化への適正: 倫理観や協調性を重視し、会社の文化や価値観に適応できる能力が求められます。リーダーシップやチームワーク能力も評価の対象となります。

実務で求められる能力

 様々な技術が入り交ざったシステムを理解する力

ほとんどのチームでは、様々な技術が組み合わさった複雑なシステムを理解する必要があり、これが最も重要な技術力だと思います。本、ドキュメント、メール、チャット等の様々なリソースを活用した情報収集と学習が必要になります。特に、コードの持つ情報量は他のリソースと比べると非常に大きく、なじみのないコードでも読むことに抵抗を感じない人は、キャッチアップが早いです。しかし、数年以上の経験を持つ Google のソフトウェアエンジニアに限定しても、これができる人は半数もいないと思います。また、一人で理解が追いつかない場合には、人に頼ることが重要になります。ただし、過度なコミュニケーションは情報収集や学習のボトルネックになるので注意が必要です。

問題に対して、適切な解決策を見つけ、チームを説得する力

いくら技術力があっても、一定規模以上の問題はチームが納得する方法で解決する必要があります。これを行うには、問題を整理し、解決策をチームが理解できるようにまとめ、同意を得ることが重要です。複数の解決策がある場合には、メリットデメリットを提示してチームの議論を先導する必要があります。

様々な制約の中から技術デザインを決定する力

実際のシステムデザインは、面接できかれるような、クリーンな環境での拡張性を重視したものとは異なります。実際のシステム開発には、そのシステム固有の様々な制約が存在します。例えば、人・金銭・時間の制限、現システムの構成、様々な観点からの品質保証、他チームへの依存、ベストプラクティスや社内プロセスへの従順義務等です。これらに加え、実装コスト、拡張性、パフォーマンス、保守性等の技術力な要素を考慮してシステムデザインを作る必要があります。

チームをまとめて前に進む力

いわゆるマネジメントスキルやリーダーシップと呼ばれるものです。マネージャー寄りのスキルとしては、チームの立ち位置や長期プランの明確化、プロジェクトの計画・進捗・リスクの把握、関係者との政治的な議論のまとめ、他チームとの協力関係の構築、チームの健康維持等が挙げられます。技術リーダー寄りのスキルは、技術代表としての議論への参加、プロジェクトの実行計画の作成、開発の先導、技術的な問題や不安の解消、チーム内での技術相談役としての振る舞い等です。一人が全てを役割を担うのは難しいですが、いくつかの役割を経て、チームをまとめて前に進むことに貢献ができる人は重宝されます。

まとめ

Googleのソフトウェアエンジニア採用プロセスと実務で求められるスキルには、明確なギャップが存在します。採用プロセスではアルゴリズムやデータ構造の知識、システムデザインの理解、人間性や会社文化への適応能力が重視されます。

これらは、実務で要求される能力と共通する部分はあるものの、全てが必要とされるわけではありません。さらに実務では、複雑なシステムを理解し、チームやシステム特有の制約を把握し、チームをまとめて前に進む必要があります。

このような能力を身につけることで、ソフトウェアエンジニアとしての価値を上げることができると思います。

この記事が気に入ったらサポートをしてみませんか?