Tellur52の日記: コーディングについての有益な慣例とは 2
日記 by
Tellur52
slashdot本家で、“Defining Useful Coding Practice?”という記事が出ています。
要旨を超訳すれば、技巧的なコードより価値があるのは、理解しやすいコードだ、といったあたりかな。
後、暗に、メソッドや変数、クラスに対する適切な命名の重要性が伝わってきます。
元ネタの文やコメントで、中々価値のある格言が色々と。
- An elegant one-liner coupled with a comment from a few revisions ago makes for a good headache.
昨日のあたしはまるで他人、みたいな。
- Simple, clever doesn't pay the bills, reliable and maintainable do.
コードに凝ってもお金くれない、実にえげつない表現。
- Code tells you 'how'. Comments tell you 'why'.
これは守れない人多そうだなあ。
- Software maintenance is a fact of life.
コードのメンテは人生の現実、ああこれは切実だ。わたしもコピペの嵐が吹き荒れるコードを見てうなされている(苦笑)
- The only correct documentation is the code itself.
悲しいけどこれも現実なのよね。
- Learn to use autocomplete.
もはや開発ツールなしにはコード書けない、みたいな。
- One person's clever, obscure trick is another person's common practice.
これは耳が痛い。それとO/R使いはSQL勉強しろとか良く言われますよね。
- Optimization is fine, as long as you're "optimizing" the code to be more clear.
もう泥臭い最適化はコンパイラやランタイムに任せましょうよ。
- Abstraction and locality are conflicting forces.
これまた悩ましい。
「わかりやすいコードを書け」に落ち着くと思うんだ (スコア:1)
それも、「人間にとって分かりやすい」などという『比較的高度な』レベルのわかりやすさではなく、コンパイラにもわかるぐらい わかりやすくするのが肝心。そうすれば最適化をかけてよいパターンかどうか、コンパイラが判断できるようになる(「今の」コンパイラが最適化できるかどうかではなく、将来のコンパイラであっても最適化できない可能性が有るかどうか、が大事)。
逆の言い方をすると、人間が書くコードには多くの 暗黙の了解/暗黙知 が含まれていて、他人にこの暗黙知を推測することを要求する。しかし、その「暗黙知」の中には実は間違いが含まれていることがある。つまりプログラマが暗黙のうちに「x が必ず成立する」と推測していても、実はコンパイラが分析していくと「その推測は間違っている場合がある」事が判明する。すると当然「xが必ず成立する」という情報を使った最適化はかけられない。他人が読んでもその前提は成り立たないと思うので、プログラムが思慮不足なのか自分の理解が不足なのか、と悩むハメに陥り、その分読みづらくなる。
そのような暗黙知を減らせば、自然とコードはわかりやすくなる。コンパイラも安心して(?)最適化をかけられるようになり、結果として得られる出力は優れたものになる(あくまでも、あなたの意図する範囲内において、だが)。もちろん、他人もコードを読んでいて、「自分の理解不足か、コードが思慮不足か」と悩むこともなくなるので、読みやすくなる。
fjの教祖様
アサーションを書こう (スコア:1)
自分が最低限守っているのは「アサーションを書こう」ということです.
以前,「あんたのライブラリを使うようになってからエラーが出まくる.」
と文句を言われたことがあるのですが,その「エラー」とは
assertion failed のことでした.気付かずにリリースしてしまうのを
避けられたんだからむしろ感謝されていいと思うんだけどなぁ.
>Code tells you 'how'. Comments tell you 'why'.
これは至言ですね.
出来るだけ why がコードからも読み取れるように
何をしようとしているのかの意図が分かるような
識別子名にするようにも心がけています.
#ええ,心がけているだけです
#オンサイトでハックしなけりゃならない時に
#原則無視で無茶やっちゃうこともあります
屍体メモ [windy.cx]