|
我在做什么
曾經(jīng),我試過(guò)接到一些需求。一眼帶過(guò)后,腦袋馬上隨著高昂的斗志沉溺在代碼的世界中 ,馬不停蹄地敲著鍵盤(pán)直到最后測(cè)試的完成。我從思緒中恢復(fù)過(guò)來(lái),乍一看自己寫(xiě)的功能,和需求差了十萬(wàn)八千里,我TM都在干嘛?
除此之外,我還見(jiàn)過(guò)類(lèi)似的很好笑的事情。有一個(gè)程序員,經(jīng)理提了需求,然后他在那里折騰了一天。結(jié)果不但沒(méi)做出來(lái),而且和實(shí)際需求都是完全搭不上調(diào)。經(jīng)過(guò)詢(xún)問(wèn)發(fā)現(xiàn),他不知道經(jīng)理說(shuō)了什么,也不知道自己到底在做什么。
代碼的世界可能是昏天暗地的,但是我們的思維不能這樣隨之混亂,否則一切都會(huì)前功盡棄。所以我現(xiàn)在編寫(xiě)程序的時(shí)候,經(jīng)常會(huì)想一下:我要做什么,我在做什么。更好的方法是把詳細(xì)需求落實(shí)到文檔,并時(shí)刻核對(duì)文檔。
大局為重
2-8法則告訴我們,一個(gè)項(xiàng)目核心的功能只有很少,其它大部分都是對(duì)核心功能輔助或增強(qiáng)的。但當(dāng)任務(wù)分發(fā)下來(lái),我手頭總有一些自己很想開(kāi)發(fā)的模塊,不過(guò)它們不屬于那20%。我以前經(jīng)常會(huì)在這些感興趣的模塊上花費(fèi)很多時(shí)間和精力。
結(jié)果項(xiàng)目快要到上線(xiàn)期限,主要的功能卻沒(méi)開(kāi)發(fā)完成,其它一些不起眼的功能卻做得很好,但為此項(xiàng)目不得不延期了。如果反過(guò)來(lái),只要對(duì)整體功能預(yù)期不會(huì)有太大偏差,可以將就的先上線(xiàn)。重要一點(diǎn)是:即使功能還有遺漏,但項(xiàng)目可以上線(xiàn)了,老板自然不會(huì)太追究,自己工作也能圖個(gè)安心。如果不知道那些功能模塊是最重要的,先問(wèn)問(wèn)經(jīng)理。
人總是喜歡做一些自己感興趣或者有挑戰(zhàn)的事。不過(guò)在這方面,為了項(xiàng)目和團(tuán)隊(duì)著想,應(yīng)該盡量壓制這種誘惑。
性能永遠(yuǎn)不是優(yōu)先考慮的問(wèn)題
我從來(lái)不會(huì)一開(kāi)始就考慮性能問(wèn)題。如果項(xiàng)目成本很低,甚至到項(xiàng)目結(jié)束時(shí),如果沒(méi)有感覺(jué)到明顯的性能問(wèn)題,也不會(huì)去管。要知道現(xiàn)在已經(jīng)不是DOS的年代,CPU的計(jì)算能力很高,但成本很低了。重要一點(diǎn)是,如果只針對(duì)提升性能對(duì)代碼做改動(dòng),很容易破壞代碼的復(fù)用性和可維護(hù)性。而返過(guò)來(lái),提高了代碼的復(fù)用性和可維護(hù)性,則很容易提高性能。
下面有一個(gè)php的代碼實(shí)例,功能是幫助用戶(hù)重置密碼(代碼為了簡(jiǎn)單說(shuō)明問(wèn)題,請(qǐng)不要太在意一些無(wú)關(guān)的細(xì)節(jié))
requestResetPassword是接收用戶(hù)重置密碼的請(qǐng)求并且做了相應(yīng)的檢查。為了更好的復(fù)用性,我將重置密碼的操作單獨(dú)分配到一個(gè)新的resetPassword的函數(shù),更改完密碼的后再調(diào)用sendEmail向用戶(hù)發(fā)送一封通知郵件。
01 /**02 * 用戶(hù)請(qǐng)求重置密碼的接收器03 */04 function requestResetPassword() {05 //檢查用戶(hù)是否存在06 if( !checkUserExists( $_GET['userid'] ) ) {07 exit('抱歉,用戶(hù)不存在,請(qǐng)確認(rèn)用戶(hù)帳號(hào)。');08 }09 resetPassword( $_GET['userid'] );10 //最后向用戶(hù)發(fā)送一封郵件11 sendEmail( $_GET['userid'], '重置密碼成功', '新的密碼是xxxx' );12 exit('新密碼已經(jīng)發(fā)送到你的郵箱。');13 }14 15 16 /**17 * 幫助用戶(hù)重置密碼18 */19 function resetPassword( $userid ) {20 //檢查用戶(hù)是否存在21 if( !checkUserExists( $userid ) ) {22 return false;23 }24 25 //進(jìn)行重置用戶(hù)密碼的操作26 //略...27 return true;28 }29 30 31 /**32 * 向用戶(hù)發(fā)送一封郵件33 */34 function sendEmail( $userid, $title, $content ) {35 //檢查用戶(hù)是否存在36 if( !checkUserExists( $userid ) ) {37 return false;38 }39 40 //發(fā)送郵件操作41 //略...42 return true;43 }44 45 46 /**47 * 檢查某個(gè)用戶(hù)是否存在48 */49 function checkUserExists( $userid ) {50 $user = getUserInfo( $userid );51 return !empty( $user );52 }53 54 55 /**56 * 獲取某個(gè)用戶(hù)的數(shù)據(jù)57 */58 function getUserInfo( $userid ) {59 //假設(shè)我有一個(gè)query的函數(shù),它用來(lái)查詢(xún)數(shù)據(jù)庫(kù)并返回?cái)?shù)據(jù)60 $user = query( "SELECT * FROM `user` WHERE `uid`=" . intval( $userid ) );61 return is_array( $user ) ? $user : array() ;62 }
it知識(shí)庫(kù):我現(xiàn)在是這樣編程的,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。