2015年8月15日土曜日

2014年9月30日火曜日

明日のための仕事

本日をもってミラクル・リナックスを退職する。2年半という短い間だったが、たくさんの方々にお世話になった。お礼を申し上げる。

私のミラクルでの仕事を振り返ってみると、最大の貢献と言えるものはLinuxに関連することではなかった。エンジニアリングですらなかった。それは人に関連することだった。すなわち、若者の育成であった。

仕事を行う者にとって、学校を卒業して最初に入る会社は重要である。最初に入った会社で、仕事を行う者としての価値観を築く。仕事のやり方を覚える。それはその人の職業人生をとおして大きな影響を与える。

私は、三菱電機でエンジニアとしてのキャリアをスタートさせた。私の配属された鎌倉の古い工場は私の原点である。私はいつでもそこへ戻ることが出来る。私のエンジニアとしての精神的バックボーンは今も鎌倉の工場にある。

私がミラクルへ入社した年は、ミラクルが本格的に新卒採用を始めた年でもあった。ミラクルでは、驚くほど新卒を受け入れる体制ができていなかった。学校を卒業して最初に会社に入る者への責任を果たしていなかった。

その年入社した女性には、最初の1年は非常につらい思いをさせてしまった。先輩たちはただ見守ることすらできなかった。見守るということを知らなかった。彼女は今では立派なエンジニアに成長したが、これは100%彼女自身の努力によるものと言ってよい。

明らかに改善の余地があった。そこで私は、人事部門と協力して若者のメンター制度を構築することにした。これは、三菱電機で私を教育してくれた人たちへの恩返しのつもりでもあった。

この制度の特徴は、若者の後見人としてのメンターと、OJTで実務を教えるプロフェッショナルとしてのトレーナーを明確に区別することにあった。若者は様々な仕事を行わなければならない。それぞれの仕事にトレーナーが存在する。しかし、仕事を行う者としての若者の成長には一貫してひとりのメンターが責任を持つ。

この制度のモチベーションとしては、日々の多様な業務に流されて、ただ慌ただしく時間が過ぎ去らないようにとの配慮がある。様々な業務を行う中で、自分を見失うことなく着実に成長し、価値観を築き、精神的バックボーンを築いて欲しいとの意図である。

もちろん、この制度がベストだとは思っていない。この制度はまだ時の試練を受けていない。これから何年も運用して改善していかなければならない。

今日の仕事を行うのは我々の責任である。しかし、明日の価値を作り、明日の仕事を行うのは若い人たちである。したがって、人材の育成はそれ自体が価値をもつ成果であると言ってよい。今日の仕事として、明日を担う若者を育成しなければならない。

2014年2月23日日曜日

社会人として

ここ数年、私が使うのを避けている言葉がある。「社会人」がそれである。この言葉は、「社会人として〜」という使われ方をする。人が(私も人である)「社会人として〜」と言っているとき、この「社会人」とはいったい何を意味するのだろうか?

「社会人」こそ無意味な思考停止キーワードである。それは、「サラリーマン」と言っているのと同じ程度の意味しか持たない。試しに、「社会人として〜」を「サラリーマンとして〜」に置換してみるがよい。その言葉があまりにも何も定義しないことに驚くだろう。

「会社に遅刻をしてはいけないよ」と、私はよく上司に言われたものだ。まだ若く世間知らずだった私は、当然の疑問として「なぜ遅刻をしてはいけないか?」と問うた。上司の答えは「社会人として」だった。若者は(私も若者だった)これでは納得しない。

この上司は、「遅刻をすると約束の相手の時間を無駄にすることになる。誰もが他人の時間を無駄にし始めたら、誰も仕事を行うことはできない。現に今、あなたはこうして私の時間を無駄にしている」とは言わなかった。

もし、この上司がこう答えていたならば、私は追求の第二弾に出ただろう。「では、誰の時間も無駄にしないのであれば遅刻をしてもよいのか?」と。

私はまだこのときの上司の年齢には及ばないが、それでも後輩を指導しなければならない立場にはなった。私も後輩から追求の第二弾を受けるかもしれない。「社会人」などという無意味な思考停止キーワードを使わないように準備しておかなければならない。

こう答えよう。「そのとおりである。本当に誰の邪魔もせず、かつ仕事ができるのであれば、会社に来る必要もなく、したがって朝起きる必要も、布団から出る必要さえない」と。ただし、「あなたにはそれが出来るのか?」と付け加えることを忘れない。

遅刻をした若者に注意を与えるとき、大抵の人はここまで考えてはいない。なんとなく、皆が同じ時間に会社に来ているからあなたも(そして私も)そうしなければならないという程度にしか考えていない。そういうとき、つい「社会人」という言葉を使ってしまう。

他にも「社会人」という言葉が出てくる場面はたくさんある。忘れ物をするな、小奇麗にしろ、飲み会で上司にお酌をしろ云々。要注意である。これらは実に些細なことであるが、しかし人が思考停止に陥る典型的パターンである。

我々は仕事を行う人間として働いている。仕事を行うことこそ使命である。我々は単なる「サラリーマン」でないのと同様に「社会人」でない。

私は、まったく会社に出社せず、メールだけで仕事をしている人物を知っている。しかし、誰かが、この人物を「社会人」でないと批判しているのを聞いたことはない。その人物は確かに仕事を行うことができ、それで十分である。

あと1ヶ月ほどで「新社会人」が我々の仲間に加わることとになる。企業とは、学校とはまったく違う性質を持つ組織である。彼らは、かつての私がそうだったように、最初は大いに戸惑うことだろう。その時、私は「社会人」などといういい加減なものではなく、本当に仕事を行う人間としてよき手本となりたい。

2013年12月3日火曜日

若いエンジニアへ

エンジニアなら誰でも突貫工事に喜びを見出した経験がある。深夜2時の夜食を共にした同僚のことは、その職業人生を通じて忘れることはない。しかし、そこにいかなるドラマがあろうとも、突貫工事は例外である。これを常態としてはならない。

メーカーの組込みプログラマとしてエンジニアのキャリアをスタートした私は、「よい製品はよいプロセスから生まれる」ことを頭に叩きこまれた。素晴らしい製品を生み出す工場は静かである。常に誰かが大声で叫んでいるような工場には明らかにプロセス上の問題が認められ、素晴らしい製品を生むことは決してない。

本物のエンジニアは突貫工事を好まない。突貫工事とはプロセス上の誤りであり、つまり誰かが大声で叫ばなければならないということだからである。エンジニアの仕事は計画され、コントロールされたものでなければならない。

長時間労働によって成果を生み出そうとすることも、やはり例外としなければならない。長時間労働もプロセス上の誤りである。長時間労働とは「体力勝負」の世界であり、技術の専門家たるエンジニアの地位を貶めるものである。

エンジニアの創造性を引き出すものは、長時間労働ではなく集中である。誰もが知っているように、集中とは1日18時間持続するものではない。普通の人は2, 3時間がせいぜいである。

どうすればこのわずか2, 3時間の集中に入れるのかを知る者こそ本物のエンジニアである。ある人にとっては深夜や早朝かもしれない。朝メールをチェックして、お気に入りのWebサイトを見て回ったあとでないと集中できないという人もいる。

かつて、NHKで「プロジェクトX」という人気番組があった。そこで紹介されるプロジェクトは、ほとんどすべてが突貫工事と長時間労働のドラマだった。視聴者に、あたかも、突貫工事と長時間労働こそが素晴らしい製品を生み出すかの誤解を与えるものであった。

あの番組を見て違和感を覚えたエンジニアは多いはずだ。私が駆け出しのエンジニアの頃上司から受けたアドバイスは、あのような番組を真に受けるなということだった。メーカーを退職した今でも、私は「よい製品はよいプロセスから生まれる」というこのコンセプトが正しいと思っている。

若いエンジニアには、よいプロセスは退屈に見えるかもしれない。しかし、本物のエンジニアにとっては、日々の秩序の中にこそ素晴らしいドラマがあるのである。

2013年9月13日金曜日

エンジニアのジレンマ

技術は何を作ればいいかは教えてくれない。技術は如何に作ればよいかを教えるのみである。世界で最も優れたエンジニアとは、何を作ればいいか教えてくれれば何でも作ってみせると約束する者である。

優れた技術を持つはずのエンジニアが、精巧なゴミを作り続ける理由はここにある。今日のゴミはWebインタフェースを持ち、明日はAndroidアプリとなる。だが、どんなにキラキラかがやいていようと、どんなにフワフワしたおまけが付いていようと、ゴミはゴミである。

皮肉なことに、優秀なエンジニアは、自分の作っているものがゴミだと知っている。単に、ゴミ以外に何を作ればいいか知らないのだ。エンジニアのジレンマである。

技術とは如何に作るかについての知識である。知識とは形式化され体系化され教育によって学ぶことができるものである。技術と教育システムの発達した現代においては、教育によって優秀なエンジニアを育てることができるようになった。

現代に欠けているのは、何を作るかについての知識である。その知識を学んでさえいれば、系統的プロセスによって何を作ればいいか発見できるというようなものが必要とされている。そのような知識を手にすれば、エンジニアのジレンマを解決できるはずである。

MOT(Management of Technology)と呼ばれているものがそうかもしれない。少なくともそういうものを目指しているのだろう。しかし、現時点では、自信を持ってそうであると言うことはできない。MOTにはまだ実績が乏しい。

知識に頼ることができないということは、現場のエンジニアが自分で考えるしかないといいうことである。経験から学ぶしかないということである。

古代ギリシアのアルキメデスは、まさに典型的エンジニアだった。彼は、支点さえ与えられれば地球をも持ち上げてみせると約束した。だが、結局アルキメデスが地球を持ち上げることはなかった。アルキメデスはどこに支点を置けばいいか知らなかった。

技術とはてこの原理であり、何を作るかということはてこの支点である。支点なくしては、意味ある作用を及ぼすことはできない。現代のアルキメデスは、てこの原理よりはるかに進んだ技術を持ちつつも、支点を知らないがために本当に意味あるものを生み出せないでいる。

優秀なエンジニアは如何に作ればいいか知っている。しかし、エンジニアの評価は、知識の量によって計られるものではない。どれだけ価値あるものを生み出したかによって計られる。エンジニアとは社会を豊かにする存在であるはずだ。

エンジニアは技術を学ぶことに満足してはいけない。技術を学ぶと同時に、どこに支点を置けばいいか考えなければならない。おそらく、アルキメデスはどこに支点を置けば地球を持ち上げることができるか考えたのではないか。実験もしたかもしれない。良い結果は残せなかった。しかし、アルキメデスを笑うことはできない。

2013年5月25日土曜日

Microsoftに捧ぐ

理論的にはソフトウェアが壊れるということはない。長く使っているうちにビットがすり減ってしまうということはあり得ない。何かがうまく動かないのは、はじめから壊れていたのだ。それにも関わらず、世界中のプログラマが、ソフトウェアが壊れていくさまを目撃する。昨日までうまく動いていたものが、今日はコアを吐く。

バグを見つけたら修正しなければならない。しかし、そのバグフィックス自体が、新たなバグを持ち込む可能性がある。したがって、ソフトウェアにはメンテナンスが必要である。このメンテナンスには終わりはない。ソフトウェアは「リリースしたら終わり」の製品ではない。

ソフトウェアベンダーは植木屋と同じである。植木屋は、植木を「リリースしたら終わり」ではない。何十年、ときには何百年も成長し続けるという植物の性質上、植木にも終わりのないメンテナンスが必要である。この点では、日本の植木職人もヨーロッパの庭師も同じである。

Microsoftこそ真の植木職人である。あるいは庭師である。来年には、Windows XPのサポートが終わる。Microsoftは、2001年発売のWindows XPを実に13年間メンテナンスし続けたことになる。変化の早いソフトウェアの世界での13年は、植物の世界では300年にも400年にも相当する。

私のLinuxエンジニアとしての仕事も、まさしく植木職人のそれである。Linuxカーネルは、日々成長する巨大な論理の植物である。日々の成長は小さくとも、月日の流れの中でダイナミックに成長する。私は植木職人として、あちこちにパッチを当て、Linuxカーネルの剪定を行う。

先日、カーネル2.6.9についての問い合わせを受けた。ファイルシステムのバグを踏んだかどうか調べて欲しいというものだった。さっそくカーネル2.6.9で現象が再現するかどうか調べようとした。驚いたことに、最新のgccでは、もはやカーネル2.6.9をビルドすることができなくなっていた。カーネル2.6.9のリリースは2004年である。

MicrosoftはWindowsのすべてをコントロールできる立場にあるので、長期間のメンテナンスを行いやすいのかもしれない。そうだとしても13年は尊敬に値する。

業界のもう一人の巨人であるAppleはどうか? OS Xのサポートを数年で打ち切ってしまうのは、花屋が切り花を売るのと同じである。切り花は、買ってから1週間はその美しさを楽しむことができる。しかしその後は、次の花に取って代わられる。Appleの花は常に美しいが、それは去年の花ではない。

90年代はMicrosoftの天下だった。しかし、ここ最近はMicrosoftを侮る声が多く聞こえる。Microsoftの製品は、Windows XPの背景のように何の変哲もない芝生に見えるかもしれない。しかし、何の変哲もない芝生はよく手入れされた芝生である。芝生には2種類しかない。よく手入れされた何の変哲もない芝生か、手入れのされていない茶色い枯れた芝生かである。

2013年2月17日日曜日

『Operating System Design: The Xinu Approach, Linksys Version』を読んだ

実際のOSのソースコードを示して解説する教科書といえば、TanenbaumのMINIXが有名である。本書は、Dougras ComerによるXINUというOSにつての同様の趣旨の本である。このような本があるという事は、以前から知ってはいた:
XINU("XINU is Not UNIX"の略)オペレーティングシステムの開発について述べた優れた本。<中略>この本はオペレーティングシステム概論の授業の副読本としてうってつけで、UNIXカーネルの授業でLionsのテキストと一緒に使っても良いくらいだ。(『Life with UNIX』p.127) 
この記述は本書の初版本に関するもので、LSI 11というPDP-11をワンチップ化したハードウェアを対象に書かれたものである。Amazonで調べてみると、本書はその後、PC版やMac版が出ていたようである。しかし、長いこと絶版となっていた。

ところが最近、Linksys(今はCISCO?)のEL 2100LというというMIPSアーキテクチャのルータ向けに書き直された版が出ていることを知った。このルータを選んだ理由として、安価で入手しやすいことと、シリアルを備えていることが本書で述べられている。日本だと、「ブロードバンドルータ」と言って家電量販店で2万円くらいで売られている類のものではないかと思う。

XINUは組込みOSとされている。今や組込み機器でもLinuxやBSDが動く時代なのでその定義は曖昧であるが、例えばMINIXと比較すると、以下の特徴がある:

  • ユーザモードとカーネルモードを区別しない
  • システムコールは普通の関数呼び出し(ただし割り込みは禁止)
  • アプリケーションはカーネルと一緒にリンクされる

MINIX本では後ろ半分に付録としてソースコードを載せていたが、本書は関数1つ毎に解説とソースコードが交互に記載されている。したがって、MINIX本のように本文とソースコードを行ったり来たりする必要はない。シーケンシャルに読める。また、小さいながらもUDP/IPプロトコルスタックも実装されている。

本書を読んだ感想だが、OSというのは、本当にまったく単なる巨大なCプログラムに過ぎない。これは、MINIX本を読んだときにも感じたことである。XINUの実装を読むことで、更にその思いを強くした。

かつては、OSには何か魔法のようなものがあると思っていた。並行プロセスやファイルシステムなど、まさに現代の魔法だった。しかし、その実装を見てみれば、何の魔法もないのだ。アーキテクチャに関わるところも、割り込み処理とブートストラップの一部だけである。そして、OSの実装言語としてのCのスジの良さ。実行環境としてスタックさえ準備してやれば、後はおなじみのCの世界である。

『Life with UNIX』にもある通り、本書はOSの授業の副読本として最適だと思う。例えば、アーキテクチャはパタヘネでMIPSを学べば、本書のアーキテクチャ依存部分もよくわかるだろう。

大人になってから、「学生時代にこの本を読んでいたら、違った未来になっていたかも」と思わせる本に出会うことがある。本書もそのひとつだ。OSに魔法などない。