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

高慢と偏見(4) 嵐の金曜日

»

 「56行めからの関数だけどね、selectPartsList()ってやつね。なんでこれ、privateになってるの?」

 「すみません、意味がよく分かりませんが……」富永さんは疲れたように言った。

 メソッドを「関数」と呼んでいることは置いておくとして、確かに意味がよく分からない。

 該当のメソッドは、画面の初期化処理であるinitialize()から呼ばれていた。ある条件に基づいて、コンボボックスで使用する部品の一覧を部品マスタから取得している。部品マスタはこのシステムのほとんどの機能で使用する主要マスタの1つなので、さまざまなパターンが共通ロジックとして作成されているのだが、この画面ではどのパターンにも当てはまらないため独自に実装したようだ。

 こういう処理は、共通ロジックとして切り出すべきだ、と言いたいのかな、と思ったら、三浦マネージャは、またまた私の予測を超えた考えを持っていた。

 「なんでstaticにしないの?」

 「は?」

 「staticにすれば可読性が良くなるでしょう。なんでしないの?」

 ――分かりません。分かりません。staticにしたら可読性が良くなるという根拠が分かりません。

 気の毒に、富永さんは目を白黒させている。

 見かねた平良さんが発言した。

 「普通、データベースアクセスをともなうメソ……関数をstaticにはしません」

 「普通って誰が決めたの? static関数になってれば、これがロジック関数だってことが一目で分かるでしょう」

 私の頭の中もかなり混乱の度合いを高めている。ロジック関数? ロジック関数って何だ?

 おそらくメンバー全員も似たような状態にあるに違いない。そっと隣を見ると、アツコさんはとっくにこのレビューから得るものはないと見切ったらしく、プリントアウトの余白に落書きをしている。夕食の献立を考えているようだ。確かにその方が有意義だ。少なくとも生産的ではある。

 三浦マネージャの面子を考慮したのか、時間のムダを避けるためなのか、平良さんは賢明にも「ロジック関数ってなんですか?」みたいな質問はせず、別の方向から攻略を試みた。

 「ご存じかとは思いますが、staticをつけるということは、システム全体で共有するということです。つまり、スレッドセーフにするのが難しいということです」

 「そうかね。Javaはないが、私はC#ではほとんどstaticでシステム作ってるが、まったく問題なく動作しているよ」

 ――staticの意味、分かって言ってるのかいな。

 「例えばどのシステムのことですか?」

 「最近だと、調達部で使っている型番変更通知システムだよ」三浦マネージャは得意そうに答えた。「関東、関西合わせて800人ぐらいが常時アクセスしてる」

 ――あれかよ。

 私は脱力した。そのシステムを見たことがある。データ更新するのは週に1度、1人の担当者がExcelファイルをアップロードするときだけ。残りの799人は通知されるメールを受け取り、メールに記載されているURLをクリックすると変更内容が表示されるというもの。そりゃあ、あれなら全部staticにしたって問題ない。

 平良さんはため息をついた。

 「新部品調達システムは、それより多少複雑なシステムです」

 多少とは控えめすぎる。少なくとも1万倍ぐらいは複雑だ。

 「そうかね。だからスレッドセーフにする自信がない、保証ができないというわけかな?」

 「そんなことは言っていません」さすがの平良さんも口調を荒げた。「staticでなければできますよ」

 「そうかね。staticではできないというのは、私に言わせればスキルがないにすぎないよ。そうじゃないのかね」

 全員が息を飲んだ。アツコさんも夕食の献立表からハッと顔を上げて、私と視線を合わせた。

 ――この人、今、地雷踏んだよ。

 ――踏んだね。しかも、踏んだことに気付いてないよ。

 素早く交わされた視線を自然言語に翻訳すると、こんな感じだ。

 見ると、同じような声にならない会話がそこかしこで交わされている。中には、あからさまな侮蔑の視線を三浦マネージャに向けている人もいる。

 「どうも最近のプログラマは、ほとんど宗教的にオブジェクト指向を信奉しているようだがね、私の長い経験から言うとだな、オブジェクト指向が役に立ったことなどないね」

 三浦マネージャは前にも言ったことを繰り返した。またもや「長い」が強調されている。

 1つ分かったことがある。この人はオブジェクト指向を理解していないのじゃない。徹底的に間違って理解しているのだ。理解していない方がまだマシなぐらいに。

 なお悪いことに、どうやら自分の「長い」経験に照らし合わせて「オブジェクト指向は使えない」と本気で信じ込んでいるようだ。そして、邪教にたぶらかされている世界中の哀れなプログラマを救済する、というはた迷惑な使命感に燃えてしまっている。

 ――宗教家だ、こりゃ。

 「それは現代のソフトウェア開発を否定するようなものです」もはや平良さんも相手の面子に気を使う余裕をなくしていた。「あらゆる言語、フレームワークでオブジェクト指向は使われていて……」

 「ああ、そういう部分で使われているのは否定しないよ。OSとかGUIとかね。私が言っているのは、このシステムのような業務アプリでの話だよ」

 「同じです。むしろこのような複雑な業務システムでこそ、オブジェクト指向の有用性が生きて……」

 「だから私の経験から言うと、そういう有用性が確認できたことはないんだってば。分からないかなあ」

 「有用性が確認できないとおっしゃいますが、今までオブジェクト指向をどの程度利用されてきたのですか? 実際の業務で使ったことはありますか?」

 「もちろんあるとも。さっき言った型番変更通知システムとかね」

 ――ウソをつくな、ウソを。隣の部屋で、使ったことなんかないって明言してたじゃんか。

 「あれは私もソースを見たことがありますが、オブジェクト指向なんてものではなかったですね」

 上から目線を崩さなかった三浦マネージャだったが、具体的に指摘されると言葉に詰まった。

 「な、あれは……」

 「オブジェクト指向がしっくりこないのであれば使う必要はありません。しかし、ろくに使ってもいないのに、自分が理解できないからといって批判したり否定したりするのはいかがなものでしょうか」

 「……」

 「三浦マネージャがずっとオブジェクト指向を使い続けてきて、それでもなおかつ、利点よりも欠点の方が多いというのであれば、喜んでご意見を聞きたいと思います」平良さんは、むしろ静かな口調で続けた。「しかし、これまでお話をうかがった限りでは、批判的なことが言えるほど、三浦マネージャがオブジェクト指向に精通されているとは思えません」

 ――よく言った!

 私は心の中で平良さんに拍手を送った。

 三浦マネージャはさすがに沈黙した……かと思ったら、薄笑いを浮かべたまま言った。

 「平良さんは専門学校卒だったかな」

 平良さんの顔がこわばった。

 「それが何か?」

 「失礼だが、君は専門学校卒という経歴で、私に対してひがみを感じているのではないかね? 私はT大学大学院卒だ。まあ、うちの会社ではたいした学歴でもないがね」

 室内は死のような沈黙に包まれた。

 ――今どき、学歴って……

 私は怒りよりも、三浦マネージャの人間性に対する同情を感じた。その顔には「勝った!」とでも言いたげな得意そうな表情が浮かんでいて、なおさら哀れみを誘った。

 平良さんは諦めたように首を振ると、そのまま貝のように口を閉ざしてしまった。そして残りのレビューの間、一言も発言しようとしなかった。

 (続く)

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

Comment(20)

コメント

AC/DC

staticキター!
学歴キター!
まさに事実は小説より奇なりだ。

statcicblue

小説家デビューを検討されてはいかがでしょうか。
それくらい読み手を引き込む力をお持ちだと思います。

リーベルG

statcicblueさん、どうも。

たぶん、私の筆力などではなく、ネタにしているテーマのためだと思います。
ともあれ、楽しんでいただけたのであれば嬉しいです。

通りすがり

元ネタやはり奴か・・・。
ただ、取引先と違って上司の場合、アカハラまがいの発言は「人事 or そいつの上司に報告」という裏技が使えますからねw
その上でサボタージュなりピケ張るなりしてしまえば・・・(

ともあれ、C#使いで安直にstatic使う輩はタコですなぁ。まともにテスト出来ない&コードクローンの山でしょうに。

Ted

やはり三浦氏が作ったというシステムは多人数で同時にアクセスすると落ちたりレスポンスが混乱したりするんでしょうか。
そこをきっかけにやり込めたい気が(笑)

rinnna

>やはり三浦氏が作ったというシステムは多人数で同時にアクセスすると落ちたりレスポンスが混乱したりするんでしょうか。

実際に似たようなシチュエーションで指摘したところ、そういう人種の場合
「必要最小限のシステム(キリッ」とか
「オブジェクト指向を使うと余計なことが多すぎるし、不必要に凝りすぎる(キリッ」とか言われています。

その方のデザインしたものは、そのわりに、constのintとかにアクセスするのに、セマフォ入れたりする余計で謎な作でしたが(苦笑)

CMP

久しぶりに件のおっさんのコラムを見に行ってみたが、コメントはないは書いている内容は鬱陶しいはで、時間を無駄に使ってしまった。
そろそろコラムニストをリコールするってことを本気で考えないといけないような機がしてきたよ。

flatline

> そろそろコラムニストをリコールするってことを本気で考えないといけないような機がしてきたよ。

いや、逆に、反面教師というか、見習うべきではない実例として残しておくべきだと思いますが。

asuka

だんだん水戸黄門を見てるような気分になってきました。

CMP

flatlineさんへ
でも、現状「見習うべきではない実例」として残しておいたとしても、システム上誰かが常に「見習っちゃだめだよ」って教えてあげないといけませんよね?
それがめんどくさいかなと。
評価システムがあれば、まだマシだと思うんだけどなあ。

印籠はいつぐらいにでるんですか?>作者様
ついでに入浴(ry)。

flatline

CMPさん

まさにこのコラムが、その役割を果たしているのではないでしょうか。
それに、やっぱりいい加減な内容のコラムには、やはりそれなりのコメントがつくものなので、それが一種の評価になってるといえなくはないですね。

AC/DC

例の人が自分のコラムで、リーベルGさんのハンドル名について、なんか失礼なこと言ってるよ。
あのおやじはどうにかならんもんかな。

DG

平良さんの反論のポイントがずれてる気がします。
メソッドがstaticかどうかとスレッドセーフかどうかは、まったく関係ないですよね。

CMP

DGさんへ
100%関係ないって言い切れないよ。
とは言っても、言い訳にしてはかなり苦しいけどね。

AC/DCさんへ
まぁ売り言葉に買い言葉だ。
あの程度のコラムなら害はないから無視してていいんでない?
おっと、存在そのもの害だ!という主張は(略)。

DGさん、どうも。

あまり長々とコードを載せるのもどうかと思ったので省略してますが、該当のメソッドからは、privateスコープの変数をいくつか使用しているという想定です。

private List selectedPartsList;
private void selectPartsList() {

 selectedPartsList = new ArrayList();

}

メソッドをstaticにすると、変数の方もstaticにする必要があり、スレッドセーフとは言えなくなる、というのが平良さんの言いたいことです。

AC/DCさん、どうも。

例の人のコラムを拝見しました。
あいにく、「リーベンジー」という言葉を知らないので、これがどの程度失礼な言葉なのかわかりませんでした。

ヤス

某コラムではSQLってしっくりこないんですっていう趣旨のコメントをして、
作者から「DBを使うんだったら勉強しろよ、バカ」って言われて侮辱だの怒り狂う。
某コラムではオブジェクト指向ってしっくりこないんですっていう発言を作者がしたら
コメントで「オブジェクト指向勉強しろよ、バカが」と罵倒する。
淘汰されるべきは、作者かコラムかそれともコメントか。

flatline

何にせよ、罵倒は見苦しいだけですね。
国会のヤジと同じ。

statcicblue

コラムであろうが本文であろうが、
罵倒や中傷は見ていて見苦しく、たとえ言っていることが正しくても
多数から理解を得られることはありません。

しかし例のくびになった名前を言ってはいけないあの人、
最後のコラムで自身の誹謗中傷発言について、コラムの煽りに負けてやってしまいました以後気をつけます(概略)なんて謝罪しておきながら、
結局はてなでもツイッターでも同じことやってますね。
やはりコメントは関係なく、例のあの人の邪悪かつ間違った人間性が問題だったのでしょうね。

CMP

同じ文章でも、悪意を持って見るのと善意を持って見るのとでは、その文章の書き手の印象はまるっきり違うよね。
しかも一度ついた悪いイメージはなかなか払拭されない。正しいことを言ったとしても、全て悪い意味でとらえられてしまう。

個人的にはSQLの方は「おちゃめなおっさん」で、オブジェクトの方は「勘違いくそじじい」。
でも、おちゃめも過ぎれば叩くけどね。

コメントを投稿する