自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

成為更優(yōu)秀的程序員:退后一步看問(wèn)題

移動(dòng)開(kāi)發(fā)
請(qǐng)把下面的[客戶]、[老板]或其它任何東西換成你想要的名稱。 一天,在工作中 Bug #3890 來(lái)自客戶: 有個(gè)程序出現(xiàn)了錯(cuò)誤,程序提示說(shuō)SpeedCalculator::compute()里出現(xiàn)了除零情況。

 

[[117718]]

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

一天,在工作中

有個(gè)程序出現(xiàn)了錯(cuò)誤,程序提示說(shuō)“SpeedCalculator::compute()里出現(xiàn)了除零情況”。

請(qǐng)盡快修復(fù)!

你打開(kāi)SpeedCalculator.php,發(fā)現(xiàn):

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

修復(fù)bug

簡(jiǎn)單!是誰(shuí)寫(xiě)的這段代碼,他怎么不用一點(diǎn)腦子!

  1. public function compute() { 
  2.     if ($this->time == 0) { 
  3.         return 0; 
  4.     } 
  5.     return $this->distance / $this->time; 
  6. }

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

后來(lái),同樣的bug又出現(xiàn)在了RatioCalculator和MoneyCalculator中,當(dāng)把它們也修正后,團(tuán)隊(duì)中的所有人都認(rèn)為,再也不會(huì)有這樣的問(wèn)題出現(xiàn)了,這是最后一次!代碼現(xiàn)在又是堅(jiān)固無(wú)比了!

一個(gè)月后,另外一個(gè)bug出現(xiàn)了。這次程序沒(méi)有崩潰,但客戶在報(bào)表中發(fā)現(xiàn)了錯(cuò)誤的計(jì)算結(jié)果,是因?yàn)槟蔷鋜eturn 0;的代碼修改。

退后一步看問(wèn)題

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

為什么這種事情會(huì)發(fā)生?

因?yàn)?this->time被賦值成 0.

簡(jiǎn)單!讓我們阻止這種事情發(fā)生。

  1. public function setTime($time) { 
  2.     if ($time == 0) { 
  3.         throw new InvalidArgumentException("Invalid value"); 
  4.     } 
  5.     $this->time = $time; 
  6. }

這樣,修改的效果不是更好嗎?你保證了數(shù)據(jù)的正確性。但這樣客戶并不是很高興,因?yàn)楫?dāng)他輸入0時(shí),程序會(huì)跳到一個(gè)錯(cuò)誤頁(yè)面。

那么,你應(yīng)該在控制層捕捉這個(gè)錯(cuò)誤,讓用一個(gè)漂亮的錯(cuò)誤頁(yè)面顯示它們。

當(dāng)做完了這些,你認(rèn)識(shí)到,在RatioCalculator和MoneyCalculator中,你也應(yīng)該這樣做,于是你拷貝/張貼,修改了它們兩個(gè)。

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

再退后一步

如果,我們不是修復(fù)這個(gè)不過(guò),而是發(fā)現(xiàn)了一個(gè)普遍的要求?

為什么客戶會(huì)輸入 0 ?因?yàn)樗噶藗€(gè)錯(cuò)誤。

這對(duì)我們的要求是什么?

1. 我們只需要這次防止用戶輸入 0 來(lái)避免“speedCalculationForm = 0”嗎?

2. 我們只需要讓“speedCalculationForm”里的數(shù)據(jù)合法就行了嗎?

3. 還是,我們要對(duì)所有的用戶輸入繼續(xù)校驗(yàn)?

為什么不開(kāi)發(fā)一個(gè)校驗(yàn)工具包呢?

且慢!不要自己去開(kāi)發(fā)一個(gè)!請(qǐng)退后一步想想,深呼吸,去使用現(xiàn)有的第三方校驗(yàn)框架。

關(guān)于需求

我們,程序員,熱愛(ài)計(jì)算機(jī)技術(shù)。當(dāng)你的客戶或老板,大聲的脫口說(shuō)出他們想要的東西時(shí),我們無(wú)法阻止,我們只能想象如何去實(shí)現(xiàn)它們。

但是,我們需要用更全面的眼光看問(wèn)題。如果我們想對(duì)自己的工作更負(fù)責(zé),我們應(yīng)該去理解為什么他們會(huì)提出這樣的需求,而不是著急著去尋找解決方案。當(dāng)然,這可能會(huì)占用你更多的精力。

是客戶真的需要“一個(gè)會(huì)躲避鼠標(biāo)點(diǎn)擊的閃光的按鈕”嗎?還是他們需要的是另外一個(gè)功能——他們不了解的功能,需要你去幫他們定義的功能?這種事情同樣會(huì)發(fā)生在你自己身上!你真的需要用程序打開(kāi)一個(gè)文件,往里面寫(xiě)入一些信息嗎?還是,你真正需要的是一個(gè)日志系統(tǒng)?

退后一步看問(wèn)題,看更大的藍(lán)圖、更完整的信息。雖然你是一個(gè)很優(yōu)秀的編程高手,但編程的目的是為了解決問(wèn)題。

本文鏈接:http://www.cocoachina.com/gamedev/misc/2014/0807/9329.html

責(zé)任編輯:chenqingxiang 來(lái)源: cocoachina
相關(guān)推薦

2014-08-05 09:15:55

程序員

2012-12-28 09:58:50

程序員代碼編程

2016-03-28 10:01:45

優(yōu)秀程序員關(guān)鍵閱讀

2017-10-22 16:16:03

程序員編程代碼

2016-03-04 11:06:20

更優(yōu)秀程序員

2021-02-05 14:56:39

YouTube編程程序員

2015-08-03 09:09:20

程序員腦子快

2014-03-03 15:32:32

程序員資源

2015-11-06 14:54:10

程序員習(xí)慣

2020-05-07 15:14:10

程序員技能開(kāi)發(fā)者

2017-09-21 09:44:00

編程程序員軟件開(kāi)發(fā)

2011-05-03 08:54:36

2009-07-02 09:42:34

JSP程序員

2010-12-27 09:24:45

JSP程序員

2014-12-22 09:59:05

程序員

2021-01-03 15:07:16

開(kāi)發(fā)編程語(yǔ)言后端.

2016-01-29 10:03:43

優(yōu)秀程序員黃金法則

2009-07-24 13:09:57

ASP.NET程序員

2016-04-21 17:50:26

程序員優(yōu)秀程序員

2017-11-14 21:30:15

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)