中途半端に優秀なプログラマが「正しいプログラミングテクニック」だと妄信しがちな3つポイント - 分裂勘違い君劇場 ちょっと囓っただけの素人が自分を過信して陥る三つの罠? - カレーなる辛口Javaな転職日記

えっと、後者の人はオブジェクト指向な人。というか、いかにもJavaな人って感じで面白い。

例えば、割と大型の受託開発をやるような会社の新人には、 とても良い指導になるでしょう。

一方前者の方の言う事も、十分理解できる。
私の意見も、ここに書いてみます。

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

変数のスコープは狭い方が良いです。
ただし、狭ければ狭い方が良い訳ではないです。
狭い事が不適切な場合もあります。 でも、Javaの場合は、狭くできるだけ、狭くすれば、 ほとんどの場合良いでしょう。
名前空間がしっかりしているJavaでは、
スコープをぐっと広くしてしまった方が(場合によってはグローバル変数やグローバル関数にしてしまった方が)、
のような事は、やりにくくなっている。
JavaScriptのグローバル領域に変数を切るような事は、 Javaではやらない。
でもそうではない言語もあるという事も知った方が良いです。
むしろ積極的にクラスをオープンにしているRubyのような言語もあります。(+演算子はすごくグローバルだけど、その意味とかもオーバーロードできる。)

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

これは、書かないに越した事はないとは思います。
だけど、重要なのは「妄信」しない事です。
なぜ2度書いちゃいけないのか。これが重要です。
コンテキストが重要で、どのコンテキストにおいて冗長が悪なの?
って話になります。
極論ですが、AサービスとBサービスと別のサービスがあって、
同じようなロジックは、別のWEBサービスやRPCて呼び出しますか?
という話です。
じゃあ、サブシステムどうしは? じゃあ名前空間どうしは? という話です。
で、これはその規模やその処理の役割に大きく依存しますよね。
「なぜ2度書いちゃいけないのか?」
常に、それぞれの状況に適切な答えを探しましょう。

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

これは、プログラマーならば、極めましょう。
実際には、サーバ設定、ネットワーク、データベース、パフォーマンス設計、セキュリティ設計に関するスキルは、プログラミング言語の知識に負けず劣らず重要だ。
その通りです。
しかし、プログラミング言語を極めると、
サーバ設定、ネットワーク、データベース、
パフォーマンス設計、セキュリティ設計に関するスキルが
身に付かない訳はありません。 自分が何屋さんなのかを見極めていればOKです。
つまり、サーバ設定、ネットワーク、データベース、
パフォーマンス設計、セキュリティ設計が必要な人は、 当然それらの技術を極めようと努力しますよね。

ここまで書いて、重要な事がわかった!!
いろいろ書いてきたけど、
何を書いたとしても、
「妄信」とつけてしまえば、
「妄信」自体がネガティブな事だから、
書いた内容は正しい事になる。

「自分が正しい」という(妄信)
も「自分が間違っている」という(妄信)
もダメな訳です。

妄信はよくない。 何でもそうだよね。というオチ?