一個程序員的自我修養

勇氣

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

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

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

這次開發任務有一塊兒看起來很有技術難度,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幾年前敏捷才剛出現,大家都還在試圖用瀑布模型開發,按那時的標準,我實際上從未用在瀑布模型的模式下成功過。當然,也開發成功不少產品,但都和瀑布模型無關。到了現在,如果你不學習一些敏捷方法,恐怕會越來越沒有競爭力。

熱愛生活

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章