トップ(最新)

nDiki : 2008年06月14日

2008年6月14日 (土)

スクラッチから書き直したくなるプログラマは、書き直したプログラムもまたスクラッチから書き直したくなる。 このエントリーを含むはてなブックマーク

自分がプログラムをスクラッチから書き直したいと思った時、またスクラッチから書き直したいと言われた時のためにまとめておこう。

@ スクラッチから書き直したい理由

スクラッチから書き直したいと思う理由はだいたいこうだ。

  • もっと良くできると思うから
    • 「もっと良いやり方がある」「自分ならもっとうまく書ける」
    • 「統一されていない」「もっと汎用的にできる」
    • 「今なら新しい開発環境(・新しい実行環境・新しいライブラリ・新しい言語)を使って簡単によりいいものが素早く作れる」
  • よくわからないいから
    • 「何をやっているかわからない」「どう直していいかわからない」
    • 「もう直しようがない」
    • 「作り直した方がはやい」
  • あいつのだから
    • 「あいつが書いたコードだから」

どんなプログラムでも開発が進み詳細がわかってくると、こうしておけば良かったと思う点がでてくるものだ。

さらに、他人が書いたプログラムだとよく分からない。

It's harder to read code than to write it. (プログラムというのは書くより読むほうが難しい。) -- Things You Should Never Do, Part I - Joel on Software

いっそ作り直してしまいたいと思うのはどの開発者でもあることだ。

@ スクラッチから書き直してはいけない理由

しかし多くの場合スクラッチから書き直すことはリスクとデメリットだらけだ。

  • 今までの投資を失うから
    • 「そのプログラムには検討・不具合修正に膨大なエネルギーが投入されている」
    • 「ユーザは今のプログラムのために学習コストをかけている」
  • 時間がかかるから
    • 「その新しいプログラムが今と同じレベルの価値を実現するまでは時間がかかりすぎる」
    • 「スクラッチし直してから投入したのでは、もはや価値を失っている可能性が高い」
  • 前轍を踏むから
    • 「どう直していいかわからないと思う時は往々にして目標がわかっていない。目標がわからずに作ったものは結局またスクラッチから書き直したくなる」
    • 「あなたが連続的にプログラムを修正できないというのなら、どちらにせよ新しく作り直したプログラムもあなたは連続的にプログラムを修正できない」(リグレッションテスト習慣はあるの? リファクタリングスキルはあるの?)

ほとんどの場合は、漸進的に今のプログラムを修正・改良していった方が得策なのだ。

@ スクラッチから書き直してもいい場合

そうはいってももちろんスクラッチから書き直した方が合理的な場合もある(書き直してはいけない場合も書き直した方が合理的だと思ってしまうわけではあるが)。

それは次のような場合だろう。

  • ソースコードがない場合 (ディスククラッシュした。利用する権利がなくなった)。
  • もはや開発環境も実行環境も手に入らず、移植も困難な場合。
  • 個人的な趣味のプログラムの場合。
  • スクラッチから書き直したプログラムに対して、また「スクラッチから書き直したい」という欲求にかられない自信がある場合。

本当にスクラッチから書き直した方がよい場合は止める理由はない。

さてこの記事をスクラッチから書き直したいと思う時がきませんように。

@ 参考


[ ソフトウェアプロジェクトマネジメント ]

スポンサード リンク


今日のさえずり - 紳士服屋の完全閉店は信用ならない このエントリーを含むはてなブックマーク


14:00 床屋 - 前髪の長さの希望が伝わらなかった このエントリーを含むはてなブックマーク

いつものアドバンストヘアーナカタニで。

4月5日以来、2カ月強ぶり。

前回のメモをもとに「前髪を額に押し当てた時に先が眉毛ぐらいに」とオーダー。 そしたら、前髪をおさえて「それだとあまり切らないですね」と言われたので、「では気にしないでもっと切ってください」とリクエスト。

でほとんど寝てしまった。

家に帰って前髪を額に押し当ててみたら目のところまできた。

どうオーダーすればよいのだ?


[ 6月14日全て ]

スポンサード リンク

■よく検索されるキーワード

提案書(65) perl(54) 書き方(49) torrent(49) linux(40) debian(35) アジェンダ(33) 使い方(31) windows(31) x31(30) svn(26) ssh(25) tc-1(25) サンプル(23) usb(22) java(22) ganttproject(21) mp980(20) 画像(20) tortoisesvn(20) インストール(19) 手帳(19) cvs(19) 壁紙(19) a6(18) thinkpad(17) subversion(16) 石垣祐馬(16) ほぼ日手帳(16) 作り方(16) 修理(16) 動画(15) 日本語(15) 充電式カイロ(15) ノート(14) ダイソー(14) 方眼(14) ヨドバシ(14) リフィル(13) 秋葉原(12) ダウンロード(12) apache(12) アジェンダとは(12) iwgp(12) 設定(12) c#(11) mp3(11) ヨドバシカメラ(11) テンプレート(11) 無線lan(11) ubuntu(11) nikon(11) dropbox(11) システム手帳(11) porter(11) クラリチン(10) 筆まめ(10) centos(10) ヤマダ電機(10) window(10) ポメラ(9) フリー(9) リポジトリ(9) イメージテック(9) wiki(9) flex(9) xampp(9) フォーマット(9) terastation(8) flash(8) gmail(8) ドラマ(8) proxy(8) rcs(8) 無料(8) 温度計(8) トランサミン(8) constant(8) truecrypt(8) google(8)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.686715s / load averages: 0.31, 0.22, 0.24
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)