小野:あとね、テクニックの乱用・誤用。これはね、この間、これちょっと書くかどうかは別として、本当に怒りを覚えたんですよ、この間。
編集部:小野さんが怒るなんてめずらしい。
小野さんが怒ったテクニックの濫用・誤用
小野:温和な僕が。プログラムにはけっこう厳しいんで。プログラムだと急に厳しくなるんですよ。何かって言うと、その人が最近覚えたテクニック、技術を駆使して書いたコードがあったんですよ。それ自体は全然、問題ない。最新の技術を使って何が悪いって話なんで。ただ、使い方を間違えちゃってて、すごくソースコードの見通しが悪くなってて、結果的にものすごいバグがいっぱい出ちゃってた。となると、技術をただ乱用してるだけというか、誤用して、乱用ですよね。それによってリーダビリティとか、メンテナビリティって言葉があるんだけど、リーダビリティって読みやすさとか、メンテナビリティ、メンテナンスの時のしやすさっていうのがものすごく落ちてて、技術を駆使したがために、複雑になりすぎて、それが実際に事業のスピードを落とすっていうことがあったんですよ。だから、書き直して、「こんな複雑に書かなくたってこうやって書けるでしょ」っていうのを直したりしたことがあったんですけども。
編集部:ソースコードにおける、最新の技術を駆使してっていうのはどういう…?
小野:新しい機能を使うとか、新しい言語を使うとか、そういうやつですね。あと勉強したてのパターンを使うとか、この間の対談で言うところの、覚えたての四字熟語を大事な卒業スピーチで使っちゃうみたいな。日本語でも、ちょっと意識が高い人とかって、覚えたての言葉をこうやって、この状態っていわゆるなんとかだよね、「いわゆるって。昨日覚えたんだろ」みたいな、ということがあるじゃないですか。日本語だとそんなに四字熟語を覚えて乱用する人いっぱいいないかもしれないけど、プログラマーでそういうことをする人はけっこういっぱいいるんですよ。その状況には名前もついていて、ハンマー釘。ハンマーを持つと釘を打ちたくなる。心理学の世界の用語で、ハンマーを手にすると「打つとこないかな、あった」って言ってバンって。なんなら釘を打つならいいんだけど、たまに打つとこないから自分の手を叩いて骨折したりとか、友達の頭を打って骨を折らせたりするとか。っていうのはあるんだけど、SIでこれどう?
有馬:テクニックの乱用・誤用っていうのは正直あんまり見ないんですね。古すぎるテクニックをずっと使い続けるっていう問題はありますね。ですので、新しいテクニック、最先端じゃないけれども、本当は享受したほうがいいような、享受できるような機能を使わずに、ずっと古いもので書き続けるっていう問題。
小野:古いもので書き続けるのは、ある意味そのままでいいので受け入れやすいところもあるかもしれませんね。でも、そうすることのダメージは?生産性の問題とか?
有馬:生産性ですか、まったく最近でもないですけどジェネリクス、拡張for文とかは使おうねというのはあります。
小野:でも意地悪な聞き方をすると、気持ち悪いだけで、実害がない可能性もあるんじゃないの?
有馬:ただ、最近ジェネリクスを使わないっていうことはやっぱりいろんなバグにつながると思うんで。
小野:型が安全じゃなくなるからね。
有馬:そうですね。
小野:他に、最新技術を使えば解決する問題が使っていないがために解決していなくて、それによって発生している問題っていうことだとどうですか?
有馬:やっぱり処理速度ですかね。今、使ってるかはアレですけど、よくある例がStringの連結ですとか。StringではなくてStringBuilderを使うとか。
小野:でもあれループの中にでも入ってない限りそこまで変わらないじゃないですか。よくJavaプログラマーはStringの連結問題のことを言うんだけど、実害はあんまりないケースも多い。いまはコンパイラでの最適化もあるし、何度も呼び出される処理じゃないところでは、開発の生産性、Ease of Developmentとか、リーダビリティを重視すると単純な連結の方がいいケースも多々ある。Stringを連結するのが、気持ち悪いだけ、というケースも多いでしょ?
有馬:そうかもしれないですね。
編集部:それこそ美意識とかそういう感じのジャンルの話なんですか?
小野:どっちかって言うとその美意識はあんまり持つと危ういところもあって、ソースを、自分色に染めたくなるんですよ。すごい不毛な染め方もあって、例えばインデントって言って、タブとかで深くしてく、それによってこのレベルの処理、このレベルの処理っていうのをわかりやすくするインデント。インデントをタブにするのか、スペース4文字にするのか論争とか。
編集部:見ました。シリコンバレーってドラマ知ってますか?
小野:知ってる知ってる。あれでも分かりますよね。スペース、タブで喧嘩して、「なに、あなたタブなの?もう私あなたと付き合えない」って、カップルが別れ話をするんだけど。スペース、タブ論争とかあるんですけども、昔、僕もよく見たのが、最初、触る時に全部、自分色に染め直してから触る人ってけっこうやっぱりいるんですよ。特に美しさを求める人って。これは何の価値も生まないよね。だってタブとスペースとかを書き換えてるだけだから。機能追加もバグ修正もしてないし、バグを生むことさえしてない。ただ「俺色になってきたじゃねーか」みたいな、それしかないんですよ。自分が心地よいだけなんですよ、基本的に。でも、「俺だったらこの名前じゃなくてこういう名前だな」とかって言って、意味がわかんないものに対するリファクタリングとしての名前変更はありなんですよ。ただ単に俺流儀に染めることは、あんまり意味がないんです。ソフトウェアを自分の色に染めたくなる病っていう。
編集部:美しいコードって言った時に、こっち系の話と誤解されがちだと思うんですよ。
小野:この話は今回の対談に入れるべき?
編集部:逸脱に見えるんだけど、入れるといいんじゃないかなと思うんですけど。タブ、スペースとか私たちにはわからないから、深遠な何かあるんだろうなみたいな。
小野:はっきり言って趣味の問題です。あれはあんまり実害がない。ソースコードを自分色に染めるのは本当に不毛。リファクタリングと、自分色に染めるのは、全く似て非なる行為なんですよ。
小野:あとは、自分と違う書き方をする人のコードを「きもい」とかいうのもだいたい駄目なんですよね。「きもい」のって何が問題なのかって言うと、「それあなたが慣れてないだけでしょ」みたいなケースもあるから。新しい技術に対して「きもい」という人もいる。
小野:だから、新しい技術をどの程度使っていくかは難しい問題で、メンバーのスキルレベルにもよるんだけれど。例えば本当はこんなの自分で作らなくたってあるじゃん、みたいなのを知らなくて、APIの存在を知らなかったがために、自作した、ということもあって、小さなものだと僕もやることがある。この間Excelの某ライブラリで、あるクラスを知ってたら使えばいいのに知らなかったから自作したことがあった。知らないがゆえに作っちゃう問題はあるけども、それに対して、逆に知ってるがためにハンマー釘で使いまくって、リーダビリティ、メンテナビリティを下げるケースだってあるから、そこはもろ刃の剣、両方あるんですよね、っていうことは今回のテーマに入れてもいいかもしれない。最新技術を使うってこと、美しく書くってことと、単純に自分が受け入れやすい、自分色に染める、っていうこととを錯覚しちゃいけないんだけどね、みたいな話。
有馬:SIで単独で、プログラムを書く面において新しい最新技術を使うことってあんまり見ないですね。
小野:それ自体が問題で、何が問題かって言うと、もっと軽く、本当は簡潔に書けるのに。
有馬:そうかもしれません。
編集部:そういう気持ちも持ったりするものなんですか?
有馬:たぶんあんまり持たないです。
編集部:その気持ちさえ持たない。
有馬:その気持ちさえ持たずに、昔からやってるやり方で実装することが通常ですね。
小野:重複を避けるためにどうしたらいいのかって普段すごい考えてたりすると、新しいのが出ると「あ、これを使えば」とかなるわけじゃないですか。いかに重複を避けていくのかとか、美しくないことによる弊害をいかに最小化してくか、っていうことを考えてくと、やっぱり新しい技術でそれを解決できそうなやつがあったら使ってみたいなっていう気持ちになるってのは、これはある意味、本当はあるべき姿なんですよ。だからあんまり新しい技術を勉強してない状態っていうのは、より良いコード、より品質の高いコードを目指していこうっていう意識のところで、もうちょっと心の持ちようがあると思います。
有馬:書かれた詳細設計を実現するっていう意味では、あんまり新しいプログラミング技法を使う必要が現場では求められることがないと思います。同じ設計書の書き方なので、同じような実装になるっていうのは致し方ない。ただ、それを積極的にそれを肯定はしていませんよ。
編集部:今のこの話題の、小野さんと有馬さんのすれ違い感が、やっぱり面白くて、小野さんがセゾン情報に入ってきて、今、改革してるんだけど、最初ぜんぜん受け入れられなくて悲しかったみたいなのにすごい通じる、この新しいテクニックの話っていうのはすごい。