技術
「システム」を開発するということ~その難しさと醍醐味~
2022/11/22
SHARE
こんにちは。
TechMagicで電気エンジニアの小山と申します。
2022年1月からJoinし、今は調理ロボットの開発に携わっています。
専門は主に組み込みシステムで、回路設計をしたり、ソフトウェアの設計をしたりと、ハード&ソフトの垣根なくタスクをこなしています。
今回は「システムの開発」というテーマで少しお話をさせていただきます。
「システム」とはなんだろう?
皆さんは「システム」と聞くとどんなイメージを持たれるでしょうか?
テクノロジーに紐づくところが多いので、どうしても工学的イメージが先行しがちですが、もっと視野を広げると政治や経済もシステムと捉えられると思います。Wikiでシステムと調べると
”システムは、相互に影響を及ぼしあう要素から構成される、まとまりや仕組みの全体。”
となってます。かなり抽象的な概念ですが、特にエンジニアはシステムという言葉を頻繁に使って会話しています。
話しが少し脱線してしまいますが、私が小さい頃にこのシステムという言葉に何故か惹かれたことで、ものづくりをするエンジニアを志しました。
小さい頃に観ていたアニメには、「〇〇システム起動!」みたいなセリフが散りばめられていて、毎度ワクワクさせられたものです。ガンダムに魅せられたのはその典型ですね。
ちなみに、東京オフィスからは窓からユニコーンガンダムが見える立地で、私がTechMagicを選んだ10番目ぐらいの理由です(笑)。
ガンダムの話はこれぐらいにして、話を元に戻しましょう。
簡単にいえば、システムとは、”入力、処理、出力”という3つの要素が含まれるものと言えます。
例えば、”Ok Google、今日の天気教えて”とスマホに音声入力すれば、スマホが現在の位置を取得してその天気予報を取得するという処理を行い、”今日の天気は晴れです”と出力する。
こういった関係性のくくりがシステムです。
システム開発はどこが難しいのか?
幼少の頃に、ワクワクしていたシステムの開発を生業にして早20年以上経ちますが、そのイメージとは裏腹に、様々な難しい局面に直面することが多いです。システムを開発することは、こんなにも難しいのかと。
ここで一例として、その難しさを紹介させていただきます。
これはシステム開発のあるあるですが、”異常系の設計”です。
”正常系”と”異常系”はシステムにはよくある状態で、想定している状態で処理が行われている場合は”正常系”、それ以外の想定していない状態での処理を”異常系”と言います。
正直、”正常系”の開発というのは至極単純です。あるシステムに何かをさせたいと思って開発を始めるわけですし、ロジックは大概シンプルです。一方で、”異常系”というのは、複雑になりがちで、開発にはかなりの時間がかかります。これは、バリエーションの多さ、というのがポイントです。
異常系のバリエーションは、入力の数や、入力の範囲に依存します。なので、それが多ければ多いほど組み合わせは多くなり、バリエーションが増えていくわけです。
これを定義し、それぞれをどのように処理するかを考えることは、エンジニアの腕の見せどころであり、骨が折れる作業でもあります。
この異常系の開発を怠ると、定義できていない状態が発生し、システムが想定外の動作をすることで、不具合が発生、場合によっては重大な事故につながる場合もあります。(東日本大震災で発生した原発の事故などはその典型的な例)
こういったことが起こらないよう、システム設計を行っているエンジニアたちは日々、
- 設計自体に問題がないか?→レビューで設計不良を洗い出す
- 出来上がったシステムに問題がないか?→テストで製造(実装)不良を洗い出す
といったことを繰り返すことでユーザーにシステムを提供できています。
システム開発の醍醐味
そんな大変なシステム開発ですが、こうやって20年も同じようなシステム開発に携われるのは、システムが動いたときの充実感であることは間違いないです。おそらく、ものづくりを生業としている方には、この「気持ちよさ」が分かっていただけるのではないかと思います。
小さなシステムを1つづつ組み合わせていき、大きなシステムとしてまとめあげ、それを動かしてようやく想定していたシステムとして動作した瞬間に立会うのは、本当に嬉しいことで、これがあるからエンジニアはやめられないなと思っています。
もちろん、今私が携わっているTechMagic内の様々なプロジェクトにおいても、日々大きい小さいはありますがシステムを作り上げたときの充実感は体験できています。
TechMagicにしかないプラスアルファとして、そこには私達が開発したシステムが狙い通りに動作することで、美味しい料理が調理でき、その美味しさも体験できます。これは、他の会社ではなかなか体験できることではないですね。
おわりに
~システム開発に携わるエンジニアとして心に刻んでいること〜
最後に、私がシステム開発を行っている立場として、大事にしている10箇条を紹介させていただきます。
それは、”ジーン・クランツの10箇条”と呼ばれているものです。
ジーン・クランツは、NASAでフライトディレクター(運用責任者、計画実行中におけるボス)という立場でアポロ計画に携わった方です。月面に着陸したアポロ11号も、宇宙空間で事故が発生したのち無事地球に帰還したアポロ13号(映画でもおなじみですね)も彼がフライトディレクターでした。
その彼が残した10箇条がこちらです。
- Be proactive(積極的に行動すること)
- Take responsibility(自ら責任を持つこと)
- Play flat-out(全力で行動すること)
- Ask questions(分からないことは質問すること)
- Test and validate all assumption(考えられることはすべて試して確認すること)
- Write it down(書き出すこと)
- Don’t hide mistakes(ミスを隠さないこと)
- Know your system thoroughly(システムを深く理解すること)
- Think ahead(常に先のことを考えること)
- Respect your teammates(仲間を尊重すること)
エンジニアとして、とてもいい内容だなと感じている10箇条で、出会ってから大切にしている言葉達です。
どんなシステム開発においても、こういった考え方を持つことがよりよいシステムを開発するための近道になると思います。
今回はシステム開発というテーマでお話させていただきました。
TechMagicのプロダクトには、こういった考え方を持っているエンジニア達が開発に携わっていると覚えていただければ幸いです。
TechMagicでは食産業の未来を創造する仲間を募集しています!
随時採用イベントも行っておりますので、ご興味のある方はぜひ下記リンクよりお申し込みください。
【採用イベント申込フォーム】
https://forms.gle/x4GePAw3eaGMRvbF7
その他、募集ポジションの確認やオフィス見学・カジュアル面談の希望など、お気軽にHPからご連絡ください!
TechMagic株式会社SNS
Facebook Twitter Youtube