2008-09-20

組込みソフトってなに?(高校生の質問から)その3

また、匿名の高校生さんからお題をもらったので答えていきます。

匿名 さんのコメント...

面白くて、わかりやすかったです。あと、いいホームページももらいました。ありがとうございます。確かに、自分が作った組込みソフトが組込 み機器に搭載され、お客さんに満足してもらえるならうれしいですね。将来の夢のために、もっと頑張らないと......学校の勉強でそれに最も関連のある 教科とか、最も使える知識とかはありますか。知りたいです!このやりとりで、ますます組込みソフトに興味を持つようになりました(笑)。普通の会話みたい に何の違和感もなく、すごく楽しいです。これからもお願いします。


さて、質問に答える前に組込みソフトの楽しさを全国の高校生に伝えようとしている二上貴夫さんから、君に向けて情報やアドバイスをもらったので伝えておきます。

まず、高校生向けの組込みソフト教育に関する状況について。マジカルスプーンは当初工業高校向けにカリキュラムを開発しており、その後、普通科の高校生向けの情報科学の教材としてのカリキュラムを開発していく予定とのこと。

都内の普通科の高校でデモンストレーションを行った結果、情報処理に強い興味を持った生徒がいて、彼らに対して特別カリキュラムを秋から実施するそうです。工業高校向けに少し専門的な組込みシステム開発の教育を飛行船を題材に実施することも企画中とのことです。(これ必ずしも自分の会社の仕事とは直接関係ない計画だからその情熱たるやすごいよね。こういう人たちが利益度外視でがんばっていることに感謝して、与えられた機会を有効に使って欲しいと思う。)

二上さんは、高校生の頃に社会人から情報を仕入れるのは良いことだと思うと言っています。また、君のように自分がやりたいことを外に向かって発信できる人は、よい組込み技術教育の教材を紹介すれば、かなりのところまで自分で学習できてしまうだろうと見ています。組込みの世界でアーキテクト(建築で言うところの設計士)として活躍しているエンジニアの生い立ちを紐解くとみなそのようなタイプだそうです。

また、前回紹介したETロボコンの他に Hamana というロケット打ち上げの実験プロジェクトや、MDDロボットチャレンジという取り組みも是非見て欲しいとのこと。

マジカルボックスのプログラミング教室というのをSESSAMEのメンバーでもある舘 伸幸さんが計画しているそうです。

ちなみに、自分が住んでいることろからイベント開催場所が離れている場合は、SESSAMEが費用を補助することも考えようと思っているので、資金のことで今一歩踏み出せないでいる高校生諸君は一度 SESSAMEの相談窓口 query@sessame.jp に「組込みソフトイベント参加の相談」という件名で相談メールを出してみて欲しい。

以下は二上さんの直接のメッセージ
私からのアドバイスとしては、7月、8月に出たCQ出版のボード付雑誌を買って(酒井注釈:CQ出版のInterface誌でたぶん7月号、8月号ではない。定価が高い号がボード付きの号。こちらから探すべし。)、自分で組み立ててこらん。わからなくなったら、著者に質問状を書こう。私から著者に取り次いであげるから。ただし、君が高校3年生で大学受験するつもりなら、ボードの組み立ては来春に私の実験室で一緒にやろう。(酒井注釈:東海大学 組込み技術研究科 組込み技術専攻 を受験して大学で一緒に勉強しようということだと思う)
【「(組込みソフトの仕事に就くには)学校の勉強でそれに最も関連のある教科とか、最も使える知識とかはありますか。知りたいです!」の質問へのアドバイス】

まず、アドバイスの前に伝えておきたいことがある。それは、「人から言われたことをそのまま鵜呑みにしちゃいけないよ」ということだ。これは「人を信じるな」「必ず疑ってかかれ」ということではない。人にはいろいろな考え方があって、僕が正しいと思ったことはもしかすると他の人はそうではないと考えているかもしれない。世の中にはいろいろな考え方があって答えがひとつではないことがたくさんあるということを認識して欲しい。

現に、組込みソフトってなに?の回答に対して、stpete97 さんはもっと違う組込みソフトの世界もあると書いている。(こちらの記事) 21世紀の組込みソフトの世界という意味ではセンサーやアクチュエータを使わないような世界もある。組込みソフトといっても何しろ幅が広いので「コレが組込みソフト」と一刀両断では答えられない。だから、ひとつのアドバイスを鵜呑みにしてはいけないし、最後はいろいろな意見や考え方を聞いた上で、自分が持っている価値観に照らし合わせて咀嚼することが必要だ。ただ、高校生という年代は自分の価値観を構築する時期でもあるので、いろいろなことに首を突っ込んで世の中の多くのことにアンテナを張り巡らせ感度を高めておくことがよいと思う。

次に、考えて欲しいのは自分の人生という長い年月のことだ。例えば、君が80歳まで生きるとしよう。そうするともし君が今17歳なら人生はまだ、全体の21%しか進んでいないことになる。この後大学に進んだとして、就職して仕事について定年を迎えるとすると、社会人として働く期間はだいたい38年間で一生の48%となる。だからこそ、人生の約半分を費やす社会人として期間どんな仕事をするのかを選択するのは非常に重要な選択だ。

ただ、よくよく考えてみて欲しいのは、それでもその38年間は人生の約半分に過ぎないということだ。社会人を卒業してからの人生も20年近くある。また、30歳くらいで結婚したとしたら人生の62.5%は新しい家族との生活があるということになる。

何が言いたいかというと、人生を80年と考えれば、17歳くらいの君が学んでいること、過ごしている時間で何に役立つかはそう簡単には言えないということだ。

そのことを前提にして、今人生の約半分くらいまで来ている自分が過去を振り返って、君が学んでいることが何に役に立つかについて自分の考えを書いてみたいと思う。(鵜呑みにしちゃいけないよ)

【英語】

実は中学、高校、大学と一番きらいな教科が英語だった。なぜかというと、自分は英単語を覚えるのが苦手だったからだ。必ずしも記憶力が悪いということではなく、今後の人生において役に立ちそうにないと思うとやる気がなくなって学習する意欲が低下し、結果として勉強が進まなかった。あまり我慢強い性格じゃなかったんだ。

その当時、自分は日本を出て海外で働くような夢はなかったし、そうしたいと思ったこともなかったし、英語が分からないことで得られない情報などないと思っていたから、英語は大人になっても使うことはないというちょっとした自信があった。

でも、社会人になってから以外に必要だということが分かってきたね。その当時、社会人の人たちに英語は使うから勉強しておいた方がいいよと言ってもらいたかった。だから君には英語は勉強しておいた方がいいよと言っておくよ。

何に使うのかというと、まず、海外で作られたハードウェア部品やソフトウェア部品のカタログや取扱説明書は英語で書かれていることが多く、日本語に翻訳されていない場合もあるから英文を読む必要がある。また、日本で作った商品を海外で売るためには、国際規格を理解しないといけないことがあるけれど、この国際規格はフランス語と英語で書いてある。

さらに、インターネット上の情報で特定の分野においては日本語のサイトよりも英語圏のサイトの方が圧倒的に多くの情報が存在するケースがある。例えば、ソフトウェアの構築方法について書かれたソフトウェアアーキテクチャ(Software Architecture)については、英語サイトの方が情報量が多い。だから、英語が分かっていると最新の情報をゲットできる可能性が高い。

もう一つ、場合によっては君は外国人と仕事をすることがあるかもしれない。グローバルな世界で部品や商品を売り買いしていると、自ずと海外の人たちとメールを交わしたり、打ち合わせしたり、出張したりする機会も出てくる。そのときに英語が話せるととても楽だ。

ということで学生時代、なかなか身につかなかった英語は、社会人になってからお金も使いつつ、ちょっとずつ勉強している。いまではどんなことに役立つのかイメージがわいているので、辛いながらも意欲は持ちながら勉強できているのでまあいいかと思うけど、学生時代に英語が自分の人生の中で役に立たないと決めつけてしまっていたことは間違いだったと素直に認めるね。

全然関係ないけど、英語の授業で今でも覚えているのは中学生のときの先生がテープレコーダを毎回持ってきて英語の歌を生徒に聞かせてみんなで歌えるようにしてくれたことだ。

もちろん、そんなことは学習指導要領には書いてないから先生のオリジナルの授業だった。そのとき歌った歌は次のようなもの。

「花はどこへ行った」(原題 Where have all the flowers gone?)

ザ・ブラザース・フォア が歌ったものを先生は聞かせてくれた。そのときは何のことを言っているのかまったく分かっていなかったし、先生もわざわざ解説しなかったけど、大人になってから知ったのはこの曲は世界で一番有名な反戦歌でフォークの不朽の名曲だったんだ。

「We shall overcome」 アメリカ公民権運動のテーマ・ソングのように歌われた歌で、アフリカからヨーロッパを回って奴隷としてアメリカへ連れてこられた人たちの、船上での労働歌のようなものだったという歌。その当時はそんな背景はまったく知らなかった。

「Country Road」 ジョン・デンバーの作詞作曲で、このときはオリビア・ニュートン・ジョンが歌っていた。最近では宮崎駿監督の耳を澄ませばで挿入歌として使われていたね。

中学生レベルでネイティブな英語の歌詞を歌えるようになるのは至難の業だったけれど、今でも覚えているんだからもっともインパクトのある授業だったと思う。

【国語】

ソフトウェアとはまったく関係がないように見えて実は大いに関係があるのは国語だと思う。プログラムもアセンブラというコンピュータが解釈するための言語で書いていたときはそうでもなかったけれど、C言語などの高級言語と呼ばれる、より自然言語(もちろん英語)に近い言語でプログラムが書かれるようになって、プログラミング=やりたいことを文章で書き表すに近くなってきた。

だから、極端に言えば分かりやすい文章を書く人は分かりやすいプログラムを書く傾向があるように思う。自分自身にしか分からないようなトリッキーなプログラムを書く天才プログラマーと呼ばれるエンジニアも中にはいるけれど、そういう人が書いたプログラムは多くの場合その人しかメインテナンスできないので、チームで仕事をしたり、同じ人がずっとその製品の担当になれない場合が増えてきた現在では、分かりやすいプログラムを書くことがもとめられている。

また、ソフトウェアは市場やユーザーの要求を図や文章で書き表し、それをもとにしてプログラムを書くことになるので、文章の読解力や作文の能力は高い方がよい。

先人の成功や失敗が体系化されたソフトウェア工学を勉強する際には書籍を読むことでそれらの知識を吸収することも多いから、長文読解能力は特に求められる。「こいつは何を言いたいんだ」ということができるだけ早く分かるようになることが重要なんだ。また、ソフトウェアでは他の人が書いたドキュメントをチェックするレビューという行為を頻繁に行うのだけれども、このときもいかに大量のドキュメントを斜め読みして、重要なポイントがどこかあたりを付ける能力が求められる。

【数学】

数学は言わずもがなソフトウェアの世界ではよく使う。ソフトウェアの世界では解を求めるときに総当たりで見つけ出すのが得意で、大きな数字同士の最大公約数を求めるような問題は自分でやるとうんざりするけれど、コンピュータは繰り返し演算させてもイヤだとはいわない。

そういう意味では個人が使っているようなパソコンの計算の仕方で美しくないなあと思うことはある。例えば、分数を使った演算は分数のままで表しておけば割り算をしないので誤差はゼロだが、一般的なコンピュータでは途中の計算でどんどん割り算を繰り返してしまうので誤差が生じてしまう。誤差を最小限に抑えるために浮動小数点演算を行うこともできるけど、誤差がゼロになるわけではない。そういう観点から分数演算は美しいと思うし、ソフトウェアの世界は最新の数学の世界に追いついていないところもまだまだあるように思う。

【物理】

組込み機器でセンサーやアクチュエータを使う可能性があるのなら物理学は必ず使う。自然界で起こる現象を物理法則で表して、その法則をもとにセンサーやアクチュエータを動かすことになるからだ。

【生物】

生物はどんな組込みソフトの分野に進むのかによってはとても重要な学問となる。あんまり詳しくはいえないけど、自分の仕事では生物学はとても重要だし、生物学が一番好きだったから今の仕事を選んだとも言える。なぜ、生物が好きだったかというと、それは自分自身の体の中で起こっていることが説明されていたからだ。そこには内なる宇宙が広がっていて、信じられないような精巧なメカニズムで生命を維持する活動が行われている。植物は地球上で光合成により最も効率よく光のエネルギーを化学エネルギーに変換し、二酸化炭素から酸素を作りだし、夜は夜で呼吸によりエネルギーを作れる。

その頃は勉強しなければいけないからではなくて、おもしろいから教科書や参考書を何度も読み直したし、25年以上たっても DNAの情報からミトコンドリアがタンパク質を作り出すしくみなんかは覚えている。

【地理・歴史】

地理や歴史もソフトウェア開発には役に立たないと思うだろう。確かに、ソフトウェアエンジニアには必須の教科ではないかもしれない。でも、最初に書いた人生80年のことを思い出して欲しい。

人生80年の中で、必ずしも仕事の関係だけではなく日本国内のいろいろな地域の人、または海外の人と交流することはある。そのときに大事なのは、その人の地域のことについてある程度知っていることと、さらに大事なのは自分の地域や日本のことについて説明できるということだ。

海外の若者は自分の国のことを説明することがうまいのに、日本人は日本のことをうまく説明できないと聞く。そういう場面に慣れていないのかもしれないが、日本人として誇りのようなものを持つことがピンとこない、そんなことをしなくても普通に暮らしていけるからだろう。でも、今後商品作りは間違いなく世界が市場になる。大田区の町工場でロケットの先端部分が作られていることからも分かるように、世界のどこの人々から部品を入手し、どの国の人々へ商品を届けることになるのかはわからない。

ソフトウェアエンジニアはそんなことを知らなくてもいいかと言えば、知っていていろいろな国のいろいろな業種の人々とコミュニケート出来るようになっていた方が当然のことながら自分の器が大きくなる。

海外のエンジニアと親交を深めることで飛躍的にスキルがアップすることもあるだろう。

【問題解決能力】

学校の授業で教えるようなものではなく、社会人になると必要になる能力、それが問題解決能力だ。簡単に言うと、学園祭でバンドをやりたい、メンバーを募ってライブを盛り上げたいと思い、幾多の障害を乗り越えながら成功させるといった経験を積むことでこの能力は高まっていく。

何か作りたいものがあって、いろいろな情報源や道具を使いながら自分の力だけで完成させるというのも問題解決能力を高めることにつながる。

与えられた問題をひたすら解いていい点数を取ることでは、決して身につかない。くわしくはこちらの記事を読んでもらいたい。

【放課後】

さて、組込みソフトエンジニアとしての道を進みたいと考えた場合、大きな分岐点があると思う。それはプログラミングすること=ソフトウェアを作ることが好きなのか、それとも何か特定の分野のことが好きで、その分野の中でソフトウェアエンジニアになりたいのかという選択肢だ。

前者の仕事をする一つの例としてサプライヤーと呼ばれるソフトウェアの受託開発会社がある。ソフトウェアの開発を請け負って、ソフトウェアをクライアントとなる商品開発メーカーなどに納めるような場合。また、技術者の派遣会社に入って、ソフトウェア技術者としていろいろな会社に派遣される仕事に就くこともある。

非常に規模の大きい会社でどんな分野の商品を作ることになるか分からないけれど、例えばソフトウェアエンジニアとしてのスペシャリティを活かして商品作りに関わる人もいる。

一方で、車好きな人、鉄道が好きな人、宇宙ロケットが好きな人、音楽が好きな人がそれらの分野の会社に入って、その分野の商品を作り上げる過程において組込みソフトエンジニアとして働くということもある。

自分はSESSAMEのメンバーでTEACの國方さんという人を知っているが、TEACは自分の中では音響機器(特に録音機器)の会社で、國方さんは音楽が好きな組込みソフトエンジニアだ。SESSAMEではバンドを組んだり、技術者の教育教材を作るためのセミナーで講演者の音声を自分が開発した機材を使って録音したり、後で聞きやすいように編集したりしている。

ようするにある分野に強い興味があって、その分野において組込みソフトエンジニアとして働きたいのなら、当然のことながらその分野のことは徹底的に詳しくないとよい製品を作ることはできない。

音楽機材を作る仕事がしたいのなら音楽のことを知らないといけないし、自動車作るのなら自動車のしくみ、鉄道の仕事するのなら鉄道の知識といった具合だ。

これは、どっちかというと勉強しなければいけないことではなくて、今君が何に興味を持っていて人から言われなくても調べてみたい、知りたいと思うことは何かということだ。

ちなみに、現時点で興味があるのはソフトウェアや組込みソフトウェアであり、後から関心の強い分野が出てくる、もしくは、その仕事に就いた後からその分野が好きになるということもあるので、今すぐに何が好きか決めろということではない。

だから、教科別の最後のアドバイスはあまり範囲を狭めるのは得策ではなく、若いうちは興味があると思ったら飽きるまで徹底的に突っ込んで満足いくところまでやってみるという経験を重ねておくことが大事だということを言いたい。

そうなると、学校の授業も大事だし、それ以上に放課後に何をするのかということも大事になる。SESSAMEのメンバーが仕事を持ちながら、プライベートな時間に活動しているのと似たような話で、一見関係ないような活動でも、実はそれぞれが相乗効果になっていることも少なくない。

全部精一杯頑張れというような内容になってしまったけれど、まあ、いろいろチャレンジしてみることだね。組込みはやってみないことには楽しさはわからない、これは間違いないと思うよ。今の時期は「クリエイティブで楽しい」「クリエイティブでおもしろい」という経験をたくさん積み重ねることがもっとも大事だと思う。小さい楽しい、おもしろいを経験すると、より大きな楽しい、おもしろいを経験したくなる。そうなると技術的な壁が現れるけれど、最初に楽しい、おもしろいという体験を持っていると、一時期辛くてもその壁を意欲をもって乗り越えることができるんだ。

そのことを学生のうちに経験しておけば、その経験は間違いなく社会人になったときに役に立つことは保証します。

組込みソフトってなに?(高校生の質問から)つづき

匿名の高校生さんから追加情報をもらった。

3 コメント:

匿名 さんのコメント...

すみません、初めてのコメントです。実は私、高校生なんですが、組込みソフトに興味を持っています。今、私たちの生活の中で(身近なところ)よく使われている組込みソフトってなんですか。答えてくれるならすごくうれしいです。お願いします。

sakai さんのコメント...

組込みソフトウェア工房の管理人です。

たぶん一度では答えられないので何度かやりとりしましょう。

「組込みソフトとは何か?」これに答えるにあたって一番の大事なのは高校生の君がなぜそれを知りたいと思ったのか・・・これが問題です。

1. 学校の授業で「組込みソフト」の話がでてきたから
2. 何かおもしろそうな感じがするのでどんなものか知りたいから
3. 進路について組込みソフトの仕事につくことも考えているから
4. 親が組込みソフトの仕事をしているのだけれど教えてくれないから
5. その他の理由

この中のどれ? 例えば、1とか2なら組込みソフトでワクワクするイベントや教材を紹介するし、3や4ならどんなところが楽しいのか、どんなところが大変なのかを中心に答えを考えます。

こんな日記風の説明もありますが、もう少し情報をください。

匿名 さんのコメント...
組込みソフトってなに?(高校生の質問から)を読んで

ありがとうございます。わかりやすかったところもありますし、少しわかりにくいところもありました。私は元々ソフトウェアに興味を持っていて、将来 ソフトウェアに関する仕事につきたいと考えています。その中でも、特に組込みソフトに強い関心を持っています。ってことは、2. 3.ですね(笑)。ぜひ、組込みソフトについていろんな話を聞かせてください。


もしも、君が組込みソフトに興味を持っていて、将来組込みソフトの仕事につきたいと思っているのなら、おすすめのアプローチは『習うより慣れろ!』作戦だ。

まずは昔話から

実は組込みソフトは社会人になってからでしか始められないかというと、今はそうではない。30年前は高校生が組込みソフトをやってみたいと思っても難しかったね。

実 際、自分が大学生のとき日本で初めて個人でも使えるパーソナルコンピュータPC-8001がNECから発売された。もともと外国製では Appleのコンピュータがあったけど何十万円もしてとても手が出なかった。PC-8001も高かったので結局は買えず、その弟ぶんのパソコン PC-6001が出たとき7万円くらいで買った。これは家庭にあるテレビにつないで画面を見るタイプのパソコンでプログラムはなんとこれも自分が持ってい るテープレコーダに音声情報として録音していたんだ。

このときはパソコン雑誌に載っているプログラムのリストをキーボードから打ち込んで は実際に動かして遊んでいた。でも、打ち込むプログラムがだんだん多くなってくるとプログラムリストを紙に打ち出したくなる。でもプリンタが高い。モノク ロでしかも一行ずつ文字しか打てないインクリボン式のプリンタがパソコンと同じく7万円もしたんだよ。でも、どうしても欲しかったからアルバイトしてお金貯めて買ったなあ。

パソコンの価格だけは時がたつにつれて安くなるので驚きだね。いまや7万円で高性能なディスプレイ付きのパソコンが買えるし、カラーのインクジェットプリンタは1万円台で買える。(消耗品のインクで儲けているからプリンタはほとんどタダ同然でもいいんだ)

だから、君はすでにパソコンを持っているという前提で話しをするよ。

君 がパソコンを持っていてインターネットに接続する環境があるのなら、プログラムを作ってみる方法はたくさんある。今はインターネットで世界中がつながったことで、無償でソフトウェア開発の環境を提供してくれる個人や企業もたくさんあるし、わからないことがあったら親切に教えてくれるしくみもそろっている。

だけど、君が組込みソフトに興味を持っているのなら、おすすめのコースは別にある。

前回の記事に書いたように組込みソフトはセンサーとアクチュエータがあると格段におもしろい。センサーとアクチュエータを積んだ組込み機器に自分が作ったプログラムを載せて、いろいろ試してみると自分が作ったプログラムの通りに組込み機器が動くから楽しい。

実は、こんな教材を高校生向けに考えてプロデュースしている二上 貴夫というおじさんがいるんだ。この人はとてもおもしろい人で、サラリーマンとして仕事を持っていながら組込みソフトの楽しさを多くの人に伝えることができるのなら寝食を忘れてがんばっちゃう人なんだ。

科学の楽しさをわかりやすく子供達に伝える活動をしている米村でんじろうさんは知っていると思うけど、二上 さんは組込みソフトの世界では有名な組込みソフトの楽しさを伝える伝道師なんだよ。

その二上さんが最近開発した飛行船をプログラムで制御するキット「マジカルスプーン」というのがある。

現在はマジカルスプーンシミュレータが約7千円で通販で買える。二上さんは今マジカルスプーンリアルを開発していてもうしばらくすると買えるようになるよ。

マジカルスプーンはスプーンをたたいて出る超音波で命令コードを作り(=プログラム)をセンサーでこの超音波を拾って飛行船を制御するんだ。なんだか、わくわくするでしょ。

簡単な説明は、自分も所属している組込みソフトの教育を考えるコミュニティSESSAMEのこのページを見て欲しい。

また、二上さんに負けず劣らず、組込みソフトの楽しさを伝えるのにがんばっちゃっているおじさん、おばさん(おねえさんと言わないと怒られるかも)達は何人もいて、この中の舘 伸幸さんたちがマジカルスプーンのことをWEB上で連載記事として書いているのでこれも読んでみて欲しい。

最後にもう一つのおすすめは、もし君が関東近県に住んでいるのなら、レゴで作った車にプログラムを載せて動かすETロボコンのチャンピオンシップ大会がパシフィコ横浜で11月19日~21日のどこかであるのでこれを見てみたらどうかと思う。チャンピオンシップ大会は平日になるので学校の先生に正直に話しをして休みをもらって見学しに行こう。組込みソフトに夢中になっている学生や社会人達の情熱が伝わってくると思うよ。

以上、これが組込みソフトを知る『習うより慣れろ作戦』の全貌です。また、何かもっと聞きたいことがあったらコメントをください。このやり取りのことは仲間のおじさん達にも伝えておくので後でアドバイスをもらっておきます。

そ れと、『習うより慣れろ作戦』で組込みソフトの楽しさを満喫したら、次は職業として組込みソフトエンジニアになることについて真剣に考えてみて欲しい。 仕事で組込みソフトを作るのは自分が楽しければいいってもんじゃないから、時には辛いことも乗り越えなければいけない技術的な壁もある。でも、自分が作っ た組込みソフトが組込み機器に搭載されお客さんに満足してもらえることが分かると、喜びや辛さを繰り返しながら、それらの壁を乗り越えることができる。だから、まずは何が楽しいのか、おもしろいのかを実感した上で、職業としての組込みソフトと組込みソフトエンジニアについて考えて欲しいと思う。
 

2008-09-16

組込みソフトってなに?(高校生の質問から)

組込みソフト開発におけるプロセス改善』の記事に匿名さんから次のようなコメントをもらった。
すみません、初めてのコメントです。実は私、高校生なんですが、
組込みソフトに興味を持っています。今、私たちの生活の中で(身近なところ)よく使われている組込みソフトってなんですか。答えてくれるならすごくうれしいです。お願いします。
そもそも、このブログを始めた最初の目的は読者との双方向コミュニケーションなので、いただいたお題に対して答えてきたいと思う。(=○○)の記述は大人向けの解説。

自分は組込みソフトを説明するときにこの絵を使うことが多い。

まずは、一番左を見てもらいたい。

そもそも、人間が生活していく上であると便利なものはたくさんある。便利なものがあってもオーダーメードで作っていたのでは多くの人に使ってもらうことができない。

だから、加工しやすい部材を使って同じ働きをするものをいくつも作ることを人間は考えた。加工しやすい部材とは古くは木材であっただろう。今でも木はさまざまなものに加工され商品となっている。

その後、電気で動く部品(トランジスタなど)が発明され、定電圧で動くさまざまな電子部品、機械部品が作られて流通するようになった。これらの電子部品、機械部品の中にはセンサーと呼ばれる外界の状態をセンシングする電子部品や、モーターのように物理的に物体を動かすことのできるアクチュエータと呼ばれる機械部品もある。

これらセンサーやアクチュエータは、総称してハードウェアと呼ばれる。ハードウェアは決められた入力に対して決められた動作をする。それぞれのハードウェアにはデータシートもしくはスペックシートという取扱説明書がついている。ハードウェア部品を利用するエンジニアはこの取扱説明書を見てある目的を達成するための機器を作ろうとする。

センサーを使うと外界の状況を機器に取り込むことができる。また、アクチュエータにある入力を与えると何らかの動作をさせることができる。

センサーとアクチュエータを組み合わせると、外界の状況に合わせて組込み機器に何らかの動作をさせることができそうだ。ところが、センサーからの出力をアクチュエータに直接つないで期待通りの動きをさせることができるかというとなかなかそうはいかない。

センサーからの出力を期待通りの動きになるように変換してからアクチュエータに入力してしなければいけない。

このハードウェアとハードウェアの間に入って信号を変換する役割を担うのが元祖組込みソフトウェアだ。(上図の左)

組込みソフトウェアはCPU(中央演算装置:Central Processing Unit)という特殊なハードウェアにプログラムで命令を与えることで、信号をいろいろな信号に変換することができる。プログラムは書き換えることが可能なので、いろいろな信号の変換を試してみて「これでいける」と思ったら完成したプログラムをROM(Read Only Memory)と呼ばれる電子部品に書きこんで組込み機器に搭載する。(=設計情報の転写)

ハードウェア部品群とハードウェアとハードウェアをつなぐソフトウェアが協力しあって組込み機器が完成する。ハードウェア部品もソフトウェアも同じものを大量に生産できるので工場で部品を組み上げて消費者に届けることができる。(=設計から生産へ)

上図の左で、ハードウェアとハードウェアの隙間を埋めるような感じでソフトウェアを描いているのはソフトウェアにこんな特長があるからだ。

もうひとつ別な見方をすると、ユーザーや市場が欲しいと思うものに対して、メーカーは何らかのキーデバイスを選択して「こんな素晴らしいハードウェアを使った商品なんですよ」と宣伝する。

例えば薄型テレビのキーデバイスはもちろん液晶パネルやプラズマのパネルだ。このキーデバイスが表の顔であり、この表の顔にユーザーは惹かれる。(=コアコンピタンスとしてのハードウェア)

しかし、大抵の場合キーデバイスだけでは組込み機器に目的の動作をさせることはできない。ユーザーやマーケットが欲している機能や性能を実現するためには、キーデバイスの能力を引き出すソフトウェアが必要になる。これが組込みソフトウェアだ。(=コアコンピタンスとしてのソフトウェア)

ユーザーやマーケットの要求が複雑でかつ多様になるにつれ、組込み機器における組込みソフトの割合は大きくなってきた。

最初の絵の左から右への変遷がその様子を表している。今ではソフトウェアの分量は20年前の100倍から1000倍以上になっており、ハードウェアとハードウェアの隙間を埋めるためだけの役割だけではなくなってきている。

ソフトウェア自体を再利用可能な部品にしてそれらを組み合わせることもしないと、ソフトウェア作りが間に合わなくなってきた。(=ソフトウェアプロダクトラインの必要性)

昔はハードウェアとハードウェアの間を埋めるだけの役割をソフトウェアが担っていたので、試作品に対して何らかの入力を与え出力をチェックしながらプログラムを直していって「これで完成」という時点でソフトウェアをフィックスすればよかったが、今ではそんなやり方をしていたらソフトウェアが固まるまで何年もかかってしまう。(=Verification & Validationの計画と実行)

商品を作って他社との競争に勝つためには開発のスピード、商品が提供する機能や性能及び品質が大事になる。(=マーケティングと要求品質定義、トレーサビリティ)

ハードウェアは故障することで製品の品質を悪化させるが、ハードウェア部品の故障を最小限にするための技術は長い年月をかけて確立してきたと言える。(=故障解析、歩留まり)

一方でソフトウェアはバグと言われる意図しない動作をするプログラムが入ったまま製品を出荷することで製品の品質を悪化させる。これが市場で見つかるとメーカーは製品を回収してプログラムを正しいものに入れ替えたりする。(=リコール)

ではバグをなくしてから製品を出荷すればよいのに・・・と思うだろう。それはそう簡単ではない。例えば、400字詰めの原稿用紙で100枚ぶんの作文を書いたとしよう。この4万字の作文の中で誤字脱字を一個もない状態にするにはどれくらいの時間がかかるだろうか。

100枚の原稿を何回も何回も見直したりしていると、ふとこ「この文章を直しておきたいなあ」と思うこともある。手書きの原稿ならいざ知らず、今はパソコンで簡単に直せるので余り気にせずに直してしまう。これを何回も何回も繰り返していると、いつの間にか直す前の文章と直した後の文章がどれがどれだか分からなくなりごちゃごちゃになってしまったりする。(=構成管理、変更管理の必要性)

組込みソフトでもこれと同じことが起こる。100万行にも膨れあがったプログラムを一点のミスもない状態にするのは至難の業であり、時間もかかるし、みんなの知恵を借りていろいろなくふうをしないといけない。(=ソフトウェア工学の利用)

最後に、ひとつ現代の組込みソフトエンジニアのやりがいというプラスの面を書いておこう。ハードウェアは決まった動きをする要素部品であり、ハードウェアエンジニアは目的を果たすためにどのハードウェアをどのように組み合わせればよいかを考え、その考えを製品で実現し大量生産できるようにする。(=組み合わせとすり合わせの組み合わせ技術)

ソフトウェアエンジニアはハードウェアの構成が決まれば、勝負の世界は自分が書くプログラムにゆだねられる。毎日のプログラミングの積み重ねが商品の善し悪しを決定する。(=組み合わせとすり合わせ技術のすり合わせ技術)

ある意味、自分の技術や努力の結果が商品の品質にストレートに影響するとも言える。ようするに腕のよいソフトウェアエンジニアが書いたプログラムが高い商品価値を生み出すということだ。技術的な成長を反映させやすい、また成果を実感しやすい仕事であるとも言えるだろう。

また、ハードウェアとソフトウェアが協力して合って組込み機器ができあがるため、特にアクチュエータが使われていると物理的な動きが見えてきて機器が完成して自分の思い通りに機器が動いたとき喜びが大きい。そして、自分が作ったソフトウェアが組込み機器に載って多くのお客さんに使ってもらえるという喜びもある。これらが組込みソフトの醍醐味である。(=組込みソフトエンジニアのモチベーションの源泉)

以上、「組込みソフトってなに?」の疑問の解消にこの記事が少しでも役に立てれば幸いである。
 

2008-09-01

ソフトウェア工場 vs アジャイル どっちが組込みに向いている?

先日、「Rational Team Concert にみるソフトウェア開発におけるチームコラボレーション支援について」というタイトルの講演(講師 日本アイ・ビー・エム株式会社ソフトウェア事業 Rational テクニカルセールス&サービス 藤井 智弘氏)を聴いた。

簡単に言うと、IBMによって開発された統合開発環境のEclipseを開発したチームが使用したチームコラボレーション支援ツールを一般向けに使えるように整備するというプロジェクトの話しだ。

オブジェクト指向におけるデザインパターンの有名な本の著者 GoF (Gang of Four) の一人、Erich Gamma もこのプロジェクトにスイスから参加している。

ものすごく表面的でやじうま的な見方をすると、Microsoft が提唱した Software Factories の開発手法とまったく正反対のアプローチを IBM Rational が打ち出した・・・ように感じた。

【Microsoft の Software Factories】

Software Factories の考え方は、開発から運用までのソフトウェア・ライフサイクルの効率化を開発者の側に立って推進する「Dynamic Systems Initiative(DSI)」がベースにあって、Microsoft の戦略に乗っかるのならば、Visual Studio Team System を使っていくことになる。

どちらかと言えばトップダウンのアプローチであり、ソフトウェアプロダクトライン、ドメインエンジニアリングの考え方も踏襲されていて、非常にシステマティックだと感じるし、これまでのソフトウェアエンジニアリングの延長線上にあるように見える。

ただひとつだけ引っかかるのは、優れたアーキテクトがプロジェクト内にいない状態でSoftware Factories のアプローチを進めていくには無理があって、どうしてもやりたい場合はVisual Studio Team System を使うことで Microsoft が用意したアーキテクチャやソフトウェア資産を使うように誘導されてしまうような気がする点である。

また、Visual Studio Team System を使いこなすだけでもソフトウェアエンジニアに相当量の学習が必要がある。ある程度システムの全体構成を構築できてしまえば、その後の開発が飛躍的に効率化できるようになるものの、そこに達するまでのハードルが高いという印象がある。

【IBM Rational の Team Concert】

一方、IBM Rational Team Concert を利用した Jazz プロジェクトは、「分散」「アジャイル」「コラボレーション」といったキーワードからわかるように、どちらかと言えばボトムアップのアプローチで巨大ソフトウェアシステムの開発を成功に導こうとしている。

これまで Agaile は大規模システムへの適用は困難と見られていたが、IBM Rational Team Concert はAgaile のアプローチの人力で提唱されていた部分をすべてシステムに取り込んで、数百人の規模の開発でも、Agail の効果を最大限に引き出すことを目的にしているようだ。

実際、Eclipse の開発で成功した実績があるのだから説得力がある。

Rational Team Concert では、日々の作業はワークアイテムを中心に回っていく。ワークアイテムは「反復する計画と関連するワークアイテムの管理」「ソース管理」「ビルド」「レポート」を含む。

ある拠点に置かれた大量なトランザクションを処理できる強力なサーバー(おそらくはIBMのサーバー)を中心にして、世界中のプログラマーが WEB上のポータルサイトを共有するような感じで、プロジェクトの状況をリアルタイムに見ることができる。各人の写真も掲載され、チャットもできるし、プロジェクトリーダーやコンポーネントの責任者からの指示も共有できる。

共通環境で管理されるのはユーザー間の情報のやりとりとソースファイルであって、分散された環境でそれぞれが持っている個々の開発環境はあまり制限せずに、それらの環境への URL によるリンクのみがツール上で飛び回ることになる。

一方で、プロジェクトの状況は自動的にグラフ化され、それらのグラフを眺めることで開発の進捗を確認したり、品質を推し量ったりできる。

ソース管理に関する機能は重要視されていて、リーダーは各チームが勝手にソースをチェックイン、チェックアウトできなくすることも可能。(チームのコンテキストにより運営ルールをダイナミックに変更できるというところが Rational Team Concert が単なるコミュニケーションツールではなく、コラボレーションツールであるという理由)

【組込みで使えそうか?】

「Rational Team Concert にみるソフトウェア開発におけるチームコラボレーション支援について」の講演を聴いていておもしろかったのは、ソフトウェアシステム開発におけるアーキテクチャの話しはほどんど出てこない点だ。アーキテクチャはコンポーネントアーキテクチャだとのこと。要するにソフトウェアのモジュールをコンポーネントに分けるところまでが重要なポイントで、後は繰り返しリリースを重ねる過程で最適化していくというような考え方に聞こえた。

大人数での Agile 開発での注意点は「コミッターボード」「ガバナンス」「チェックインの制限」ということで、ソフトウェア技術者に勝手気ままにやらせない上手なコントロールをツール上で提供することだということだった。

Rational Team Concert は表面的には出てこないが、プロジェクト内に必ず優秀なアーキテクト兼プロジェクトリーダー(複数人かもしれない)が必要になる。彼または彼らが上手にプログラマー達をコントロールしてソフトウェアシステム開発を成功に導く。表面的は完璧なボトムアップアプローチだ。(表には出てこないが、プロジェクトリーダーのリアルタイムの舵取りがプロジェクトの成功の鍵を握っているため、その意味ではトップダウンとも言えるかもしれない)

Iteration(反復)を数多く繰り返すことに重きが置かれているため、もともとポテンシャルの高い技術者が参加しているのなら、プログラマとしての成長も早いだろう。

ソフトウェアエンジニアリングの歴史から考えると正反対のアプローチのように見えるが、人間工学・組織行動学的には理にかなっているように見える。

IBM Rational Team Concert 的なアプローチがいいのか、Microsoft Software Factories 的なアプローチがいいのか・・・

組込みソフトの世界なら次のようなシナリオで適用したらうまくいくような気がするのだけれどどうだろうか?

(そのドメインの制約条件を含む知識を十分に持ち合わせた優秀なアーキテクトがプロジェクト内にいると仮定して)まず、IBM Rational Team Concert で徹底的に Iteration(反復)を繰り返し、完成度の高いプロトタイプモデルを作る。次に、できあがったプロトタイプモデルのアーキテクチャとドメインの要求がどのようにすり合わされたのかを分析し、今後同様の製品群を作成するためのプロセスモデル、ドメインモデル、アーキテクチャを Visual Studio Team System を使って設計し、可視化されたモデルをレビューし洗練させる。システムの品質が担保できるようにテスト計画を立て、すでに実施されているテスト結果を利用しながらシステム全体の Verification(検証)と Validation(妥当性確認)を確立する。

個人的な感想を言うと、IBM Rational Team Concert では、開発チームのパフォーマンスは最大になるように思うが、開発チームはシステムの品質をも担保できているようには見えない。(システム品質の説明責任を果たすことが難しい) 開発のパフォーマンスを最大限に上げることでシステム品質までも凌駕してしまおうというアプローチであり、根拠ははっきりしないが実効性はあるようにも感じる。(優秀なアーキテクト兼プロジェクトリーダーの存在が必須)

一方、 Visual Studio Team System では、プロセスモデル、ドメインモデル、アーキテクチャを構築するハードルが高く、それを実現できるプロジェクトは非常に少ない。道筋がつけられるまでを外部の優秀なアーキテクトにコンサルテーションしてもらうことは可能だが、効果が現れるまで時間がかかるし、効果が現れるまでに必要な時間や費用を組織内で確保するのが難しい。

でも、どちらのアプローチにも必要なのはドメインの知識に精通したアーキテクトの存在だ。ドメインの知識に精通したアーキテクトを育てるためには、Iteration(反復)をできるだけ回した方がいいから、IBM Rational Team Concert の方を先に取り入れた方がよいかもしれない。

【参考資料】
Rational Team Concert に関して Jazzプロジェクト
Eclips (Wikipedia)
Erich Gamma(Wikipedia)

Visual Sstudio Team System に関して(Microsoft)
Software Factories に関して(@it)