2018-02-10

身につけるべきプログラマの習慣 その4

全ての選択には理由がある

どんな些細なことでも、選択肢があればそこに優劣があります。
多くの場合、論理的に優劣の説明ができ、普遍的な選択というものが決まってきます。
そのことを無視して、何も考えずに自分独自の選択をするほど、その仕事の結果はチープになっていくのです。

もちろん、本質的な問題は個々の事情によって異なる場合も意外に多いと言えます。
問題の焦点の当て方によって、解決すべき問題が異なり、同じ選択肢であってもいつも正しい答えが1つとは限らないこともあります。

普遍的で絶対的な答えがあったとしても、それさえも揺るがすような事情が本当にあるかも知れません。そのことを理解していれば、闇雲に他人の書いたコードを尊大に否定することはできないはずです。


しかし、数々の問題を検討した結果ではなく、何も考えずにあなたの個人的な経験だけを全ての世界だと信じ、最初に見たたままの習慣を間違っていてもそのままにしておくことはみっともないばかりか、能力の低いエンジニアであると、密かに、しかし確実に評価されてしまいます。
増して、その理由に自分のセンスだとか、美学だとかを持ち出しようものなら、挽回できないほどに信用は失墜します。

どちらでもいいということは、特にこのICTの世界ではほぼあり得ません。しかし、それを知った上、理解した上で妥協をした方がいいことも多々ありますので、そこは誤解のないように。

事例

C言語系のプログラミングソース、中括弧「{}」の始まりをどこに書きますか。
これは、始まりと終りの括弧を同じインデントカラム位置に書くのが正解です。しかし、中括弧の始まりをその上にあるifだとかwhileだとかと同じ行の一番後ろに書く人が多いですね。これは、昔々、大昔、ソースコード印刷時の行数を減らすための習慣があった頃にできたC言語の教科書の書き方に習っている人が多いことが原因だと思われます。
多くの人が正しさよりも最初に見たすりこみに支配されているのです。

僕自身も、C言語を始めて5年位は、なんとなく疑問に感じながらもそのようなスタイルで書いていました。しかし、ある日ある開発環境でソースコード整形ツールを使ってみると、全て始まりの中括弧はカラム位置を揃えられてしまいました。最初は戸惑いましたが、その書き方の方がつまらないバグやミスを減らせることを実感できたので、以来その描き方を貫いています。(同じ行で中括弧を閉じる場合は別です)

その選択の理由は体験そのものではありません。体験を元にした普遍的な理屈です。
それは・・・

人は図形を素早く感覚的に認識する能力があります。
中括弧の始まりと終りが同じインデントのカラム位置に存在することで、図形的に囲まれていることを直感的に認識することができるのです。そのことで、コードの視認性が格段に高まります。
一般の文章でも、罫線に囲まれていると直感的にそこがまとまっていることを認識しやすいでしょ?(日本人は特に好きなはず)
それと一緒です。

逆に、他の某言語のように begin と end という単語で囲まれているとあまり直感的に見ることができなくなり、視認性が悪くなりますね。
同様に、中括弧の位置がずれていれば、結局その分余計な情報処理が脳で起こってしまうので、始まりと終りの位置を揃えたコードに比べてやや視認性に劣ってしまいます。

せっかくC系の言語は図形的な表現をして視認性を高めるデザインになっているのに、わざわざそのメリットを削ぐことは正しくないと断言できます。

ですが、長年そのスタイルで書いてきたプログラマに文句は言いません。スタイルが統一されていれば、そこまで読み辛いということもありませんし。
でも、一番正しい正解というわけでもありません。
改善する力が残っているならば、よりよい選択をすべきです。


0 件のコメント:

コメントを投稿