1. 程式人生 > >挨踢部落故事匯(18):程序猿與代碼的基情

挨踢部落故事匯(18):程序猿與代碼的基情

開發者故事

“朋友,你還會修電腦啊?”這是小史在朋友中聽到過的最多的一句話。每當聽到這句話時,他也很無奈。難道程序猿就一定要會修電腦嘛?但是沒辦法,在朋友眼中,編程是一個很高深的工作。可能動動手指,哪邊就會出什麽事,生活十分精彩。嗯,電影看多了。作為一名不會修電腦但努力想學習修電腦的程序猿來說,除了修電腦的技能,也還要具備大部分其他程序猿共有的特質。比如:宅、悶。可能也具備獨有的特質,喜歡陪老婆逛街。。。

技術分享

小史·Java開發

嚴肅的簡單介紹下本期主人公小史童鞋,從事Java後臺開發工作已經三年有余,目前服務於一家創業公司做駐場開發。期間經歷過kafka,大數據等領域的開發。作為程序猿,大家應該每天都在和26個字母做著你死我活的鬥爭,對於編程應該也都有自己獨到的見解。借著這個機會,小史拋個磚頭,粗淺的和大家聊聊關於代碼的一些事。

一、對復制/粘貼說NO

小史看過一篇文章《程序員的進步從每一天少寫一點代碼開始》裏面提到說Google與網絡的幫助可以讓你寫出一行又一行的代碼。這句話不禁讓小史想起大學實習,面試工作時候,測試主管對他說的一句話:“寫代碼沒什麽難的,不就是復制、粘貼嘛”。當聽到這句話的時候,他的腦海中不禁又浮現出了同學對他說的話:“我現在在公司裏整天幹的活就是復制、粘貼”。當時小史不經意間產生一種疑問,難道程序猿的工作這麽簡單和枯燥嘛?帶著這個疑問,他踏入了程序開發的大軍中。

小史參加工作的第一天,他的領導就反復強調一句話:“寫代碼不要復制、粘貼”。這對於剛參加工作的他不是太能理解這句話的含義。當時,他一心就是為了工作效率,工作趕緊完成,讓領導知道自己的能力。這就導致了功能代碼的命名、結構差勁,後來返工反而浪費了更多的時間。現在他回頭想想,當時的行為是多麽的幼稚,如果只是復制粘貼,並沒有嘗試了解背後的運作機制,充其量代表了工作完成而已。

二、碼農的追求——高品質代碼

“你的代碼像一坨翔”。相信這句話大家或多或少的在平時工作中都有聽過。曾經在網絡上看見過一個帖子是這樣說的:“相信很多人都認為自己的代碼是最棒的,別人的代碼都是很糟糕的,因為看不懂”。畢竟程序猿都有一顆工程師的心,所以當他們到新的場地想做的第一件事就是,將舊的一切推倒重來。是的,他們決不會滿足於簡單的增量勞動。或許這種微妙的心理定位可以解釋:為什麽程序猿進入新項目組後寧願丟掉舊代碼重新寫,也不願意修修補補。他們認為舊代碼簡直一團糟。

好的代碼,就像是好的笑話,無須解釋就能讓人輕易明白;壞的代碼,就像是古文言,即使寫滿了註解,也不一定能輕易看懂;好的代碼,就像是一本寫作技巧高超的人所寫的書,它容易理解、分章明確;壞的代碼,就像是剛剛學會寫字的人所寫的書,它錯亂復雜,自我推翻。

那麽,如何寫出一段好代碼呢?小史曾經看過一篇文章,覺得解釋的很好,它是這樣說的:

  • 可讀性——你所寫出的代碼,不僅你自己要明白,你身邊合作的開發者也要能在最短的時間內看懂。(這個尤其要註意)

  • 可維護性——讓你的代碼在修改的時候很簡單。

  • 簡潔性——不要讓你的代碼看上去毫無必要的復雜。

  • 效率性——盡可能的讓你的代碼獲得最快的運行速度。

  • 明確性——類的命令、方法的命名要清楚的表達出具體動作的含義。

三、代碼優化很有必要

代碼優化,一個很重要的課題。可能有些人覺得沒用,一些細小的地方有什麽好修改的,改與不改對於代碼的運行效率有什麽影響呢?關於這個問題,小史有深刻的體會。舉個例子,之前他寫過一個功能用到redis的排序。本著有輪子不造輪子原則,毅然決然的使用了redis提供的排序方法。寫完之後,他還挺高興的,對redis的學習又深了一點。然而,事與願違,當代碼放到生產環境上運行出來的結果直接把他幹懵逼了,在大規模的數據洗禮下,完全跑不動。那晚,小史一行一行打著日誌,分析慢的原因,最後定位到了redis的排序上(具體代碼細節不作闡述),然後寫了一個算法代替了redis排序。

關於代碼優化,小史做了很多筆記,如:

1、盡量指定類的final修飾符帶有final修飾符的類是不可派生的。

2、盡量重用對象。特別是String 對象的使用中,出現字符串連接情況時應用StringBuffer 代替。

3、盡量使用局部變量,調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態變量、實例變量等,都在堆(Heap)中創建,速度較慢。另外,依賴於具體的編譯器/JVM,局部變量還可能得到進一步優化。

4、在Java+ ORACLE 的應用系統開發中,Java中內嵌的SQL語句盡量使用大寫的形式,以減輕ORACLE解析器的解析負擔。

5、盡量減少對變量的重復計算
例如:for(int i = 0;i < list.size; i ++) {

}
應替換為:
for(int i = 0,int len = list.size();i < len; i ++) {

}

6、盡量采用lazy loading的策略,即在需要的時候才開始創建。
例如: String str = “aaa”;
if(i == 1) {
list.add(str);
}
應替換為:
if(i == 1) {
String str = “aaa”;
list.add(str);
}

等等……

四、書籍很重要

Web行業知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據項目的需要來不斷學習新東西。所以,我們大家在平時閑暇的時候不妨多看兩本好書,如果實在沒時間看的話,也建議大家去找一些看過這本書的大牛寫的博客。因為,這上面可能就是整本書的精華所在。

以上觀點來自51CTO社群核心開發者小史的個人見解,歡迎加群(群號312724475)共同交流學習~


挨踢部落故事匯(18):程序猿與代碼的基情