1. 程式人生 > >一個程式設計師的自我修養

一個程式設計師的自我修養

勇氣

程式設計師每天面對很多你不敢得罪的人:老闆、上級、客戶,哪個你都惹不起。但有些事兒,你惹不起也得惹,這就需要勇氣。

正在開計劃會議,老闆說:這些功能必須在下週結束前完成提交給使用者。你很清楚這做不到,你應該咬咬牙接下來呢,還是應該跟老闆分析下說為什麼做不到?當然,分析完還應該提出建議,比如減少業務範圍。如果你這時候沒有勇氣,可能你將面臨兩個痛苦的星期,並且最後很有可能老闆也不滿意,因為你沒說做不到讓他以為可以,打亂了他的計劃。

產品經理提出一個讓人眼花繚亂的需求。你定定神想了半天,還理不清思路,你擔心是不是自己智商有問題,不敢繼續提問下去了。結果做的時候和產品要求大相徑庭,結果也可想而知。作為合格的開發人員,如果你都無法理解需求,那麼對客戶來說就更難理解,這樣的需求是否有價值?不能理解透徹的需求,一定要打破砂鍋問到底,不明白的事兒不做。

這次開發任務有一塊兒看起來很有技術難度,Team裡面沒有人做過,怎麼辦?有勇氣的開發人員應該站出來,接受這個挑戰,就算完不成,也給其他人趟出一條路來。

精益求精

碰到一個Bug,找了半天沒找到原因,結果第二天來了他好了。慶幸慶幸,少一件事兒,下次不知道什麼時候這個定時炸彈又會冒出來,到時候讓那個碰到的倒黴蛋接吧。真正的程式設計師應該有不找到原因不罷休的精神,通過對疑難問題的分析,你的水平可以又提高一步。

一個Feature寫完了,馬上提交,準備下一個。等等,你確定你剛寫完的程式碼是你能寫出來的最好的嗎?一般開發中都有“腳手架程式碼”。一開始是為了實現功能,有些類、方法 的設計就不一定合理,命名可能也有問題,重複程式碼也可能存在。不要等“有空”的時候再來修改這些問題。寫完立即進行重構,如果你有單元測試護航,這些重構對你不是問題。

功能寫完了,互動方式對使用者來說是最佳的嗎?還有沒有改進空間?怎麼樣能讓使用者更方便?這些不僅僅是產品設計者的問題,作為第一線開發人員,你對這個問題應該更敏感。如果有問題,立即叫來設計人員進行溝通,如果有條件,和客戶直接溝通。

測試程式碼

你有過不進行測試就把程式碼往上丟的經歷嗎?我有過,當然結局很不好。有些說我就改了一行程式碼,很簡單,不會有事兒的。我有過只改了一個字串就導致App崩潰的,因為修改後的字串丟失了一個佔位符,導致格式化出錯。

任何程式碼的改動必須測試,這是鐵的紀律。當然,如果你有寫單元測試的習慣(你最好有),跑一次單元測試,看到全部綠條,會讓你放心不少。

單元測試跑完,不能證明系統一定沒問題,必要的端到端測試也必須做。不要等測試人員來幫你發現Bug,最好他們都發現不了,這才是你應該驕傲的。0 Bug可能嗎?我不知道,但這是每個開發人員應該努力的目標。

開誠佈公

產品經理做了個看起來很愚蠢的Feature,你應該告訴他嗎?應該,不然你就可能去開發這個愚蠢的沒人用的東西了。你喜歡這樣嗎?我想沒人喜歡自己去做一個愚蠢的東西。

同事的某塊程式碼寫得不好,你應不應該告訴他你有更好的主意?你學習到了一些新的技術和理念,是不是應該分享給其他人,當大家一起進步?

尊重他人

尊重每一個人,不管產品還是其他程式設計師。開誠佈公要求的是對事兒,尊重他人要求是對人。如果對人不尊重,那麼即使你的意見是對的,很多人也很難接受。比如在程式碼評審的時候,用提問的方式說:你有考慮多執行緒的情況嗎?而不是說:你這個傻逼,多執行緒的時候你這程式碼會崩潰。

程式設計師和產品的關係是各種網際網路笑話吐槽的物件,兩個總是互相傷害。對產品的的問題,要堅決開誠佈公,講出你的態度,但不要上升到人身攻擊。對最後確定下來的Feature,要嚴格按照要求去完成。

幫助他人

聞道有先後,術業有專攻。程式設計師的職業知識範圍很大。即使是一種語言,各種框架、技術層出不窮,每個人專攻的區域也不相同,在一個團隊裡面肯定有高有低。對於某些方面不如你的同事,如果遇到問題,盡力幫助他人,畢竟,團隊產品做好了,才算成功,而不是你自己完成自己的工作就算成功了。

我在剛開始工作的時候,我的上級就是個很好的老程式設計師。剛開始我對Delphi也是剛入門,甚至SQL語句還寫不完整,一開始遇到問題他給了我很多幫助,我熟練了以後有幫助了很多其他同事。這讓我在一年內就升職做了專案經理,我想這和我積極幫助他人有關。

一個具有相互幫助習慣的團隊,氛圍肯定也會更加融洽。由於相互幫助,彌補對方短板,完成任務的效率也肯定會更高。

解決問題

程式出問題是不可避免的,無論你怎麼努力,畢竟程式設計是個複雜的技術工作。出了問題之後,第一要務是如何解決問題,而不是找問題起因好懲罰哪個帶來問題的傢伙(事後可以查詢,以免下一次再犯)。

解決問題就像破案,程式設計師需要有偵查員的精神。我一般做法是首先梳理一下程式的呼叫過程,然後大概分析一下有幾個部分,並運用邏輯進行排除:假如是A部分出現問題,那麼應該怎麼樣,然後逐步排除。

有些問題會比較詭異,出現了,你重啟了一下,又好了,繼續工作,於是問題沒了。這時候應該徹底進行排查,找出具體原因和解決方案。有次碰到一個系統,過段時間上面的Tomcat就會報PermGen space out of memory,然後處理人員重啟下就好了,這種處理方法他們一直用了幾年!我看到後查了一下,發現是Hotspot的一個問題,在大量動態類建立的時候就會這樣,那個專案jsp太多了,然後虛擬機器換成JRockit就好了。

持續學習

IT工業還是一門新興行業,到現在也才幾十年,變化速度非常快。我剛工作的時候常用的編碼技術、框架,現在幾乎已經沒有人使用了。從我10多年前開始使用Java語言,也從1.1到1.8了,中間語言特性、各種框架、編碼方式都發生了巨大變化。如果還用10幾年前的經驗,到現在肯定要被淘汰了。

除了技術,專案管理的方式也不斷在變化。10幾年前敏捷才剛出現,大家都還在試圖用瀑布模型開發,按那時的標準,我實際上從未用在瀑布模型的模式下成功過。當然,也開發成功不少產品,但都和瀑布模型無關。到了現在,如果你不學習一些敏捷方法,恐怕會越來越沒有競爭力。

熱愛生活

網上流行的黑程式設計師的段子,大約集中:天天加班、沒時間找女朋友、忙到沒朋友。 這不是一個好的程式設計師應該做的。除了認真工作,更要熱愛生活。工作期間努力、職業地工作,把事情做好。下班了就好好享受生活,讀書、旅遊、家庭、朋友都不能忽略,像個正常人一樣生活。哪些以把所有時間都用在工作上為榮的人,或許他們很成功吧,但我不羨慕。