作者: TonyQ (沉默是金。) 看板: Soft_Job
標題: Re: [閒聊] 你在開發程式時,是重視績效還是品質
時間: Sat Sep 17 00:48:33 2011
※ 引述《thinkniht (不下棋=.=)》之銘言:
: 在改別人寫的舊程式時
: 有的人會只改有變的地方
: 舊有的錯誤就不管他
: 有的人會寧願多花點時間做比較大的翻新
: 連原本舊程式沒有被人發現的問題都會想一起清掉
: (當然...這是在要翻修的範圍沒有過大的情況下)
: 各位...你們的話會傾向於哪種類型呢?
碰到這種問題我通常是這樣想:
1.It's a must have or nice to have ?
舊有的錯誤是多大的錯誤
錯誤對我來講就是顯著有邏輯上謬誤的地方,或者跑了會噴Exception的,
如果只是架構的不一致,那不算是一種錯誤,那是複雜度成本。
一般來講 nice to have 只有在我很有餘裕時才會去做,
然後身為一個工程師我們要很謹慎看待 must have,
對我們來講很多其實可以是 nice to have 的東西,
都會被我們當成 must have。
這個判斷是經驗跟 domain 累積下來的,沒有公式,沒有法則,
做久了你就是會知道什麼架構之後會一直噴 exception ,
而且你還會知道等他出事時你一定沒辦法好好處理,
所以你要在這個當下把它處理掉。
(ex. OR-Mapping 的 relation 設計,如果弄錯了基本上很難回頭。)
你也會知道什麼事情是即使他隨時會炸掉,但是他炸掉影響不大,
你也可以從容的把它修掉,所以可以歸類到 nice to have 。
(ex. 你知道 system 有某情境下的 cache issue ,但當他發生的時候,
你頂多要使用者重新整理來清 cache ,且使用者還是可以接受。)
2.Eat your own bug.
蝴蝶效應是這樣用的,即使是更正一個你底下的 typo ,
都有可能在遙遠的彼方別人寫得部份造成更大的 bug,
你能夠負責多大範圍的改動?
但假如你今天跟我一樣,在一個 framework 商工作,
已經累積了幾千幾萬個 user 在用同一份的 api 工作,
不要說修改 public method 啦,光是要新增一個 public method ,
加了你就不用想要移掉了,這時候你敢不敢改?
假設你會改動的地方都是 private method ,ok 我完全舉雙手同意你改,
只要你能每個 private method 都仔細測過。
我個人過去的經驗讓我自己非常情緒化的痛恨程式設計師講一句話,
「這只是改個錯字而已,絕對不會出錯的。」
對,我自己講過幾十次,然後我也被這句話打臉打了不下十次,
改個錯字真的還是會改出 bug ,還是過 production 之後。
即使是我看過最強的設計師都會瞎眼的打出 typo ,
良心建議大家對自己的 code 信心降一點比較好,這絕對是血淚談。XD
Everything your change , everything you need to test it.
已經存在的程式碼如果存在很久,那表示它已經跟環境磨合過了,
除非你有辦法從蛛絲馬跡看出這東西根本沒人用,
或者這東西是剛寫出來沒多久還不是很穩定的東西。
不然我覺得這個問題真正的問法是,
你有時間好好的把所有你改到的code 用到的地方都測過一次嗎?
如果答案是 yes 你有時間,你也願意作。那就去吧。我不會阻止你。
即使我知道大部分的狀況下,即使你真的做了還是會有不預期的 bug ,
但是至少你已經比 80% 問這個問題的工程師來得有誠意太多了。
永遠記得,沒有任何的 test 能比得上 production ,
上了 production 還沒出事情的 code 他們都是閃爍著金色光環的程式碼。
即使他是錯得東西,只要他真的上線的夠久,
自然有其他的地方會將錯就錯...這就是這件事情恐怖的地方。
而新寫得東西,還只是 Lv1 還沒被磨過的粗糙程式碼,
需要時間把他們磨成像樣的東西,
這也是其中一個總是優先考慮用 lib 取代自己做的理由之一。
我覺得這個問題的問法如果換成這個形式,
要或不要應該是你可以很清楚判斷得出來的才是。
這個問題其實很簡單的,如果你用的方向跟我思考的方向一樣的話。
觀察他們影響到哪些地方,你有沒有能力測試他們,
還有你的環境允不允許這件事情帶來的不穩定性。
一般來講,如果是我個人自己的專案,我非常不介意大改,
只要我後續還有時間可以處理這些出來的問題。
對公司或者客戶的專案,我會採取相對保守的態度。
這是對風險管理的策略問題。
--
我:一半的日子讓你說,我聽你說你的所有 [1;37;42m______________________________________
[1;37;42m______________________________________一半的日子我想說,對你說過去的所有:我
[1;32m_______________________________________________________
在討論中妥善扮演兼具聆聽與分享的角色,是我們一生的課題。
[1;32m_______________________________________________________
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 198.203.175.175
※ 編輯: TonyQ 來自: 198.203.175.175 (09/17 00:58)
推 bndan:推~雖然上工沒幾天 但我覺得這部份是跟學生時期最大的差距 09/17 01:16
推 ericinttu:紅字那一段, 可能是負負得正帶來的效應. 當自己只看到一 09/17 03:42
→ ericinttu:個負就覺得它是錯的而想改的話, 改下去錯的人就是自己. 09/17 03:43
→ ericinttu:那麼要怎麼改呢? 思維要先從"正向"的邏輯改成"負向"邏輯 09/17 03:44
→ ericinttu:, 確認會動到的相關地方(通常比想像來的大). 再去改. 09/17 03:45
推 lovdkkkk:傳說中的 side-effect programming !? 09/17 03:49
推 zanyking:Side Effect Programmer很多啊,有沒有看過寫Java的 09/17 06:25
→ zanyking:開出來的Method argument都是Map,一個Call Hierarchy 09/17 06:25
→ zanyking:就是一開始一個Map一路往下丟,method回傳值是boolean 09/17 06:26
→ zanyking:所以那個Map會在途中加料好多次,最後還存在lifecycle 09/17 06:27
→ zanyking:Context 裡,同一個Lifecycle 裡的都用它。 09/17 06:28
→ zanyking:如果你把上面的敘述裡的Map換成噴,method換成pig。 09/17 06:29
→ zanyking:那就是這些開發者喜歡看見上一隻拉的等於下一隻吃得, 09/17 06:30
→ zanyking:最後剩下來的噴渣混合物還要保存下來等下一輪繼續吃。 09/17 06:31
推 ericinttu:但是大家都有東西可以吃啊 (爆) 09/17 06:36
沒有留言:
張貼留言
您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.