ベルリンのITスタートアップで働くジャバ・ザ・ハットリの日記

日本→シンガポール→ベルリンへと流れ着いたソフトウェアエンジニアのブログ

海外転職の面接で英語で聞かれるRubyとRailsの質問事例とそれを会話で対処する方法 - その1

移転しました。

エンジニアが海外転職する際に面接で英語で聞かれる基礎質問において、その解答と同じぐらい重要なのが「会話」になる。

前回「海外転職の面接の時に英語で聞かれるRubyとRailsの基礎質問を徹底マスターしておく方法」という記事を書いた際に自分で書いておいてなんだけど、「質問が単純すぎだな」と感じていた。だいたいの基礎質問はその候補者があれこれと解答を模索する際に見せてくれる会話の中で雰囲気とかスキルレベルを把握することが目的としてある。なので会話が無いと面談が成り立たない。

質問者「Aとはナニ?」
解答者「Aは○○です。」終わり

みたいなのでは、せっかくの転職面談なのに会話もクソもない。
ということで「Rubyの質問事例とそれを会話で対処する方法」を書いた。こっちの方がより海外転職の面談において実践的だと思う。実際この中から今の勤め先に応募された方に出した問題もあるし。

面談の形式やなぜ最初に基礎的な技術質問をするか、などの前提事項に関しては前回エントリーをご参照ください。

【問題1】

Given:

x = "hello"

Explain the difference between:

x += " world"

and

x.concat " world"

(解答例を読む前に声に出して英語で答えてみることをオススメします。頭の中で「分かっているぜ!オレ」と実際に「英語を声に出して説明すること」の差は自分の想像以上にあるものなので。)

【解答例1】

The += operator re-initializes the variable with a new value. Therefore, += is actually creating a new object and pointing the the old variable to that new object.

This is perhaps easier to understand if written as follows:

irb> x = "hello"
=> "hello"
irb> x.object_id
=> 70301799032080
irb> x.concat " world"
=> "hello world"
irb> x.object_id
=> 70301799032080
irb> x = "hello"
=> "hello"
irb> x += " world"
=> "hello world"
irb> x.object_id
=> 70301799055220

The difference has implications for performance. Basically concat is faster than +=.

解答にあたってもし+=とconcatの動作の違いを知らなかったとしても問題ない。ある程度のレベルのエンジニアでも面談の場で「たまたま知らなかったこと」を聞かれることがあるからだ。「+=とconcatの違いが分かってないエンジニアは不合格だ!」なんて偏屈な面接官はきっと居ない。
仮にその違いが把握できてなかったとしても、この質問のポイントを指摘して「この質問はメモリ割り当てに関する内容だよね」と言えばいい。

すると面接官が「そうなんだよね。+=, concat, <<, と全部は似たようなやり方なんだけど、メモリ割り当てがどれがどれだったか覚えてる?」
と助け船を出してくれる。

「いやーそれは覚えてないなー」となってもその場にもしPCがあればirbでも起動して、上記のようにx.object_idで確かめてみればOk。もしPCが無かったとしても「どっちかがメモリー領域を(もしサイズがあれば)そのまま流用されて、他の一方が新しいメモリーが確保されてそこに保存される。確かめ方はx.object_idで。。。」と話して説明すればいい。

この辺りのもっと詳しい解説はこちら。
Rubyの文字列連結に関して知っておくべきこと - Qiita


仮に細かい仕様については知らなかったとしても、その会社で働くことになった場合には現場でちょっとググればいい。要は「メモリにも気配りできる技術レベルですよ」がアピールできればOk。

という感じに会話を進めていく訳です。その2につづく。
海外転職の面接で英語で聞かれるRubyとRailsの質問事例とそれを会話で対処する方法 - その2 - ベルリンのITスタートアップで働くジャバ・ザ・ハットリの日記



ちなみに「そんな細かい仕様のことなんて聞いて、その候補者のナニが分かるんだよ」とお考えの方へ。
私もかつては同じ感想をいだいていた。しかし面接官の立場で応募者を選考するようになると分かってきた。これ以外の方法で技術レベルを推し量る方法が無いのだ。もしこれをお読みの方でもっとスマートな方法で技術レベルが把握できるアイデアをお持ちの方がいれば、ぜひそれをサービス化していただきたい。
この分野で本当に有用なアイデアを実装すれば巨万の富が得られること間違いない。GitHubやらLinkedinやら誰もがこの問題解決に挑んでいるがイマイチ決定打が無く、どの会社も人材採用に苦労しているのだから。


tango-ruby.hatenablog.com

tango-ruby.hatenablog.com

tango-ruby.hatenablog.com

tango-ruby.hatenablog.com