なぜ僕は設計を勉強するのか
背景
ある程度動くものは出来ますが、設計が出来ません。
厳密には自分が設計と思っていたものは設計ではなかったというのが正しいかもしれません。
僕がこういうエンジニアになりたいなと思った人たちはみんな設計が出来ます。
なので、漠然と設計できるマンになりたいと思っていました。
How(設計する)にこだわりすぎてWhy(なぜ設計する)を把握していなかったため、今回記事にしてみようと思った背景があります。
著者の簡単な経歴
ざっくりです!
- 2016年4月 未経験からweb制作会社でWordPressやHTMLのコーディングを実務で行う(2年ぐらい)
- 転職してシステム開発をphpメインでやってきた
- 2021年6月の時点で5年目突入
設計という単語の意味
設計という単語はよく使うけど、しっかりと調べたことが無いため調べる。
設計(せっけい、英: design)とは、建築物や工業製品等といったシステムの具現化のため、必要とする機能を検討するなどの準備であり、その成果物としては仕様書や設計図・設計書等、場合によっては模型などを作ることもある。
wikiと同じ内容ですが、自分の言葉でも落とし込む事は大切なので意味を記載する。
設計は作りたいものに対して必要とする機能を検討するために準備をする事を指す。
その結果として、仕様書や設計図・設計書などが完成する。
設計とは英語でdesignと言うようです。
designとは
designの意味を調べた。
下図を作る、デザインする、設計する、(…を)計画する、立案する、企てる、つもりである、(…を)予定する
自分はデザインと聞くとアートを指すイメージでしたが、設計するという意味でもあるみたい。
ソフトウェア設計
本記事で理解する対象の設計を何か。
それはソフトウェア設計というようだ。
何を当たり前の事をという人もいるかもしれないですが、僕は普段勉強している設計が何設計かを理解していませんでした。
ソフトウェア設計を知る
ソフトウェア設計とは何か 〜 設計にはプログラミング経験が必要か否か
モノづくりにおいて、大きく工程を2つに分けるとしたら「設計」と「製造」に分けることが出来ます。何をどう作るかを決めることを「設計」と呼び、それを実際のモノにすることを「製造」と呼んでいると思います。
ソフトウェア設計が必要な理由を理解するのにソニックガーデン倉貫さんの記事を参考にしました。
この記事を読んで自分が大きな勘違いしていたことに気づかされました。
それはソフトウェア開発の工程には「製造」がないという事。
プログラマの仕事は「設計」であり、ソフトウェア開発の「製造」に人は要らないのです。
ソフトウェア設計にも大枠だが「仕様を設計する」「仕様を実装する」2つの工程があります。
次にそこを整理していこうと思います。
仕様を設計する
ざっくりいうとクライアントの前に出て、実際に作りたいものをヒアリングしたりする。
クライアントは大抵ソフトウェアの事をよく知らない人たちです。
やりたいことはあっても、本当に必要なものが何かまでは把握していない事が多々あります。
そこを一緒に整理していくのがこの工程で行うこと。
この工程の事を要件定義と言います。
要件定義でまとめるのは「クライアントのやりたいこと」だけに留めて、「どんなシステムを作るか」ではない。
・何を目的としたシステムなのか
・何をするシステムなのか
・そのシステムには、どんな機能があるのか
・そのシステムは、どんな機器で動くのか
・どうやって、そのシステムを作っていくのか
これらの行為は基本設計や内部設計と呼ばれている。
基本設計とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
仕様を実装する
基本設計を基にして、プログラムの中身を詳細に詰めていき、ソースコードに落とし込んでいきます。
このソースコードに落とし込む行為が世間でイメージされているプログラミングかなと思います。
ただソースコードに落とし込むではなく、ここでもやはり設計が必要になってきます。
ここでいう設計とは、どういった構成で作るのかなど既存のソフトウェアであれば既存の調査も必要です。
これらの行為は詳細設計や外部設計と呼ばれている。
詳細設計とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
なぜソフトウェア設計は大切なのか
仕様を設計する人は必ずしもプログラミングの知識がある人ではない事があります。
プログラミングの理解が足りていない人が設計をすると非現実的な仕様が生まれる可能性があります。
その結果、顧客との認識がずれてしまい求めていたものが作られない。
要件・仕様を間違えると以降の工程に影響が出ます。
そのためプログラマは正しいソフトウェア設計の仕方を学ぶ必要があります。
まとめ
本記事では設計を勉強する前になぜ設計を勉強する必要があるのかを記載しました。
著者も勉強中のため、頭の整理が追いついていなくて文章が変な箇所もあるかもしれません。
矛盾している箇所があればコメントいただければと思います。
別の記事で設計を学ぶための計画を立てた内容を書きたいと思います。
書いた!
ソフトウェア設計をどうやって学ぶか
Discussion