###総論
私はこのteratailで500回以上、回答してきました。
すると、何回も同じような質問を繰り返している人を見かけます。
一方で、一を聞けば十を知り、メキメキ上達していく人もいるでしょう。
さて、伸びていく人とそうでない人は、何が違うのか?
知るべきことはなんですか?
- 技術的資産を貯めること、
- 技術的負債を溜めないこと。
結論から言うと、技術的資産を貯める方向に行く人が、技術的に伸びていきます。
しかしいったい、何が資産で、何が負債なのか? 以下、説明していきましょう。
###仕様の理解
- 資産 → コードが基づくべき仕様を理解して、正しく動かす
- 負債 → 意味が分からないまま、コピペのツギハギで動かす
解説:エラーはコードの文法に違反しているものですが、
バグは仕様とコードの差から生じます。
だから、仕様とコードを対応させる必要があります。
最近普及してきたDDDなども、コードをドメインの言葉に合わせていく技法です。
仕様の理解には、自分の専門分野の知識、業務知識が大事です。
典型的なのはたとえば、会計の知識や統計の知識とかがそうです。
また、仕様を理解する点において、英語と数学は大きな武器です。
たとえば流行の機械学習でも、このふたつが理解する武器になるでしょう。
英語と数学は、最新のプログラム言語やフレームワーク(FW)よりも、
陳腐化が確実に遅いです。おそらく一生使える技術でしょう。
一方、言語やFWはひどいときには、流行した来年には、もうオワコンになっている。
だから、言語やFWの学習だけで力を使い果たさず、英語と数学を細く長く学びましょう。
###コードを読む
- 資産 → 他人が書いたコードを読み、良い要素があればマネしていく
- 負債 → 書いたら書きっぱなし。自分のコードですらまともに読み返さない
解説:プログラムは書くより読む方が難しいので、読む技術が重要です。
ただ、実用的なプログラムは、読むには、規模が大きすぎたり、複雑過ぎたりします。
そこで、キレイなコードが書いてある本を、何度も読み返すと良いです。
たとえば、とくにJavaなら、ファウラーの『リファクタリング』がオススメ本。
「リファクタリング」は読んで書き直すことだから、読む技術の訓練に良いです。
この『リファクタリング』を最近読み直したら、実装の書き方にとどまらず、
設計的にもドメインモデリングしていることに気づき、あらためて感心しました。
OOPで書くとどういうコードになるのか、という良いサンプルでもあります。
また、Javaでは、「デザインパターン」の本も良いと思います。
###変更を容易に
- 資産 → テストを書くなどして、プログラム全体を使いやすくしていく
- 負債 → その場しのぎの修正を繰り返し、全体が分からなくなっていく
解説:テスト、ロギング、例外処理、UML、ドキュメント……などを書く。
これらは手間は掛かりますが、プログラムを使いやすく、資産化していきます。
一方、動けばいいやと場当たり的な修正を繰り返すだけだと、
だんだん全体の構造が不透明になっていきます。
たとえば、IF文やFor文のネストが深くなっていくとかです。
とくに長期間に渡って保守すると、一回一回は一行の修正とかでも、
何年も経つにつれて、手に負えない技術的負債になっていきます。
変更が大変で、ちょっといじると、すぐ動かなくなってしまい、
とても触りたくない、負の遺産になります。これを維持するのは苦しい。
なるべく早く捨てたい、次に押しつけたい、トランプの「ババ抜き」になってしまいます。
ここで、詳細は省きますが、正しくオブジェクト指向で書くと、変更容易になります。
関数型も筋の良いプログラミングですが、
今回のようにPHPとJavaが前提なら、基本的にOOPが向きます。
OOPの話をすると長くなるので詳細は省きますが、ここでは一点だけ、
スモールオブジェクトで構成すると、テストが容易になる、ということに触れておきます。
逆に、深くネストしたIF文やFor文は、テストしにくいのは自明でしょう。
###結論
- 意味が分からないまま、コピペのツギハギで動かす
- 書いたら書きっぱなし。自分のコードですらまともに読み返さない
- その場しのぎの修正を繰り返し、全体が分からなくなっていく
まとめると上記が、典型的な技術的負債を溜め込むアンチパターンです。
逆に今回、技術的資産にした方は、どれもイニシャルコストが高いものです。
英語や数学が典型的ですが、学習コストが掛かります。オブジェクト指向も難しい。
初期コストが高いと避けがちなので、ずっと身につかないままという場合も多い。
だから、**「継続は力なり」**で、筋の良いやり方がたとえ難しくても、
たとえ忙しくてできない期間があっても、細く長く続けて学んでいくことが重要になります。
一日や二日では効果を実感できなくても、一年や二年も経つと大差になります。
結論をまとめると、「急がば回れ」、**「ウサギとカメ」**です。昔からの真理。