今日も昨日の続きで、別グループで開発中の装置の制御ソフトのソース読み。ちなみにこのコードを書いた人物は今日からまた海外出張に出発している。
昨日はファームウェアのソースを眺めたので、今日はホストPC側のソースを読む。この装置(の制御ソフト)と私の測定ソフトとはホストPC上で連携するだけなので、本来ならファームウェアは関係が無い。ファームウェアの設計を確認しておきたかったのでコードを読んでみたが、作業に直接関係があるのはホスト側のソースの方だ。
ファームウェアはCで書かれていたが、ホスト側はC++で書かれている。ファームウェアのコードもなにかとアレではあったが、ホスト側のコードもどっこいどっこいで、突っ込みどころがたくさんある。例えば、クラスのメンバ変数と同じ名前の一時引数が使われていたり、インスタンスごとに持つべき変数がグローバルに置かれていたり*1、例外の使い方が間違っていたり…。
うーん。そもそもクラスの設計というか、情報隠蔽ということが理解できていないようだ。例えば、COMポートを使う通信用クラスで、COMポートのハンドルを保持する変数がクラス変数ではなくグローバル変数になっている。これではこのクラスから生成された全てのインスタンスをが同じCOMポートを使うことになってしまい、先に生成されたクラスがOpenしたポートは開きっぱなしになってしまう。かと思えば反対に、一時的に利用するだけのクラスオブジェクトが一時変数ではなくメンバ変数になっていたりする。
こんな調子なので、読んでいる途中で「自分で書き直したい病」の発作を抑えるのが大変だった。それでもともかくクラス構造はだいたい分かったので、これをどうやってこちらのソフトウェアに組み込んで連携させるかを考えなければならない。

それにしても、どうしたものか。
こちらでコードを書き直すのは簡単だが、それでは彼は成長できずにこれからも同様のコードwを生産し続けることになるだろう。それに自分のコードが大幅に書き換えられてしまうのは彼にとってあまり嬉しくないことだろうから、余計に技術向上の意欲を奪う可能性もある。
やはり彼が出張から帰ってきてからペアプログラミングのように一緒に修正をするべきだろうか?彼が自分の部下で長い目で成長を望むならそれが良いに決まっているが、今の私は言わば装置の完成を進めるための助っ人に過ぎない。お伺いを立てるべき彼の上司もしばらく出張で不在なので、それまでこちらの作業をどちらの方針で進めるかは自分で決めなければならない。
ちょっと迷う。

*1:一応namespaceで囲われていはいるが…