私はこの部分が難しく感じています。
処理のロジックは理解できるのですが、設計思想が理解できたという感覚は掴めません。
初心者にありがちなのが、
・「動けばいい」と考えているとしか思えないような修正をする
というのがあります。
確かに仕様通りには動くけど、その修正はあかんやろ。という修正です。
ロジックが仕様を満たす。
これは大前提ですが、これだけだと「コードを書く前にもっと考えろ」となります。
色々考えないといけないことはありますが、例をいくつか書いてみますね。
まず、業務で作成するプログラムは、ビジネス文書だと考えてください。
理解しやすいように無駄なく簡潔に、第三者に見られることを意識して書きましょう。
とにかくプログラムの流れを読んでください。
オブジェクト指向なら、主要なインスタンスの基底クラスが参考になる場合も多くあります。
処理はどうやって実現しているのか、
・いくつかのブロックに分けてそれぞれ別の設計思想を持つ。
・フレームワークをベースにして統一したインタフェースで流れを見やすくしている。
・アプリケーションに特化した処理と汎化された処理を明確に分ける。
など、大小様々な工夫を組み合わせて処理は実装されています。
(もちろん、何も考えずに作られたスパゲッティなものもありますが・・・)
設計書にそのあたりが書いてあることもあります。
が、残念ながらそういう物は無い事が多いので、ソースから読み取るスキルは重要です。
流れが読めたなら、その流れに逆らわないように実装してください。
流れを無視して書くと、「もっと考えろ」と言われます。
実装する際にも、
・構成要素間がどれだけ粗結合になっているか。また、結合関係は整理できているか。
・同じような処理が複数ヶ所に散らばっていないか。部品化は適切にできているか。
などは意識してください。
例えば、Xという共通モジュールがあって、A,B,Cなどから使われている場合で
・Dというモジュールを作る際にXの処理と同じような処理をD内部に盛り込んだ
・Xの処理を拡張する際に、AのリソースをXから参照するようにした
などと、元の設計を崩すような作りにするのは御法度です。
などは一例ですが、結局の所
元のプログラムを書いた人はどう考えていたのかを読むことが重要です。
デバッグの際にも「なぜ間違えたのか」と「どう実装するつもりだったのか」が理解できるようになっていると根本的な対応が取れるので、場当たり的に対処しなくなります。
とはいえ、
慣れるまでは色々と見えてこないとは思います。
慣れるまでは、コーディング開始前に
「元のプログラムはこういう流れになっているので、こういう処理を実装しようと思います」
と、チームリーダーなどに実装方針をレビューしてもらうのが無難だと思います。
そうすれば少なくとも実装後の「もっと考えろ」は無くなるはずです。