2013年1月29日火曜日

誰にでも読みやすいソースコードは存在しない

仕事でJavaで書いたソースコードを引き継いでもらうことになりました。

Javadocもまあそれなりに書いていますし、
きわどいところにはそれなりにコメントも入れています。

全てのメソッドは長くても50行かそこらですし、
クラスだって長くて300行かそこらです。

というか、
長いクラスはみんなJavaBeansです。

サイクロマチック数だって一桁をキープしています。

うんうん、
これなら読みやすいに違いありません。

あ、次の担当者の方を見つけました。
ちょっと読んでもらいましょう。

あれ?
何か顔が青ざめているような…




はいストップ!

今回の話題はこれです。

ずばり“読みやすいソースコード”とは何かについてです。

でもこれが読みやすいソースコードだとか主張する気はありません。

十人十色とはよく言ったもので、
読みやすいソースコードも十人十色だと言いたいからです。

ポイントと思われるのは、
よく言われる「凝ったテクニックの実装は読みにくい」という部分です。

確かにその通りという部分は大きいです。
IOCCC大好きな自分にとっては身近なことです。

でも*凝った*といわれるテクニックってどこからなんでしょう?


とりあえず具体例を、
どっちが読みやすいですか?

パターンA
hoge(1);
hoge(2);
hoge(5);
hoge(11);
hoge(14);
hoge(20);
hoge(21);
hoge(77);
hoge(100);

パターンB
int[] parameters = {1, 2, 5, 11, 14, 20, 21, 77, 100};
for (int parameter : parameters) {
    hoge(parameter);
}


全員がBを選ぶと信じたいところですが、
Aの方が良いという方がそれなりにいるようなのです。

だいたいこういう方は、
新たに関数を作るだけでアレルギー反応が出ます。

そりゃ4桁や5桁の行数にもなる関数を平気で作るわけです。
彼らにとってはその方が*読みやすい*んですから。

この例はかなりアンダーを攻めたものですけど、
色んな所で読みやすさのラインが登場します。

有名どころは以下でしょうか。
・構造化定理
・オブジェクト指向
・命名規則
・正規表現
・再帰関数
・関数型言語(っぽいこと)
※別に難易度順とかじゃありません。どっちかというとカテゴリー?

全てのプログラマーは、
この何次元にも展開された無数に渡るラインのどこかに立っています。

そして自分のいるラインに近い場所が読みやすいソースコードなわけです。
遠ければ遠いほど読みやすいにくいソースコードなわけです。

あまりに位置が遠いプログラマー同士が、
一緒に仕事をしたときに不幸が起こるのではないでしょうか。

あなたがもしも、
「読みやすいソースコードを書こう。」言ったことがあるのであれば、
それはどこの人達にとってですか?


汚いソースコードにも種類がある

久方振りの更新…
まずは誰かの記事の引用で手軽に書くとします。

というわけで、
GoTheDistanceより「コードで周りを動かせるエンジニアになろう」です。

でこの記事についてですが、
まさにその通りです。

特に反論もありません。
いやぁ、いい記事ですね!

はいおしまい、
帰った帰った…というわけにはいきません。

一応、釘を刺す的な意味で補足ができたらな~と思います。

主にあちらを読んで、
「汚いコードでもいいんだ!どんどん書いて動かしていこう!」
と脊髄反射している方に対してです。

何が言いたいかというと、
汚いコードにも二種類あるということです。

綺麗に書ける人が書く汚いコードと、
汚くしか書けない人が書く汚いコードです。

ここには超えられない壁が見えるくらいの違いがあります。
(と妄想しています。)

なんて言ったらいいのか…
汚くする仕方がまるで違うのです。

汚い部分をいざ掃除しようとなったとき、
ゴミをまとめてほうきで掃けばそのうち綺麗になる一人暮らしの部屋と、
放射線を撒き散らして対処に困り続ける核廃棄物のような違いです。

で、元々の意味での技術的負債に溺れて失速…
最高速度に達する前に減衰するかの如くです。

なので汚く*しか*ソースコードが書けない人は、
そこら辺は気に留めてみてくださいねというお話でした。

でないとそのスタートアップは殺されます



2013年1月7日月曜日

靴の整理

ダメになった靴を捨てないでいたら、
下駄箱がいっぱいになっていました。

初買いの靴が入らないので、
靴を一気に捨てることに。

結構あるのは分かっていましたが、
まさかビニール袋いっぱいになるほどとは思いませんでした。

ゴミ収集の方へ、
ごめんなさい。