緻諸位程式員:來自Chuck Jazdzewski慈父般的忠告 轉自:http://www.ituring.com.cn/article/18838
記住這幾句話,學無止境。(Never stop learning.)溝通至關重要。(Communication is critical.)履行承諾,勝過傳遞。(Under promise, over deliver.)“我錯了。”("I was wrong.")要是代碼未經測試,那它就無法正常運作。(If it is not tested it doesn't work.)程式設計不是你的工作,釋出産品才是。(Programming isn't your job, shipping is.)
原文釋出時間:2006年09月19日上午09點43分
看起來我的兒女們都不适合做程式員。為了不讓這份原本為我的新程式員兒子或女兒準備的慈父般的忠告功虧一篑,我打算把這份忠告強加于你。要是你剛踏上成為一名程式員的旅途,這裡的建議也許你的父親告訴過你,如果他也是程式員的話。這是一些我曆經艱辛才習得的東西。
不斷學習:閱讀。參加會議。訂閱期刊。上課。無論做什麼都是為了讓你不斷學習,要充分重視學習。了解你可以找到的每種語言。盡你所能去花時間了解任何新的架構、算法、技術、模型、範式。每當往你的工具箱中多添一件工具,都會有助于你更輕松地解決接下來的程式設計問題。去拜師,即比你強得多的人,然後學會他們可以傳授給你的一切。學無止境。
學會溝通:我經常開玩笑說,作為程式員你能學到的最重要的技能是,如何在白闆上畫長方形。溝通對于程式員的工作可謂至關重要。與買家、客戶、使用者、同僚、老闆、副總裁、首席執行官、董事會成員、風險投資人等各種各樣的人溝通,這些溝通在你職業生涯中的某些時候會變得很重要。學會如何在公共場合下講話。學會如何用英文寫作。學會如何與他人有效溝通。學會如何心平氣和地說服他人,而不要大喊大叫、火冒三丈、抑或驚慌失措。學會如何在演說時不講行話。這樣有助于别人明白你在做什麼。學會把事物分解為簡單明了的片斷。學會借助比喻及象征去溝通。學會溝通。
做到可預測:要弄清楚你能以多快的速度惬意程式設計。要一直等到你明白了某項任務,然後才能預測出你會用多久完成此任務。要将意想不到的情況計算在内。要為假期及休息時間作安排。學會适應你的預測。我會把某項任務分解成若幹子任務,并且每個子任務耗時不超過3天(通常都不足1天),而在此之前我不會認為自己對此問題有了充分認識,是以也就不去預測完成任務會用多久。請遵照這條規則生活,履行承諾,勝過傳遞。最好是隻用10天就傳遞你承諾需15天完成的工作,而不是用10天才傳遞你承諾僅需5天的工作。人們依賴于你的預測,而進度安排及計劃也會圍繞着你的預測去組織。盡你所能把預測做到最好,并確定你可以惬意地完成它們,否則你會被要求去履行那些令你難受的預測。你起初并不善于此道;就要請更有經驗的前輩與你一起去彌補、核實你的預測。學着變得更好。做到可預測;因為别人在指望着你。
承認自己的錯誤:你會犯許多錯。你如何處理自己所犯的錯正是他人如何評價你的依據。學會如何說“我錯了。”要是你低估了自己完成某事所用時長,一旦你清楚了這一點就及時告訴大家。要是你弄壞了某個版本,就修複它。要是你弄出了bug,就搞定它。不要否認錯誤,不要為錯誤找借口,不要琢磨如何隐藏錯誤,不要把錯誤歸咎于别人,為改正錯誤做點兒實事兒。要為自己的錯誤負責,否則你将重蹈覆轍。
決不讓爛代碼從你的辦公桌上溜走:作為程式員,你的工作就是編寫可工作的代碼,是以當你不确定代碼符合此标準時,決不讓代碼從你的辦公桌上溜走。一旦讓問題代碼從你的辦公桌上溜走,與溜走之前相比,那樣做不僅會令你難堪,而且要找出問題也會更昂貴、更困難。學會愛上單元測試。學會愛上代碼覆寫率。學會測試自己的代碼勝過付錢給别人去測試代碼。在你簽入代碼後又找到了bug,應該為此覺得難為情。要是買家找到了bug,應該覺得特别難為情。不要指望别人為你找出bug,要靠你自己去找出并修複bug。不要期盼代碼能正常運作。要測試代碼。不要估計代碼能正常運作。要測試代碼。不要抱有任何僥幸心理。就是要測試代碼。如果你尚未測試代碼,那麼代碼就無法正常運作;對此你可能心知肚明。不過,即使你用心測試,有些bug還是會從你眼皮底下溜走。雖然你還會犯錯,但是要盡你所能不犯錯。
盡管程式設計很有趣,不過釋出産品才是你的工作:程式設計很有趣。那是探索的喜悅。那是創造的喜悅。那是成就的喜悅。那是學習的喜悅。看到自己親手完成的作品顯示在螢幕上很有趣。有同僚為你的代碼而驚歎很有趣。有人在公共場合稱贊你的産品、鄰居使用你的産品、以及在媒體上讨論你的産品很有趣。程式設計應該十分有趣,若并非如此,就找出導緻程式設計無趣的問題,然後解決之。可是,釋出産品并無樂趣可言。我經常說起,釋出一款産品感覺不錯,就像某人不再打你時的那種感覺。你的工作就是完成産品,修複bug,然後釋出。要是需要改bug,就改bug。要是需要寫文檔,就寫文檔。要是需要測試代碼,就測試代碼。所有這一切都是釋出産品的一部分。程式設計不會給你帶來報酬,唯有釋出産品才會給你帶來報酬。把你的活兒幹漂亮。
記住這幾句話,
- 學無止境。(Never stop learning.)
- 溝通至關重要。(Communication is critical.)
- 履行承諾,勝過傳遞。(Under promise, over deliver.)
- “我錯了。”("I was wrong.")
- 要是代碼未經測試,那它就無法正常運作。(If it is not tested it doesn't work.)
- 程式設計不是你的工作,釋出産品才是。(Programming isn't your job, shipping is.)