以下の記事を見かけました。
プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集 - ZDNet Japan
採用試験の面接なんかで、プログラマーの力量を見極めるための質問の例が挙げられています。
- 「等値」と「等価」の違いを説明してください(この質問はTechRepublicのTony Patton氏に教えてもらったものである)。
- 「値渡し」と「参照渡し」の違いは何ですか?オブジェクト指向システムや手続き型システムにおいて、これらにはどのような違いが存在するのかを説明してください。
- 「ポリモーフィズム」とは何かを説明してください。
- 「悲観的ロック」と「楽観的ロック」を比較し、違いを明確に述べてください。
これらの質問のうち、最初の2つに答えられない応募者は、どう考えても「入門者レベル」ということになる。また残り2つの質問は、「中級」開発者であれば答えられるはずである。
どの質問も、なんとなく理解しているつもりなのですが、言葉にしにくいものばかりです。言葉にしにくいというのは、理解度が曖昧であるからだと思われます。底辺は底辺なりに、少し言葉にして答えてみようと思います。答え合わせは、記事の投稿後にやりますので、私の回答を信じないようにしてください。もし死ぬほど間違っていたりしたら、改めて別途反省記事を書こうと思います。
1問目
「等値」と「等価」の違いを説明してください
少し気持ち悪い質問だと思います。翻訳であるために、気持ち悪くなっているのだと勝手に理解することにしますが、言わんとすることは何となく想像できます。
変数で考えます。等値はそのまま、その変数が持っている値が等しいことです。つまり、以下の式です。[==]を"等価演算子"なんて呼ぶために混乱します。
if (a == b) printf("等値\n");
等価は、昇順にソートする場合等でいう以下の式です。
if (!(a < b) && !(b < a)) printf("等価\n");
値を、それ自体で比較するのか、論理的に比較するのか、といった感じでしょうか。
2問目
「値渡し」と「参照渡し」の違いは何ですか?オブジェクト指向システムや手続き型システムにおいて、これらにはどのような違いが存在するのかを説明してください。
スタックに積まれる内容が違います。値渡しは変数の持つ値、参照渡しは変数のアドレスが積まれます。
「オブジェクト指向システムや手続き型システムにおいて、これらにはどのような違いが存在するのか」は問われている意味が理解できません。オブジェクト指向であれば、ポインタを直接触るのは好ましくないが、手続き型では戻り値と同じような扱い方をする、とかそんな答え方で良いのでしょうか?
3問目
「ポリモーフィズム」とは何かを説明してください。
日本語にすると、"多態性"とか呼ばれます。振る舞いが同じオブジェクトであれば、同様のインターフェース(メソッド名)で利用できる、といった感じです。あれ?結構難しいぞ、これ。
4問目
「悲観的ロック」と「楽観的ロック」を比較し、違いを明確に述べてください。
悲観的ロックは、そのリソースを参照してから書き換えるまでの間ロックする排他制御方法であるため、誰かがそのリソースを操作している間は、他からは参照することもできません。対して楽観的ロックの場合は、誰かがそのリソースを操作している間も、他から参照することはできますが、その中身は誰かに書き換えられてしまう可能性があります。
いやー、しっくりこない回答しかできなくて、自分でもびっくりです。やっぱり、言語習得サポートサイトを作ったりして、自分の言葉で物事を説明することを繰り返したほうが、濃い勉強ができそうですね。たまに、こんなのをしてみて学習意欲を刺激するのも気持ち良いものですね。
ではでは。