【この物語は取材に基づき事実を忠実に再現したノンフィクションです。この物語の当事者は、現在までのエンジニア人生を、ぜひ今後の若い技術者の人達に役立ててもらいたいと願っての発表となりました。】
1988年、バブル真っただ中の日本は好景気で、一般的な大学を卒業した学生なら業界上位の大企業にも就職できるという、まさに会社を選び放題の時代でした。
その年に、大学を卒業したボクは、サラリーマンになるのが嫌で、在学中から3年間ほど勤めていた渋谷にあるバーで店長として働いていました。
小さなバーでしたが、場所がら「日本放送協会」のお客さんが多く、経営も安定した状況でした。
ところが、大学卒業から約半年後に、地主から突然、立ち退きするように言われます。
雇われ店長の身分では、新たな場所に店を出す余裕もなく、オーナーも飲食業界から手を引くということで、仕方なしにサラリーマンになる決心をします。
立ち退きまでは約2ヵ月の猶予しかなく、その間に就職先を決めないといけません。
大学では、機械工学を専門に学んで来ましたが、将来性があまりないと感じていた機械系の企業に就職をする気にはならず、何の仕事をしようかと考える日々が続きます。
ある日、渋谷の街を歩いていると、突然「これからはコンピュータの時代だ」とひらめきます。潜在意識があったのかもしれませんが、まったく突然の思い付きでした。
その頃の日本では、国産パソコンといえばNECのPC9801シリーズぐらいしかありませんでした。
OSは、MS-DOSと呼ばれるもので、現在のWindowsにも付いているコマンドプロンプト、いわゆるDOS窓というOSで動作していました。
アプリケーションを開発するソフトウェアは、N88-BASICというNECが開発したBASIC言語と、メインフレームで動作するFORTRAN言語が主流で、プログラムの開発者はどんな仕事をしているのかなど、一般の人にはほとんど理解ができないものでした。
記録媒体が紙テープやカセットテープと聞くと信じられない人もいるかもしれません。FD(フロッピーディスク)は、その数年後にようやく普及するようになります。
3.5インチのFDであれば、知っている人も多いとは思いますが、主流は5インチや8インチで、3.5インチは1990年代になってから発売されました。
そんな時代でしたから、コンピュータの仕事をする人間は「マニア」か「変わり者」扱いされることさえあったのです。
それでも、ボクには「この分野はこれからどんどん伸びていく」と思え、ほとんど何の知識もないまま「Bing(ビーイング)」という就職情報誌でソフトウェア開発会社を探し中途採用の試験を受ける事にします。
試験は2社ほど受けましたが、当然のごとくどちらも採用通知が届き、オフィスが綺麗で明るそうに感じた「株式会社ビー・ビー・エス」に入社することにしました。
「ソフトウェアハウス」という言葉を知っている人は少ないと思います。当時は「IT」という言葉は存在せず、今では死語となったこの呼び方が、ソフトウェア開発会社の総称でした。
この「ソフトウェアハウス」では、どこでも入社してから3ヵ月間の研修がありました。そして、就職情報誌には、必ずと言っていいほど「初心者歓迎。研修期間でプログラミングの基礎からお教えします」という文字が書いてあったのです。
この業界では、仕事はたくさんあったのですが、どこの「ソフトウェアハウス」も、なかなか新たな案件を受注できません。慢性的な人材不足で、受注しても納期にはとても間に合わないのです。
そのため、どの会社も開発者の育成に力を入れ、開発体制の強化を急ピッチで進めていました。即戦力になる人材など、ほとんどいない時代ですから、自社で育てるしかないのです。
当時、ボクが研修で教わったプログラミング言語は「C言語」でした。
「C言語」という言葉は知っている人も多いと思います。1973年に開発された言語ですが、現在でもプログラム開発の中心的な役割を担っているとは驚異的です。
余談ですが、先日「C言語」の神様(生みの親)であるデニス・リッチー氏が亡くなりました。彼が書いた「プログラミング言語C」は、ボクが研修を行った時に使用した教科書で、今でもバイブルとしています。
さて、3ヵ月間の研修を終えると、プロジェクトへの配属となる訳ですが、ここで研修と実戦との違いを身を持って体験する事になります。
給料をもらってプログラミングの勉強をさせてくれるという、とても恵まれた環境にいる訳ですから、少しでも早く実戦で役に立って会社に貢献したいと思うのは至極当然の気持ちでした。
ところが、いくら研修でできていても実戦では全く通用しません。プログラミングの世界でも、やはり現場で覚えるしかないのです。
そこで、ボクはある有能な上司が作成したプログラムを片っ端から読む事にしました。
そして、その上司がプログラミングをしている時は、ずっと横に張り付いて書き方をジッと見ていたのです。
今になって思えば、その上司にとっては、かなり目障りだったことでしょう。ただ、そのプログラムは見ているだけで「わくわく」とする感動をボクに与えてくれたのです。
それが、ボクにとってのプログラミングの原点かもしれません。
当時は、ひとり1台のパソコンが与えられるという事はなく、開発マシンを複数のプロジェクトがシェアをして使っていました。ですから、開発マシンでプログラミングができる時間は限られており、使えない時間は机上でプログラムを組みます。
複数台あったパソコンは、N88-BASICでのプログラム開発で利用していましたが、数十万円と価格が非常に高く、ソフトウェアが充実していないため、ワープロなどの色々な作業には使えないパソコンを、個人専用として提供することは難しい時代でした。
この少し後に、OASYSという富士通のワープロにターミナルソフトを組み込み、端末としてUNIXマシンにログインできる仕組みが社内に構築されます。
もともとがワープロであるOASYSは、マニュアルやフローチャートの作成もでき、プログラミングを行う時には端末としての機能も果たします。
これにより、ようやくひとり1台の端末という環境ができあがったのです。
その頃、ボクが参加していたプロジェクトは、「郵政省」が「松下通信工業(現Panasonic)」に発注していた「書留追跡システム」というものでした。
このシステムは、書留郵便物にバーコードを貼り付け、発送から到着までに、中継する郵便局の職員がバーコードをスキャンすることにより、その書留が現在どこにあるかを追跡するシステムです。
ボクは、このシステムの開発には、初期段階から参加していましたが、プロジェクトが全て終了するまでには、およそ8年間かかりました。
その間には、バージョンアップによる三次開発まであり、のべ600人/月以上の工数がかかる、大規模プロジェクトでした。
システムには、親機と子機とがあり、「ビー・ビー・エス」は子機を担当し、親機の開発は「松下システムエンジニアリング」が担当しました。
書留追跡専用端末の子機が搭載したCPUは8086系というもので、MS-DOSも動作させることはできましたが、専用端末ということで、そのOS開発も「松下システムエンジニアリング」が担当しました。
子機のプログラム開発は、サン・マイクロシステムズのSun4とソニーのNEWSというUNIXマシンで行われました。
そして、先に説明した富士通のOASYSを端末として使用し、UNIXマシンにログインしプログラミングをした訳です。
ところが、当時のUNIX系マシンは、全て68000系のCPUを搭載していたため、標準のコンパイラで作成した実行形式は子機で動作しません。開発言語はC言語でしたが、8086系の実行形式を作成するためには、クロスコンパイラというパッケージを利用する必要がありました。
そして、このクロスコンパイラで作成された実行形式を、専用マシンにアップロードして動作させるのです。
最終的には、OSも含めたプログラムをROM化してから製品に搭載し出荷します。
ROM化というのは、プログラムをROMという半導体に焼き付けることで、一度ROM化してしまうと修正が利きません。
ですから、もしもプログラムに不具合があった場合、全ての製品を回収することとなり補償問題にまで発展してし
まう可能性もあるのです。
一次開発のプロジェクトは、約1年半の期間があり、170人/月という工数がかかりました。
当時のC言語での開発見積もりでは、一人が開発できる工数を80ステップ/月という計算で行っていました。つまり、設計からシステムテストまで、一人が1ヵ月に開発できる量を、C言語では80ステップとしていた訳です。
現在と比較すると格段に開発効率が低い数値です。優秀な技術者であれば、今では恐らく800~1000ステップ/月ぐらいはいっているかもしれません。
もちろん充分な開発ツールやデバッガもない時代ですから、この数字が当時としは仕方のないものだったのは言うまでもありません。
このプロジェクトで、ボクは最初からプログラマとして参加させてもらえました。開発経験のあまりない人間が、新規プロジェクトですぐにプログラマとなる事は異例で、まずはテスト要員などのプログラムテストを担当をするのが普通でした。
もちろん、納期が短くて人数的な余裕がない事もあったのでしょうが、このプロジェクトのリーダーでもある、前述した「ある有能な上司」がいつも張り付いてプログラムを見ていたボクのやる気を買ってくれたのかもしれません。
そして、プロジェクト開始後から数ヵ月して、ある転機が訪れます。
同じプロジェクトの先輩である女性社員が「私は休日出勤は絶対にしない」と言いだしました。そして、それは彼女の入社時の条件でもあったのです。
中途採用の彼女は経験者として入社しました。前の会社では残業が非常に多く、休日出勤は当たり前だったようで、その影響もありその会社を辞めたそうです。
そして、「ビー・ビー・エス」に入社したのですが、その条件が休日出勤を絶対にしないという事でした。
とは言え、当時のプロジェクトは火の車状態で、徹夜はもちろんの事、土日祭日も当然のごとくプロジェクト全員が働いていました。
ところが、彼女は残業はしても、休日出勤は絶対にしません。スケジュール通りであれば何の問題もなかったのですが、納期がきつい今回のプロジェクトでは、彼女が受け持った部分だけ進捗がどんどん遅れていきます。
彼女が担当した部分は、子機のシステムの中でも最も重要な部分を司るメモリー管理を行うプログラムでした。
ディスクを持たないこのシステムでは、SRAMという半導体にデータを記憶させます。そして、SRAMにデータを書いたり、データを読んだりする部分がメモリー管理でした。
設計では、それを開発するにあたり、ひとつのデータを格納する領域のサイズをまず決定し、そのサイズの領域をいくつも作成し、それを結びつける事で連続データとして扱う方法を考えていました。
例えば、ひとつのデータを格納する領域を1024バイトとし、SRAM全体の要領を1メガバイトとした場合、1024個の領域ができます。それらの領域には全てアドレスという住所のようなものが決定していますので、最初の領域をAとして、その次の領域をBとした場合、Aの前は「なし」、Aの後ろはBのアドレスとしておけば、連続的なデータとして利用できるのです。
これをプログラミングするには、単体テストも含めて約3~4ヵ月ぐらいの工程がかかるとの予想でした。
そして、核であるこの部分ができないと、他の部分との結合テストもできず、全体的に工程がどんどん遅れてしまいます。
このピンチにリーダーは、重大な決断を下します。その部分を担当していた彼女を他の担当に回して、なんとボクに担当するように命じたのです。
後から思えば、この決断によりプロジェクトは成功したのかもしれません。
しかしながら、当時のボクにはそんな重大な責任を負えるのかどうか、そして経験者が担当するような部分をプログラムできるのか、全く自信がありませんでした。
「俺がサポートするし、何度でも仕様を説明するからやってみろ。責任は全て俺が取る」
リーダーのその言葉で、ボクはやってみようという気持ちになっていきます。
ところが、彼女から引き継いだプログラムを見直すと、ほとんどの部分が使うことが出来ないものでした。
工程の遅れは、彼女が休日出勤をしなかっただけではなく、彼女自身のスキルにも問題があったのです。
その事がわかったリーダーは愕然とします。そして、ボクに全て最初から書き直すことを指示します。
すでにプロジェクトが開始してかなりの期間が過ぎていました。この部分の開発ができないとテストができないという機能も出だしていた頃です。
こうなったら「やるしかない」と腹をくくったボクは、急ピッチで開発を進めます。1ヵ月の残業時間は、最高で180時間を超えました。
そんな生活を約3ヵ月続けた頃、ようやくその部分の開発に目処が立ち始めます。
他の機能との結合テストなども開始して、多少の遅れがあったものの、プロジェクトはようやく軌道に乗りつつありました。
ところが、またしても重大な問題が発生します。
ある機能との結合テストで、何度やっても正しく動かない部分が出たのです。ソースコードを何度も見直しますが、悪い部分は見つかりません。リーダーにもソースレビューをしてもらいましたが、全く問題はないのです。
なぜ、正常に動作しないのか全くわかりませんでした。徹夜で何度もソースコードを修正してはテストします。ところが、何度やってみても正しい結果が出ません。
今回の環境では、プログラムを1行修正しただけでも、テストを行うまでには約1時間ほどかかりました。前に説明した通り、プログラムは専用マシンにアップロードしてからでないと動作確認ができません。プログラムを修正したら、まずはコンパイル・リンクをして実行形式を作成し、子機へアップロードをします。その時間は約1時間もかかるのです。
当然、1日にテストできる回数も制限されてしまいます。
問題発生から2日が経過しても、相変わらず解決にはいたりませんでした。もう、3日は家に帰っていませんし、ほとんど寝ていません。
見かねたリーダーは、ボクに家に帰って休むように指示します。やむなく帰宅したボクは、食事もせずに泥のように眠りについたのでした。
ところが、眠ってから何時間かたった頃、夜中に突然目を覚まし「問題の箇所はたぶんあそこだ」とひらめきます。
急いで会社へと向かい、その部分を修正してテストすると、なんとプログラムが正常動作したではないですか。動かせたいという執念が、ついにバグを凌駕した瞬間でした。
問題の箇所は、関数がパラメータを渡す部分で発生していました。文字型という変数がありますが、これは1バイトで表現されます。この文字型の変数をパラメータとした時に、正しく渡らないことが問題でした。
つまり、プログラムが悪かったのではなく、クロスコンパイラという実行形式を生成するパッケージ側に問題があったのです。
この問題は、あきらかにクロスコンパイラを開発した会社の責任です。しかし、それを怒る気は不思議と起こりませんでした。
それ以上に、この問題を解決できたという安堵感と嬉しさが先だったのでしょう。その時に受けた「充実感」と「感動」は何ものにも代え難いもので、その後のプログラミング人生に多大なる影響を与えるものでした。
ボクが、「直せないバグは絶対にないし、プログラミングはやれば絶対にできる」という信念を持つようになったのは、この時からなのかもしれません。
そして、結果的にプロジェクトは大成功を収めたのでした。
この成功を機に「ビー・ビー・エス」は、「松下電器産業(現Panasonic)」から絶大の信頼を受けて、「書留追跡システム」を継続して受注できるようになります。
そして、のべ8年間の大規模プロジェクトととして会社の屋台骨を支えたのです。
その後、「ビー・ビー・エス」は訳あって社名を「キャロット」に変更しますが、「松下電器産業」との取引は継続して行う事ができ、2000年から約3年間に渡っての「日本放送協会」から「松下電器産業」が受注した「地上波EPGシステム」の開発も依頼される事となります。
「地上波EPGシステム」の開発は、3年間でのべ約350人/月の工数を要し、ボクはそのプロジェクトリーダーとして作業をし無事に成功を収めます。
「書留追跡システム」と「地上波EPGシステム」の成功は、ボクにとって大きな自信と誇りになりました。
しかし、「地上波EPGシステム」のプロジェクト終了後、数ヵ月して「キャロット」を退社しフリーランスエンジニアの道を歩むことにします。
そして、釣り関連の情報提供を行いつつ、フリーランスとしていくつかの企業でプログラム開発を行った後、2005年8月頃から「株式会社オプティマイザー」で作業する事となったのです。
今思えば、あの時の「感動」をまた味わいたいがために、ボクはプログラミングを書き続けているのかもしれません。そして、それがプログラムを書くときに「わくわく」とする気持ちを与えてくれている気がします。
最後になりますが、ミスターコンピューターと呼ばれた男、池田敏雄さんが遺した言葉です。
「音楽であろうと、コンピューターであろうと、すべては感動から始まる。感動するということは、心の中に何かがダイナミックに湧いた証拠。だから、何かに感動したら、とにかくそれに投入しろということです」
Facebookで掲載した元の記事を見る