コードの汚さ=技術力の低さ

汚いコードを書くプログラマは、技術力も生産性も低い。

コードが汚いということは不必要なコードを書いているか整理ができていないということで、その分だけ仕事が遅い。 整理が出来ていなければあちこちに同じようなコードが分散して整合性がない。 コードが汚いからバグが混入しやすく、コードが汚いから問題箇所を特定しずらく、不具合だらけでその対応に追われ、要求の及第点を出すのが精一杯で要求以上の結果が出せない。 場合によっては場当たり的なコードを更に追加してどんどんコードを腐らせる。無駄な時間を費やし、いつも頭を悩まし、人生の貴重な時間を浪費する。 その無駄な時間に残業代を払う方は不憫だ。

親しくさせていただいている会社の方が作っているプログラムのテストをした事があるのだが、おかしな動作を確認したのでその方に報告したところ、「あれ?なんでこうなっちゃんだろう?」と言ってコードを見だした。 その画面をちらっと見ると、一関数が一画面を上下左右に埋め尽くして溢れていた。

間違いない、そういうコードを書いているからそうなる。一つの関数内に処理を詰め込み過ぎだ。

人間の頭はそんなに賢くはできていないから、その弱い頭でも何をしているのか、どう動作するのかが一目でわかるように処理を小分けにする、それが関数だ。

一関数は10行程度、それが基本。ただし通常、分岐処理行や他関数呼び出し行はその数に含まない。 オブジェクト等へのパラメター設定やSQL構築行もそれに含まないが、それらは別関数に分離すべき。

あくまでも基本の話。例外はあるし、そのようにできるけど時間的制約から…というのはよくある。 でも「それは理想論で現実の複雑な要求では多くの場合に対応できるわけない」と思うなら、それは技術力の低さからだ。 とにかく、日頃から小さい関数を心がける姿勢で成果物に雲泥の差が出来ることは間違いない。

少し話は変わるが、前述の会社の懇親会に参加させていただいた折、お酒も入ったので

「前に、SQLを構築している箇所で WHERE 1=1 というコードを見たことがあるんですが、あれは何ですか?」

と質問してみた。すると、その方は

「あれは動的にSQLを組み立てる時にどんな条件でもシンタックスエラーを出さないための方法です」

と、自信満々に答えた。こういうことだ。(コードはPHP

$qry = "SELECT * FROM foo WHERE 1=1";

if(!empty($param1)){
    $qry .= " AND col1 = ?";
}

if(!empty($param2)){
    $qry .= " AND col2 = ?";
}

if(!empty($param3)){
    $qry .= " AND col3 = ?";
}

              :

多分、言っても無駄だと思うので「そうですか」と答えてその質問は終了させた。 こういうコードを不格好だと思えないから汚いコードを書くことになる。何のためにPHPを使っているのか。

その会社はバージョン管理システムを使っていなし、IDEも使っていない。ユニットテストも行っていないだろう。 PHPのVIEWテンプレートは未だにSmartyで、DBアクセスライブラリはADOdbだった。 時代的に10年以上前で止まったままだ。

その会社にはいろいろお世話になっていて、社長様はじめ皆さん良い方なので批難するつもりはない。 しかし、自分がしていることに疑いを持たない方に間違いを指摘するのは難儀なので、できれば彼らが自分でおかしいと気づいてくれる事を望む。 そうすれば、良い方法をいくらでも教える。