Software is Beautiful

第31回どんな人がソフトウェアエンジニアに向いているのか

本連載も5年目になるが、今年は私がこの業界に長年関わる中で得た教訓というテーマで書いてみたいと考えている。

この業界で仕事をしていると、いろいろな場面で「どんな人がソフトウェアエンジニアに向いているのか」という話題になる。一番多いのが人を採用する場面でだが、キャリアパスに悩んでいるエンジニアに相談されるケースもあれば、子どもたちの教育に関する話題でこの話になることもある。

問題解決能力の高さ

どんな人がソフトウェアエンジニアに向いているかを一言で言えば、それは「問題解決能力の高さ」である。それも、知識や経験を使った問題解決でははなく、複雑な問題をよりシンプルな問題の集まりに分解して解決していくという、地頭を使った純粋な問題解決能力の高さである。

算数、数学への興味

私は典型的な「理科系少年」として少年時代を過ごした。小学生のときは、算数の応用問題を解くのが大好きだった。武蔵や開成などの名門私立中学の試験問題の中でも難しいものを選んだ「難問集」の問題にチャレンジすることが私の趣味だった。今でも思うが、何よりもこの経験が私の「地頭」を鍛えることになったと感じている。

多湖輝さんの『頭の体操』注1も私の愛読書の一つであった。難しい問題に直面したときに、少し見方を変えて別の方向から解決の糸口を見つける習慣は、この本から学んだ部分が多い。

中学受験はせず地元の公立中学に進んだが、そこでは高校受験の難問集にチャレンジし始めた。四色問題やフェルマーの大定理[2]にも大いなるロマンを感じ、何度もチャレンジした。数学だけでなく物理や化学への興味が増し、家に帰るとNHKの教育テレビの通信高校講座をむさぼるように観ていた。

しかし、高校になって数学に微分積分が出てくると、突如おもしろくなくなった。基本的なルールだけ頭に入れ、あとはロジックだけで解いていくという、中学受験・高校受験の数学の楽しさはそこにはまったくなく、公式の丸暗記が必要になってきたからだ。

TK-80との出会い

そんなときに出会ったのがTK-80[3]である。最初はどこから手をつけてよいかまったくわからなかったが、1ヵ月ほど手探りで試行錯誤を繰り返した結果、ある日突如「プログラミングとは何か」が理解でき、それ以来プログラミングの虜になってしまった。TK-80 には開発環境などなく、アセンブラで書いたプログラムを手動で16進のコードに置き換えて入力しなければなかったが、わずか256種類しかないインストラクションを組み合わせるだけでさまざまなことができるコンピュータに無限の可能性を感じた。

プログラミングの楽しさに目覚めた私は、まさに「水を得た魚」であった。寝ても覚めてもプログラミングをし、大学に入ったときには、すでにソフトウェアエンジニアとしてこの業界で勝負していく準備は十二分にできていた。

地頭の良さを測るには

私はそれ以来確信しているのだが、プログラミングは(微分積分前の)数学の応用問題を解くことと非常によく似ている。使う頭脳も同じだし、楽しみも同じである。

なので、中学生の中から「ソフトウェアエンジニアの卵」を見つけ出すのは簡単である。数学の難しい応用問題を解くのが好きで得意な子を選び出せばよいだけの話である。逆に、自分の子どもをソフトウェアエンジニアにしたいのであれば、小学校低学年のころから数学のおもしろさを教え、高学年のときには自分から進んで応用問題を解くような子に育てる必要がある。それもx を使った方程式などは教えず、「つるかめ算」を使って難しい問題を解かせるのが望ましい。

エンジニアを採用する際にプログラミング向けの地頭の良さを測りたければ、簡単な数学パズルを解かせるのは悪くない方法だ。私はMicrosoft でエンジニアを雇う際には、「8枚の金貨問題」[4]をよく使った。この問題は頭の柔軟性を見分けるのに適しているだけでなく、情報理論を大学で勉強した学生に対して、「天秤を一度使ったときに得られる情報のビット数はいくつか」という奥の深い質問を投げかけられる点でも優れている(答えはlog23)。

これからの時代ソフトウェアエンジニアとして食っていくつもりならば、とにかく鍛えるべきは地頭だ。知識や経験や記憶力よりも、問題解決能力が何よりも重要なのだ。

おすすめ記事

記事・ニュース一覧