累并快樂著——一個開發者的2016年總結
日月如梭,還有10天左右2017年就要和我們say hello了。子曰:“吾十有五,而志于學,三十而立,四十而不惑,五十而知天命,六十而耳順,七十而從心所欲,不逾矩。”在孔夫子的眼里,“三十而立”是指他在這個時候懂得了禮,言行都很得當;而在現代社會,“三十而立”更多的是指一個人成家立業,有了穩定的工作,有了自己的家庭。這一年,活潑可愛的小公主降臨到了我們這個家庭里、屬于我們一家三口的新房已裝修完畢待入住、家庭和事業的努力兼顧,這么想來,我貌似達到了“三十而立”的標準。
在自己的專欄里,借用“三十而立”這個標準,我想用心回顧自己這一年的收獲與感悟。
第一部分:工作
在這一年里,因為家里添丁,我難免會花一些時間在家庭上,因此放在工作上的時間沒有2015年多,這也直接導致失去了爭奪部門年度之星的機會。不過,凡事有得必有失,看到家里的小公主那么可愛,在工作上失去一點榮譽也是值得的。
花在工作上的時間少了,但并不表示我沒有干多少活,也不表示工作的質量降低了。我大致統計了一下,我在2016年一共開發了大大小小將近20個版本,有全新開發的,也有在已有版本之上修改的。由于部門面臨產品的轉型,因此有很多人員被抽調去做一些新產品去了,維護之前產品的人手實際上是很緊張的。在這種情況下,我主動承擔起了其他幾位同事所負責的版本的開發,并且很快上手,保質保量地完成了任務。這塊的總體表現,我對自己還是很滿意的。
下面,重點想和大家共享下今年開發工作中的幾個心得:
首先,不要太過于迷信前人的代碼
很多時候,我們開發一個產品的時候,并不是從零開始地編寫代碼,而是在前人的代碼的基礎上進行修改,也就是有了一個參照。如果自己所參照的代碼已經商用了,也就是已經獲得了市場上的成功,那么,我們就更加有理由相信這些代碼是完全正確的了。這也就會導致很多人(包括我)會將代碼拿過來直接用,而不考慮代碼的邏輯是否正確。
例如,我今年開發了一個版本,其中涉及到向另一個模塊發消息的功能,而這個功能的代碼是之前的版本就有了的,這次我是直接拿來就用。但是,當所有的代碼都編寫好并開始集成測試之后,我發現不管怎么設置參數,發消息的地方始終有問題。經過不斷地調試,并認真閱讀每一行代碼,我才發現之前的代碼所調用的發消息函數是錯誤的。可能是之前對這個功能沒有進行嚴格的測試,所以沒發現這個問題。修改代碼之后,發消息的功能才正常。
因此,對于一個合格的程序員來說,他們不會盲目地對代碼采取“拿來主義”的政策,不會太過于迷信前人的代碼(即使這些代碼是大牛寫的),而是會仔細閱讀代碼,看代碼在邏輯及功能上是否有問題,是否能夠滿足自己的需求。所謂的“盡信書不如無書”就是這個道理。
其次,不要盲目相信架構師(需求工程師)的需求
在很多軟件公司,用戶需求是由一批被稱之為架構師或需求工程師的人寫的,而程序員只需要實現這些功能即可。這樣做的好處是開發人員只需要專心編碼即可,免去了大量和客戶打交道的時間,提高了開發效率;當然,這樣做的壞處也是很明顯的,那就是開發人員并不了解客戶的真正需求,而一味地按照(架構師或需求工程師)對需求的了解來做,就可能和客戶的需求脫節。
例如,今年上半年我新開發了一個版本,用于和客戶現有的系統進行對接。在開發之前,需求工程師拿出了一份需求文檔,讓我按照上面的需求條目來開發,并且說客戶要得很急。在評審需求的時候,我明顯發現協議中有幾個字段的值有問題,并當場提了出來。需求工程師說這是按照客戶的要求寫的需求,沒有問題,讓我完全按照需求文檔來做。
開發得倒是很快,但和客戶系統調試花了很多的時間,原因就是我認為有問題的字段真的是有問題,并非需求文檔所描述的那樣。最后,通過臨時修改了幾個版本,終于對接成功了。
對于一個有責任感的程序員來說,他們不會盲目地相信需求描述中的所有條目,而是會根據自己的經驗、常識、原有程序功能等提出一些合理的實現方案,最終開發出滿足客戶需求的產品。
最后,凡事盡自己的最大努力,對于結果不要太過于苛求
在工作中,我們所能夠把控的實際上是很小的部分,大部分的環節是我們無法把控的。具體而言,作為一位開發人員,我們只能夠確保程序版本的質量,讓代碼中的bug盡量少,但是我們無法控制產品規劃、需求、現場部署、版本升級等很多環節。也就是說,我們要盡最大的努力來開發產品,但是對于最終的結果就只能抱著“盡人事,聽天命”的態度。
例如,今年我通宵支持了好幾個局點的版本升級及系統割接。在升級或割接之前,我們都在測試環境上進行了嚴格的測試驗證,并且為現場的操作人員提供了詳盡的操作流程文檔,只要他們按照文檔的描述來操作,就不會出現問題。但是,“理想很豐滿,現實很骨感”,現場人員總會在某些步驟出現操作上的錯誤,從而引發一連串的問題。這個時候,我們就要通過各種方式指導他們如何修復已經出現的問題。當現場操作出問題的時候,我總是在心里默默地想著:“要是我來操作,肯定不會出現問題。”但是,現實就是這樣,我們也不能對他人要求太高,不要對結果太過于苛求。
BTW,雖然我在某一個月里連續通宵支持了好幾次割接,也開發了好幾個版本,但當月仍然沒有被評為優秀員工,而做的事情比我少,沒我做的事重要的人卻被評為了優秀員工。在這種情況下,雖然有點藍瘦,香菇,我也只能對自己說“呵呵”了,這也正說明了我們做事情要盡最大的努力,并做最壞的打算。當然,和大家一樣,還是渴望以后自己做的事情能得到部門的認可,這是我們每個人追求的價值認可。
第二部分 有關學習
今年雖然在工作上和家庭中的事情都比較多,但我還是利用空余時間閱讀了數十本書。現在我讀書的方式有三種:第一種,讀傳統的紙質書;第二種,讀在kindle上買的書;第三種,在羅輯思維的得到APP上付費閱讀。大多數的書都是我在上下班的地鐵上讀完的。
讀書的重要性我就不說了,讀書的方法也因人而異,在這里,我向大家推薦5本個人覺得讀后很有收獲的書。
第一本:《智能時代》
這本書的作者是大名鼎鼎的吳軍老師,這也是他繼《數學之美》、《浪潮之巔》、《文明之光》、《大學之路》和《硅谷之謎》之后的第六本書,全書依然延續了他通俗流暢的寫作風格,將大數據和智能革命的浪潮清晰地展現在了讀者的面前,讀后讓人熱血澎湃。
不管你學習的是什么專業,也不管你是否準備創業,我都推薦你仔細閱讀一下這本書。
第二本:《浪潮之巔》(第三版)
這本書的作者仍然是吳軍老師。自從《浪潮之巔》第一版于2011年出版之后,深受廣大讀者,尤其是IT從業者的喜愛,我也是通過此書了解到吳軍老師的。鑒于IT行業的快速變化,吳軍老師每隔兩到三年就會對全書的內容進行更新,以適應IT行業的現狀,今年出了第三版。
吳軍老師就像是一個文字“魔術師”,總是能夠把一個問題或者是一個事情用他獨有的方式講述清楚,讓即使是非IT行業的讀者也能夠從閱讀中收益。在敘事的過程中,吳軍老師也會穿插一些小故事或者是個人的一些親身經歷,讓讀者閱讀起來津津有味,絲毫不會有閱讀很多IT類或歷史類書籍所帶來的厭倦感。
我寫了一篇有關本書的書評《To be or not to be–讀<浪潮之巔>第三版有感》,大家可以閱讀參考。
第三本:《小島經濟學》
這本書是一本有關經濟學的通俗讀物,是羅輯思維推薦的,據說是下至九歲的兒童,上至七八十歲的老人都能夠讀懂。我讀后,感覺寫得確實通俗易懂,通過本書也能夠看出現在全球出現各種各樣的經濟問題的原因。
如果大家不想閱讀像《經濟學原理》那樣的大部頭書籍,本書就是一個不錯的替代品。
第四本:《人類簡史》
在網上,有人稱這本書為“奇書”,作者是牛津大學的歷史學博士。在這本書中,作者按照人類發展的時間順序,將整個人類的文明進程以風趣幽默的方式展現了出來,讀后讓人感慨萬千。
人類并不是什么很神奇的物種,那么他們為什么會發展到現在而成為了地球的主宰呢?本書給出了答案。
第五本:《非洲三萬里》
這本書是我在kindle上閱讀的,它是畢淑敏老師根據她在非洲的游記而寫成的,全書將非洲的很多具有代表性的景點、建筑、人物、歷史事件以生動活潑的語言描述了出來。本書的主要篇幅雖然在描述作者的所見所聞,但我認為重點還是在展現作者的人文關懷及對人生的思考。
在當今這樣一個浮躁的社會,多讀讀像《非洲三萬里》這類好書,對于安撫內心、提升個人修養很有好處。
第三部分 有關家庭
如我前面所說的,今年我們家最大的變化就是女兒的降臨。古語云:“十年修得同船渡,百年修得共枕眠”,那么,也不知道是哪輩子或哪幾輩子修來的福分,讓我成了女兒的父親。
當然,升級之后,也意味著我這個做父親的多了一份責任,多了一絲牽掛。當女兒哭鬧或生病的時候,我也經常會坐立不安。以前,我會花相當多的時間在工作上,但現在,每到下班時間,我自然地就會想到該回家帶娃了,雖然很多時候仍然要加班,仍然要在大部分時間里一周工作六天。
小寶貝馬上就九個月了,來一張可愛的照片吧。
另外,通過這四五年的奮斗,我們一家三口終于擁有了一套屬于自己的房子,目前已裝修好,明年即可搬入。雖然在二三線城市工作的工資遠沒有一線城市高,但還是有一個優勢就是房價相對來說比較便宜。對于在小地方工作的人來說,這也算是“失之東隅,收之桑榆”吧。
寫在最后
相比2015年,2016年的我還是之前的我,工作積極、主動、認真負責,且不乏靈活性和創造性;而不同的是,今年的我已步入“三十而立”的年齡,我已成為了一位可愛的小公主的父親,站在了新的人生的起點上。
對于即將到來的2017年,我想奉上自己的三個愿望:第一,希望自己的家人身體健康、平平安安;第二,希望自己及家人工作順利、如意吉祥;第三,希望每位正在奮斗中的人都能夠實現自己的理想!
【本文是51CTO專欄作者周兆熊的原創文章,作者微信公眾號:周氏邏輯(logiczhou)】