このウインドウを閉じる

He that knows little, often repeats it.

 

 システム を作る エンジニア にとって、唯一の 「真実」 は、実際に稼働している オブジェクト・コード である。ソース・コード は、かならずしも、真実にはならない。なぜなら、オブジェクト・パッチ を直接に適用すれば、ソース・コード と実際に稼働している状態は乖離するから。

 プログラム の ソース・コード は、シンタックス 上、1つの単語を間違えても稼働しない。プログラム を作成する作業は、緻密な作業である。そういう作業と比べたら、事業の状態を記述するために、ザッ とした (おおまかな) 構造図を描く作業は、杜撰に映る。
 プログラマ が SE を馬鹿にするのは、それなりに理由がある。

 上流工程とか下流工程という言い方をするが、誤解 (misleading) を生む。 (SDLC の waterfall モデル では)上流工程が下流工程を統率するように勘違いされているが、それぞれの工程の間に断層が生じていて、上流工程のなかで描かれた設計図が プログラム に対して強制力として作用しないから、上流工程の作業を無視して、プログラム を作成することはできる。そして、実際に稼働している オブジェクト・コード が唯一の真実となる。

 プログラマ を経験してから SE になる、という キャリア・パス では、プログラマ は 「通過点」 としか考えられていないから、プログラマ も SE も専門職にはならないかもしれない。そうであれば、プログラマ は、SE になるまでの予備軍 (経過勘定) でしかない。
 実際、多数の プログラマ たちの仕事ぶりを観ていると、シロート の集まりとしか思えない。プログラマ は、頭数を揃えて派遣される 「人間 プログラム 製造機」 として扱われている、と云えば言い過ぎか。

 幸い、小生は、第一級の プログラマ たちといっしょに仕事することが多い。彼らが作成する プログラム には、まず、バグ がない。そして、プログラム の構造が見やすい--ソース・コード は コンパクトな (冗長性がない) 記述になっていて、しかも、コントロール・フロー を追跡しやすい。ソース・コード のなかには、「nested-IF (および、IF)」 が、ほとんど、ない。
 プログラム の構造が コンパクト になれば、コントロール・フロー の追跡可能性が、往々にして、犠牲になってしまうのだが--いわゆる 「凝った」 技法を使った プログラム がそうになる傾向が強いが--、コンパクト さと検証可能性を同時に実現している ソース・コード が第一級の プログラマ であることを証明している。そして、第一級の プログラマ たちは、データ 構造を徹底的に読み切ってから、プログラム を作成している。

 或る若い プログラマ が、顧客 テーブル の設計をしていたのを小生は、たまたま、観たことがあって、「ひどい (杜撰な)」 設計だったので、助言したことがある。顧客 テーブル のなかに、電話番号が挿入されていた。そして、電話番号の入力は任意だったので、データ のなかには、 null が生じている。こういう データ 構造を 「疑問を感じないまま」、実装すれば、プログラマ 自身が苦労することになる。小生は、彼のためを思って、以下のような助言を与えた。

    「電話番号がなければ顧客として扱わない、という事業をやってはいないでしょう。
     なぜなら、電話番号の値には、すでに、null が出ているから。
     電話番号は、顧客に帰属していないから、べつの テーブル (VE 扱い) にした
     ほうがいい。」

 彼曰く、

    「いままで、こういう設計ですから。僕は、『ぺいぺいの』 プログラマ ですから。」

 彼の言いかたは、小生に対する皮肉であった。つまり、プログラマ は、「能書きを言う」 コンサルタント とは違って、「実際に稼働する」 プログラム を作成しているのだ、と。「開き直り (so-what attitude)」 である。まるで、シロート の言い草ですね。ただ、そういう態度が、「動けば良し」 という杜撰な プログラム を平気で乱造することになる。「走れば良い」 という杜撰な態度で自動車を製造してはいないし、「稼働すれば良い」 という いい加減な態度で原子力発電所は建設されていない。

 小生は、直接に、彼の プロジェクト には関与していなかったので、彼の言いかたを聞いて、助言することを、もう、しなかった--「余計な お世話」 になるから(笑)。ただ、小生は、内心、彼に対して、「一生、『ぺいぺいの』 プログラマ でいなさい。」と冷笑していた(笑)。

 営業では、腕の立つ先輩が、後輩に同行して、営業のやり方を指導助言する 「playing manager」 制が導入されているそうですが、先輩のほうも、営業を実際にやっている現役なので、後輩を指導する仕事は 「余計な」 負荷のように感じるようです。なぜなら、腕の立つ人であればあるほど、そういう指導に対して労力を費やすよりも、実際の営業をやったほうが事業に対して貢献することができるから。

 「教育」 というのは、マネジメント の大切な責任である、と云われている割りには、丁寧に配慮されていないのが実態のようですね。

 SE が「業務知識」を習得するのがむずかしいのと同じように、プログラマ が、データ 設計の技法を理解するのは、むずかしいようですね。
 第一級の SE は、事業に対する知識を体得しているし、上級の プログラマ は、データベース に対する見識がある--もっとも、そういう言いかたは 「論点先取り」 であって、そういうことを適切にできるから第一級なのでしょうね。

 (2003年10月10日)

  このウインドウを閉じる