isatoの活動日記

管理人isatoが毎日の生活で気になったこと、勉強になったことを書いています。

効率的にプログラムを書くための思考

最近どうやったらもっと効率よくプログラムが書けるかを考えていました。ここで言う「効率がよい」とは、問題を解こうとしてから解くまでにかかる時間についてです。

 

結論から言いますと、「解きたい問題を、自分の能力で解ける問題に素早く分解すること」が重要だと考えました。

 

 

少し話を変えます。

自分の知らない分野の論文の理解が難しいのはなぜでしょう。それは著者が基礎知識を知っている人を対象に書いているからです。そうしないと、膨大な分量になってしまいますからね。

 

人は話すときもこのような「飛躍」をよく使っています。若い人と年配の人で話が通じないのはこれが一つの原因です。

 

今までの話は人同士のコミュニケーションでした。これを人と機械のコミュニケーションに置き換えてみましょう。

 

機械はプログラミング言語という言葉のネイティブスピーカーだと思ってください。

ある問題Aを解いてほしいとき、機械にどう伝えますか?

 

「A解いといて!」

 

これで伝わったら話は早いですね。でもこう返されるかもしれません。

 

「Aって何?」

 

上で述べたようにお互いが、ある情報を同じ意味として共有しているからこそ、話が通じるわけです。

 

ではこうしてみましょう。

 

「BをしてCをしたらAをしたことになるから、お願い!」

 

このようにすれば、機械がBとCを知っていれば、Aを実現できますね。しかし、このように言うためには人側もBとCを知っていなければなりません。

 

人側がBとCを知らなければ、このようにしないといけないかもしれません。

 

「1と2をするとBができるからよろしく。

  あと3、4、5を順にすればCもできるよ。

それができたら、BとCでAを解いてね。」

 

長いからダメと思われるかもしれませんが、Aが解けたことに変わりないので僕は全く問題ないと考えます。問題はこの文章がすぐに思いつくかどうかです。

 

BとCを知っていれば、より早く思いつくかもしれませんね。

 

つまり、「解きたい問題を、自分の能力で解ける簡単な問題に素早く落とし込めるかどうか」がプログラムを書く効率に影響を与えるということです。

 

また、自分で解ける問題が多ければ多いほど、プログラムを書く効率は上がっていくでしょう。

 

まとめるとこのようになります。

・自分の能力を把握しておいて、その能力で解ける問題に素早く分解する。

・常に勉強して自分で解ける問題を増やす。

 

 

まだまだ勉強します。