設計は大まかな実装であり、経験無しに上手くならない
設計について、大事だが掴みどころの無いものと思っていた。
だが、実装や日々のアウトプットの延長に過ぎない、
経験がないと身につかないものだと気づいた。
良い諦めがついた。日々努力しようと思う。
設計力、抽象的で本質的なスキルである。
バックエンドの肝であるとも言える。
設計力を身につけるには結局、手を動かして実装をする経験を積むしかない。
魔法の設計術のような、これさえ気をつければ OK というものはない。
ある程度の指針はあれど。魔法はないと諦めることこそ設計上達の秘訣かもしれない。
日々実装、アウトプットを繰り返して経験値を積む。
簡単に身に付くものは抜けるのも早い。
実装して動かすことはすぐに身に付くが、
実装して設計を身につけるのは時間がかかる。しかし経験をもとに確実に身につく。
web 系の設計であれ、大規模な SI 系の設計であれ、
何度も実装や仕様書を書いてレビューを貰うことを繰り返して、ここが悪かった、ここが良かったなどど比較すると、
良い実装の嗅覚が身に付く。すると良い実装ができ、
工数やバグを減らせる。
数学の基礎は応用問題をたくさん繰り返さないと、身につかないと聞いたことがある。
基礎とは様々な応用問題から、本質だけを抽象化したものだからだ。
極論言うとわかりやすいが、プログラミング歴 3 日の人が学習用途に作るものの設計なら、
業務経験が浅いエンジニアでも容易くできる。
設計だけでなく、
インフラ費用の見積もり、要件定義、チーム開発力のような、
本質的で抽象的なものを身につけるには具体的な実装のアウトプットを繰り返す必要がある。
書籍、7 つの習慣で言うところの刃を研ぐ作業だろうか。
見積もりには実際どのサービスが使ってみる。するといくらかかるのような知識が手に入る。
技術選定にはそれぞれの技術を軽くでも良いので使ってみるのが一番、思想くらいは予測つくかもしれない。
もちろん、できるだけ深く/できるだけ広く経験があると最高だ。
すべきことは実装やその反省の言語化など、アウトプットの繰り返し。
毎日一歩一歩進めば、10 年もすればかなりの力になっているのだろう。
アウトプットを繰り返すだけで、インプットやフィードバックはほぼ自動的に得られるのが、ソフトウェア開発の面白いところ。
その時にこれを読み返すのが楽しみだ。