リーダブルなコードを書く前に必要なこと
仕事であまりにもひどいコードばかり見るはめになったので、
今さらこの本について書くわけですが・・・

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (104件) を見る
間違いなく名著だと思いますし、ぜひ読んだ方がいいと思います
一方で軽く矛盾を感じるのは、この本をあえて読もうと思う人は、
「きれいなコード」に関心がある人であり、
少なくとも「読めるコード」を書いているのではないかと
実際には「もう一歩手前」があると思いまして、
もっとシンプルに、「これができればとりあえず読む気にはなる」という、
原理的な部分はないのかな・・・と
結論からいうと・・・
"母国語(国語)という「言語」を学べ"
・・・ということなんじゃないかと思います
これは仕事で感じていることなのですが、
全く構造的でないコードを書く人のドキュメントは、
やはり論理的でなく読みづらい、というのがあります
「プログラミング」は数学的な論理を構築する世界ですが、
その数学すら、国語に依存しています
国語がわからない人に問題は読めないし、証明は書けません
母国語で書いた「文章」が他人に理解されない時点で、
それを「翻訳」したコードは他人に理解されるはずもありません
意図が説明できないのに、「わかる」なんてありえませんからね(´-ω-)
そもそも、「コードを読めばわかる」のは、
(広い意味で)「文章」として成立している場合に限ります
文章として破綻しているコードは説明・意訳なしに読めません*1
だいぶ「アジャイル」という言葉が浸透しましたが、
「ウォーターフォール」という手法が間違っていたわけではありません
時代の流れで適用分野が狭くなっただけです
「まず母国語で設計を書く」という行為自体は問題ないと思います
ただ面倒な文書フォーマットに落とすのが無駄なだけで、
「まず言葉や文章で書く・考える」ことは大事でしょう
これはやる人が多いと思うのですが、
コードを考える際に、まず日本語で処理を書いて、
それをコードに落とし込むという手を良くやります
class ActionBase def execute # 事前処理 # 本体 # 後処理 end end
class ActionBase def execute begin # 事前処理 before_action # 本体 action ensure # 後処理 after_action end end private def before_action # 権限チェック # DB接続 # ... end def after_action # リソース解放 # ... end def action # 継承クラスで実装 end end
「言葉」や「文章」で書いたものを、
そのままコードに落とし込みつつ詳細化していくわけです
それを最適化・効率化したのが「テストファースト」の概念であり、
言葉をそのままテストコードに落とし込むことで、
「母国語からプログラム言語への翻訳」が妥当であるかが確認できます
もう一つ、プロとして大事なことがあります
これは先ほどの本でも繰り返し述べられていますが、
「俺様の考える華麗な文章」はいりません
「自分以外の誰かがその文章を読んで意味がわかるか?」が最重要で、
「俺様の書いた華麗な文章を読めない方が悪い」はプロの発想ではありません
限度はあるとはいえ、たとえそれが「一般的に最適」ではなくても、
「自分の環境*2で可能な最大パフォーマンス」を考えるのが、
「プロ」としての仕事です
先日、「コードにも思いやりが必要である」というプレゼンを拝見しましたが、
「読みやすく書く」というのは「他者への思いやり」であり、
「他者とつながろうとする意思」なのだと思います
あなたのコード、「日本語でおk」になってませんか(´・ω・)?
*1: 逆にいえば、「文章として書けること」が「(プログラム)言語」であることの要件なのかもしれません その意味で、「HTML」は言語ではなく、「JavaScript」は言語なのでしょう もちろん「意図」を伝える道具は「文章」だけではなく、「図表」等もあるわけで、HTMLはこっちなのだと思います
*2: 仕事場・チーム