ラベル ロジック の投稿を表示しています。 すべての投稿を表示
ラベル ロジック の投稿を表示しています。 すべての投稿を表示

2020年9月26日土曜日

プログラミングのロジックはアナログから考えろ

こんにちは。

経験が浅いプログラマーは、
「このプログラムのロジックが思いつかない。」
「プログラミングのロジックってどうやって考えれば良いの?」
と悩むことがあると思います。

ロジックというのは、処理の手順のことです。

私は、以下の方法でロジックを考えています。
  1. プログラミングのロジックはアナログから考える
  2. アナログな方法を抽象化する
  3. ループ処理を入れ子にしない

私は10年以上プログラマーとして働いて来た。
経験が浅い頃は、ロジックが分からなくで悩んだりしていました。
でも、今ではロジックが分からなくて悩むことはなくなりました。

いろんなロジック考え実装してみて、たどり着いた結論が上の3つの方法になります。

以下で細かく説明していきます。

1.プログラミングのロジックはアナログから考える

プログラミングのロジックは、
アナログな処理を自動化することです。

なので、まずは、
「自分がこの処理をするなら、どうやってやるか?」
を考えてみましょう。

例えば、
与えられた2つの数字から、その間の合計を計算するロジックを考えてみます。
与えられる数が1と10なら、55を返えします。

その場合、
1+2+3+4+5+6+7+8+9+10=55
と計算しますよね。

なのでロジックとしては、以下になります。
  1. 与えられた小さい数に1を加える
  2. 与えられた小さい数を合計に加える
  3. 合計に1で作成した値を加える
  4. 1で作成した数に1を加える
  5. 3、4を繰り返す
  6. 4で作成した数が与えられた大きな数になったら終わり
  7. 合計を返す

でも、実際にプログラマーとしてロジックを作っていると、
アナログな方法が分からないこともあります。

そんな時は、プログラミングの依頼内容が理解できていないのです。

なので、プログラミングを依頼して来た人に聞いてみましょう。

つまり、プログラミングのロジックを考えるにはアナログな方法を考えるのが1番です。

2.アナログな方法を抽象化する

上で書いた方法は、アナログなロジックです。

プログラミングする上では、アナログなロジックでも良いのですが、
処理速度が遅くなることがよくあります。

上の例だと、与えられる小さい数と大きい数の差が大きい場合、時間がかかってしまいます。

そこで用いるのが抽象化の考えです。

上の例だと、数学に強い人はすぐに分かると思いますが、
以下の式で求めることができます。

合計 = n * (a + b) / 2
aとbは与えられた数
nは、aとbの間の個数 (b - a + 1)

このように、ロジックを抽象化することで、
常に同じ処理時間で処理できるロジックを作ることができます。

3.ループ処理を入れ子にしない

これは、プログラミングのロジックを考える方法ではないのですが、
ロジックを考える上で、常に頭に入れておいた方がいいことです。

ループ処理というのは、繰り返し行う処理のことです。

つまり、繰り返し処理の中で、繰り返し処理を行わないということです。

ループ処理が入れ子になると、処理時間がかかるからです。

例えば、
10回ループする処理の中で、100回ループする処理が入っていたとします。
すると、その処理の中では、1000回の処理が実行される事になるのです。

ループの回数が固定なら、同じ処理時間で終わるのでいいのですが、
ループの回数が与えられた数で変動する場合は、処理を見直した方がいいです。

特にwebシステムの場合は、データが多くなるにつれて処理が重くなり、
挙句の果てに、画面表示がタイムアウトする事になります。

このような不具合はよくある事で、
最初はサクサク動いていたのに、使っていくうちに重くなっていくのです。

どうやって勉強すればいいの?

最後に、プログラミングのロジックの勉強方法について書きますね。

プログラミングのロジックは、
「どんなシステムを作るのか」
「どんな処理を作るのか」
とさまざまです。

なので、勉強して覚えられることではありません。

でも、いろんなロジックを見ていると、
「あそこで使ってたロジックが使える」
「あのロジックを少し変えれば使える」
と思い出せるようになります。

経験が浅いうちは、ソースコードを読む事も少ないと思います。

しかし、Web上には多くのシステムのソースコードが公開されています。

公開されているソースコードをまずは読んでみましょう。

何故このようなロジックになっているのか
を考える事でプログラミングのロジックを鍛える効果があります。

また、プログラミングについても知識を増やせると思います。

まずは試してみてください。

では、今日はこの辺で。