l

2011年7月20日 星期三

下一個軟體也許會更好...嗎?

July 20 22:15~23:10

如果有一天你接到通知,告知你即將繼承某個遠房親戚的 1 千萬遺產,你會有怎樣的反應?這種天上掉下來的禮物,在欣然接受之前,要先調查一下,這筆『遺產』到底是正數,還是負數。萬一不小心繼承了之後,突然有個債主跑出來說這位遠房親戚欠了他 1 億元,現在要你這個繼承人還債,那可就衰呆了。

『遺產』這種東西,做軟體的人是最了解的,三不五時就需要與 legacy code 搏鬥。這些 legacy code 可能是別人贈送的,也可能是『昨日的你』送給『今日的你』的禮物,總之通常收到 legacy code 的人都不會太高興。這些 legacy code 怎麼看,怎麼不順眼,最好是能夠砍掉重練,才沒有包袱。

最近學弟們要開發一個新的系統,雖然可以在某個既有系統上繼續開發(擴充既有系統的功能),但是學弟選擇了『另起爐灶』,理由很多,但沒卻沒有一個理由可以說服 Teddy 的:
  • 原有系統因為某些架構上的限制,導致資料分別存在檔案與資料庫中,無法集中。
  • 原有系統的資料庫是使用另一個系統所設計的 schema(與另一個 AP 共用相同的 tables)。受限於這個 schema,有些功能不太容易實做。
  • 原有系統所使用的 Javascript framework 檔案容量太大,約 700 多 K(Teddy 內心獨白:700 多 K 會算 size 太大?!)。
首先先來盤點一下這個既有系統的資產負債表,首先看一下資產:
  • 已經有許多使用者在使用這個既有系統,而且反應不錯。
  • 最近一年多來既有系統有持續改善使用者介面的操作(提高 usability)與修正了很多個 bug,目前穩定性算是不錯。
  • 開發既有系統的時候有寫 unit tests (test coverage 有待調查)。
  • 開發既有系統的時候有做持續整合。
  • 開發既有系統的人雖然即將畢業,但是在離校之前有問題都還是可以立即詢問(就算離校之後也跑不了太遠...XD)。

至於負債部份大致上就是上面學弟所說的那三點。雖然有負債,但是要償還這些負債並非不可能的任務,也就是說資產減掉負債之後該既有系統的『淨值』還是正數,而且是正很多的正數(每股淨值大於 10 元...XD)。

***

學弟們目前還無法體會『軟體是長出來的 』之精神所在,Teddy 十分相信 Andy Hunt 與 Dave Thomas 所說的:『All programming is maintenance programming』,如果能把心態調整一下,轉換成思考『如何用軟體工程的方法來償還這些負債』,那麼這段還債的過程,對於軟體開發經驗的提昇將會有很大的幫助。

開發『真正給人用的軟體』是一種承諾,就好像養小狗,小貓一樣,總不能說小狗小時候很可愛,就很疼愛牠。等牠長大發現怎麼變得不可愛了,就讓牠去『流浪』。當年有首流行歌曲叫做『下一個男人也許會更好』,也許吧...但是如果連『這一個軟體都搞不太好』,那麼『下一個軟體會不會更好』就很難說了。

越來越有一種感慨,開發軟體的『心態』比技術與能力都還要來的重要。『心態正確』可以讓你做對事情,而技術與能力可以讓你把事情做對。如果兩者都具備,那就可以準備上華山論劍了。

***

友藏內心獨白:好好照顧既有系統也算是一種節能省碳的表現 。

6 則留言:

  1. 或許學長該告訴他當年紅及一時的Netscape重寫了整個程式發生了什麼悲劇?

    回覆刪除
  2. 這個問題在我們實驗室也遇到了,
    ezCMS現在是不斷地refactoring,
    而不是重寫,
    但說真的,
    感覺就像是蓋比薩斜塔。

    回覆刪除
  3. "Joel on Software"有一篇就在講沒事不要砍掉重練 (不過以前我也是個伐木工人就是了)

    回覆刪除
  4. 年輕人當然會選擇打掉重做嘛,正所謂鷹揚年少,氣吞牛斗
    不過打掉重做就會有很多麻煩,這要被現實折磨過的老人才能有深切體會,不然夏亞就不會說:真不想承認這是因為年輕而犯的過錯XD

    回覆刪除
  5. 以學習來說,打掉重練其實可以學到的東西最多,從無到有生出來。維運就系統穩定了,框架就在那邊,有個框限制住。革命不全然是不好。

    回覆刪除
  6. 我寫出了Win 10系統跟我維持更新Win 10系統,如果你是老闆,你會錄用哪個人?

    回覆刪除