ふつーのプログラマです。主に企業内Webシステムの要件定義から保守まで何でもやってる、ふつーのプログラマです。

高慢と偏見(13) 一矢

»

 水曜日の朝。

  三浦マネージャが開発室に入ってくるなり、佐久間くんはあいさつもそこそこに、うれしそうに報告した。

  「修正、完了しました!」

  声にならないどよめきが開発室の中に満ちた。一番驚いていたのは、三浦マネージャだろう。

  「本当かね?」三浦マネージャは疑わしそうに佐久間くんの顔を見た。「じゃあ、動かしてみてもらおうか」

  「はい!」

  佐久間くんは自席のPCに戻ると、Eclipseを起動した。三浦マネージャは隣の席で、腕を組んで待っている。たまたま近くにいた私は、素早くすぐ後ろの位置を確保し、そっと画面をのぞき込んだ。何人かのメンバーも同じように、いろいろな方向から画面を見ていた。平良さんは同調せず、「結果は分かっている」と言わんばかりに、落ち着いた表情で自分の仕事をしている。

  「じゃあやります」

  そう宣言した佐久間くんは、ログイン画面を起動した。開発用IDでログインすると、メインメニューからサブメニューをたどり、S系部品納入時チェック機能の画面を開く。

  すでに何度もテストしたらしく、佐久間くんは手際よく機能を実行していった。仕様変更のあった部分の直前では手を止めて、「○○が××に変わっています」と説明を入れている。私はS系部品納入時チェック機能の仕様を思い出しながら比較してみたが、確かに仕様変更内容が例外チェックも含めて反映されているようだった。

  三浦マネージャも変更仕様と首っ引きで画面を見比べている。時々短い質問が発せられたが、佐久間くんは経験半年の新人とは思えないほど、落ち着いて的確な答えを返していた。

  一通りの説明が終わると、佐久間くんは少し紅潮した顔を三浦マネージャに向けた。

  「どうでしょうか?」

  「うん、そうだな」三浦マネージャは驚いたように言った。「確かに変更されているようだね。いや、まさか本当に1日でできるとは思わなかった。平良さんにかなり手伝ってもらったのかな?」

  その声に平良さんはモニタから顔を上げた。

  「いえ、私はほとんど何もしていません。多少のアドバイスはしましたが、昨日は佐久間くんがほぼ独力で修正していました」

  それは全員が知っていた。昨日は平良さんは午前と午後に1つずつ打ち合わせがあり、その他の時間も、自席で仕事をしていた。佐久間くんが何度か質問に来ていたが、長い時間ではなかったと思う。

  「ほう、そうか。それならすごいな」三浦マネージャはまだ信じられないようだった。「じゃあソースを見せてもらおうかな」

  「はい」佐久間くんは画面を閉じ、ソースを開くと立ち上がった。「どうぞ」

  三浦マネージャは佐久間くんの席に座り、ソースを眺め始めた。すぐにその顔色が急変した。

  「おい、何だねこれは! 違うソースじゃないか!」

  私は三浦マネージャの肩越しにソースを見た。先頭のJavaDocの一部にはこうあった。

 @author M.Kawashima

 例の「証明」のとき、私が書いたソースだ。

  こんなに早く修正が終わった理由が分かった。佐久間くんは正式にコミットされているAチームのソースではなく、どこかに残してあったBチームのソースを元に修正を行ったのだ。確かにBチームのコーディングは若槻さんの職人技によって、極限まで重複が排除されているし、画面単位ではなく機能単位にロジックが切り出されているから、仕様変更は非常に簡単になる。たぶん変更自体は数時間、せいぜい半日で終わり、残りはテストに使えたのではないだろうか。

 ――そうなんだよね。これが21世紀のシステム開発ってもんだよねえ。

自分が書いたソースが動くのを見るのはうれしいが、別のエンジニアによってバージョンアップされるのを見るのはもっとうれしい。佐久間くんは、私や若槻さんに中身を聞きにくることさえしなかったにもかかわらず、見事に修正をやってのけた。つまり、私たちの書いたコードが、独りよがりで自分本位なコードではないことが証明されたわけだ。

  本来、すべてのコードがこうなっているはずだった。ロジックが連続した線ではなく、独立した点として存在し、互いに疎結合であるように。インターフェイスによって仕様と実装が分離され、ただ使えばいいだけの部品としてストックされていき、やがてそれらがソフトウェア的な資産となっていくように。

  平良さんや若槻さんは、それらを設計し、レビューし、実装し、修正し、使い込むことで洗練させていくという、困難だが有意義な作業を着実に進めていた。私も及ばずながらその力になれていたはずだったし、私自身の貴重な経験値となっていたに違いない。三浦マネージャによって、このプロジェクトとメンバーが失った時間と経験の重みを実感してしまい、私は一瞬、めまいに襲われた。

  三浦マネージャは佐久間くんを詰問していた。何とか怒りを抑えようとしていたが、成功しているとはいえない。

  「これを君が1人でやったのかね?」

  「はい。修正は簡単でした。変更部分はほんの数カ所で済んだんです。ソースも分かりやすく、必要な部分以外は見ることもなかったですし」

  佐久間くんはそう言うと、検索機能でS系部品チェック関係のソースを対象に、修正日付を検索した。変更部分をコメントとして残すこと、というルールは守っていたようで、検索結果ビューに修正されたソースの一覧が表示された。数えてみると、ファイル数にして2つ、修正部分は5つぐらいでしかなかった。

  食い入るようにソースを見つめている三浦マネージャの顔に、怒りとは違う表情が浮かんだ。エンジニアなら誰もが一度は経験したことがあるだろう感情が。自分の知らなかった技術や知識に出合ったときの、ぞくぞくするような好奇心と、スキルや経験値が上がっていくときに感じる快感。三浦マネージャだって、エンジニアになりたてのころには何度も体験したに違いない興奮だ。

  おそらくこの瞬間こそが、三浦マネージャの世界と私たちの世界とが、最も接近した一瞬だったに違いない。私は、ひょっとすると三浦マネージャがこれまでの方針を考え直すような言葉を口にするのではないかと、そのとき本気で期待した。それは決して非現実的な考えではなかったはずだ。三浦マネージャは謝罪する必要すらなく、ただ方針転換を宣言すればよかった。私たちは喜んですべてを水に流していただろう。

  だが、三浦マネージャの心の中で葛藤が渦巻いたとしても、自らの長い経験という唯一の強みを打ち消すほどではなかったようだ。肥大したエゴは、自分が間違っているという結論を受け入れることが、とうとうできなかったのだろう。

  魔法の瞬間は過ぎ去り、二度と戻ってくることがなかった。

  「なんでこんな勝手なまねをしたんだ?」三浦マネージャは怒りに震える声で佐久間くんを詰問した。「こんなコードは使いものにならないと言っただろう!」

  「ぼくはそうは思えませんでした」佐久間くんはひるまずに答えた。「この結果が証明していると思います」

  「君に何が分かると言うんだね。これはたまたまうまくいっただけのことだろう」

  「ぼくはネットで調べてみましたが......」

  「ネットで調べたことが、何でも正しいわけじゃないってことぐらい分からないかね」三浦マネージャは苛立たしげに遮った。「私は君より20年以上の経験があるんだよ。私の言うとおりにしていれば間違いないんだ」

  佐久間くんはしばし沈黙した。やはり入社直後から教えを請うてきた大先輩を否定するにはためらいもあっただろう。それでも、意を決したように顔を上げた。

  「そのぼくが、1日で修正できたんですよ。三浦さんが3日はかかるとおっしゃった修正です」

  「だから、それはたまたまうまくいっただけだろう。すべてが、同じようにうまくいくとは限らないんだよ」三浦マネージャの声は、だんだんヒステリックになっていった。「インターフェイスだけ見て、それを使って、修正が終わったような気になっているだけなんだよ。分からないかね? 君は具象クラスの中まで、きちんと調査したのか?」

  「いえ、してませんが。でも......」

  「ほらみろ、そんな中途半端じゃ修正が完了したとは認められんね。技術者なら自分が担当した機能ぐらい、隅から隅まで知っていて当然なんだよ。そうでなくてはメンテナンスもできないだろう」

 ――あなた、一応、管理職でしょうが。

 システム開発に限らずどんな仕事だって、属人化をなるべく避けるなんてのは最近じゃ常識だと思っていたんだけど。いままで、担当したプログラムのメンテナンスを他の人に任せたり、その逆はなかったんだろうか。

  ひと昔前は、作った人しか分からない複雑怪奇なコードが大量生産されていたものだ。でも最近ではエンジニアは結構簡単に転職していくし、その際にすべてのプログラムの詳細な引き継ぎなどできるわけがない。結局、引き継いだ人が難解なコードを解読していくことになり、ムダな工数が費やされる。しかも、引き継ぎなんて事情をエンドユーザーは考慮しないから、余分にお金を出してくれるはずもない。うちの会社のように、いつも損益分岐点ギリギリを低空飛行している余裕のないベンチャーだと死活問題だ。

  そういう状況を少しでも改善したいと、プログラマたちはコードの再利用を真剣に考慮するようになった。フレームワークの使用、コーディングルール、オブジェクト指向、MVC、DIやアスペクト指向......。どれも先人たちが後続の道を少しでもなだらかにしたいと考えて、進化させてきた遺産だ。

  先輩のプログラマが何かのときに言った言葉を覚えている。

 ――他人の作ったコードが読みづらいというのは、書く努力をしていないか、読む努力をしていないかのどちらかだ。

 三浦マネージャの主張は、明らかに書く努力の放棄だ。それに気付かないのか、気付いているけど無視しているのか、三浦マネージャは吠え続けた。

  「だいたいだな、これまで私が教えてきたことを無視するというのかね? それだけの実力が君にあるとでも思っているのか?」

  「いえ、でも、修正はちゃんとできたと思いますが......」

  「私に言わせればちゃんとできたとは言いがたいな」

  「......」

  「とにかくこのソースは使えないね」ようやく声量を落とした三浦マネージャは吐き捨てるように宣言した。「コミットしないように。有吉さんが修正している方をリリースバージョンとするからね。有吉さん、いいね?」

  有吉さんは、それをそのまま使えばいいのに、とでも言いたげな顔だったが、肩をすくめてうなずいた。

  「了解しました」

  「まったく、時間をムダにしたなあ」

  三浦マネージャは吐き捨て、険しい顔で立ち上がると、そのまま開発室を出て行った。

  私は佐久間くんの顔を見た。

  がっかりしているか、と思いきや、そこには、こうなることは想定の範囲内とでもいうような、ある種の満足感のような表情が浮かんでいる。どうも、最初から拒否されるのは分かっていて、あえてこういう挑発的な行動に出たらしい。

 ――若いっていいなあ。

 佐久間くんは三浦マネージャの方針に公然と逆らった。上司の言うことを盲信するのではなく、自分で考え、正しいと思ったことを主張したわけだ。社会人としては問題があるかもしれないが、私は1人のエンジニアとして拍手を送りたい気分だった。抱きしめてチューしてやりたいぐらいだったが、セクハラになるのでやめておいた。

  それに私たちと違い、佐久間くんは新人だが正社員だ。K自動車は「入社後6カ月は研修期間のため仮採用」というような採用条件はなく、最初から正社員となる。人事権があるわけでもない三浦マネージャが腹を立てても、簡単にクビになったりはしない、というしたたかな計算もあったに違いない。

私の隣でなりゆきを見ていたアツコさんが、そっと囁いた。

  「とにかく一矢報いたんじゃないかな」

  ちらりと平良さんの方を見ると、かすかな笑みが浮かんでいる。私の視線に気付いた平良さんは、軽く頭を下げた。

  私の契約が切れる2日前のことだった。

 (続く)

この物語はフィクションです。実在する団体名、個人とは一切関係ありません。また、特定の技術・製品の優位性などを主張するものではありません。

Comment(19)

コメント

K.Oumi

うまいなぁ。

bee-vostro

例の人の近況より。

>tweet を見ると、三浦マネージャのファンが多いみたいですね。「銀魂」のよろずや銀さんみたいに、ワルで絶対自分の非を認めないってタイプが人気があるからなあ。

はあ?どこをどう読んだらそういう結論に到達するのだ?

>常道なシステム構築って、どこのクライアント企業にも使えるような汎用的なロジックとクライアント企業ごとに違うロジックを切り離すために、抽象化を用いて、クライアント企業ごとに仕様が違うロジック疎結合にし、具象クラスにコードを記述するのが普通だと思うんだけど・・・仕様変更が多いのは具象クラスのコードのほうだと思うのす。なんで具象クラスは変更なしで済んじゃうの?

だめだ。この人は本当にわかってない。ひょっとしてわざとやってるのかと思ったけど、マジにわかってない。自分がわからない文章を表面的になぞっただけで、わかった気になっている。
いや、この人の作ったシステム、マジで見てみたいわ。きっと笑える。

少し前には、新人くんのとる行動について、SQLがどうのと意味のない予測をしていて、それが外れたとわかったとたん速攻で削除して、もっともらしいこと書いて、悦に浸っている。
大企業で20年もすごすと、こういう人間ができあがるんだろうか。まさに三浦マネージャを地でいく人だ。

>どうも三浦マネージャが来る前から、このクライアント企業のシステムって普通と逆の設計思想だったのか?なんて変なことを思ってしまします。

この人が普通の、なんて言うのはものすごくとことんまったく不適当ではないのか?

>まるで、最初からこのクライアント企業の業務ロジックはクラスライブラリ化されていたみたいな印象です。

はあ?だからどう曲解したらそうなるんじゃい?
相変わらず誤字脱字だらけの文章書いてるくせに、人のあらさがしは得意なのだな。

>まあフィクションですからあまり深いことは考えないようにしましょう

この人はいろいろなことをもっと深く考えた方がいいな。

まあ、こんな人のことはほうっておくのが一番ということか。おれみたいに親切で相手をしてやるボランティア精神あふれる人間はそうはいないだろうしな。

CMP

例の人が自分のコラムに自分のこと書いてるじゃん。
>「社内失業者はもっといる」って正確には「俺が社内失業者だ!」の間違いだろ、きっと。

bee-vostro

まりもさんへ>

それでも世の中には言われなきゃわからない人間もいるんだよ。
無意味な誹謗中傷は避けるべきだとはおれも思うけど、例の人は、他人の悪口は平気で言うくせに反省のかけらもない、自分の考えが間違っていることを認めようともしない、述べている珍妙な技術論は支離滅裂言語道断。
誰かが、あんたの言ってることは変だよ、ぐらい言ってあげないと、増長してまたもや害毒をふりまく結果になるんだよ。
ONEOUTSさんが批判したのも、そういう思いがあったからではないか?

toanna

その1:
どのような形態であれ、リリース物の評価者は、利用者(この場合は読者)である。
従ってどのような評価をしても問題はない。

その2:
その成果物を解釈し、持論を展開する場合は、他の成果物(この場合は人物)を
蔑むべきではない。
その他の様々な評価(この場合はコメントや感想)を制限してしまうから。
同時に最初に評価した成果物が、陳腐に感じられてしまう場合が多いから。

その3:
もし他の成果物(この場合は、人物と思想)の評価(この場合は批判)を
したいのであれば、自身でその場所を開拓した上で、持論を展開すべき。
または自身を正しく公開すべき。
反論さえできない安全な場所で、悪評をリリースするのはずるい。

以上、書き込みテスト。


結局ね、共通認識している人物がどうかという感情より
この読み物を台無しにしてくれるコメントのほうが醜いし腹立たしいですよね。

発端や経緯や経過に違いがあっても、
「今」を切り取ってみれば、その人もあなた達もやってることは同じに見えます。


次回が楽しみです。

ダオラ

その3は的外れ、
真っ先に「反論すらできない安全な場所」で「悪評をリリースした」上、
賛同意見以外が掲示板に書かれたら即消去して反論を封じ込めたのは他ならぬ例の人。

そもそも上から目線で書いた持論の最後に「書き込みテスト」とか書いて責任逃れしてる貴方も相当卑怯。

ヤス

toannaさんの意見に全面的に同意。

見苦しいコメントは自分の品位を落とすだけだと思うんだがなぁ。

sis

悪口は正直、読んでて気持ちいいもんじゃないねえ。

toanna

OK、指摘にあわせて改版

履歴:
1.コードをコメントらしく書くと、上から目線に見えるらしい
→ もう少しコードらしく記述する
2.catchブロックで妥当なexeptionクラスを指定していなかったらしい
→ もっと多様な例外に対応できるようにする
3.新しいケースが増えた
→ その4を追加

public class CommentCreator {
 public List think(String value) {
  try {
   その1:(省略)
   その2:(省略)
   その3:(省略)
   その4: //thx. ダオラ氏
    悪しきと感じられる所作を、他人がやってるからこそ自制すべき。
    追従しはじめた時点で他人に影響されていると判断できる。
  } catch (この物語はフィクションです。以降省略 e) {
   //基本はスルー
   //書き込みテストExceptionでは足りなかった。
  }
  return 考察結果リスト;
 }
 public String create(List list) {
  //省略
 }

 public static void main(String[] args) {
  CommentCreator creator = new CommentCreator();
  List list;
  for (コメントループ) {
   list = creator.think(コメントx);
   //面倒なのでlistの足し込みは省略
  }
  System.out.println(creator.create(list));
 }
}

実行結果:
> 結局ね、。。以降省略。。

実行結果(差分のみ):
> 消される環境でやりとりしたって時点で、
> 諸々で負けちゃっているような気がします。
> 責任逃れに感じたのなら、そうなのでしょう(その1に従う)。


さすがに長くて入力に飽きました。。

bio

> コードをコメントらしく

「コメントをコードらしく」のタイポかな?
それにしても、よく分からないコメントだなあ。
日本語でおk

みなこがわけんじ

bioさんtoannaさんはこれが言いたかっただけです。

> 消される環境でやりとりしたって時点で、
> 諸々で負けちゃっているような気がします。

そして

> 責任逃れに感じたのなら、そうなのでしょう(その1に従う)。

これはtoannaさん自身のコメントについて、他の人がどのような評価されても問題はないという意味です。

flatline

ちょっと疲れてるのかな。
toannaさん、みなこがわけんじさん、どちらのコメントも意味がわからないです。

要するに、toannaさんは、例の人に対してこう言いたいってことでしょうか?

「コメントも書けない場所で一方的に意見をわめくのはコラムニストとして最低」

で、例の人の掲示板に書き込んだ誰かに対して、こう言いたいのでしょうか?

「コメントを消されちゃうかもしれない場所で、批判的なことを言っても、(なかったことにされちゃうので)意味ない」

みなこがわけんじ

flatlineさん

エンジニアライフのスタッフは、自分のビジネスや自分のサイトを宣伝する目的でコラムを執筆することを推奨しています。

例の人は自分のサイトで掲示板を設置するか、クローズするかは、例の人の自由でないでしょうか?例の人にとっては多くの人が自分のサイトを見てくれるということで成功しているわけです。

新聞のコラムや社説なんて、まったく一方的な意見です。都合のいいものだけ読書の意見として公開しているだけじゃないですか。

エンジニアライフのコラムニストでコメントなしの制限をしている人は他にも何名かいます。またコメントを書いても一切レスポンスがない人も多いです。

例の人のサイトを見て、それに関する意見を、このコラムで述べるということは、まずいのではないでしょうか?

自分でエンジニアライフのコラムニストになりコラムを書くとか、自分でブログを書いて、例の人のサイトについて批判をすればいいというのが、このコラムの多くの読者の意見ではないでしょうか?

flatlineさん、何か本意見に対して反論ありますか?

九古

あなた方いい加減にしておきなさい。
いつまで他人様のコラムで喧嘩してるんですか。

toanna

断定されるのであれば反応しないつもりでしたが
ご質問について回答させていただきます。

コメントを要約すると
・それらの話はそこらかしこで同じ内容が書かれていて、もう飽きた
・誰かと話し合いたいなら、自分で場所を作ったらどうかな
・ネットブックの貧弱なキーボードで変なコードなんて書くもんじゃない(え?)
の3点です。

ちなみに大半のコード部分を書いたのは
「君、つまらない」だと横柄かと考え、
「つまんねえよ、ゴルァ!!」に至るまでの思考回路(経緯)を書いてみただけです。

つまり少しだけ腹を割ってみたってところです。

繰り返し書き続ける人の仕様にも興味があったので
反論で、思考を司るもアルゴリズムやコードを書いてもらえたら嬉しいですね

反論が「rubyでもおk」だったら惚れちゃいますよね


ところで面白い意見だったので再回答してみますが

1.コメントが書けないことは最低なのではなくて、身を守る方法のひとつじゃないでしょうか。
 「反論さえできない場所」というのは、書き込める場所なのに怖くて書き込めない場所という意味です。
 確かに微妙なニュアンスだったので、誤解されたのはボクの責任です。

2.消される場所であっても「書き込む意味」はあるのではないでしょうか。
 消されたコメントこそ、もっとも心に響いた証拠だと思います。
 それを誰かに自慢したいのなら、やはりコントロールできる場所を用意すべきでしょうね。


最後に結論として、最近観た映画の字幕を流用します。

「ボクはコード(ここの記事)のことだけを考えていたいんだ」


あ! 人の思考コードについて書く記事をリリースして、
コメントで進化していくような感じにしたら面白いかな?? 
もしかして感化された人はロボットのようになるのかなっ?

urabus

最近知人に勧められて読むようになりましたが、
記事はもちろん、コメント(ココのは特に!)も面白いので、
久しぶりにワクワクした次第です(^^
#といっても全く煽る気はありませんので。。

ただ、完全アウェー、かつ審判も買収されているような土地で
真っ向勝負を挑んでも、どんなズルをされるか分かんないですよね。
アツくならず、戦いはクレバーに。
このスレッドから、そんな教訓を改めて教えてもらった気がします。

ただ、ひとつだけ言わせて頂くと、
「要約の3つ目は取ったほうがいい。 その方がクールだ(った)」
…本当に言いたいだけでした、大変失礼。

ruby -ne 'print if ! /reinohito/' comment

flatline


>flatlineさん、何か本意見に対して反論ありますか?

私に反論を求めるのは筋違いでは?
意味がよくわからなかったため質問しただけで、それ以外(煽ろうとか)の意図はないですよ。

SI新人

議論はどうでもいいけど連載おもしろいです(´ー`)

Anubis

一矢を"かずや"とよんで、誰だそれ?と思ってしまった。

コメントを投稿する