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