よい職業プログラマ

「よいプログラマってなんだろう? http://blog.clouder.jp/mt/mt-tb.cgi/1074 」というブログ記事を見て、僕も考えてみました。

ただし、よいプログラマではなく、よい職業プログラマです。
なんでかって言うと僕自身はナージャ・ジベリみたいなプログラマもよいプログラマだと思ってるので、これから書く条件ではそういうプログラマを評価できなくなってしまうからです。

と、いう訳でよい職業プログラマの条件。

  • 汚いコードを整理・改善できる。
    • ぶん殴りたくなるようなコードでも落ち着いてちゃんと読む事が出来る。(意外とこれが出来る人は少ない。たいていの人が途中で「無理です、このコードベースは捨ててスクラッチで行きましょう」って折れちゃう)
    • そのうえでコードを一歩一歩着実にリファクタリングしていく事が出来る。
  • 抽象化のセンスがよい。
    • データ設計が誰でも理解しやすい構造になってる。
    • メタな設計をやたらと濫用しない。
  • 変数名・クラス名のセンスが良い。
    • 何を意味しているのかがよくわかる。
    • クラス名から想像できる機能を持ったメソッドが定義されている。
  • 改善の手段・足がかりをコードやDBに残しておける。
    • 例えば、データの増分の推移や、スナップショットを要件外だったとしてもDBに残すなどの備えを作っておく。
    • コード中に拡張ポイントをいくつか用意しておく。
  • ドキュメントを書ける。
    • フレームワークや言語を作る人の書くコードと、業務をシステムに落とし込む人のコードはまったく別物です。前者は一般的な問題に対してコードを書くのに対して、後者はより具体的な問題に対してコードを書くので、そのコードの背景を明確に記述しなければ第三者には理解できなくなります。

うん、基本的には誰でも理解できるプログラム(を書ける|に書き直せる)のがよいプログラマだと僕は思ってます。職業プログラマって言うのは、パズルを作る人じゃないですから。自分がプログラムを書かなくなった時に、いつでもそのプログラムを他の人に引き渡せるような状態にしておく事を心がけるのがよい職業プログラマですよね。

この手の記事って、そこらじゅうに散らばってるのでかぶっている事や矛盾してる事も沢山あるでしょうし、あくまで僕の見解という事で。