Webサービス系の隆盛などどこ吹く風、F# 2.0のリリースが騒がれたのが2年前ぐらいだろうか。F#業界の人材動向が、今どうなってるかって?
大方の予想通り凄惨ですよ。
それが分かる方法がある。F#技術者に技術力を問う8つの質問によってだ。F#業界のエンジニアの平均レベルを知りたくって、いろんな会社さんのF#開発者(経験者)向けに以下のような8つの質問をしたことはない(してはみたい)。対象者としては、F#経験3から4年の現役バリバリのはずのF#エンジニアだ。
その8つの質問というのはこんな問題だ。
- 高階関数のメリットを一言で表してください。(筆記解答)
- System.Net.Http.HttpClient オブジェクトから POST するメソッドはなんですか?(筆記解答)
- 以下のソースの x のスコープを端的に示してください。(筆記解答)
let x = 2
let hoge a b c =
let x = a + b
if x % c then Some(c)
else None
- int * string 型の変数 a に束縛した string の値(2番めの値)を取得するためのコードはどれですか?(選択解答)
- a.Item2
- let _, value = a
- snd a
- open System; open System.Reflection; a.GetType().GetFields(BindingTypes.NonPublic ||| BindingTypes.Instance) |> Array.find (fun (fi : FieldInfo) -> fi.Name = "m_Item2") |> fun x -> x.GetValue(a)
- フィボナッチ数を求めるプログラムを書いていたところ、StackOverflowException が発生してしまいました。原因として何が考えられますか?(筆記解答)
- string を ^ で結合するのはNGですか?そうであればその理由を説明してください。(筆記解答)
- HTTPでクライアントブラウザの種類などの情報を知るためのヘッダは何ですか?(筆記解答)
- JavaScriptでHTML要素をid属性の指定により取得するメソッドは何ですか?(筆記解答)
この8問について、僕が出会ったエンジニアに回答してもらった平均正解数は、なんと8点満点中8点(名前を書くと全員8点)である。
F#をやるような物好きは少ないから満点は無理でも、F#やろうと思ってるエンジニアさんであれば、名前を書いてくれただけで点数を上げたい(後でお問い合わせいたします)。筆記解答については相当甘くつけるから尚更だ。例えば、1問目「高階関数のメリット」は、「計算の抽象化」ならニジュウマルだが、「関数を引数にとれると便利」でも「特定の状況に特化した関数を動的に作成できる」でも「F#!F#!」でもマルで、それらに類する説明ならちょっと分かりにくくても、なんでも正解にしてる。
StackOverflow の問題は、経験していなかったから知らないから何も言えなくてもまぁいいだろう。(とある形式の関数を書こうとしてコールスタックを溢れさせるトラブルを経験しないなんて運がいい人なのだろうか、悪い人なのだろうか)「getElementById」だって?「tryGetElementById」は無いのかい?「string を ^ 演算子でつなげると、逆にこわがられる」「こいつ… OCamler だな!」そんな状況である。何年生だろうと、PGバリバリとの触れ込みでF#やってる人、本当にカッコいい。設計やチームリードやコミュニケーションを得意としている人にも勧めてほしい。(ウチの会社ではF#やってる人なんてどれくらいいるだろう。これは社畜教育をやってれば当たり前の結果だろう)
でも僕は、ここ数年Web上で(あるいはオフラインで) F# の提案などの活動をやっていた経験から納得がいく。これぞ「労働集約産業である現在のF#業界の実態」なのだから。
Try F# なしに、1年目0円でテスト要員 → 2年目ちょっとF#とか → 3年目F# 仕事と割り切った中で、FSharpx にのっとったコードを書き続ける → その後10年経過 という流れのキャリアパスを通ってきた人に出会った試しがない。
10年もF#やってるの、ドンちゃんぐらいのもんやで…。
統計としては母数が少なすぎる(ぎりぎり2桁か…?)ので、母集団を変えれば別の所感が得られるだろう。しかしながら、ヤバいのは淘汰以前に業界がないことだ。特に東京ですら仕事も聞いたことないから、レベル以前に危機感どころか生き残れるかさえ危う…あ、なごやがあるか。このところ景気がいいので、正解数8問だった人がすぐに稼働現場が決まる世界線に行ってほしい。こういうエンジニアたちが大勢集まってシステム開発をするのがなごやだ。
結果として、一部の出来る人には余計に負荷がかかるだろうなと思う。
いままで僕は楽観主義者だから、
F#は労働集約産業だったけど、これからは知識集約産業になっていく。 必然的に淘汰の時代になり、優秀な人が生き残るだろう。
と思っていた。
しかし現実は、もっと凄惨な世界を経て時代が進んでいくようだ。
see also
実は、意外と F# 関連のイベントが開催されていたりします。みんな本当にこわくないので、興味があったら参加してみましょう。
ネタに飛びつくのが遅かった…(´・ω・`)