天天看點

談談程式設計修養

談到修養,大家也許會立馬想到優雅的氣質談吐,優秀的品質道德,其實歸根結底我覺的修養是“内在的美”的一種外在呈現。我們都很喜歡有修養的人,但是絕大部分人卻難以達到這種修養,我們也想做一個有修養的人,但是社會環境及生活環境和自身的劣根性卻讓絕大多數人做不到純純粹粹的有修養。不過有一點我們必須要做:那就是盡量讓自己有修養。

     那麼程式設計修養是什麼?

     舉一個反例,就拿我最近接手的一個企業級的背景網絡服務程式來說,這個程式承載了整個公司核心産品的核心技術,但是當我拿到源代碼時,我卻有不盡的失望,甚至有些憤怒,也覺得對公司來說是一種幸運。是的,不可否認的,你給大家展示的是你可以承受得起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公司,不再注重一個人是不是能寫出優秀的代碼和維護一套科學的産品流程,也不再注重産出的代碼的品質和産品的高标準,而是把衡量一個人和産品的标準完全放在了實作的功能和創造的市場效益上,我也知道這是市場規則,但是請尊重那些把代碼和産品不僅僅當做賺錢工具的人,因為他們在寫代碼做産品時更想把他當做一個藝術品,會仔細設計雕磨,會讓他盡量完美。還有,對于新手,允許他們犯錯,但是請不要把他們犯的錯用在公司的核心産品和技術上,因為這種成本有些大了。

本文轉自永遠的朋友部落格51CTO部落格,原文連結http://blog.51cto.com/yaocoder/886393如需轉載請自行聯系原作者

yaocoder

繼續閱讀