組み込み開発を、実機で体系的に学びませんか?
クミタテでは、ESP32・電子回路・IoT開発を学べる オンライン教材を公開しています。無料会員向け教材も利用できます。
無料会員登録して教材を見る Googleアカウントなら簡単に登録できます
突然ですが、今、こういうものを作ってほしいとあなたはお客様に頼まれたとします。
そして、それは大体2週間ぐらいでできるだろうと思いました。
この時、お客様に対して、どれくらいの時間でできると言いますか?
想定通りの2週間と答えるのか、それともお客様を喜ばせたいと思って1週間と宣言して頑張りを見せますか?
どちらの回答をしたとしても、実際にはきつい開発スケジュールになるでしょう。
私だったら3週間もしくはそれ以上の時間をお客様に伝えます。
身内に対してだったら、実際は2週間ぐらいだけど、余裕を持たせて1週間ぐらいもらうことはできますかと言います。
なぜ、想定以上の時間を宣言する必要があるのでしょうか。
それは設計不良、いわゆるバグを市場に流出させないためです。
開発スケジュールに余裕があると考えながら設計を進めていくことができます。
決して余分な時間で楽をしているわけではありません。
いろんなパターンで動かしてみて、問題なく動作をするか確認する必要があるし、
もしおかしな動きをした場合はその対応に時間を要します。
最低限の時間しか確保していない場合は、製品仕様を満たすように動かすことだけ専念することになります。
仕様に記載のない動き、いわゆる例外処理は何も決まっていないため、放置されます。
結果として、低品質の成果物が完成します。
しかし、これは組込み開発に限った話ではありません。
ウェブ系の開発でも同じです。なのに組込みばかりがきついと言われます。
組み込みとウェブ系の明らかな違いとして、市場に出した後の対応にあります。
ウェブ系だと不具合の改善はもちろん、機能追加することも簡単です。
サーバーに置いたソースファイルを置き換えれば、それで済みます。
一方の組み込み開発は市場に出した後の修正が難しいです。
「えっ、とは言ってもIoTの力でなんとかなるんじゃないの?」と思われる方がいるかもしれません。
それは正しいです。
しかし、IoT化すると開発コストという新しい問題を生み出します。
通信モジュールは他の電子部品に比べて高額なので材料費が上がります。
これに加えて、設計で考慮すべき問題も増えて開発の初期費用もかさみます。
だから何でもIoTで解決できるかというと、難しいのが実情です。
開発の段階で長く時間をとって問題ないことを確認した上で市場に出した方が、
長い目で見た時に安く仕上がることが多いです。
このように、開発時間と設計品質には相関関係があります。
短い開発時間で高品質のものを作るのは難しいです。
しかし、それを求められる現場があります。
それが受託開発です。
受託開発だと、お客様の予算感と納期によって契約するか決めるので、
実働のエンジニアからすると余裕のない開発を迫られることがあります。
エンジニアの経験があったり、エンジニア側の気持ちを察してくれるお客様であれば、
この問題は回避しやすいんですけれども、とはいえ受託開発でやる場合、
お客様都合に振り回されるので、エンジニアにしわ寄せが来ることは多いです。
そして何より受託開発で恐ろしいのは、いつまで経っても決まらない製品仕様です。
当初計画していた内容で作っていたものを突然変更されることがあります。
これはエンジニアからすると非常にイライラさせられます。
全体の見直しが必要になる上に、ソースコードもぐちゃぐちゃになります。
さらに問題なのは、変更が多くなるほどやる気がなくなってくることです。
「どうせまた変わるんだろう」って思ってしまうと、考えるのをやめてしまって
言われた通りにしか開発しなくなっていきます。
そして、出来上がったものは案の定、質が悪いし、お客様との関係もこじれてしまいます。
最近ではこのように「とりあえず作りながら考えていこう」みたいなスタイルをアジャイル開発と言ったりしますけども、
私はアジャイルは無くなるべきだと思っています。
うまくいったのを見たことがないです。
すみません、話が脱線しました。
受託開発の比較になるのが自社開発です。
自社開発の場合は開発のスケジュールも製品の値付けも自分たちで決めることができます。
これはとても幸せなことです。
既存製品があれば、それを流用して改良すればいいので、開発全体の労力が少なくて済みますし、
先輩のエンジニアは長年培ってきた経験や勘があるので、助け合いながら高品質のものを効率よく作ることができます。
結果として、ホワイトな職場環境の中、仕事に取り組むことができます。
ただ、自社開発でも、さっき言ったアジャイルで開発するところもあるので、その点は見極めが必要です。
あと、自社開発と言っても、若いベンチャーだと受託のような形で進めていくところもありますから、安心感が得られるのは結局のところ大手メーカーになってきます。
やっぱり組込みの開発はウォーターフォール一択ですよね!
今までの話を聞いて、自社開発の会社に入りたいなぁと思った人もいるでしょう。
しかし、いきなり自社開発の会社に入るのは新卒ぐらいしかチャンスがないと思っておいた方がいいです。
しかも、だいたいは高学歴の大学院卒が対象になってきます。
じゃあ私は…なんて思わないでください!
一旦は受託開発の会社で働いて、そこで実績を作ってから自社開発の会社に転職するという手があります。
このパターンで自社開発のメーカーに中途入社する人は結構多いです。
受託開発は納期の厳しさはあるものの、たくさんの経験を短期間でできるというメリットもあります。
その経験を買ってくれる自社開発企業は一定数います。
自社開発は既存製品の改良で効率よく設計できるのがメリットではあるものの、それが逆にしがらみになって新しいことに挑戦するのに臆病な状態になっていることがあります。
過去の産物に囚われがちになったり、前例のないことは敬遠されがちです。
下手に目立って社内評価を落としたくないと考える人も多いです。
こうした時に中途入社の人が入ることで、新しい技術を共有できたり、社内の雰囲気を変えたりすることが期待されます。
また、会社組織に属さずフリーランスとして貢献するという選択肢も出てきます。
企業の制約を受けずに柔軟な働き方ができる一方で、高い技術力と実績が求められるので、それなりのスキルが必要になってきます。
組み込みはきつい、特に受託開発はきついと言われがちなんですけども、
長い目で見た時に短期間で多くの案件に携わることで幅広い技術を学べるのは受託開発の大きなメリットです。
とはいえ、きついのはきついんですけどね。
長く続けるためには無理せず自分のペースで取り組むことも大事です。
最終的に自分のキャリアの方向性に合わせて、受託開発を経験として生かすのか、自社開発でじっくり成長するのか、自分で選んでいくのが大事ですね。
というわけで、自社開発と受託開発、それぞれにメリットデメリットがあるわけですが、
結局のところ自分に合った働き方を選ぶのが一番大事かなと思います。
皆さんはどんな働き方が自分に合っていると思いますか?
ぜひコメントで教えてください。
では、これで終わります。ありがとうございました!