30
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ソフトウェアにおける「設計」とは何か?

Last updated at Posted at 2017-06-17

私は絵を描くのが好きなエンジニアです。デザイン的な観点から、ソフトウェア設計が語られることが少ないのかなと思い、自分の考えを整理してみました。

「設計」に対するイメージ

job_kenchikuka_woman.png
「設計」と言われると精密な設計図を描くような高度なイメージが湧きませんか?
より高度な人材が上流工程で設計し、下流工程でそれに沿って実装を行うような、工業製品を作るような印象です。

ソフトウェアにおける「設計」の本質

art_live_painting.png
英語では「Software Design」ですけど、私は「デザイン」の話だと思います。
これは、UIデザイナー等が行う「デザイン」と同じ内容になります。

そもそも「デザイン」とは、絵を描けること等とはあまり関係がなく、状況を分析し構築することを指します。
噛み砕いて言うと、『使い易さを考え続けること』、これをしていればデザインをしていると言えます。あまり難しい話ではありません。

誰が為にデザインをする?

デザイナーの場合は、顧客の要求に合わせてデザインを検討するのですが、エンジニアは「隣で働くエンジニア」に向けてデザインをします。

デザインの範囲は広く、アーキテクチャの選択からif文1行に至るまで、デザインを必要とします。
その為の体系的なノウハウとして、デザインパターンやMVC、MVPアーキテクチャ、エクストリームプログラミングなどなど・・数え切れない程の技術が生まれています。

「デザイン」センスを磨くには?

bijutsu_paint_woman2.png
デザインをするにはセンスが必要です。そして、センスは日々の鍛錬により鍛えられます。
その為に効果が大きい技術として、「ユニットテスト」、「TDD/BDD」が挙げられます。

鍛える為の手っ取り早い方法は、「失敗」の数を増やすことです。
まずはユニットテストで仕様を描き、あとは大雑把にロジックを書いたり、新しく学んだデザインパターンを採用してみたりと大胆に挑戦していきます。
絵を描く人が、まず当たりを付けて、デッサンを行って鍛えるのと同じです。

業務の場合でもテストがあれば、大胆なリファクタリングもし易い為、ある程度の罪は許されるのではないでしょうか。
むしろ、テストのない仕様をしっかりと固めたコードよりも、テストがあって作り変え易いコードが、ソフトウェアの設計には求められています。

最後に

良いプログラマとは、たとえ意識的じゃなくても、デザインをしている人です。
デザインは奥深く、楽しいものです。是非皆さん1文字1文字に思いを込めて、キーを叩きましょう!

30
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?