文章出處

這兩天,我做了兩件事:

  1.重構了系統某個模塊的部分代碼:

  花了一天時間,一個6k多行的java文件,搞到4k行加若干個類文件,恕我能力有限,后面的實在重構不下去了,那是一種3個domain屬性名幾乎一樣100多個字段但是卻用同一個copy了三遍的方法來處理的欲哭無淚,那是一種使勁滾鼠標滾輪都滾不到一個方法尾部的絕望(100多個字段的幾個類屬性equals來,equals去,get來,set去的,這樣類型的方法有那么五六個,你說能不多嗎)......

 

  2.做了一個日志處理的小工具:

  客戶要求把日志里面記錄的一些東西整理出來發給他們業務人員分析,有若干個日志文件,20多m一個,我本來打算一個一個Ctrl+F,Ctrl+C,Ctrl+V的,但是后來想到自己能否更高效去處理這件事,畢竟自己出來工作兩年了,很多時候做一些重復的事情,這樣不會有提高,所以我決定用自己寫個處理日志的小工具

  把一個log文件里面的內容按關鍵字找到然后解析相應字段然后格式化寫到excel里面去,

  我把日志簡化一下,其中一個片段樣子大概是這樣的:

    field1:=value1

    field2:=value2

    field3:=value3

    ......

    ......  

    ......

    xxxxxxxxxxx:field3:value3 field4:value4 field5:value5 

 

  我們需要取得field1,field3,field4,field5名字以及值 

  field3-field5很好辦,直接定位"field3:"所在的行,然后把這一行取出解析出來即可

  但是field1的值不是很好處理,我當時就想了最傻的一個辦法:掃一遍文件解析出field3-field5,然后用field3的值再掃一遍文件找到field1的值,速度那個慢呀

  后來就想了一個稍微更聰明一點的辦法,

  把

    field1:=value1

    field2:=value2

    field3:=value3

  封裝成一個數據結構, 每一行用一個字符串來裝,在掃描第一遍的時候,就把這個數據結構的用List存起來,假設為TempList,把field3-field5作為一個數據結構存進一個list,這樣的話 我處理之前得到的field3-field5這個List和這個TempList,內存操作,速度提升很明顯。

 

收獲和教訓:

  1.做這兩件事的一個大背景是在版本正在開發的過程中,我寫的版本計劃預留了一部分時間去應對需求變更,但是自己卻花了多余的時間做了第一件事,吃力不討好,最后還沒動需求要做的東西,重構了半天,代碼還是如此的讓人絕望,現在才深刻體會到,看別人寫的優秀代碼,是對自己的一種提高,看別人寫的很惡心的代碼,對自己也是一種提高:告訴自己不要這樣寫。

  2.效率這個東西,是很重要的,特別是在做項目的過程中,如果能盡量讓機器幫忙解決的事情,就不要人工去做,而對于程序員來說,盡可能多的寫一些小工具(當然我技術不好,可能寫個工具的時間都要影響進度-_-#)來幫忙解決一些手工問題:比如之前在每個版本打分支的時候都需要建立項目的空目錄,然后申請相應SVN權限,然后把空目錄刪除,將上一個版本在svn上copy to 一份出來作為開發,因為工程比較多,這個建立空目錄的過程很繁瑣,所以我就寫了一個cmd腳本來運行建立新目錄,這樣每次打分支之前運行這個腳本即可,省去了一些copy/paste操作。

  3.項目開發的過程中,核心的技能就是盡量精確的評估,如果一件事,你沒有評估就貿然去做,是一件非常可怕的事情,如果讓我重新選擇,我不會拿上班的時間再去重構這部分代碼,我會先把任務完成,完成的基礎上,下班后,在Intern version(for practise)上練習重構。

  4.突然想到自己為什么要用這個標題。-_-# ,重構的這部分代碼不是我寫的,當我看到這樣的代碼的時候常常會特別憤慨地說當時為什么寫這樣難維護的代碼出來,后來當我寫這個小工具,回頭看看自己曾經寫過的那些一點都不亞于這種難維護的代碼的時候,我明白了:在做項目的時候,特別是極度緊迫的時間里,解決問題才是最重要的。如果你效率極高,能力極好,腦海中各種模式爛熟于心,一看到一個場景立馬可以構建出可重用,易擴展的代碼,那無可厚非;但是對于我們這些普通小白碼農來說,首先解決這個問題,有時間多自己再折騰折騰把。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()