b0c0d570


私はプログラマーとして10年以上IT業界で働いていますが、大学を卒業する直前くらいまでは、ほとんどパソコンというものに触ったことがありませんでした。

スポンサードリンク
新卒で最初の会社に入社する際に、業務で使用するのでどうしても勉強が必要ということで初めてのパソコン(富士通のFMV。メモリが32MBでハードディスクが2GBとかそういう時代でした)を買って、「特打ち」というタイピングソフトも一緒に購入してそこでやっとタッチタイピングを覚えたとかそういうようなレベルでした。

fb1aca2a


しかも最初の職種は営業職だったため、プログラミングを勉強し始めたのはさらにその後ということになりますので、プログラマーとしてのスタートは非常に遅かったわけです。

そういった私でも現在なんとかプログラマーとして生計を立てられていますし、同時期にプログラマーに転職した兄に至っては、コンピューターの勉強をし始めたのが30歳を過ぎてからでしたので、少なくともIT業界で生き残っていく上では、「いつプログラミングを始めたか」はほとんど関係ないと言い切ってしまってよいと思います。

ただし、「プログラマーは誰にでもなれる」かというと残念ながらそういうものでもなく、やはり向き不向きというかいくつか必須の能力というものがあるのですが、その能力を測定するための非常にシンプルで良い問題がありますのでご紹介いたします。

論理的思考力テスト【解答つき】
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33022&forum=3


9つの玉があります。
ひとつだけ重さの違う玉があります。
天秤測りを3回だけ使って、重さの違う玉を見つける手順を示しなさい。
(制限時間は1時間)


ネットで答えを検索すればすぐに分かってしまいますが、まずはじっくり考えてみてください。

61955dab
by Tim

いかがだったでしょうか?解けた方もいれば解けなかった方もいると思いますし、解法も一つではないと思うのですが、一般的な解答としては下記のようになると思います。こちらも読み飛ばしてしまわないで、解法を理解できるまでじっくり読んでみてください。

論理的思考力テスト
http://an-antenna.seesaa.net/article/78975891.html



9個の玉を1~9と表します。
123・456・789の3つのグループに分けます。

●123を左に、456を右に置いて1回目の計測を行います。
計測結果は、必ず「釣り合う・左に傾く・右に傾く(つまり釣り合わない)」のいずれかになります。
以下、この結果によって手順を変えて説明します。


釣り合う:
  789に重さの違う玉があることになります。
  ●7を左に、8を右に置いて2回目の計測を行います。
    釣り合う:
      唯一計測していない、9が重さの違う玉になります。
    釣り合わない:
      ●7を左に、9を右に置いて3回目の計測を行います。
        釣り合う:
          7と9は同じ重さなので、8が重さの違う玉になります。
        釣り合わない:
          2回目の計測結果から7と8は釣り合いませんでした。
          3回目の計測結果から7と9は釣り合いませんでした。
          つまり、8と9は釣り合い、7だけが釣り合わないことがわかります。
          よって、7が重さの違う玉になります。
釣り合わない:
  123と456は、どちらが重く、どちらが軽かったのかを覚えておきます。
  ●123を左に、789を右に置いて2回目の計測を行います。
    釣り合う:
      456の中に重さの違う玉があることになります。
      同時に唯一重さの違う玉が重いか軽いかもわかります。
      1回目の計測結果で456が重かったか、軽かったかに準じるからです。
      ●4を左に、5を右に置いて3回目の計測を行います。
      釣り合う:
        計測していない、6が重さの違う玉になります。
      釣り合わない:
        この場合、4か5が重さの違う玉と言う事になります。
        そして、唯一重さの違う玉は重いか軽いかがわかっています。
        以上により、重さの違う玉を特定できます。
    釣り合わない:
      123と456を測った結果、釣り合いませんでした。
      123と789を測った結果、釣り合いませんでした。
      つまり、どちらの計測にも参加した123だけが重さが違うことになります。
      同時に唯一重さの違う玉が重いか軽いかもわかります。
      何故なら、1回目2回目の計測結果で123が重いか軽いかがわかるからです。
      ●1を左に、2を右に置いて3回目の計測を行います。
      釣り合う:
        計測していない、3が重さの違う玉になります。
      釣り合わない:
        この場合、1か2が重さの違う玉になります。
        そして、唯一重さの違う玉は重いか軽いかがわかっています。
        以上により、重さの違う玉を特定できます。



この結果を元にして、プログラマーになるために必要な3つの能力について説明いたします。


1.論理把握能力


上記の問題に関しては、「正解を導き出せたかどうか」も重要ですが、解答を読んで「なるほど」と理解出来たかどうか、つまり「ロジックを正確に把握することが出来たかどうか」の方が非常に重要です。

この能力が無ければ、他の誰かが書いたコードだけでなく、そもそも自分の書いたコードが正しいかどうかも判断できないということになりますので、もし上記の解答をじっくり読んでもロジックが把握出来なかった場合は、残念ながらその方はプログラマーに向いていない可能性が高いと思われます。


2.論理構成能力


これは要するに「正解を導き出せたかどうか」ということになりますが、もし上記の問題に関して1時間以内に解答にたどり着けたのであれば、かなり優れた論理構成能力を持っていると判断してよいと思われますので、その方は非常に優秀なプログラマーになれる可能性が高いと思います。

逆に、「1時間以内に解答に辿り着けなかった」または「天秤測りを4回以上使っていいなら解けるんだけど・・・」という方は、なんらかの問題を解決する上での「ロジックの着眼点」に関するセンス、もしくは「シンキングスピード」が、優秀な方と比較すると劣っているということになると思いますが、それは十分に勉強でカバーできる範囲ですので、「天才プログラマー」にはなれなくても、努力次第で十分優秀なプログラマーになれる可能性があると思います。

基本的にこの2つの能力があれば、プログラマーとしてやっていくための要件は十分に満たしていると思いますが、最後にもう1つ重要な要素があります。

3.問題解決に時間をかけすぎない。


もし上記の問題に関して、制限時間が「1時間」と記載されているにも関わらず、意地になって1時間以上かけて問題に取り組んでしまった方は、「考えるスタミナがある」という点では非常に素晴らしいのですが、職業プログラマーとしてやっていく上では「問題解決への取り組み方に難がある」と考えた方が良いと思われます。

逆に、もし15分程度この問題に取り組んで「この問題はちょっと今の自分では制限時間内に解けそうにない」と判断してネットで検索したり解答を読み進めたりした方は、(この記事の最初に提示した制限から外れてしまう行為ではありますが)職業プログラマーとしては適切な性格の持ち主だと思います。

実際の現場で行われる作業にはすべて「期限」というものがありますので、「完璧なものを作る」よりも「期限内に十分なものを作る」ことの方がより重要です。

IT業界には「車輪を再発明するな」という有名な言葉がありますが、我々がぶつかるロジック的な問題の多くは既に誰かが解決してくれていますので、そういった解法を意地にならずにありがたく使わせてもらい、「期限内に十分なもの」を作ること、現場においてはそういった取り組み方が必要になることを理解しておくことは非常に重要です。

まとめ


ちなみに私が制限時間内にこの問題を解けたかというと、恥ずかしながら解けませんでした。「どちらが重く、どちらが軽かったのか」を記録しておくことで、「唯一重さの違う玉は重いか軽いか」を導き出してそれを判定に使えるということを思いつけなかったからです。

この時点で私の「ロジックの着眼点」に関するセンスや「シンキングスピード」は大したことがないということがお分かり頂けると思いますが、上記で述べたように「ほとんどの問題は既に誰かが先に解決済み」ですので、あらゆることを自分で解決出来なくても、世の中に既に存在する解決法を組み合わせることで、眼前の問題を期限内に片付けていくことは十分に可能なわけです。

よって、解法を読んでもロジックを理解できなかった方にはちょっとこの職種はお薦め出来ませんが、解法が理解できた方、そして問題解決に時間をかけすぎないで仕事に取り組めそうな方は、この業界でプログラマーとして十分にやっていけると思いますので、それに該当する方でもし今の職種からプログラマーへの転職を考えている方がいらっしゃいましたら、自信を持ってチャレンジされてみても良いのではないかと思います。

※今後も不定期に「エンジニア/プログラマーへのキャリアチェンジ」に関する記事をアップしていく予定です。