人生を書き換える者すらいた。人生を書き換える者すらいた。»2010.01.26Appleの新製品が楽しみでたまらない実は今度発表されるAppleの新製品が楽しみでたまらない。touchはそれぞれ発表と同時に購入していたが、今度のもそうなるだろう。数日前にふとんの中で見た夢で、ジョブズ「今度のiPodの新機能は、装着すると空が飛べるのです!」(実際に空を飛ぶデモをする)俺「うおー、それはすげえ!」というのがあったが(タケコプターのイメージ)、さすがにそれはねえよな。touchだったとしても十分魅力的なんだが、その上にどんな機能を載せてくるだろうかね?早くこの方面もビジネスにしないとな。結局まだ調査と試作だけで実際の製品は着手してないのが非常に悔しいが、今年中には何とかしたい。言って、もはやWindowsはイモすぎて飽きた。理想的には、金のための仕事と技術的好奇心を満たす活動は5:5くらいにしたいんだがなかなか思い通りにはいかんね。(0)2010.01.20仕事と相場とさて前回のこれ6人でミーティングをする。どの2人を取っても、初対面か会ったことがあるかのいずれかである。このとき、「互いに初対面の3人組」か「互いに会ったことのある3人組」のどちらかは存在することを証明せよの解答から。複数の解法がありそうだが、僕の思いついたのは以下。会ったことがあるとき[AB]と表記する。3人以上でも同様に(ABC)はABC3人が互いに初対面であることを意味するとする。6人のうちの1人をXさんとし、残り5人をXさんと初対面かどうかで2グループに分ける。5人を2つに分けるから、どちらかは3人以上のグループである。このグループ内の3人をABCとすると、これがXと初対面のグループであるなら、(XA),(XB),(XC)である。(AB)(BC)(CA)のうち一つでも成立するものがあれば、それを例えば(AB)とすると(XAB)が成立して題意をみたす。(AB)(BC)(CA)がすべて成立しないなら、[ABC]となってやはり題意をみたす。上記のグループがXと初対面でないなら、その後の証明の()と[]を入れ替えるだけで同様である。思いつくのは10秒でも、文章にするのはちょっと大変だね。ところで、最近の発見。いまの僕の環境だと、手元に余裕資金があるとき、主に道は2つある。過去の実績からいくと、年20~30%の利回りが狙える。人を雇ってこなせる仕事量を増やし、売上増を狙う。正直にいうと、ちょっと前まではプラン(B)ではかけたコスト以上に回収できる自信がまったくなかったので、必然的にプラン(A)に傾いていた。ところが最近はそれなりに実績もできてきたので、プラン(B)の期待値のほうが明らかに高くなってきたのが実感だ。何か世界の見え方が変わってきた気がする。(A)には相場を監視するコスト、(B)にはいろいろ指示を与えるのにかかる手間のコストがあるし、それぞれ失敗のリスクもあるので一概には言えないが、なんとなくしばらくは相場をいじるのはお遊び程度にして本業に集中すべき、と神から言われているような気がする。言っても、いつかは日本の財政破綻をめぐる大相場がやってくるはずなので、そのときはフルパワーでFXの円売りや国債の空売りをやると思いますけどね。問題を公開のあと、トラックバックやはてブでいろいろ回答や感想を見ました。したコードが書ける人が何人もいることがわかり(まあそういう人がレスポンスを出しているので当たり前か)、一安心です。本当に世間のレベルがあの求人サイトの応募者のレベルだったら、マジで日本のソフトウェア産業は滅びると思っていたからな...コメントの中で特に気になったものいくつかについて書いてみます。過去に似たことをやっていれば有利、というのは確かにそうです。いう予備知識がなくても普通に考えて実装するのに充分な時間として3時間という設定でした。いうか、僕も今回の反応を見るまでA*というアルゴリズムは知らなかったよ!また、解答は単に正解が出力できるかではなく、「コードの質」も見てます。僕もこの世界は長いので、ある程度ボリュームのあるコードを見ればその人の実力はだいたいわかる。柔道の達人は帯の締め方を見るだけで相手の実力がわかる、というのと似たようなもの。事前知識の有無で結果が変わらないような出題にしたいとは最初から思ってはいたけれども、そうすると本当に無味乾燥なプログラムを書く問題になってしまって面白くないのであきらめました。本当はこういう感じで複数題やらせればいいのかもしれないけど、それは手間がかかりすぎるしで。●「業務には必要ない」「これでプログラマの実力が測れるのか?」という指摘もちろんこれと同じアルゴリズムが仕事で必要になるとは思ってませんが、似たような思考力を要することはたくさんある。少なくとも僕の仕事では毎日そうです。あとこれは書き忘れていた気がするが、この実技試験はあくまで1次試験であって、これをクリアした人は論述試験と面接を経てはじめて採用です。コーディングだけで採用を決めているわけではないです。この問題ができたから優秀な人材とは限らないけれど、できない人は"ほぼ確実に"優秀ではない、のではないかと。大学入試の問題でもそうだけど、確かに受験勉強はくだらない知識がいろいろ必要にな上に、それは人間の価値とは大して結びつかない。あの程度のことも満足にできないようでは、社会に出てから直面するもっと難しい問題には到底たちうちできないでしょう。真の実力を測る問題ではないからといって、その問題に価値がないというわけではないのです。調子に乗って、口頭試験で使う用の問題の1つを公開します。分野としては数学だけど、こういう論理的思考が得意な人はデバッグ能力も高いと期待できるのではないかと思います。6人でミーティングをする。どの2人を取っても、初対面か会ったことがあるかのいずれかである。このとき、「互いに初対面の3人組」か「互いに会ったことのある3人組」のどちらかは存在することを証明せよちなみに元ネタは最近読んだ本です。気がつけば10秒でわかります。試験問題ほかさて試験問題です。内容は、壁とスペースで構成された迷路が与えられたとき、スタート地点からゴール地点に至る最短経路を求めよ、というものです。***************************という出力が来ればOK、というわけです。●入出力はテキストデータを用いる●一度に動けるのは上下左右のみ。●プログラム言語・OSは自由です。可能な全経路を列挙した上で最短を求める、というアルゴリズムは、マップのほとんどがスペースである場合に現実的な時間で終わらなくなってしまうのでLv3扱いです。僕が自分でやって25分(受験者の立場だったらもうちょっとかかるだろうけど)というところで考えて、3時間あればLv2以下の人がいるなんて考えられないと思っていたのだけれどもまるで違いますね。理解できないのはLv0,1の人たちが開発現場でどんな仕事をしてるのかだな。経歴書にはいろいろなプロジェクトにプログラマとして関わった経験があるようだし、こんな人でも何とか使わないといけない状況に置かれた彼らの上司がかわいそうでならない。ちなみに、この問題のネタを昔提供してくれた後輩とその後やりとりをして、彼とその仲間2名もチャレンジしてくれました。その結果は3人とも1時間前後でLv4の解答を出してくれたので、やはり結論は「ちゃんとした人材は自分でしっかり動いているので、一般の転職市場は相対的にレベルが低い」でしょう。