Software is Beautiful
第31回 どんな人がソフトウェアエンジニアに向いているのか
本連載も5年目になるが,
この業界で仕事をしていると,
問題解決能力の高さ
どんな人がソフトウェアエンジニアに向いているかを一言で言えば,
算数, 数学への興味
私は典型的な
多湖輝さんの
中学受験はせず地元の公立中学に進んだが,
しかし,
- 注1)
- 光文社から刊行されている,
さまざまな角度からの発想が要求されるパズルを集めた書籍シリーズ。 - 注2)
- どちらも問題の定義そのものは中学生にも理解できる単純なものだが,
最近まで数学者にも解けなかった古典的な難問。
TK-80との出会い
そんなときに出会ったのがTK-80(注3)である。最初はどこから手をつけてよいかまったくわからなかったが,1ヵ月ほど手探りで試行錯誤を繰り返した結果,ある日突如「プログラミングとは何か」が理解でき,それ以来プログラミングの虜になってしまった。TK-80 には開発環境などなく,アセンブラで書いたプログラムを手動で16進のコードに置き換えて入力しなければなかったが,わずか256種類しかないインストラクションを組み合わせるだけでさまざまなことができるコンピュータに無限の可能性を感じた。
プログラミングの楽しさに目覚めた私は,まさに「水を得た魚」であった。寝ても覚めてもプログラミングをし,大学に入ったときには,すでにソフトウェアエンジニアとしてこの業界で勝負していく準備は十二分にできていた。
- 注3)
- NECがトレーニングキットとして1976年に発売したワンボードコンピュータ。
地頭の良さを測るには
私はそれ以来確信しているのだが,プログラミングは(微分積分前の)数学の応用問題を解くことと非常によく似ている。使う頭脳も同じだし,楽しみも同じである。
なので,中学生の中から「ソフトウェアエンジニアの卵」を見つけ出すのは簡単である。数学の難しい応用問題を解くのが好きで得意な子を選び出せばよいだけの話である。逆に,自分の子どもをソフトウェアエンジニアにしたいのであれば,小学校低学年のころから数学のおもしろさを教え,高学年のときには自分から進んで応用問題を解くような子に育てる必要がある。それもx を使った方程式などは教えず,「つるかめ算」を使って難しい問題を解かせるのが望ましい。
エンジニアを採用する際にプログラミング向けの地頭の良さを測りたければ,簡単な数学パズルを解かせるのは悪くない方法だ。私はMicrosoft でエンジニアを雇う際には,「8枚の金貨問題」(注4)をよく使った。この問題は頭の柔軟性を見分けるのに適しているだけでなく,情報理論を大学で勉強した学生に対して,「天秤を一度使ったときに得られる情報のビット数はいくつか」という奥の深い質問を投げかけられる点でも優れている(答えはlog23)。
これからの時代ソフトウェアエンジニアとして食っていくつもりならば,とにかく鍛えるべきは地頭だ。知識や経験や記憶力よりも,問題解決能力が何よりも重要なのだ。
- 注4)
- 8枚の金貨に1枚だけほかよりも軽い偽物が混ざっている場合,
何回天秤を使えば偽物を見つけることができるか, という問題。