程式碼整潔之道
簡介:
本書是程式設計大師“Bob 大叔”40餘年程式設計生涯的心得體會的總結,講解要成為真正專業的程式設計師需要具備什麼樣的態度,需要遵循什麼樣的原則,需要採取什麼樣的行動。作者以自己以及身邊的同事走過的彎路、犯過的錯誤為例,意在為後來者引路,助其職業生涯邁上更高臺階。
本書適合所有程式設計師閱讀,也可供所有想成為具備職業素養的職場人士參考。
第二章:說“不”
專業人士敢於說明真相而不屈從於權勢。
專業人士有勇氣對他們的經理說“不”。
2.1 對抗角色
不論是專案經理還是程式設計師,都有其工作職責所在。你的經理要求你在明天之前完成登入頁面,這是他在準求和捍衛的一個目標,是在盡他的工作職責。可是如果你明知道第二天之前不可能完成登入頁面,而嘴上還說著“好的,我會試試的”,那麼便是你失職了。
這時候,盡職的唯一選擇就是去說“不,著不可能”。
來看幾段對話:
對話一:
P經理:“你在明天之前要完成那個登入頁面,”
小M(程式設計師):“噢,喔!要那麼快啊?那好吧,我會盡量試試。”
P經理:“好極了!謝謝。”
看似很和諧的對話,其實雙方都不夠專業。P經理以為你明天會完成,而你也許會真的嘗試去完成預判一天時間根本無法完成的任務。
這樣談話避免了爆發衝突,但對解決問題沒有絲毫幫助。
對話二:
P經理:“你在明天之前要完成那個登入頁面,”
小M(程式設計師):“噢,抱歉經理,這麼短時間完成不了的。”
P經理:“那你覺得什麼時候能完成呢?”。
小M(程式設計師):“再過兩週怎麼樣?”
P經理:(在他的本子上記了幾筆)“好的,謝謝。”
這樣對話確實輕鬆,但其中的問題也很嚴重,大家表現得極不專業。
雙方都沒嘗試尋求最佳的可能結果。
對話三:
P經理:“小M,你在明天之前要完成那個登入頁面。
”小M:“不,P經理,這個活要兩週才能完成。”
P經理:“兩週?架構師估計這隻要3天,而你已經花了5天時間了!”
小M:“架構師們錯了,P經理。他們是在接到產品銷售需求前做的預估。我至少還需要10天才能做完。你沒看到我在wiki上更新的預估嗎?”
P經理:(表情嚴肅、沮喪得發抖)“小M,這可不行。客戶明天就要來看demo了,我必須向他們展示個能用的登入頁面。”
小M:“明天你需要登入頁面的哪部分能用?”
P經理:“我要整個登入頁面!必須要能登入。”
小M:“P經理,我可以給你做一個能登入的假頁面。這個現在就已經可以。但是頁面不會檢查使用者名稱和密碼。如果你把密碼忘記了,也還沒辦法發郵件告訴你。頁面頂部也還不能像時代廣場的大螢幕那樣有新聞欄在滾動,幫助按鈕和浮出說明都還不能用,它沒法為你儲存cookie以便下次登入,也不會設定任何許可權限制。但你確實可以登入。你看這樣可以嗎?”
P經理:“我可以登入?”小M:“是的,可以登入。”
P經理:“好極了,小M,你真是個大救星。”(鬆了口氣,說了聲“太棒了!”,走開了。)
在這個例子裡,他們達成了最佳的可能結果。他們各表異議相互說“不”,然後找到了雙方都能接受的解決方案。
他們的表現是專業的。對話中雖稍有衝突,也有片刻不愉快發生,但如果雙方堅持追求的目標不能完美切合時,這是比較理想的情況。
“為什麼”沒有事實重要。
為什麼登入頁面要那麼長時間才能完成面對事實重要。
2.2高風險時刻
最要說“不”的是那些高風險的關鍵時刻。越是關鍵時刻,“不”字就越具價值。
作者在這裡講述一個故事,面臨期限一定的專案任務,要在開始時候明確表示當前能否完成,如果不能完成要堅定地說“不”。
哪怕是一個關係生死存亡的專案,更要尊重事實說不。
2.3 要有團隊精神
2.3.1 試試看
許諾“嘗試”,就意味著你承認自己之前未盡全力,承認自己還有餘力可施。
許諾“嘗試”,意味著只要你再加把勁還是可以達成目標的;而且,這也是一種表示你將再接再厲去實現目標的承諾。因此,只要你許諾自己會去“嘗試”,你其實是在承諾你會確保成功。這樣,壓力就要由你自己來扛了。如果你的“嘗試”沒有達成預期的結果,那就表示你失敗了。
如果你既沒有新方案,又不準備改變自己的行為,如果事事仍然都按你承諾“嘗試”之前的方法去做,那麼,所謂的“嘗試”指的又是什麼呢?如果你此前並未有所保留,如果你沒有新方案,如果你不會改變你的行為,如果你對自己原先的估計有充分的自信,那麼,從本質上講,承諾“嘗試”就是一種不誠實的表現。你在說謊。你這麼做的原因,可能是為了護住面子和避免衝突。
2.3.2 消極對抗
如果一列載貨列車向大家衝來,而只有你一人有所察覺,你可以輕輕抽身退到軌道外,眼看其他人被車碾過,也可以大喊:“車!車來了!快離開!”
2.4 說“是”的成本
- 客戶所要的任何一項功能,一旦寫起來,總是遠比它開始時所說的要複雜許多。
- 我們理解的好程式碼應該是什麼樣的呢?好程式碼應該可擴充套件,易於維護,應該易於修改,讀起來應該有散文的韻味
- 這個故事得出的教訓是,你的利益干係人,不論是外部客戶還是內部管理層,知道如何讓開發人員快快寫出程式碼。但是,是高效地寫出程式碼嗎?不見得。是快速地寫出程式碼嗎?是的。他們是這麼辦到的。
2.5 如何寫出好程式碼
專業人士常常會成為英雄人物,但這樣的榮譽並非是他們所刻意追求的。他們之所以成為英雄人物,是因為他們出色地完成了任務,不但按時,而且符合預算。
而這不應該犧牲說“不”的機會而瘋狂地寫程式碼,完成任務,但是這樣幾乎沒有時間去提升程式碼的質量,瘋狂寫程式碼僅僅是為了完成開發任務而已!如是,根本不可能寫出好程式碼。
“有可能寫出好程式碼嗎?有可能堅守專業主義精神嗎?”
我的回答是:“是的。但你要學會如何說‘不’。”