ITエンジニアのレベルアップ 未来を想像した汎用的な開発をする

プログラミング 汎用的な作り プログラミング

今回はITエンジニアの中でもプログラマーという職業の方向けの発信をします。

プログラマーというと仕様書を実装するだけというイメージがあるかと思います。
しかし実際に仕様書の通りに実装をすると拡張性のない実装になり、後々大変なことになります。

プログラミングについての新しい言語やフレームワークやデザインパターンが目まぐるしく出てきている状況ですが、
これは仕様を実現するために出来ているわけではありません。仕様を実現するだけなら一つの言語を使い回せば出来てしまうからです。
個人的には、こういったプログラミングのめまぐるしい発展は、プログラマーは未来の事が分からないという問題を解決するためのものだと考えています。

プログラマー(人)は未来の事がわからない

例えば、今あなたが作っているアプリが一年後、三年後どういった機能が追加されていき最終形態はどうなるのかを予想できるでしょうか。

おそらく分からないのではないかと思います。
最初から最後まで計画されているプロジェクトはほとんど存在しないからです。おそらく分かっているのは短期の数ヶ月の姿だけではないでしょうか。

これはSE、PM、お客さんなら分かるのかというとそうではありません。
そこまで想定しているわけもないし、
未来のことはプログラミングにかかわらず誰も想像できないのです。

これらの問題があるから、機能を追加する際にめちゃくちゃ時間がかかったり、そもそも不可能な作りになっていたりなどの問題が生じます。

未来がわからないから、仕様書をそのまま実装してしまう

とりあえず仕様書をそのまま実装してしまう人がいるかと思います。

これがダメだというわけではありません。
仕様書を実現することはマストで、実現しないとそのままバグとして扱われてしまうからです。

しかし仕様書をそのまま実装すると、拡張性のない実装になってしまい、結果スパゲティコードになり他のアプリの開発速度に追いつかなくなります。

仕様書の実装+未来を想定した実装

では仕様書の実装はするけど、それに加えて未来を想定した実装をするというのはどうやればいいのという話をします。
これに関して明確な答えはありませんが、コツはあると考えています。

例えば以下のような仕様があったとします。
①店舗詳細画面Aの作成
②Aの座標をもとに地図に場所情報を表示する画面Bを作成

ここで、
何も考えずに作成すると
②の画面を作成するプログラマーは①画面の処理を使って座標を取得してきて地図を表示するかもしれません。

しかし本当にそれがベストアンサーでしょうか。
例えば、店舗詳細画面ではなく、工場詳細画面Bができたらどうなるでしょうか。
地図に場所情報を表示する画面Cを作ることになると思います。
そうするとコードは煩雑に増えてしまいます

悪い例

これでは、改修のたびにコストや時間がかかってしまいます。
このように仕様をそのまま実装するだけでは理想的とは言いづらい結果となってしまいます。

そこで②の画面の実装者が以下の考えを持つとどうなるでしょうか。

仕様ではAの座標をもとにと書いているけど
この画面を座標が渡されたら地図を表示する画面にしたら
仕様も満たせるし、機能追加された時にでも使いまわせるんじゃないかな

上記のように考えると、先ほどの工場詳細画面が追加された時に、こうなります。

良い例

上記を見ると、店舗詳細画面Aと工場詳細画面Bから緯度・経度を渡すだけで、地図表示ができるようになっている事がわかります。
このようにすると、地図表示するだけなら画面追加するたびに地図の実装をしなくても良い事がわかります。
地図表示画面の汎用性が強くなり、アプリケーションとしては気軽に地図を表示できるようになりました。

まとめ

今回は、プログラマーのために、ただ仕様書を実装するだけではなく次のステップとして
汎用的に作るという考え方をご紹介しました。

私の経験では、これは経験が10年ある人でも出来ていない人は結構いる印象です。
つまり、毎回開発のたびに汎用性を考えるようにしておけば、多くの人より上に立てるようになります。

開発のたびに以下のような事を考えてみてください。

  • 作る画面は他の画面への依存があるか
  • 依存がある場合、依存がない作りにできないか
  • この機能と似たような機能を作るケースが考えられるか、考えられるなら今の作りでコードの修正を入れずに使いまわすことは可能かプロ

コメント

タイトルとURLをコピーしました