「中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント 」に反論してみる

タイトルが片言!
じゃなくて。以下エントリに軽く反論
中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント - 分裂勘違い君劇場 by ふろむだ

「変数のスコープは狭いほど良い」と妄信する

実際、「あちこちから頻繁にアクセスするようなオブジェクトやメソッド」は、スコープをぐっと広くしてしまった方が(場合によってはグローバル変数やグローバル関数にしてしまった方が)、いちいちパラメータ渡しのバケツリレーをせずに、オブジェクトや機能を使うことができ、プログラムの可読性も保守性もずっと向上することがけっこうある。

中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント - 分裂勘違い君劇場 by ふろむだ

んん?これってデータ構造とか設計が悪いんじゃないの?

もちろん、これは名前空間やプログラムの担当分け問題とのトレードオフがあるから、状況を無視して不用意にグローバル変数、グローバル関数、グローバルクラスを使うとプロジェクトが大混乱になるので、末端の未熟なプログラマには「とりあえず、変数のスコープはできるかぎり狭くしておけ」という方針出しをするのはありだが、少なくとも、中級以上のプログラマが、単純になんでもかんでもスコープを狭くするのは、逆に犠牲が大きくなりすぎる。

中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント - 分裂勘違い君劇場 by ふろむだ

自称中級者がデータ構造の悪さを言い訳しているみたいな。
グローバル変数という考え方はもちろん必要なところには必要であるけれども、その必要度合いを最小限にするのが理想的な設計というもの。なんでもかんでもスコープを狭くするな、というのは正しいけれども、むやみにグローバルを取るのも愚の骨頂。狭いほど良い、ただし例外あり、というのを「変数のスコープは狭いほど良い」と妄信といっちゃうのは悪意的誘導だよなあ。大抵の場合広くても問題ないと誤読できちゃうもの。

「同じロジックのコードを2度以上書くな」と妄信する

レベルの高いエンジニアは、同じロジックのコードが複数箇所に現れている方が、適切な判断の結果であることはけっこうあるということをよく知っている。

中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント - 分裂勘違い君劇場 by ふろむだ

これは無くないか?同じロジックのコードは同じロジックのコードな訳で。将来のパターン変更のために違うロジックが産まれるのであれば、それは違うロジックなのだよ。呼ぶロジック変えるだけじゃない。別進化するロジックが最初は同一であるということは良くあるけど、それ以上に同じロジックを同時修正する機会のほうが多いと思うんだけど。適切な判断の結果であるとしたら、それは最初から別進化を辿る運命にあったわけだ。ということは、当初から同じコードが書かれているほうがおかしい。
まあ、メンテなんて考慮しないプログラミングであればコピペで頑張れと。

プログラミング言語を極めるのが大切」と妄信する

プログラミング言語のスキルというのは、価値あるスキルのうちの一つにすぎないどころか、それほど優先順位の高いスキルではない。実際には、サーバ設定、ネットワーク、データベース、パフォーマンス設計、セキュリティ設計に関するスキルは、プログラミング言語の知識に負けず劣らず重要だ。プログラミング言語を極めることにこだわりすぎるあまり、それらシステム開発全体のスキルのバランスを欠くと、独りよがりで視野狭窄的なシステム設計に陥りがちだ。

中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント - 分裂勘違い君劇場 by ふろむだ

プログラミング言語の問題と、それ以外のスキルの問題は互いに独立した問題でありますから、別々に考えればいいと思うよ。プログラミング言語を極めることが問題解決のスキルに直結することは多いわけで。
少なくとも、プログラマーとしてのスキルは言語のスキルだよ。それ以外のSEとしてのスキルも別途磨けばよい。バランスを取ったスキルアップをするのが何でも出来るエンジニアだとしても、プログラミングを極めたプログラマの重要性は揺るがない。