はじめに
転職活動を始めた今日この頃。Salesforce案件を中心に、個人的にUnityで触ってたC#や、最近勉強を始めたTypeScriptの案件も含めて探しておりました。
そのC#とJavaScript/TypeScriptを使っていらっしゃる企業の選考に応募し、面接にて口頭試問を受けたのですが、いざ聞かれてみると、基本的な質問でもびっくりするほど答えられない!
基本的な文法はしっかり理解しているつもりだったのですが、本当に「つもり」であったことを思い知りました。
なぜ質問に答えられなかったのか?
聞かれた内容は本当に基本的なものです。
-
console.log(undefined ?? 'hoge')
やconsole.log('' || 100)
の挙動 - C#でnull許容参照型機能を有効化した時の挙動
- async, awaitの文法
- Sort()せずデータを取り出す(LINQのOrderBy)
でもいざ聞かれると、意外とスムーズに答えられない。
私の場合、習うより慣れよの方針で、モノを作りながらの学習を試みておりました。その方針自体が悪かったとは思いませんが、「こういう機能はどうかけばいいのか?」という考え方で作っていくことになるので、「こう書いたらどう動くのか?」という点では、書いたことがないパターンを見せられると、途端にわからなくなってしまいました。
また、必要な知識だけかいつまんで学ぶこととなるため、基本仕様や言語の細かいルールは、意識から遠ざかっていました。(特に最近はGithub CopilotがTabキーを押すだけで、意図を汲み取ってどんどん書いてくれたというのも悪影響でした。バイブコーディングが流行る今日この頃、相当意識しないと悪化しそう)
対策(ChatGPTでのシミュレーション)
これはいけない、ということでトレーニングを始めました。
といってもChatGPTに試験官役をお願いし、
「C#の基礎を口頭試問形式で出して」
「TypeScriptの基礎を面接風に質問して」
と伝えるだけ。
🔰 基礎レベル
- string と StringBuilder の違いを説明してください。
- 値型と参照型の違いを説明してください。代表的な型も挙げてください。
- == と .Equals() の違いを説明してください。
- var と dynamic の違いを説明してください。
- List と Array の違いを説明してください。
⚙️ 中級レベル
- LINQ とは何か、簡単な使用例を口頭で説明してください。
- async/await の仕組みとメリットを説明してください。
- IDisposable インターフェースの役割と、using 文との関係を説明してください。
- null 許容参照型 (string?) の意味と利点を説明してください。
- IEnumerable と IQueryable の違いを説明してください。
🧠 上級レベル
- C#におけるdelegateとeventの違いを説明してください。
- 依存性注入(DI)とは何か、C#での実装例を挙げて説明してください。
- ガベージコレクションの仕組みと、発生しやすいタイミングを説明してください。
- 抽象クラスとインターフェースの違いを、利用シーンを交えて説明してください。
- C#でシングルトンを実装する方法を口頭で説明してください。
C#だとこんな具合で色々出してくれます。勿論1問ずつ出題も可能。
わからないと即答しても気にしなくていいのが素晴らしいですね。いい時代です。
- 知識の穴が浮き彫りになる
- 用語を正確に説明する練習になる
始めたばかりですが、効果はかなり実感してます。(恥ずかしながら、stringが参照型だと初めて知りました。ずっと値型だと勘違いしてた)
私のような特定のプロダクト特化型エンジニアには、自覚のない"常識知らず"を洗い出せて、特にいいトレーニングになりそう。