「僕、C言語が使えます」に対する短い考察

最近僕は「所属する組織」に基づく評価を受けることが多くあり、これはある種正しい傾向を得られるにしても、それでその人自身を全て評価するのは早急すぎる、と考えていた。「人を評価することはすごい難しいことである」とこの頃実感している。(別に実際に評価するような仕事はしていないけれども)

人の評価に関連して、別の場面において、「就活で、”僕、C言語が使えます”というのが役に立たなかった」というのが話題に上がった。その時は「ある言語を使える、のレベルが人によって全然違う」と返したけれども、よく考えてみると、もっと深く広がってくる話題なのでは、と思い自分の浅い経験を元に考察してみる(間違っていたら指摘して頂けると嬉しいです)。

まず、発端である「就活で、”僕、C言語が使えます”というのが役に立たなかった」、というのは何故起こったのか。自分が想像するに、

1.企業がそもそもそういう人材を欲していない
2.企業にC言語が使えるかどうかを判断できる人がいない

のような理由を挙げられると思う。1.は受けた企業がIT業界なら、そこからSIerとかの話になってくるのでここでは割愛して、2.を掘り下げていってみようと思う。

C言語が使えるかどうか?について

C言語を使えるかどうか」についてはかなり宗教的な議論になってしまうのではないかな、というのが深く考える前も後も思っている。「そもそも言語というのはツールなので、C言語を知っているかどうかは重要ではない」「C言語オブジェクト指向ではないから、オブジェクト指向的考え方(=コードをできるだけ再利用する、というのがここで想定している意味)が測れない」等等、様々な反論が考えられるにしろ、とりあえず、ここから深めていくとすれば例えば以下のような質問でしょうか:

1.ポインタはどういう場合に有用か?
=>これは変数自体に破壊的な代入をする際に有用である(e.g. 配列の中身を変える関数を書きたい)、という答えが欲しいので聞く。まあそれをそもそも許していいのかどうか自体は宗教的な問題としてあるけれども。グラフを表現する際に人の直感に即している等の答えも考えられる。

2.一度定義した配列の長さを拡張したい場合はどうするか?
(追加の質問として)動的配列を実装する場合は例えば何故新しい要素を挿入する時にO(1)になるのか?
=>なぜ一次元可変長配列がPythonとかで採用されているのか、長さを拡張するようなシチュエーションに出くわした際にパフォーマンスを意識したことがあるかどうか、というのを見たいので聞く。

更に、上で出てきた「言語を知っているかどうかは重要ではない」という考え方なら、アルゴリズムとデータ構造、スレッド、ロック等の質問をぶつけるのかな、と思う。(ちなみにここらへんはCracking the coding interview 5th editionの考え方に強く影響を受けております)

じゃあアルゴリズムとデータ構造をテストする際に、例えば「簡単な再帰関数がさくっと書けるか」、「動的計画法を用いて計算量を落とせるか」を見たい場合は、よくある「n番目のフィボナッチ数列を返す関数を実装してください」という質問を投げかけると思う。ちなみに上記の「さくっと」というのは人によっても違うし、さくっと書けることによって仕事において必要なコミュニケーション等に時間を割く事ができるし、別の機能を実装することにも時間を割けるので、重要な意味合いを持っていると思う。

、、、と考えている内に「C言語を使えるかどうか」を測るには、どうやら今のコーディング面接のようなスタイルにならざるを得ないのかな、と思った。もちろん実際の仕事では、ちゃんと必要な場合に連絡を取るか、等のソフトスキルも重要になってくるとは予想するので、今のスタイルが最適な訳ではないけれども。(というのはProgramming Interview Exposed 3rd editionからの影響です)

雑記:
あまり関係ないけれどもここのサイトのコラムにある「コンピュータ業界は宗教的」、というのは妙に納得した。

追記:
就職活動を振り返る 後編に共感を覚えました。