2006年06月24日(土)

プログラムは二度書け

テーマ:コーディング
私がこのブログに記事を書くときには、まず内容を考えてから書き始める。しかし、書いているうちに、内容が最初に考えていたものと徐々に変わっていくようなことがある。「書く」ということで、意見や主張が頭の中で整理され、考えもしなかった結論に至ることもある。

「書く」ということは、「何かを伝えるための行為」であるだけではなく、「何かを知るための行為」でもあるのかもしれない。

結城浩氏平鍋健児氏 は、ソフトウェア開発でも同様のニ面性が見られることを指摘している(※)。もちろん、どんなソフトを作るかという大枠(企画、要件)は、最初に決める。しかし、具体的にどのように作るかということ(設計)は、実際にプログラムを書きながら見つけていく方が現実的(効率的かつ低リスク)であることが多い。


しかし、本来、誰かに何かを伝えようとすることと、自分が何かを知ろうとすることは全く違う。そういう意味では、この2つの「書く」という行為は、明確に区別して理解すべきかもしれない。

例えば、数学の試験問題を解くことを考えれば分かりやすい。答えを導くために紙の上で行う「筆算」は、まさに「知るために書く」という行為である。しかし、最終的に解答用紙に残すべきなのは、「筆算の跡」ではなく、綺麗にまとめられた「数式」だ。つまり、別途「伝えるために書く」という行為が必要なのである。

暗算が得意な人なら「筆算」は不要かもしれない。同様に、優れたプログラマであれば、一度の「書く」という行為で、これらの2つの目的を達せられるだろう。しかし、普通のプログラマにとっては、それはなかなか難しいことである。

実際、「筆算の跡」がそのまま残ってしまったようなソースコードは、世の中に溢れている。「もっと単純に書けるのに、なんでこんなに複雑な書き方をしているのだろう?」と思うような記述の多くは、プログラミング中に試行錯誤しながら何度も書き直したものが、そのまま残っているのだろう。


「知るため」に書かれたコードは、密林を切り開きながら作った道のように曲がりくねっている。密林を抜ければそれでいいじゃないか、と思うかもしれない。しかし、その道を後から通る者(コードを保守する者)のことも考えて欲しい。見通しの悪い道では、後から来る人がいつ獣(バグ)に出くわすか分からない。

試行錯誤によって道を切り開くことができたら、次には、その道を綺麗に整えることを考えるべきである。プログラムが動いただけで安心してはいけない。振り返ってみたら、真っ直ぐできるはずのところが曲がっていたりするものだ。

コードを綺麗にするということ自体は、そう難しいことではない。深呼吸をしてコードを読み返すだけでも、直すべきところをいくつか発見できるだろう(もちろん、美しいプログラムとはどういうものか、ということが分かっていることが前提だが)。より本格的に取り組むなら、「リファクタリング 」について学ぶとよいだろう。

あとは、コードを他の人に見せ、指摘してもらうことである。もし、自分のチームに、ソースコードをレビューしたり、ペアプログラミングを行ったりする習慣がないのであれば、それらを取り入れてみるのもいいだろう。

応援のクリックお願いします →



※下記リンクを参照
結城浩氏「ソフトウェアは、私たちの想像よりもずっと複雑」
平鍋健児氏「全体は詳細に先行するか?あるいは、「作り出す」ことの中心について。」



■関連記事
真夜中のコード
リファクタリング ~ 動いているプログラムを触る



結城浩のPerlクイズ
結城浩のPerlクイズ
posted with amazlet on 06.06.24
結城 浩
ソフトバンククリエイティブ (2002/08)
売り上げランキング: 302,856


オブジェクトハンドブック〈2002〉
永和システムマネジメントオブジェクト倶楽部 平鍋 健児
ピアソンエデュケーション (2001/10)
売り上げランキング: 55,223
おすすめ度の平均: 4.25
4 OOのことを幅広く紹介している参考書
5 役には立たないが面白いヨ
4 オブジェクト指向のデスクトップリファレンス


AD
いいね!した人  |  コメント(0)  |  リブログ(0)

argvさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

コメント投稿

AD

Ameba人気のブログ

Amebaトピックス

    PR

    ブログをはじめる

    たくさんの芸能人・有名人が
    書いているAmebaブログを
    無料で簡単にはじめることができます。

    公式トップブロガーへ応募

    多くの方にご紹介したいブログを
    執筆する方を「公式トップブロガー」
    として認定しております。

    芸能人・有名人ブログを開設

    Amebaブログでは、芸能人・有名人ブログを
    ご希望される著名人の方/事務所様を
    随時募集しております。