談談編程修養

     談到修養,你們也許會立馬想到優雅的氣質談吐,優秀的品質道德,其實歸根結底我覺的修養是「內在的美」的一種外在呈現。咱們都很喜歡有修養的人,可是絕大部分人卻難以達到這種修養,咱們也想作一個有修養的人,可是社會環境及生活環境和自身的劣根性卻讓絕大多數人作不到純純粹粹的有修養。不過有一點咱們必需要作:那就是儘可能讓本身有修養。

      那麼編程修養是什麼?

     舉一個反例,就拿我最近接手的一個企業級的後臺網絡服務程序來講,這個程序承載了整個公司核心產品的核心技術,可是當我拿到源代碼時,我卻有不盡的失望,甚至有些憤怒,也以爲對公司來講是一種幸運。是的,不能否認的,你給你們展現的是你能夠承受得起10萬級的訪問量,能夠正常的運轉公司的業務。可是內在的呈現上,給人的第一感受就是雜亂和缺少專業性。

      我對此程序見解以下:

    1.各類文檔一無全部;

    2.上萬行代碼就在兩個cpp文件中完成,其中的main方法甚是可怕,四個重要功能邏輯的實現幾乎全在其中,多達2000多行;

    3.不少邏輯並未考慮到執行不成功的狀況就繼續執行下面的邏輯;

    4.大量使用全局變量,而且有些並未在全局使用;
   
    5.做爲一個龐大重要的後臺服務程序,沒有一套完善的日誌系統;

    6.對於多達幾十個上百個的功能邏輯居然沒有一套完善的測試系統;

    7.「don't repeat yourself"這個金率在程序中未任何體現;

    8.既然用c++來編寫程序,幾乎未面向對象的使用,甚至連STl都不多見;

    9.代碼註釋風格,命名風格雜亂,未使用的代碼邏輯還有一堆;

    這些就是我對這個程序的感悟,我認爲以個人觀點來看以上都是沒有編程修養的體現。當然,能夠拿這個程序已經很穩定的跑了多久多久,並且沒有出過業務上的差錯或者當時時間有多麼緊來對上述問題開脫。可是做爲一個程序員的咱們僅僅是爲了完成產品的需求功能?從商業上來分析這種觀點沒錯,一個程序代碼寫得多麼好,配套設施多麼完善,體現的多麼專業,可是不能創造市場價值等於這程序就是堆」垃圾「,可是咱們也不能寫出」垃圾「同樣的程序。我認爲,但凡垃圾的程序產生的效益都是短暫的,並且是運氣的;

    我下面以個人觀點的分析一下可能對產品形成的不良影響:

   1.從維護上來看,若是維護人員是這個程序的始創者,好辦些,畢竟這程序即便再亂。維護者畢竟瞭解它,能夠相對比較快的完成維護工做,可是你們不知道有沒有這種經歷,小時候爲了記全筆記有時候會寫草字,可是下次本身再看時卻很費勁,即便程序始創者維護這樣的程序也會費些時間吧。那對一個起初對程序一無所知的人呢,我想必定會多花不少不應花費的時間去消化這個程序的邏輯和業務。這顯然已經影響到了維護成本。

   2.從定位問題上看,你們都知道的,對於一個服務端的程序,一旦出問題會影響到千千萬萬的客戶端,既然這樣,咱們就要能快速準確的定位出問題所在,而後迅速解決它,使其損失達到最小。對於不便於現場調試的狀況,最有效的方式就是在程序運行時有一個穩定,高效,完善的日誌系統。這樣大部分狀況下咱們能夠經過日誌記錄的一些數據或者信息提示再結合自身的代碼定位到問題。

   3.從功能上看,最嚴重的我認爲就是不少邏輯沒有考慮到執行失敗的狀況就繼續執行下面有依賴的邏輯,是的,確定你會反駁我「他確定是成功的,爲何會失敗呢,我是按照指定的路徑讀的文件,我就沒發現過這個API調用失敗過「,我不得不得奉勸這種人一句,你該看看《代碼大全》了,其中有一章防護式編程會教育你的。

   4.從做爲一個程序員的職業道德上來看,你寫出這樣的代碼只是爲了給機器讀?你要記住,對於機器來講你的代碼只是二進制,你寫的再爛機器只看到0和1,而你寫的代碼是要給別的程序員看的,去維護,去改進,去移植的,因此請你有些職業道德,別給別人增長沒必要要的負擔。

    說到這裏,我想確定有些人會以爲委屈,由於」咱們是新手「。這個緣由我放在下面談,由於我以爲新手寫出這樣的程序很正常,我也曾經寫過讓如今的本身以爲很垃圾的程序。另外一個緣由就是「公司給的時間太緊,我只好匆匆寫完」,我以爲這只是一個方面,我必需要吐槽一下如今的不少IT公司,再也不注重一我的是否是能寫出優秀的代碼和維護一套科學的產品流程,也再也不注重產出的代碼的質量和產品的高標準,而是把衡量一我的和產品的標準徹底放在了實現的功能和創造的市場效益上,我也知道這是市場規則,可是請尊重那些把代碼和產品不只僅當作賺錢工具的人,由於他們在寫代碼作產品時更想把他當作一個藝術品,會仔細設計雕磨,會讓他儘可能完美。還有,對於新手,容許他們犯錯,可是請不要把他們犯的錯用在公司的核心產品和技術上,由於這種成本有些大了。

    因此我想對廣大和我同樣熱愛技術的程序員說,咱們不只僅要作一個能實現功能作出產品的程序員,還要作有編程修養的程序員。也建議你們讀讀我對開展一個項目的薄見, 大家的團隊是怎樣組織開展大型項目的?
相關文章
相關標籤/搜索