なぜエンジニアは「設計」にこだわるのか?汎用性を重視するホームページ制作の裏側

今日はエンジニアとしての私の話をしてみようと思います。
ホームページのコードを触っていていつも思うのが、汎用性を高くして構築するかどうかは本当に大事だなということです。
汎用性って何?
前回のブログにも書きましたので、詳しくは記事最後からリンクを辿ってみてください。「汎用性(はんようせい)」という言葉を聞くと、「他の案件でも使い回せるようにすること」と思われるかもしれません。でも、ここで言う汎用性はそういう意味ではなく、その案件の中で同じような機能を効率よく使えるようにすることなんです。
ちょっと具体例を出してみますね。
トップページに「お知らせ」を表示する枠を入れるとします。同じように、お知らせ一覧ページにもそれを入れる。さらに、事例集のページにもお知らせの機能をカスタマイズして入れる箇所があったとします。
後先考えずに、それぞれをその場しのぎで作成すると、その時は問題なくできるかもしれません。だけど、3箇所を同じぐらいの時間をかけて作らないといけなくなるので、とても時間がかかります。
そして、後で「やっぱり枠の横幅を変えたい」「文字サイズを大きくしたい」となった時に、それぞれの枠用のコードを書かないといけなくなります。そうなると、どこに施してどこに施していないかが分からなくなってしまうんです。
設計が大事
エンジニアが「設計が大事」とよく言うのは、こういったことなんです。
さっきの例で言えば、トップページとお知らせ一覧ページでの出力のベースはほぼ同じにしておきます。そして、事例集ではそのベースを元にカスタマイズする。こうすると、時間も短縮できます。
つまり、同じような仕組みであれば、最初に行った作業より次の作業ははるかに短い時間で済みます。そしてそれを元にカスタマイズすれば、一見すると仕組みや見た目が違うものでも、同じベースから作られているので不具合が出にくくて、なおかつ作業時間も早くできるんです。
これが設計の力です。
でも、完璧を求めすぎてもいけない
ただし、設計を優先しすぎて、いつまでも作業を開始しないのもよくありません。
どんなにしっかり設計したとしても、後で必ず矛盾点や問題は出てくるものです。なので、設計で100%の構築をするのは難しいんです。そこに時間をかけすぎることをせず、早く設計をして70〜80点ぐらいの完成度の構築をすぐにできるようにする。この感覚が大事なのではないかと、プログラミングをやっていて思います。
「完璧にしてから始める」ではなく、「ある程度考えたら、まず作ってみて、問題が出たら直す」という感じですね。
人が作ったシステムを触る時の大変さ
最近、人が作ったシステムに手を加える機会があって、改めてこういったことを考えました。
もちろん、自分で構築したものの方が、考え方やコードの癖も自分が把握しているのでやりやすいのは当然です。でも、設計がされていないシステムを触ると、時間がかかるし不具合も多くなるしで、本当に大変なんです。
「なんでここはこうなってるんだろう?」「このコードは何のために書いたんだろう?」と、一つひとつ読み解いていかないといけません。そして、ちょっと変更を加えると、思わぬところに影響が出たりします。
経験の大切さ
上手なエンジニアは、経験豊富でその見極めの速さや知識の多さによる解決策の講じ方が優れていると思います。
「ここはこういう設計にしておけば、後で楽だな」という判断が瞬時にできるんです。そして、問題が起きた時も「ああ、これはあそこが原因だな」とすぐに分かる。
私も常に勉強の身ですが、こういった経験を積み重ねていくことで、より良いシステムを作れるようになるんだろうなと思います。
まとめ
エンジニアの仕事は、ただコードを書くだけではありません。
「この機能を他でも使えるようにするには?」「後で変更が必要になった時に、どう対応できるようにしておくか?」「どこまで設計して、どこから実装を始めるか?」
こういったことを常に考えながら作業しています。
地味で見えにくい部分ですが、この「設計」がしっかりしているかどうかで、後々の作業効率や品質が大きく変わってくるんです。
エンジニアって、こんなことを考えているんですよ。大変だけど、面白いんですよ(^^)
