カテゴリー
エンジニアキャリア システム開発全般

ハードウェア開発とソフトウェア開発の違い

私は大学院と機械系の専攻をしていて大学院を卒業した後、最初のキャリアとして2年半、家電メーカーで機械設計エンジニアとして働いていました。

その後、2度の転職を経てWeb エンジニアになった後、独立して今に至ります。家電メーカーの機械設計エンジニアとWeb エンジニアについて、どちらもエンジニアという括りですが、ハードウェアのエンジニアとソフトウェアのエンジニアでは業務は全く異なります。本記事ではその違いについて書こうと思います。

機構設計というのは家電や自動車などの製品の機械部品を設計する仕事です。製品のデザインを決める外装や、内部構造を決める金属やプラスチック製の部品、またコードなどの付属品を決めます。2次元や3次元のCAD(3Dモデルを作成したり、2次元図面を作成するソフトウェア) を用いて、要件を満たす部品の構造や形状、素材や加工方法などを設計していました。

一方、プログラマーやシステムエンジニアは、ソフトウェアを開発する仕事です。要件定義によって決定した仕様をもとに設計を行い、設計された機能をプログラミングによって実装します。

私の経験をもとに体験したハードウェア開発とソフトウェア開発の違いを表にまとめてみました。

ハードウェア開発とソフトウェア開発業務の違い

ハードウェア開発ソフトウェア開発
1実際に形がある(物理的な制約を受ける)物理的な制約がほとんどない
2製造物にばらつきがある実行環境で差はあるが、ばらつきは少ない
3デリバリーが必要で、リードタイムが長いデリバリーはネット経由
4さまざまな規格があり、準拠する必要がある規格は存在するが、ハードウェアほど多くない
5法律的な制約がより厳しい法律的な制約は少ない
6技術革新のスピードは比較的緩やか技術革新のスピードが非常に早い
1.実際に形がある(物理的な制約を受ける)

アプリやWebサイトなど、ソフトウェアの場合は形がありません。基本的に作成したものは、スマートフォンやパソコンのディスプレイに表示されたり、それらコンピュータの内部で電気信号として動作します。

しかしハードウェアの開発では、最終的な成果物として実際に質量をもち、形状をともなったモノがつくられます。実際に形があるモノは、サイズ、重量、形状、素材などによって様々な物理的制約をうけます。

サイズや重量が大きければ、移動が困難になるし、設置・保管場所にもより広い場所が求められます。形状によって、壊れやすさや持ちやすさが変わるし、怪我をしないように鋭利な部分が無いようにする必要があります。素材によって、腐食や劣化を防ぐ考慮も必要です。

ソフトウェアの場合は、ディスプレイのような表示装置のサイズやキーボードやタッチパネルのような入力装置の制約はあるものの、ハードウェアに比べて物理的な制約は非常に少ないです。置き場所の心配や腐食する心配をする必要はありません。

2.製造物にばらつきがある

あるソフトウェアを配布した場合、実行環境、スペックの高いスマートフォンと低いスマートフォンでの実行によって、性能に差がでるもののプログラムの内部は配布されたすべてで同じになります。

しかしハードウェアの場合、大量生産された製品は見た目が同じであっても、すべての製品が少しずつ差異があります。設計上は同一になっていても、実際に製造された製品を構成する各部品には、わずかに仕上がりの形状や品質にばらつき生じてしまうからです。そのため、ハードウェアの設計では、ばらつきをコントロールしたり、一定のばらつきが存在しても製品が問題を起こさないように考慮する必要があります。

3.デリバリー(配達)が必要で、リードタイム(納期)が長い

インターネットが普及した現在において、ソフトウェアの配布はネット経由でダウンロードさせることが簡単にできます。

ハードウェアの場合は、部品の調達→生産会社、部門での組立・製造→自社への納品→ユーザーへの配送、というデリバリーが常に発生します。製品に不具合があり、返品や交換の対応をする際にはユーザーから自社への送付という逆のながれも生じ、その度に大きな発送・受領の大きな手間が必要になります。

4.さまざまな規格がある

ハードウェアの設計の際には、様々な規格へ準拠する必要があります。JISのような工業規格があり、自社で決めている規格や、BtoBで納品先がある場合その納品の規格に従うことも必要です。それなりの規模の会社になると必ず技術的規格もっています。規格に従うことで、汎用的な部品や設備の使用が可能になったり、発注先や納品先などの取引先とのやりとりにかかる時間や手間を削減することができます。

5.法律的な規制がより厳しい。業界的な自主規制もある。

また、国や自治体によって定められた環境負荷物質やリサイクル、電源や電波法など。国外に輸出する場合には、輸出先の法律による規制もあります。

また特許で守られている技術もあるため、新しい機能や形状を試みる場合には、他社の特許を侵害する可能性がないか調査する必要があります。逆に、他社の特許にふれず新規性や進歩性があるものについては、それに関する特許を出願することもあります。

6.技術革新のスピードが緩やか

ハードウェアの開発では、ここまでで記載してきたような多くの制約が存在するため、技術革新のスピードは緩やかだと言えます。ネジについて誰よりも詳しいこの道30年の職人的社員みたいな人が重宝されたりします。

ソフトウェア開発だと、一時もてはやされた最新技術が2~3年で陳腐化してしまうことは、当然のようにおきますし、あらゆるソフトウェアはアップデートされていくので10年以上用いられるそのまま使える技術のほうが稀です。

制約が多い難しさ、少ない難しさ

ハードウェアの開発は制約が非常に多いです。なにか物を開発する場合、それら多くの制約を把握して、制約を回避しなければなりません。またどの工程においても費用や時間がかかるため、失敗に対する許容度が低く、慎重に工程を進めてゆく必要があります。自動車のリコールのニュースは度たび目にすることがありますが、担当エンジニアの青ざめる顔が思い浮かび、身につまされる思いがします、、。

ソフトウェアの開発は、ハードウェアのような制約が少ないですが、制約が少ないことによる困難も数多く存在します。ソフトウェアは見た目から、内部の構造を知ることはできません。シンプルなソフトウェアに見えても、内部的に非常に複雑な動きをしている可能性もあります。

自由度の高さ故に常に新しい技術が登場し、一度獲得した知識やスキルもすぐに陳腐化してしまう可能性があります。また一度開発したソフトウェアも、コンピューターの性能向上や新技術登場や周辺技術の進歩、に合わせて更新してゆかなければなりません。

本質的な部分の考え方は同じ

求められるスキルや使用する技術の点では、全く異なるハードウェアとソフトウェアのエンジニアですが、より本質的な部分での考え方は共通していると思っています。課題や目的に対して、課題解決や目的の達成に必要な要件を導き出し、それを出来るだけシンプルに技術を用いて実現することです。ソフトウェアとハードウェアの開発の違いはその、その時にあるルールや制約がソフトウェアに起因するものなのか、ハードウェアに起因するものなのかにということです。