ガジェット通信

見たことのないものを見に行こう

「三手の読み」でプログラミング(というかデバッグ)する方法

DATE: BY:
  • ガジェット通信を≫

「三手の読み」でプログラミング(というかデバッグ)する方法
今回はメカAGさんのブログからご寄稿いただきました。

「三手の読み」でプログラミング(というかデバッグ)する方法

「羽生善治氏が説く、「三手の読み」で未来を切り開く方法」 2013年09月25日 『logmi [ログミー]』
http://logmi.jp/2560

三手先を読めばいいんだから簡単ではないか、という話ではあるのですけれども、これがですね、意外なところに死角があるという風に思っています。
それがですね、二点目のところなんですね。つまり自分がこうする、自分がこうしたいというところは自分の意思で決まるわけですけれども、当然その相手とかあるいはいろんな物事の対象というものがあるので、それを予想しなくてはいけないということがあります。

なんかプログラミングと似てるね。初心者プログラマと上級者の違いは、バグを予測するという点だと思うのだよね。「やりたいこと」をコーディングするのは比較的簡単。上級者は常に並行して「その時、バグが入り込むとしたらどこか?」を考えながらコーディングする。

たとえば割り算をしてる時、割る数がゼロになるケースはないのか?を必ず考えるように。あるいは、「改行までの文字列を比較する」場合に、もし改行がなかったら?とか。

プログラミングの初心者はこれができない。上級者は予想外のことが起きたらどうするか?を考えながらプログラミングをしていく。

   *   *   *

例えばですけれども、この会場に来るためには、地図を広げて渋谷近辺にあるだろうということがわかればですね、遠回りをしたり寄り道をしたりしなくてすむわけですけれども、それと同じように大ざっぱにつかむというのが鳥瞰する俯瞰するということなんです。

これは難しいのだが、それでもプログラミングでも「感覚」というのはある。なんとなくこの構造はバグりそうだ、バグってそうだ、という予感(笑)。こういう構造だと、たぶんバグりやすいというのが経験的にあって、それが他人のプログラムを読んでいる上級プログラマの脳内で警鐘をならす。

なんとなく上級プログラマは初級プログラマとは全然別の物を見ている。たとえるならサーモグラフィーの映像のような。コードのバグりそうな箇所が「色」がついて見える(笑)。もちろん「バグりそう」な箇所であって、実際にはバグがないこともあるけど、上級プログラマが初級プログラマよりも速くバグを発見できるのはこの感覚のせい。

で、「なんかこのプログラムがバグってて、なんとかしてください」とプログラムを見た時、サーモグラフィーが真っ赤かだと「うわっ」となる。上級プログラマなら無意識に避けるであろう方法を何の躊躇もなく使いまくってるプログラムって、もうね…。

   *   *   *

その鳥瞰する俯瞰する方法を使って、この場面でこの選択肢を選んでしまうとジリ貧に陥ってしまうということが判ればですね、たとえリスクが高くてもほかの選択肢を選ぶということもできるというふうに思うんです。

初心者が書きそうなプログラムってあるんだよね。素直にあまり考えずに書くと、こうなるであろう、という。上級者は苦い経験をしているので、多少手間がかかっても、こういう作りにしないとバグりやすい、とわかるのだが。

一方で何度設計しなおしてもうまくまとまらないという場合、自分の思考パターンを崩すということもしないと、良い設計ができないことがある。ようするに自分のこれまでの経験的なパターンをすべてためしても、うまくいかないなら、自分が普段考えないようなパターンにあえて踏み込まないと。

これも自分の思考パターンを知っている(自覚している)からこそ、あえてそれを崩すことができるわけで。砂場に宝が埋まっているとして、思いつきで行き当たりばったり、あちこちを掘り返しても、見落としがあるんだよね。碁盤の目のように区切って、こことここはすでに探した、みたいにマッピングして始めて、まだ探してない盲点がわかる。

執筆: この記事はメカAGさんのブログからご寄稿いただきました。

寄稿いただいた記事は2013年10月10日時点のものです。

寄稿の記事一覧をみる ▶

記者:

ガジェット通信はデジタルガジェット情報・ライフスタイル提案等を提供するウェブ媒体です。シリアスさを排除し、ジョークを交えながら肩の力を抜いて楽しんでいただけるやわらかニュースサイトを目指しています。 こちらのアカウントから記事の寄稿依頼をさせていただいております。

TwitterID: getnews_kiko

  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。