ラベル 組込みプレス の投稿を表示しています。 すべての投稿を表示
ラベル 組込みプレス の投稿を表示しています。 すべての投稿を表示

2008-02-23

山崩しなんて本当にできるのか?

組込みプレス Vol.10 が発売になった。特集1 『できるエンジニアの“頭の中”徹底解剖』の記事が今回のブログで言いたいことと大いに関係あるのでまず、紹介しておきたいと思う。

特集1 『できるエンジニアの“頭の中”徹底解剖』の執筆者は、福田 英徳さんで、『C/C++による組み込みソフトウェア開発技法(ソフトバンククリエイティブ)』の著者でもある。『C/C++による組み込みソフトウェア開発技法』は、組込みに限らずソフトウェアに関する開発技法の多くが解説されており、自分はソフトウェア開発技法の辞書代わりに使っている。さまざまな開発技法の具体的な使い方が掲載されており、机上の空論ではない著者が実際に使ってみた開発技法のポイントが書かれている。

さて、組込みプレス Vol.10 の特集1『できるエンジニアの“頭の中”徹底解剖』の一節を紹介しよう。

【『できるエンジニアの“頭の中”徹底解剖』より引用】

 :
 ソフトウェア開発プロジェクトにおける問題を解決する能力は、ほとんどのソフトウェアエンジニアが身につけることが可能な能力です。普遍的な能力といってよいでしょう。必ずしもそうとは限らないのでは?と思われるかもしれませんが、問題解決に必要な力は、実は一つだけなのです。それは問題を解決しようとする意志の力です。必ずこの問題を解決してやろう、という確固とした意志そこが、問題解決に最も必要な力です。
 :
 筆者は、強い意志されあれば、問題解決には必ずしも知識・スキルを「あらかじめ」身につけておく必要があるとは必ずしも考えてはいません。もちろん実際の問題解決にあたっては、土台となるさまざまな知識があった方が遙かに効率的ですので、今持っていないスキルは学習によって身につけることが求められます。
 :
 ソフトウェア工学の知識は、数え切れないほどの過去のソフトウェア開発プロジェクトで発生したさまざまな問題を解決するために、優秀なエンジニアが能力を振り絞って悪戦苦闘した結果の中から、優れた手法と認められたものだけを蓄えた知識体系です。ソフトウェア工学を学ぶことは、過去(あるいはまだ現役かもしれません)に活躍した最優秀なエンジニアの能力の一部を身につけること、といっても過言ではないでしょう。

【引用終わり】

引用した部分だけだと、ヒューマンスキルの話しか書いていないように見えるが、そんなことはなくて エンジニアリング、マネージメント、リーダーシップのことがまんべんなく語られており、かつ、『C/C++による組み込みソフトウェア開発技法』で紹介されている状態遷移設計、構造化設計、オブジェクト指向設計などの開発技法についても触れられている。

ピックアップしたところは、特に問題解決能力に関して書かれた部分であり、これに関しては自分は福田さんとまったくの同意見であり、「問題解決能力(Problem Solving Skill):自ら考え行動する力」の記事に同じようなことを書いたのでこちらも読んでいただきたい。

『できるエンジニアの“頭の中”徹底解剖』の特集記事では、開発手法の話の前にヒューマンスキルが大事と書いている。この点が非常に共感できるところであるし、今日のブログのテーマである「山崩しなんて本当にできるのか?」の疑問につながる。

では今日の本題に入りたいと思う。

Microsoft Project などのプロジェクト管理ツールを使ったことのある方は多いと思う。まず、仕事を細分化し、期間や工数、誰をアサインするのか、どの順番で仕事を進めるかをガントチャートに書いていく。

このツールを使っていて引っかかる点がいくつかある。一つは、ある仕事に技術者をアサインするときに、その人の工数の何パーセントを使うのかを入力することだ。

技術者は大抵、複数の仕事を抱えているので、抱えている仕事のうちどの仕事にどれくらいの時間を振り分けるのかを決めるという理屈はわかるが、振り分けられた技術者はAの仕事に20%、Bの仕事に80%工数を使えといわれてその通りにできるのだろうか?

人間は同時に複数の仕事をこなすことはできないから、例えば1日10時間働くとして、2時間をAの仕事に8時間をBの仕事に割り当てれば、その通りになるが、本当にそんな働き方をするのか?

自分は未解決のAの小さい仕事とBの大きい仕事があった場合、どっちの仕事にしても中途半端の状態のままで別な仕事に移るのは嫌いだ。中途半端にしたAの仕事が気になって、Bの仕事に集中できない。

こういうときは、Aをできるだけ集中して早く片付けでまず一通り完成させてしまう。そして、Bに取りかかりBも一通り完成させる。この時点でAの仕事もBの仕事も完成させるという責任を果たすめどが立って精神的に落ち着く。

そして次に、納期までの余った時間でAとBの仕事をもう一度見直してさらに完成度が上げられないか考える。時間の許すかぎりイテレーションを繰り返し、成果物を洗練させる(リファクタリングする)。

そんな仕事のやり方をする自分にとって、技術者にAの仕事に20%、Bの仕事に80%工数を使えと指示することに強い違和感を感じる。

どちらかと言えば、Aの重要度はこれくらいで、Bの重要度はこれくらいと伝え、どんな工数の使い方をしてもいいから期限までに仕上げてくれと言いたい。

実際にC君がAとBの仕事に使った工数配分を後から分析し、似たようなA'やB'の仕事をお願いする際に、どれくらいかかるのか予測する際に工数配分の数字を使うのはいいが、これから取り組む仕事に対して工数の配分をパーセンテージで示すのはまるで人間を人格のない機械のように見ているようで嫌いだ。

これと同じような話で、「工数の山崩し」というのがある。

Microsoft Project でガントチャートを書いて、プロジェクトメンバーの工数を入力していくと、リソースの配分を別画面で眺めることができる。

ようするに誰に仕事が集中し、誰の仕事が少ないのかをグラフで把握できるのだ。

このときプロジェクト管理ツールは「工数の山崩し」を行う機能を持っている。仕事の集中している人の仕事を仕事の少ない別のメンバーに自動的に振り分け、プロジェクトメンバーの工数を平均化する機能だ。

自分は、この機能を一度も使ったことがないし、この機能ほどナンセンスなものはないと感じている。

少人数のプロジェクトしか経験していないせいか、誰にどんな仕事を任せるのかは、その人の性格やスキルを見て決める。多くの場合、Aの仕事は技術者αにやってもらうのが適しており、Bの仕事は技術者βにやってもらうのかよいなどと判断して割り振る。その結果、技術者αに仕事が集中することも少なくないが、だからといってαに任せようとした仕事をβに振り分けるとうまくいかないことは多い。

「プロフェッショナルの条件」の記事で書いたように、20世紀、21世紀の世の中は肉体労働者よりも知識労働者の方が圧倒的に多い。工数の山崩しの論理は知識技術者を肉体労働者のように考えていないか?

これが10名ほどの小さいプロジェクトではなく100人規模のプロジェクトで、サブプロジェクト単位でのタスクの山崩しなら、もしかしたらあり得る話なのかもしれない。山崩しの対象が技術者個人ではなく、サブプロジェクトであり、サブプロジェクトごとに仕事の配分を変えるというのであれば、サブプロジェクトのリーダーが技術者の性格やスキルを考えながら誰にどの仕事を任せるべきか調整することができるので理解はできる。

しかし、エンジニアの視点で山崩しという行為を考えたとき、同じようなスキルを持ったエンジニアがプロジェクト内に何人もいて、同じ仕事をAさんからBさんにスイッチできるような職場ってあるのだろうか?

ETSSでスコアが同じエンジニアなら仕事をAからBにスイッチできるのか?

ピーター・F・ドラッカーが『プロフェッショナルの条件』で書いているように、知識労働者がメインの現代では、現在のプロジェクトメンバーの構成員をよくみて、それぞれの得意な部分を最大限に生かしてできることを考えた方が、まず、目標ありきで苦手でも必要とされる仕事をメンバに強要するより、より大きな成果に結びつく可能性が高い。

もちろん、技術者の特長を把握し、その特長を最大限活かすようなプロジェクト運営をするには、洞察力の高いプロジェクトリーダーが必要になるが、プロジェクトメンバーや協力会社のエンジニアをまるで物のように扱うプロジェクトリーダーでは、どんなにスキルの高いメンバーがそろっていたとしても、高い成果、品質のよいソフトウェアをアウトプットできるような気がしないのだ。

人はものじゃない。ものじゃないから知識やスキルを組み合わせるだけでは成果をあげることはできない。逆に言えば今知識やスキルを持っていなくても可能性はある。

そういうスタンスに立つと、新しいプロジェクトメンバーを補充しようとするとき、現在スキルを持っているかどうかではなく、足らない技術を身につけるポテンシャルを持っている人材がいないかという視点で人を見るようになる。

自ら足らない点を補い技術を身につける行動を取れる自立したエンジニアであれば、現時点でスキルを持っていなくてもいい。

これと同じことを、組込みプレス Vol.10 の特集記事 『できるエンジニアの“頭の中”徹底解剖』で福田さんが書いているというわけである。
 

2007-08-09

組込みソフトで勝ちたい人に捧ぐ

今回は宣伝が入っているのでへりくだってですます調でいきますです。

さて、技術評論社の 組込みプレス Vol.8 が8月11日に発売になります。特集1- 制約の多い組込みソフト開発-『効率化と品質向上2つのアプローチ』に寄稿&特集記事をプロデュースしたので内容を紹介したいと思います。

この特集1のサブテーマは「組込みソフト開発の心技体を鍛える」なんですが、開けてびっくり、特集2のテーマは「設計力」ブート★キャンプでした。組込みソフトもスポーツなんですね。

記事を読んでもそんなに疲れるものでもないので、今回の特集記事は夏休みの間にじっくり読んでいただきたいと思います。

今回の号は組込みソフトで「勝ちたい」人に最適です。もしも、あなたが組織の内外で認められ、発言力を増し、出世したいのなら実績を上げることが一番の近道です。組込みの世界で実績を上げるためにはヒット商品を開発したプロジェクトのメンバになっている必要があります。どんなに美しいアーキテクチャを構築しても、どんなに読みやすいコードを書いても残念ながらその成果を認めてくれる人は組織内にはほとんどいません。

組込みの世界では、どれだけたくさんの商品を売り、お客さんに満足してもらい、また次の新しい製品を買ってもらえるかどうかが勝負の分かれ目となります。あなたがサプライヤーの社員だったとしても同じです。ヒット商品のソフトウェアを供給できればそれが実績となります。

火消しが上手い人はかわいそうですが一つ火消しが終わると、もっと大きく燃え上がっている現場に投入されてしまいます。そうならないいためには、ヒット商品のソフトウェアの開発チームにいることが大切です。

今回の特集記事はQFD(Quality Function Deployment:品質機能展開)の技術を使って、市場要求や商品に求められる品質を分析し、組込みソフトの実装技術に結びつける方法を紹介しています。

ようするに売れる商品の要素を分析して、自分たちの得意な技術、他社がまねしにくい商品価値が凝縮されているソフトウェア資産を開発する方法なのです。これがうまくいけば、エンジニア個人としての自分も仕事が楽しくなるし、組織も売れる商品ができてありがたいし、お客さんにも喜んでもらえます。

特集記事の執筆者は酒井と、EEBOFのメンバーである安部田 章さんと、QFD研究の第一人者である山梨大学の新藤 久和先生です。安部田さんは QFD を基礎から丁寧に解説し、どのように組込みソフト開発に活かしていけばよいのかを書き、酒井は現状のソフトウェアシステムを分析してそのアーキテクチャを可視化した上でQFDを使うことで再利用資産を抽出する方法を示し、新藤先生はQFDの歴史と最新の研究を紹介しています。

安部田さんはトップダウン、酒井はボトムアップ、新藤先生はバックとフロントエンドの視点でQFDを解説するという、この一冊でQFDが丸ごと分かるというお得な特集となっています。

(特集2 では、SESSAME WG2 のメンバーである、山田、森、國方トリオが設計力強化のためのブートキャンプを張っていますのでこちらも注目)

もしもあなたが組込みソフトで勝ちたいのなら是非ご一読を。(ちなみに、商売とは関係のない研修者、学生のみなさんが読むと勝つ組込みソフトってどんなものかが分かります。)

組込みプレス Vol.8 特集1 第1章 特集のはじめに より 引用】

 ユーザー要求や市場要求が明確になれば,組込み製品を使ってくれるユーザーの満足を高めるために何をすればよいのかが分かり,モチベーションの向上や改善への意欲につながります.ユーザー要求や市場要求を実現することができれば,自分自身の満足も高まり,商品が売れることで自分やプロジェクトの成果を組織に認めてもらうことができます.また,要求を満たすための技術が明確になれば,その技術を習得するという目標が定まり必要な技術を身につけるために最短の道筋を進むことができます.

 そして,ソフトウェア開発の途上でソフトウェアプロジェクトチームの意見が別れ,不協和音が聞こえてきても,「ユーザーや市場の要求をより満たすにはこちらの選択の方がよい」という導き方ができます.ソフトウェアエンジニアが10人も集まれば,それぞれの好みや癖により,ソフトウェア開発の方法論やアーキテクチャの選択に差異がでてきます.この差異を組織や会社間の上下関係により押さえつけてしまうこともできるでしょうが,それでは心技体の「心(技術者のモチベーションや改善への欲求)」や「体(チームビルディング力)」を下げてしまいます.

 市場やユーザーが商品に求める要求や品質が明確になっており,それらの重要度があらかじめ分かっていれば,そのときプロジェクトチームは何を取捨選択すればよいのか,どんな技術を習得すればよいのか根拠を持って判断することができます.プロジェクトリーダーの個人的な趣味や声の大きい技術者の好みではなく,ユーザー要求をベースにプロジェクトチームの舵を切ることができるようになります.欧米の責任と権限が明確に分けられたドライなソフトウェアプロジェクト運営と,パフォーマンスの高いうまくいく日本の組込みソフト開発のプロジェクトのあり方の違いは「誰のために仕事をしているのか」「今の仕事は何のためやっているのか」という部分の気持ちの持っていき方の違いであると言えるでしょう.

【引用終わり】

以上、宣伝でした。

2006-11-11

電気回路設計から学ぶ組込みソフト設計

組込みプレス Vol.5が発行された。この号で是非読んでいただきたいのは「文系エンジニアのためのハードウェア講座-電子回路を読む-」だ。

この記事、決して文系エンジニアのためだけではなく、理系の組込みソフトウェアエンジニアにもじっくり読んでみるとよい。

おそらく組込みソフトエンジニアでも回路図を読む機会のないソフトウェアエンジニアは「自分には関係ないや」と思うかもしれないが、それはこの記事の見方を少し変えてみれば違った発見があるはずだ。

その違った発見について書く前に、自分の電子回路との接点について振り返ってみたい。

入社5年目くらいのことだと思う。組込みソフトウェアエンジニアとしてアプリケーションソフトを書き続ける日々が続いた後、CPU周りの電気回路の回路図を書く機会があった。電気系のCADの導入が始まったばかりで採用が決まったCPUのデータがCADに登録されておらず、CPUのデータブックを見ながらピン番号と信号名を入力してくれと電気系の技術者の頼まれたのだ。

電気系CADの使い方を覚え、ピン番号や信号名を入れていくうちにだんだん回路図を書くのがおもしろくなってきた。すでに登録してある部品は部品番号を入れるとその部品の回路がCADの画面にパッと表れる。そして、使用する部品をあらかた画面上に表示させておいて、信号線をつないでいくという作業はとても楽しい。

ちなみに、このときから10年以上たって、UMLツールでモデリングするときのこの電気系の回路図を書いていたときと同じようなおもしろさを感じた。

ただ、初めて電気回路の作図に挑戦したとき実際に書けたのはCPUとROM、RAM、拡張ポート、SCIの石などとの接続だけで、電源周りやアンプなどの回路については書けなかった。

「文系エンジニアのためのハードウェア講座-電子回路を読む-」を読んで、組込みソフトエンジニアとしてのキャリア20年間でなんとなくデジタル回路を書く電気屋さんが普段やっていることで「なんでそうなっているのか分からなかった」ことや、「そんな方法もあったのか」といったことがいろいろ解き明かされた。

たとえば、スイッチ入力で起こるチャタリングはコンデンサでもある程度押さえられるということ。

また、通常のオペアンプは電源電圧まで振幅を振ることができないが、Rail to Rail のオペアンプは電源電圧近くまで使えること。(Rail to Rail ということばを電気屋さんがよく使っていたが、何のことだか初めて分かった)

プリントP板上でICの近くに必ず配置されている青い小さなパスコンと呼ばれるコンデンサ、このコンデンサはデジタルICの出力パルスが切り替わる瞬間に発生するスイッチングノイズを押さえるためにICと近くの電源とグランド間に設置し、ICが電流を流したときにこのコンデンサにたまっていた電気を放電して供給することで対応していたということなどなど。

この記事には、デジタル電気回路の実践的設計に関するノウハウがたくさん書かれている。そういう意味では、電気屋さんが基礎をおさらいするときにも役立つだろう。

組込みソフトエンジニアがこの記事を熟読して、渡された回路図の間違いやこう直したほうがよいという点を指摘できるとかっこいいかもしれない。

さて、組込みソフトエンジニアでも回路図を読む機会のない、読む必要がないと考えるソフトウェアエンジニアが、「文系エンジニアのためのハードウェア講座-電子回路を読む-」の記事をどう読んだらよいのかについて考えたい。

実は、デジタル回路を設計するアプローチについてよく考えてみると、巨大化した組込みソフトウェアの海で喘いでいる組込みソフトエンジニアの救いの船が見えてくるのだ。

--- (a) --- デジタル回路を設計する電気系エンジニアのアプローチ

デジタル回路を設計する電気系のエンジニアはまず、電気回路の基礎(電源やトランジスタの仕組みなどなど)を学んだのち、自分たちが使う分野の部品についての調べる。

電気部品は自分で作るのではなく、市場に供給されている部品から必要なものを選ぶ。部品にはデータシートが付いていて、その部品の仕様、実装するときの例、入力や出力の Max値、Min値、Typical値などが書いてある。

電気系のエンジニアはこのデータブックに書いてある情報をよく読んで、必要な部品を選別し、目的の回路を組み上げていく。場合によっては、既存製品のある機能をつかさどる部分の回路をそっくりそのままコピーして使うこともよくある。でも、前の製品に使われた回路の設計思想をよく考えずにコピーしたりすると、うまく動かなかったり、最悪の場合回路が壊れたりするので、中身の構造を理解しないで既存の回路図をコピーするような新人がいると先輩は「データシートを見て、なぜそのような回路構成になっているのかよく考えて使え」と怒る。

このような電気系のエンジニアが回路図を作るアプローチと組込みソフトエンジニアのアプローチの違うはなんだろうか。それは“部品”の存在だ。デジタル回路の世界では自分ではない他人が作った“部品”が存在しており、これらの部品にはデータシートがあり、制限事項が書かれており、品質が保証されている。ごくまれに不良品やデータシートには書かれていない制限があったりするが、データシートを読み込んでいれば問題が起こる確率は非常に低い。

そして部品を組み合わせて目的の機能を満たす回路を設計する。同じ部品を使っているとその部品を使うノウハウがたまってくる。

たとえば、同じような部品を使っていると「ブラシ付きのDCモータが回転するときは整流子とブラシの間で火花が発生し、ノイズを誘発するので、モータの端子間に0.001μF程度のコンデンサを接続し、ノイズが外部に出るのを防ぐとよい」といったノウハウだ。

--- (a)'---

ある意味、組込みソフトはこのような融通の利かない決まり切った使い方しかできないハードウェア部品同士の隙間を埋めるための存在であるとも言える。しかし、融通が利かないのは流通する部品の数が少ないときであって、いろいらな種類の部品が入手可能な状況でそれらの部品のインターフェース仕様が事前に分かっていれば、それほど不自由はない。

だから、この話をソフトウェアの世界に置き換えると 21世紀の巨大化した組込みソフトウェアの世界では、ソフトウェアもハードウェアの“部品”に相当するソフトウェア資産(部品)があると有利なことがわかる。

(a)から(a)'までの部分を、ハードウェア部品から再利用可能なソフトウェア資産に置き換えてみよう。

--- (b) --- 巨大化した組込みソフトウェアの設計アプローチ

組込みソフトエンジニアはまず、組込みソフトに関する基礎(プログラミング言語や、割り込み、OS、ドライバの作り方)を学んだのち、自分たちが使う分野のあらかじめ用意されたソフトウェア再利用資産(部品)について調べる。

ソフトウェア部品は自分で作るのではなく、すでに用意されている部品から必要なものを選ぶ。ソフトウェア部品にはデータシートが付いていて、そのソフトウェア部品の仕様、インターフェース仕様、実装するときのパターンの例、制限事項などがなどが書いてある。

組込みソフトエンジニアはこのデータブックに書いてある情報をよく読んで、必要なソフトウェア部品を選別し、目的の機能・性能を満たすためのモデルを組み上げていく。場合によっては、既存製品のある機 能をつかさどる部分のモデルをそっくりそのまま、コピーして使うこともある。でも、前の製品に使われたモデルの設計思想をよく考えずにコピーしたりする と、うまく動かなかったり、最悪の場合機能や性能を満たすことができなくなるので、モデルの設計思想を理解しないで既存のモデルをコピーするような新人がいると先輩は「ソフトウェア部品のデータシー トを見て、なぜそのようなモデル構成になっているのかよく考えて使え」と怒る。

ソフトウェア部品は自分ではない他人が作った“部品”であり、これらの部品にはデータシートがあり、制限事項が書かれており、品質が保証されている。ご くまれにソフトウェア部品にはバグが混入していたりするが、データシートを読み込んでいれば問題が起こる確率は非常に低い。

そしてソフトウェア部品を組み合わせて目的の機能を満たすモデルを設計する。同じようなモデルやパターンを使っているとそのソフトウェア部品を使うノウハウがたまってくる。

--- (b)'---

しかし、(b) には (a) とは違った難しいところがある。まず、ソフトウェア部品は多くの場合他人が作ったものではないし、インターフェース仕様や制限事項が書かれたデータシートに相当するドキュメントがあることは少ない。品質が保証されているかどうかも分からないし、問題が発生してもバグの修正を保証してはくれない。バグを修正するのは自分だったりする。

また、ソフトウェアを部品化できたとしても実際には、RTOSなどを使いひとつのCPUで疑似的に並列で動くだけなので、他のソフトウェア部品から影響を受けてしまう。メモリリークなどが発生するとソフトウェア部品としての独立性を高めてあったとしても動けなくなってしまうこともあるだろう。

また、組込みソフトのソフトウェア部品はCPUパフォーマンスやメモリ資源のことを何も考えずに設計し、つなぎ合わせていくと制限をクリアできずに破綻してしまうことがある。

だから、ソフトウェア部品を組み合わせて配置しても制限をクリアできるような、フレームワークやアーキテクチャの設計ができていないといけない。また、このようなフレームワークやアーキテクチャは、製品や製品群によってそれぞれ異なるので一般的なものは存在しない。

だから、再利用可能なソフトウェア資産を作ることができたとしてもハードウェア部品を組み合わせるように簡単にはいかない。

でも、巨大化した組込みソフトウェアを効率よく開発できるようにするには、このようなハードウェア部品を組み合わせて目的を達成するアプローチを見習わなければいけない。

そうすれば、ソフトウェア資産を使うノウハウがたまり、組込みソフトウェアもどの資産をどうやって使えば効率的に開発できるのかわかるようになる。そのドメインに特化したデザインパターンが構築され、そのコンセプトがプロジェクトや組織の中で継承されていくということだ。

「文系エンジニアのためのハードウェア講座-電子回路を読む-」を読みながら思い浮かんだのは、デジタル回路設計ののアプローチは、組込みソフトエンジニアの問題を解決するのに役に立つということだった。

ところで、デジタル回路の世界では FGPAなどのプログラマブルなロジックデバイスがよく使われるようになってきた。このようなプログラマブルロジックデバイスはCライクな高級言語を使って動作を記述することもできる。ということは、これまで部品を組み合わせてデジタル回路を作ってきたハードウェアエンジニアが我々の“何でもあり”の世界に入ってきたということになる。

ハードウェアエンジニアは(わざわざ苦労しに)組込みソフトの世界入ってこようとしており、組込みソフトエンジニアはハードウェア設計のアプローチを学ぼうとする。

隣の芝は青いということか・・・

2006-05-21

組込みプレス Vol.3

組込みプレス Vol.3 が発売になった。今号から季刊になるとのこと。組込みプレス はこれまでは「是非、読んでね」くらいのレベルだったが、Vol.3 は「絶対読んでおけよ!」くらいのインパクトがある。バラエティに富んだ構成でありながら内容が濃い。

自分自身は、一般記事の中の SESSAME Workshop 2006 でモデレータを務めたパネルディスカッションの様子を「組込みソフト技術者のあるべき姿を探る」というタイトルで14ページの記事にまとめた。この記事も是非読んでいただきたいが、他にもおもしろい記事が盛りだくさんなので、一つずつ紹介していきたいと思う。

【特集1 ハード/ソフト技術、業界がわかる! 組込みシステム基礎の基礎】

この特集記事は、SESSAMEのメンバーでもある みわよしこ さんの記事で、「ハードウェア技術」「ソフトウェア技術」「組込み産業/組込み技術者」という3つの視点で組込みソフトにまつわるいろいろなことがらを解説している。ページをぱらぱらとめくってすぐに気がつくのは、部品が実装されたプリント基板や、LED、三端子レギュレータ、トグルスイッチ、ディップスイッチ、サーミスタ、モータなどの写真がふんだんに使われている点だ。組込みソフト系の雑誌というとデバイスのインターフェース周りの雑誌と、プロジェクトマネージメントやオブジェクト指向設計技術などどちらかに偏りそうなものだが、今回の組込みプレス Vol.3 は、その両方を網羅している。「大規模開発時代の組込みエンジニアのための技術&マネジメント情報誌」というコンセプトに嘘はないように思う。

みわさんの記事は、具体的なハードウェアデバイスの特性や原理、使用方法を解説するとともに、プログラミングやテストリアルタイムOS、ミドルウェア、組込み産業の現状など、非常に広範囲に組込みソフトの領域を解説している。組込みソフトの世界に踏み込んだ新人や、ビジネス系から組込みソフトの世界に移り困惑している技術者にはうってつけの記事だ。

【本音で語る ソフトエンジニア vs ハードエンジニア】

組込み機器開発の中では日々起こっているソフト屋さんとハード屋さんのバトル。現場ではしょっちゅう起こっていることで、それぞれの立場の違いから起こる勘違いやいざこざはあることはわかっているものの、他の業種、他のプロジェクトでも同じなのかどうかはわからなかった。雑誌の記事の中でソフトエンジニアとハードエンジニアが意見を戦わせる座談会の様子が載るのはめずらしい。

【組込みソフトのプロになるための C言語入門】

C言語によるプログラムの書き方の解説に加え、この特集では組込みソフトエンジニアとしての心構えや考え方、コーディング規約や、コストとの闘い、品質の確保など、現場寄りの生々しい話題についても取り上げている。

【新人管理者のためのマネジメントの基礎知識】

この記事は、豆蔵のコンサルタントで、EEBOFのメンバーでもある井上樹さんの記事で、「QCD」「PDS」「段取り」「地図」の四種の神器で組込み開発の荒波を乗り越えるという内容だ。

大規模化したソフトウェアにはプロセスアプローチ、プロジェクトマネージメント、ソフトウェア工学の適用が不可欠だが、これらの理論をどのように、ソフトウェア開発の現場に適用すればよいかについて解説している。

【組込みソフト技術者のあるべき姿を探る】

この記事は、冒頭で紹介したように、 2006年1月23日に行われた Open SESSAME Workshop 2006 のパネルディスカッションの様子を記事にしたものだ。パネルメンバーは、前日経エレクトロニクスの編集長 浅見さん、東京大学CEOものづくり経営研究センターの立本さん、東陽テクニカの二上さん、電気通信大学の西さんの4人で、モデレータ役が自分だった。このパネルディスカッションは4人それぞれにロール(役割)をあらかじめ決めて、それぞれのロールで発言をしてもらった。浅見さんは組込み産業のマーケットリサーチャー、立本さんは産業競争力の分析者、二上さんは技術者教育のスペシャリスト、西さんはソフトウェア品質・テストの専門家といった感じだ。このパネルディスカッションの特徴は、パネルメンバーがそれぞれの分野のスペシャリストであるため発言の内容が深いところだと思う。このパネルディスカッションで語り尽くせなかった内容は、後日座談会を開いたので、こちら記事は組込みプレス vol.4 をお読みいただきたい。

【組込みリアルタイムソフトウェア開発のアプローチ】

最近独立系のコンサルタントとして活動は始められた橋本隆成さんの記事。「組込みソフトウェアとリアルタイムシステム」「組込みシステムの開発手法と戦略」「組込みリアルタイムシステム方法論の紹介」という3部構成となっている。組込みに特有のリソースの制約やリアルタイム性について、言及されており、DARTS(Designe Approch for Real Time Systems)やリアルタイムシステムの開発方法論「Harmony」が紹介されている。ビジネス系のモデルでは表現しきれないリアルタイム系のモデルの表現方法、設計方法についてさまざまな視点、開発方法で解決策を提示している。

【組込みユーザービリティエンジニアリング原論】

組込みの世界でユーザービリティはとても大事だ。ユーザーにとって使いやすい機器にできるかどうかは、ユーザーインターフェースの善し悪しにかかってくるが、今の組込み機器のユーザーインターフェースはソフトウェアの影響が強く表れる。ユーザーの使用環境をよく理解したエンジニアが製品開発全体を見渡せる時代はユーザビリティエンジニアリングは必要なかったのかもしれないが、ソフトウェアが大規模化した現在ではユーザビリティを分析した上でものづくりをしないと、ユーザーが使いこなせい機能が生まれてしまう。この記事ではユーザーの満足度を向上させるための組込みユーザービリティエンジニアリングについて解説されている。

【携帯電話開発の舞台裏】

この記事は組込みプレス Vol.3 の中でも一押しの記事だ。滅多にお目にかかれない、とってもおもしろいから絶対に読んだ方がいい。

何がおもしろいかといったら、著者の数々の苦い体験が具体例をともなって載っているからだ。アンチパターンをこれほど具体的に書いてある記事は貴重だ。たとえば

・数10Kバイトのメモリ削減のおふれが出る
・ポインタ幅の取り決めが守られずシステムリセット
・性能の高いシミュレーション環境では深刻な不具合が隠蔽されてしまう
・他社のコードをバージョン管理システムに登録する際の契約
・CPU内蔵の高速RAMが救ったプロジェクト
・海外の開発拠点で開くPM会議では必ず2名程度の欠席がある
・欧米人は年に計5週間ほどの休暇を取り、その間にメールを送ると休暇中のメッセージを発信する vacation プログラムが活躍している
・兵役で戦線離脱するエンジニア
・入社6年というと目を丸くする外国人
・大規模開発では優秀なエンジニアに仕事が殺到しボトルネックになってしまう
・英会話能力の低さが招く悲劇
・長い海外出張で減る日本国内の友人

などなど、おもしろい話題が満載だ。

【海外エンジニア事情】

日本と海外のエンジニアの環境や考え方の違いを知るのはおもしろい。いかに日本が特殊な環境にいるのかがわかる。今回はインド・バンガロールの様子が紹介されている。

【超入門!ダイナミックリコンフィギュラブルプロセッサ】

最近、コンフィギュラブルプロセッサという舌をかみそうなキーワードをよく見かける。まだ、完全に理解していないのでこの記事を読んで理解を深めようと思う。

【世界に広がるARM32ビットRISCプロセッサその理由とは】

ARMよく使われてる。なんでARMの使用が広がっているのか、ARMの特徴は何か、4回構成で紹介してくれるとのこと。

最後に、巻末の小林道場で 川柳を募集している。開発現場で起こった災難・苦労などを5・7・5の川柳で送ると特賞は図書券三千円が当たるそうだ。