民初思韻網

加入收藏   設為首頁
選擇語言   簡體中文
你好,請 登陸 或 注冊
首頁 人文思韻 傳奇人物 歷史思潮 時代作品 話題討論 國民思韻 民初捐助 賬戶管理
  搜索  
    人文精神 >>> 技術話題—商業文明的嶄新時代
字體    

成為更優秀的程序員:退后一步看問題
成為更優秀的程序員:退后一步看問題
www.techug.com     阅读简体中文版

  英文原文:Be a better programmer: take a step back

  請把下面的[客戶]、[老板]或其它任何東西換成你想要的名稱。

  一天,在工作中…

Bug #3890 來自客戶:

有個程序出現了錯誤,程序提示說“SpeedCalculator::compute ()里出現了除零情況”。

請盡快修復!

  你打開SpeedCalculator.php,發現:

public function compute () {
    return $this->distance / $this->time;
}

  修復 bug

  簡單!是誰寫的這段代碼,他怎么不用一點腦子!

public function compute () {
    if ($this->time == 0) {
        return 0;
    }
    return $this->distance / $this->time;
}

  你就這樣修改完了,這個 bug 只用了你 2 分鐘。

  后來,同樣的 bug 又出現在了RatioCalculatorMoneyCalculator中,當把它們也修正后,團隊中的所有人都認為,再也不會有這樣的問題出現了,這是最后一次!代碼現在又是堅固無比了!

  一個月后,另外一個 bug 出現了。這次程序沒有崩潰,但客戶在報表中發現了錯誤的計算結果,是因為那句return 0;的代碼修改。

  退后一步看問題

  如果,我們不是匆匆忙忙的修改,而是退后一步,以更寬廣的視野看待些問題。

為什么這種事情會發生?

因為$this->time被賦值成 0.

  簡單!讓我們阻止這種事情發生。

public function setTime ($time) {
    if ($time == 0) {
        throw new InvalidArgumentException ("Invalid value");
    }
    $this->time = $time;
}

  這樣,修改的效果不是更好嗎?你保證了數據的正確性。但這樣客戶并不是很高興,因為當他輸入 0 時,程序會跳到一個錯誤頁面。

  那么,你應該在控制層捕捉這個錯誤,讓用一個漂亮的錯誤頁面顯示它們。

  當做完了這些,你認識到,在RatioCalculatorMoneyCalculator中,你也應該這樣做,于是你拷貝/張貼,修改了它們兩個。

  稍等一下,客戶更喜歡讓錯誤信息顯示成橘黃色的,而不是紅色的。于是,你再次拷貝/粘貼,再次修改一遍。

  再退后一步

  如果,我們不是修復這個不過,而是發現了一個普遍的要求?

  為什么客戶會輸入 0 ?因為他犯了個錯誤。

  這對我們的要求是什么?

  • 我們只需要這次防止用戶輸入 0 來避免“speedCalculationForm = 0”嗎?
  • 我們只需要讓“speedCalculationForm”里的數據合法就行了嗎?
  • 還是,我們要對所有的用戶輸入繼續校驗?

  為什么不開發一個校驗工具包呢?

  且慢!不要自己去開發一個!請退后一步想想,深呼吸,去使用現有的第三方校驗框架。

  關于需求

  我們,程序員,熱愛計算機技術。當你的客戶或老板,大聲的脫口說出他們想要的東西時,我們無法阻止,我們只能想象如何去實現它們。

  但是,我們需要用更全面的眼光看問題。如果我們想對自己的工作更負責,我們應該去理解為什么他們會提出這樣的需求,而不是著急著去尋找解決方案。當然,這可能會占用你更多的精力。

  是客戶真的需要“一個會躲避鼠標點擊的閃光的按鈕”嗎?還是他們需要的是另外一個功能——他們不了解的功能,需要你去幫他們定義的功能?這種事情同樣會發生在你自己身上!你真的需要用程序打開一個文件,往里面寫入一些信息嗎?還是,你真正需要的是一個日志系統?

  退后一步看問題,看更大的藍圖、更完整的信息。雖然你是一個很優秀的編程高手,但編程的目的是為了解決問題。

2015-05-19 00:32

歡迎訂閱我們的微信公眾賬號!
春秋茶館訂閱號
微信號 season-tea(春秋茶館)
每天分享一篇科技/遊戲/人文類的資訊,點綴生活,啟迪思想,探討古典韻味。
  清末民初歷史人物  民初人物
為元首清廉不阿至情至性
林森(1868年—1943年8月1日)字子超,號長仁。福建閩侯人。1868年出生于福建省閩侯縣尚干鄉,1884年于臺北電信局工作。1902年到上海海關任職,其間參加反清活....
傳奇人物傳記 風華絕代 物華天寶
此間選取古往今來傳奇人物的傳記與軼事,事不分大小,趣味為先,立意新穎,足以激越古今。
資助民初精神網
        回頂部     寫評論

 
評論集
暫無評論!
發表評論歡迎你的評論
昵稱:     登陸  註冊
主頁:  
郵箱:  (僅管理員可見)

驗證:   验证码(不區分大小寫)  
© 2011   民初思韻網-清末民初傳奇時代的發現與復興   版權所有   加入收藏    設為首頁    聯繫我們    1616導航