LoginSignup
6
1

More than 1 year has passed since last update.

あらゆる困難をデバッグする技法

Last updated at Posted at 2022-12-03

「困難は分割せよ」

僕はプログラミングを
大学1年生のときにはじめてから
はや7年が経ちました。



社会にでてプログラムを書く機会は
すこし減りましたが、
プログラムをかく経験は
僕に人生の一つの教訓をあたえてくれました。



それが、「困難は分割せよ」。
デカルトの名言です。

二分探索の威力



ここに1から1000の数字が100個並んだ
配列があるとします。



[1,2,8,24,57, ..., 995, 1000]


このなかに558があるかどうかを知りたい時
どうやって探しますか。



いちばん愚直な発想は
forループで銭湯から探すことです。
早ければ1回目に見つかるし、
一番遅くても100回目には見つかります。



でもあるアルゴリズムを使えば必ず
たかだか8回で見つけることができます。







それが二分探索です。



競プロをする人にはおなじみの
最もシンプルなアルゴリズムですね。





かんたんに説明すると、
まず配列の真ん中の数字を見ます。
それが620とかであれば、

[1,2,8,24,57, ..., 620, ... , 995, 1000]


558は

配列の左側の

[1,2,8,24,57, ..., 620]

の中にありますね。



これを繰り返していくと、
半分、半分、半分、と
558の入っている範囲を
絞り込んでいけるので
すばやく558にたどり着けるのです。

デバッグするときもそう

実はこの発想が、
プログラムをデバッグする時にも
役に立つんです。



プログラムがエラーをおこした時
勉強中の僕は
よく先頭から怪しいところを
一つずつ確認していました。



でも、
プログラムのだいたい半分のところから後ろを
コメントアウトして実行してみて



そこでエラーが出れば前半に問題があるし
でなければ後半に問題があるわけです。



これを繰り返すと、
エラー箇所にすばやくたどり着くことができます。



人生のデバッグ



人生やっていると、
大きなプロジェクトが
たまにありますよね。



たとえば、英単語帳を
2ヶ月後までに
覚えなきゃいけない。



このとき、
はじめから一つずつ覚えていくのは
愚直な実装に当たりますね。



うまくいけば全部覚えられますが
ペースが遅ければ序盤しか覚えられずに
終わってしまいます。



例えばこうやるのはどうでしょう。

まず
初めの2週間、
単語帳の前半と後半をさらっとやる。

次の4週間は
単語帳を4分割してみっちりやる。

最後の2週間、
単語帳の前半と後半で覚えていないところをやる。



このように分割すると、
全体をまんべんなく対処できますよね。



他にも、例えば
猫型ロボットを作りたいと思ったとしましょう。



どのように分割するか。

僕なら外側と内側に分けます。



外側は3Dプリンターで作って

内側が動くロボットのところです。

ただ、ロボットは複雑なので、
もう少し分割します。



ハードウェアのところと
ソフトウェアのところですね。



ハードウェアはさらに分割して

アクチュエータとか
モーターとか
センサーに分けられますね。



とにかく、人生の困難は
分割することさえできれば
なんてことないのです。



それをプログラムのデバッグから
私は学びました。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1