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

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

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

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

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

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

一関数は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年以上前で止まったままだ。

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

プロジェクトマネージャの愚鈍

まっとうなプログラマは、プログラムを安全かつ効率的に構築するための様々な技法を習得する。

それは純粋なコーディング手法そのものであったり、秀逸なライブラリやフレームワークの使用方法であったり、あるいはソースコード管理システムであったり、開発環境であったり、もっと根源的には開発言語であったりする。

そういった物を全て纏った状態がそのプログラマの本当の戦闘力になる。

にもかかわらず、プロジェクトマネージャがマネジメントを行うにあたってそれらの武器の使用を制限してしまうことが往々にしてある。 制限しなければならない理由が正当であれば仕方ないが、それがプロジェクトマネージャの幼稚さ故であった場合、プログラマはいくつもの武器を失う危険をはらむ。 例えば使用するフレームワークについてシステム要求を考慮せず、よく知らないのに流行で選定して指定する事はよく聞く。 あるいは、開発環境を統一するという名目で使用するIDEを限定したりする。そこに意味はほぼ無い。 おかしなコーディング規約を制定してプログラマを苦しめるのも日常茶飯事だ。

プログラマは身を守るためのまともな武器を装備できずに戦場で敵と戦わなければならない。 本来そのプログラマの戦闘力を高めるための武器が奪われているのだからどうしても苦戦する。

その様をみてプロジェクトマネージャーは呆れ、時に激怒する。 「どうしてこんなに時間がかかるんだ!?」と。

自分が羽をもいだトンボが地べたを這いつくばるのをみて「こいつ、遅せーw」と嘲笑う子供のようなものだ。

「包丁一本さらしに巻いて」、料理人の世界では当たり前のことだと思う。 作る料理がどんなに変わろうと、道具だけは自分が使い慣れた物を使う。だから旨い料理が作れる。

スーパーで買ってきた2000円の文化包丁で料理させた料理を食べて「この料理人大した事ないな」とあなたは言うのだろうか?

あなたがプロジェクトマネージャなら、自分がトンボで遊ぶ幼稚な子供でないかを常に考えたほうが良い。