プリント基板設計・シミュレーション

TOP > アポロレポート > 未分類 > 第1回 プログラミングについて
2022/02/04

第1回 プログラミングについて

アポロレポート

新しくプログラミングについてのコーナーを始めることとなり今回がその第1回目となります。例外にもれず初回は筆者の履歴などを回想をまじえながらとりとめもなくお話します。

プログラミングなどといっても堅苦しい話しは書店に並んでいる専門書にまかせるとして、できる限りこれまでの体験のなかから知っていて損はないという話しや、私なりの考え方を話していければと考えています。

コンピュータとの出会い~プログラマーになるまで

私がはじめてコンピュータと出会ったのはかれこれ18年程前にさかのぼります。
田舎から上京してきた某大学の電子工学科1年生の学園祭のときだったかと思います。
当時電子云々といえば無線とかオーディオなどが雑誌などでも主流で、まずコンピュータなどという言葉は普段の生活のなかでは聞かれない時代でした。当然私もコンピュータなどはウルトラマンの中の世界の話しで、たくさんのランプのついた壁一面のパネルのコンピュータから紙テープがジコジコと出てくることぐらいしか思い浮かばなかったのです。そのような知識しかなかった当時、同じクラスのM君が14インチのテレビぐらいのものにタイプライターのようなものを持ってきて、「これがコンピュータ」だと言うのです。いまから思えばアップル社のAPPLEIIだった様な気がします。彼はそのテレビの様なものを軽やかなタッチで操り、画面に絵を表示させたりしていましたが私にはテレビ番組が映らない変なテレビだという印象しかありませんでした。
その一件後ほとんど私はコンピュータと出会うこともなく平和に数年間を過ごしましたが、大学を卒業する頃になると日本でもパソコンなるものが出回り始めていました。いわゆる日本でのパソコンの黎明期ともいえる時期で、沖、富士通、日本電気などから発売されていて、日本電気のPC8801などは一世を風靡したものです。その頃の私は友人のもっていたそのPC8801でパックマンというゲームに熱中し、頭のなかではコンピュータ=パックマンという数式が成り立っていてテンキーの2、6、8、4が押せればコンピュータはOK!みたいに思い込んでいました。そんな私が再びあのM君等と3人で『マイクロコンピュータによる並列処理』などという物騒な題名の卒業論文をに取り組んだのですが、そんな知識のない私はもっぱら彼等の書いた下書きを清書するだけで、飛び交う難しい話しは最後までちんぷんかんぷんまま卒業してしまいました。

私が本格的にコンピュータと出会うのは卒業後に就職した某大手通信機メーカーでのことになります。そもそも私はコンピュータなどはなんにも分からず、テンキーしか押せない当時としてはごくありふれた青年で、卒業論文当時に劣等感で一杯になっていましたから「コンピュータのない会社に就職しよう!」と考えてそこに就職したのです。確かに当時その会社でも100人以上もいる1つのフロアーに1台のパソコンしかなかったのですから私の目算は当たっていたといえました。
電気メーカーの設計部門では新入社員が基板(ICとか抵抗とかをのせる板のこと)の設計を行なうことは多分今でもあるかと思いますが、当時は紙と鉛筆を使って方眼紙に基板のプリントパターンを描いて作業を毎日やっていました。そのうちCAD部門が新設されることになり、ただ一人の担当者に私がなることになってしまったのです。もっともそのころの私はCADとは何かとは全然分からなかったのですが後でコンピュータを使って基板を設計する部門だと知って顔面蒼白となったことを覚えています。とにもかくにも嫌いなコンピュータを使うはめになってしまったのです。

CADシステムの導入が1年後だったのでその間に色々な電子部品のカタログを揃えるために部品の型番をソートする100ステップ程のプログラムを、確か富士通のパソコンFM―8にBASICで書いたのがプログラミングの事始めで、総当たりでソートを行なう恐ろしく遅い代物で100個のデータをソートするのに5分もかかってしまいましたが、それぐらいの時間を長くは感じないのどかな時代でした。
導入されたCADシステムはコンピュータがDEC社のVAX11/780という当時スーパーミニコンピュータと呼ばれた背丈ほどもある計算機で、今となっては旧世界の遺物となってしまったものです。処理性能は1MPIS、メインメモリ2Mバイト、ハードディスク128Mバイト、グラフィック端末2台、ディジタイザ、ペンプロッタに文字端末4台の構成と英文のマニュアルがキングファイル20冊分で、これを複数の人間がタイムシェアリングで使用しました。今から思うとかなり無理をした構成ですがこれでもキチンと動作していたのですからたいしたものです。
現在のパソコンと比較すると隔世の感がありますが、これでも気の遠くなるほど計算スピードが速く感じたものです。ちなみにOSはVMSといってあの WindowsNT開発の中心人物となるデビット・カトラーおじさんが作った素晴らしいものでした。

約15年前のプログラミング事情

当時プログラミング言語といえば、科学技術計算には FORTRAN、事務計算には COBOL、その混血としてPL/Iなどがあり、まだまだUNIXはマイナーなOSであったことからC言語は名前を聞いたことがあるかなといった知名度でした。御多分に洩れずこのシステムには FORTRAN がインストールされており、これから10数年に渡る私のVAXとFORTRANとの格闘が始まるのです。

最初にこのシステムでプログラムをかいたのは導入から半年後、

  WRITE(6,100)
100 FORMAT('MURAI')
   
  STOP
  END

確かこのようなプログラムをコンパイル、リンクして端末に自分の名前を表示させたと 思います。表示されたときは嬉しくて何度も実行しては自分の名前を眺めていたものです。その後仕事の合間に少しづつFORTRANの勉強をして、CADシステムの周辺ソフトを作ってゆきました(もっともこの当時のものはおもちゃのようなものでしたが..)。そして,「いつの日かこのシステムのアプリケーションは全部自分が作ったものにしたい」ととんでもない夢を抱くようになりました。最終的にはこの夢は現実のものとなるのでしたが、まだまたそれは先の話しのことです。

グラフィック端末といえば今日では超高速のシステムぐらいにしか使われなくなりましたが、ワークステーションがまだ普及していない頃はホストコンピュータにグラフィック端末を接続して使用していました。これをRS-232Cで接続し9600ボー程度の転送速度で描画するのですから描画スピードががどの程度だったかは想像できると思います。この端末に自分でプログラムを作って絵を描画するとなるとこれがまた大変でした。端末専用のライブラリソフトなどを持っていなかったので、端末のマニュアルに付いていたエスケープシーケンスを参考にして線を描画するルーチンなどを作ってなんとか図形を表示するプログラムを作りました。しかしながら最初のころのプログラムは実際の座標系をそのまま端末の画面の座標系に投影していましたから、負の座標と画面サイズ以上の座標が表示できませんでしたがそれでも絵を表示させただけで満足していました。ワールド座標系とかビューポートなどという概念を知ったのはそれから後のことで、知ったときには「世の中には頭の良い人達がいるんだなあ」と感心させられたものです。

最初の5、6年間はCADシステムを使って基板を設計するかたわらに周辺ソフトを作っていました。その間に、データ入力用のテキストエディタ、デジタイザ(製図板がコンピュータにつながったような座標入力装置)を使ったデータの入力ソフト、部品を基板に搭載するためのマウントデータ出力ソフト、グラフィック端末を使ったマウントデータの編集ソフト、固定フォーマットではありますが高速なカーバーデータ(基板の分野での汎用図形データフォーマット)への変換ソフトなどを100本程度を作りましたが、これらはあくまでもCADシステムの周辺ソフトでした。ところがこのCADシステムには重大な欠陥がありました。もともと16ビットマシンのPDP-11(これもDEC社のベストセラーマシンで、あのUNIXもPDPの古いタイプのマシンを使ってベル研究所で作られました)上で開発されたものを32ビットのVAXにそのまま移植しており、データの容量や表現できる座標が小さかったのです。CADシステムの運用中にもこの問題が表面化し、だましだまし使っていましたがもうそろそろ限界が来るという危機感にいつも悩まされるようになっていました。

一つ一つの設備が高額だった時代の影の努力

通常は新しいCADシステムを購入して対応しなければならないのでしょうが、そうするとコンピュータもソフトも新規の導入となり数千万から億の資金が必要になってしまいます。そんなことを会社がすぐOKするはずもなく、また私がVAXに心酔し切っており、データやソフトの財産が蓄積されていたこともあってこのコンピュータを捨てられなくなっていました。さらにこの頃になると世間ではUNIXワークステーションが普及しており、SUNやHPから高速な製品が発売されていましたが、VAX/VMSの信者はUNIXを敵対視するという変な習性があって、最終的に私が選択したのは「このコンピュータに自分のCADソフトを作ってしまえ!」という無謀なものでした。この決意はあくまでも会社には内緒で(一人で基板のCADソフトを開発するなどということを会社が信じてもくれませんから)、仕事の合間に作れば誰も文句はないだろうということで開発を開始したのです。

いろいろなアイデアはありましたからすぐに各種データベース、ソースデータのフォーマットの設計を2週間程で終了しコーディングを開始しましたが、基板CADシステムというものはエディタが1つあればいいというものではなく、各種データやライブラリの入力ソフト、エディタ、チェッカーソフト、各種データの出力ソフト、データ管理ソフトなど最低でも20種類は必要で、実際の運用に耐えるようにするには50種類は作らなければなりません(最終的には100本以上のプログラムで構成されたシステムになりましたが..)。
このシステムを開発するときに私が注意したことは、絶対に実現しなければならないこと以外は自分ができる範囲で無理をしないことでした。約6カ月でライブラリ登録ソフト、初期データ入力ソフト(デジタイザによる入力)、グラフィックエディタを作り残りの6カ月で様々なチェッカーソフトと出力ソフトを作り、合計で60本程のプログラムで構成されるシステムを作り上げました。さらに部品データの登録までもすべて一人で行ない万全を期してそれまでのCADシステムから1日で切り替えることに成功しました。このシステムで最も苦労したのが入力された基板のパターンデータから、その接続データを抽出することで、これができなければパターン間隔のチェックなどができませんでしたので成功するか否かはひとえにこのソフトができるかどうがにかかっていました。概要や詳細は今後紹介することがあるかも知れませんが、10万ステップ程のエディタが4カ月で完成したものが、6千行程度ものもに3カ月かかったのですからこの接続情報を抽出するソフトの難しさは推して知るべしというところでしょうか。
自分のCADシステムの運用が開始されてから問題になったのが、チェッカーなどの実行スピードの遅さでした。1つのデータをチェックするのにいくら1MPISのコンピュータだからといっても1時間もかかるのでは許されるものではありません。確か暮れから正月の休みも元日以外は全て出勤してプログラムの改修を行ないました。時計を片手に実行速度の向上を行ないました。アルゴリズムの改善、アッセンブラコードをチェックしてのFORTRANのソースコードを改修するなどできる限りの改修を行ないました。最終的にパフォーマンスは劇的に改善され、1時間かかっていた処理が5分程度になり実用に耐えるようになりましたが、このときの体験が今でもプログラムを作るときの習性になりアルゴリズムには注意するようになりました。とにもかくにも高速に処理するには、いかにコンピュータに計算させないかということなのです。
ちなみにこのCADシステムは現在も元気に稼動しているそうです。

基板CADシステムの開発終了後に熱中したのが、これも私の長い間の夢だった自分のプログラミング言語とコンパラをつくることでした。BASIC、C、C++、FORTRAN、COBOL、PL/I、PASCAL、MODULA―2、ADA、Small Talkなどの言語の本とコンパイラの本を買い漁り、自分なりの言語の初期バージョンを作りました。初期バージョンは普通の手続き型言語でしたがどちらかといえばFORTRANとCの混血児のようなもので、オセロゲームや簡単なグラフィックソフトを作って遊んだものです。第2バージョンは第1バージョンにオブジェクト指向の機能をいれたものを開発しましたが、このコンパイラはある理由で中止してしまいました。

このコンパイラの開発中にいろいろなFORTRAN77上での隠し技を発見しました。例えば、

  CHARACTER FUNCTION DUMMY()*1000
   
  CALL SUB(%REF(DUMMY()))
   
  STOP
  END
   
  CHARACTER FUNCTION DUMMY()*1000
   
  RETURN
  END
   
  SUBROUTINE SUB(ARRAY)
  BYTE ARRAY(1000)
   
C
C
ARRAY はスタックに確保された1000バイトのテンポラリのメモリとして
使用でき、このサブルーチンから戻るとなくなってしまう。
   
  RETURN
  END

これはFORTRAN77の文字関数を使って1000バイトのスタックを確保し、その領域をテンポラリのメモリとして(C言語でいえば自動変数)使用するものです。
%REF 関数はVAX FORTRANの組み込み関数でディスクリプタで表現された文字変数の文字のアドレスを引数として渡すものです。これはコンパイラがどの様なアッセンブラコードを生成するかを調べているうちに発見したもので、自動変数をサポートしていないFORTRAN77コンパイラに対する苦肉の策でした(いまでは AUTOMATIC 文で簡単に作れますが..)。

私がコンパイラの第2バージョンを中止したのは、汎用2次元製図ソフトを開発しようと思い立ったことと自分が実現したかった言語機能のほとんどをFORTRAN90の仕様が持っていたからでした。この2次元製図ソフトはVAX/11―780以降に導入していたVAXステーションというVAXのワークステーションのXウインドウ上で動作するもので、マクロの階層化、可変形状セル、データがライブラリと同一構造、ネットワーク上の他のノードのライブラリにアクセスできるなど様々な機能を持ったもので、現在弊社で販売している Quick Leaf にも踏襲している機能があります。

それからまた数年の後、旧式化した自分のCADシステムの後継ソフトをXウインドウ上で開発を進めていました。やはり私一人で孤独にグラフィックエディタを20万ステップ程を書き進んだころ、バブル経済がパチンとはじけてしまったのです。会社の業績が悪化しリストラの嵐が吹き荒れ、無駄な支出の低減や事業所の削減、残業の制限などが行なわれるようになりました。平日の残業が4時間は当たり前、土日の出勤も当たり前だった私にも休日の出勤の制限がかかり、残業をすると会社のブラックリストに載ってしまうという状況になりました。一所懸命に仕事をすると会社からは悪く見られるようになりましたが、私は後継CADシステムの完成に向けて必死になっていましたから何度も上司と衝突するようになりました。毎日の残業時間が会社が2時間以上もカットしているのを知っていても4時間以上の残業をしていましたが、ある日直接自分に対して制限がかかったとき私の緊張の糸がプツンときれてしまったのです。2、3分考えてから会社を辞めようと決心し、その旨を数時間後に会社に申し出たのです。なんとも今となっては滑稽な話しですが、朝元気に出勤して帰宅したときには退社することになっていたので、家族は驚いていましたが結局そのまま2カ月後に退職してしまいました。

アポロ技研へおしかけ転職

それまでの縁で現在の会社にお世話になることになりましたが、これもおしかけ入社みたいな感じで入社させてもらいました。VAXとFORTRANに決別する決心をした後、入社するまでの間、UNIX、DOS、C言語の猛勉強をし入社後は始めてのUNIXワークステーションとDOSパソコンと格闘することになりました。初めは社内のシステムの効率向上のためのバッチプログラムやグラフィックエディタなどをUNIX上で作っていました。某大手無線機メーカーに既成のプログラムを供給したり、受注で作ることもあり今までとは違った仕事を行なうようになりました。

これも仕事の関係上パソコンでUNIX上のCADシステムの画像が見ることができないかという目的でWindows上で動作するエディタをC++を使って開発に取り掛かりました。これがその後 Quick Leaf となったものです。Windows3.1が64kの1つのセグメントを基本にして動作していることも知らずにC++のコンパイラについているクラスライブラリのみを頼りに開発を開始したため、メモリ不足への対応には苦労させられました。このソフトの開発中に現在アップロードしているファイル分割ソフトのTAKE、ヘルプが簡単につくれるHelp Maker、暗号化アーカイバPFLが色々な必要から作られました。今後は再び弊社の社内用の基板CADシステム開発の予定がありますので、このシステムにはWindowsNTで広いメモリー空間で楽ができると楽しみにしている今日この頃です。

あまりにもとりとめのない話しになってしまいましたが、私のこれまでのコンピュータ人生の苦闘の一端です。どこにでもありそうな話しなのですが、本人はそのときそのときを必死になって生きているうちに総数150万ステップ以上の500本のソフト(もっともそのうちの3分の2は以前の会社ですので手元にはありませんが)と経験が積み重ねられてしまいました。

次回からはすこしづつ本題に入っていきます。当たり前な話しや個人的な主観が入っ てしまうかも知れませんが我慢しておつき合いの程宜しくお願い致します。


そのお悩み、
アポロ技研に話してみませんか?

アポロ技研でワンランク上の物創りへ!
そのお悩み、アポロ技研に話してみませんか?