設計と開発の違いと設計者に求められる3つの資質
現役中年SIerが、キャリアパスに悩む20代SIer・SE(システムエンジニア)に向けて記事を書きます。「開発者としてシステム導入プロジェクトに参画しているが、自分は設計にも手を出せる?」「設計やった事無いけど難しいの?」と思っている人は是非読んで参考にしてみてください。
目次
設計者とは?
SI PJにおける設計者とは、
顧客(クライアント)の要件(要望)を実現するための機能と、
その仕様(機能の動きの正解)を定義する人の事です。
設計者は設計書を書く事が仕事だ
と思っている人もいるかもしれませんが、
私は違うと考えています。
もちろん設計書を書くのは設計者の仕事ですが、
設計書あくまでも機能と、その仕様を
他者に伝える手段(成果物)にすぎません。
設計者に必要な資質(知識・経験・能力)
正直な所、自分で考えて開発が行える人であれば
誰でも設計を行えると思っています。
とはいえ、それでは答えになっていないので
一応、SI業界にて設計者に求められる
最低限の資質3つ挙げておきます。
論理的思考能力がある
最終的に作成するシステム
(プログラム)は論理的に動くので、
設計書も論理的である必要があります。
"論理的"とは、
「A⇒B(AならB)」「B⇒C(BならC)」
ならば、「A⇒C(AならC)」
みたいな物です。
※正直上記ではわからいないと思いますが、
気になる人は自分で調べてください。。。
そして"論理的思考能力がある"とは、
"使用可能な手段"を使って、
どうにかして"ゴール"にたどり着く方法を考えられる
ことだと思っています。
例えば、
ゴール:8
使える数字:2、4
の場合
方法としては、
2×4=8
2 + 2 + 2 + 2 = 8
(4-2) × 4 = 8
等 色々考えられますが、
とりあえず8を導き出せればOKです。
もちろん上記を見てわかるとおり
効率的な道筋もあれば、非効率な道筋もあります。
これが、
"できる設計者"と
"できない設計者"
の違いの1つです。
とはいえSI業界に絞っていえば、論理的思考能力が無くても設計書自体を書く事はできます。。。なぜならSI PJで導入するシステムの機能は限定的だからです。基本的には"登録(編集・削除)"、"検索"、"参照"、"データの加工"の組み合わせで機能を実現するので、簡単な機能であれば誰かの設計書を真似て書けばそれなりの設計書が出来上がってしまいます。。。とはいえ、私は論理的思考能力の無い方は設計者になって欲しくない(私は一緒に働きたくない)とは思っています。。
顧客の業務を理解できる
ITシステム導入の良し悪しは、
顧客の業務をサポートできるシステムを
構築できるか?
にかかっています。
ですので、
まず顧客がどういった業務を行っており、
どういった事に困っているのか?
を理解できていないと
良い設計を行う事はできないと
私は考えています。
もちろん上流工程の担当者(コンサル)が
要件定義を行い、要件を整理しますが
その内容を正しく理解できないと
良い設計を行う事はできません。
導入するパッケージ・開発フレームワークを理解している(得意・不得意を理解していると尚可)
実現手段(パッケージやフレームワーク・プログラム、DB 等)で
何ができるのか?を知らないと機能を定義する事はできません。
また、導入するパッケージや開発フレームワークでは
実現が難しい方法で機能を設計してしまうと
開発時に困る事になります。
一方、パッケージや開発フレームワークが
得意とする事(標準で有している機能 等)を知らずに
無理やり設計してしまうと、
無駄な開発が必要になり、
バグを発生させる要因になります。
上記3つの能力・知識があれば、後は他者(先人)の設計書を見る事で書き方や考え方を真似て設計書を書くことができます。実際、私は新卒1年目の時に初めて設計を任せられましたが、先輩の設計書の書き方を参考にする事で、無事書きあげる事ができ、レビューを通過しました。これは事前に顧客の業務をある程度理解しており、且つ、プログラムに関しては大学時代にC言語を学び、Javaにてプログラムを組んだ経験があったためだと思っています。
良い設計者になるためには上記に加えて「システム構築のお作法(ベストプラクティス)」を勉強するのが良いと思います。ベストプラクティスは色々あるので、ここでは書ききれませんが、例えば"標準化"という考え方や、"ユーザビリティ"という概念は理解しておくのが良いと思います。
設計者と開発者の違い
上記に設計者に必要な3つの資質を
記載させていただきましたが、
正直、これはプログラマにも
必要な3要素だと思っています。
ですので、
"良い設計者"と"良いプログラマ"に
違いは無いです。
強いて言えば設計者は
- より顧客業務に精通しておく方が良い
- システム全体を考えられる必要がある(機能の切り方等)
- パッケージやプログラム・DBについてはそこまで細かい知識は不要
一方、プログラマは
- 効率的で可読性の高いコードを書ける必要がある
- 顧客業務についてはなんとなくの理解で良い
あなたも設計者に成りませんか?
上記でも書いた通り、
あなたが自分で考えて
プログラムを組める開発者なのであれば、
今すぐにでも設計者になる事は可能です。
正直、日本のSI業界では
開発者よりも設計者の方が給料が高くなります。
悩んでいるのであれば、
チャレンジする事をお勧めします。