有整潔強迫癥的慎當程序員

作為程序員,寫代碼是我們工作的主要內容。最初,看到代碼庫有些代碼寫的混亂,我也會有些反感,甚至是埋怨前輩為何不寫好點。后來我發現我太天真了,寫出高效整潔代碼真不是一件容易的事情,寫代碼就是在挖坑,給后人和自己踩的坑。

寫了一年代碼,我以親身經歷在此告知后輩,有整潔強迫癥的人慎當程序員。為什么這么說呢?是什么讓程序變得混亂呢?

1、歷史遺留問題

之前見到有人吐槽12306的前端代碼,吐槽他們用Jquery版本是1.4.2,Jquery最新版本是2.1.1(2014.9.12)。若是去扒代碼的話,你會發現很多公司用的Jquery版本都不高,京東主頁用的是1.2.6(2014.9.12)。這就是歷史遺留問題,由于版本之間多多少少會有些差別,升級版本有著不可估量的風險,且項目越大風險越大。為了規避風險,再加上代碼跑著沒問題,一般來說負責人也就不愿去冒險升級了。不去升級會導致什么問題?一些比較新的方法不能用,這對開發人員來說有時是挺痛苦、挺無奈的。

上面只是歷史遺留問題的一種情況,實際中還有很多,比如公用的方法邏輯雜亂冗余卻沒人敢去清除整理、系統架構過時、APP升級后對歷史版本的兼容支持與維護等等。總之,寫代碼時你會遇到各種歷史遺留問題。

2、系統架構的問題

實際來看,系統架構最初就考慮全面挺難的,需要經驗極其豐富的架構師,即便是這樣也只能保證在一定時期內架構滿足需求。

拋開業務增長致架構無法滿足需求不談,有多少公司敢站出來說自己系統架構完美呢?一來,很多事都是需要權衡后取舍,技術也不例外,會出現為了解決一個問題引入另一個問題的情況。二來,互聯網公司整體的浮躁,恨不得有想法就開始做,且新的技術不斷出來,有些人管理為了追新不調研清楚就開始用,引入到系統架構之中,但新技術的引用往往會帶來未知的風險。一旦引入的新技術在系統架構中出現了問題,造成的后果是極其嚴重的。這里不是說新技術不能用,是要慎用。

總結來說,系統架構問題主要原因有三點。一是有些系統架構搭建時需要根據項目需求做一些取舍,致在項目中做部分處理時較麻煩。二是系統架構師經驗不足。三是有些項目管理者不夠負責,想一出是一出。

系統構架問題也是代碼混亂的原因之一,且問題一旦出現就不是幾個程序員能夠扭轉的。

3、需求本身復雜

有些需求本身就很復雜,需要眾多人分工協作來完成。這種大項目的代碼邏輯注定不會簡單,加上是由多人完成,也就很少有人懂得所有邏輯。

對于互聯網企業來說,人員變動頻繁,項目開發完,甚至是開發一半是說不定就有人走了,最恐怖的是走的人離開時連文檔都沒有留下。

遇到這種情況,接手的人只能的去扒代碼找邏輯。非碼農絕對不會了解扒代碼找邏輯的痛苦。若是代碼寫的規范還好一些,若是寫的不規范,再加上不是出于一個人之手,那對接手的人來說絕對稱得上災難了。

4、項目催得緊

互聯網講究的是快,仿佛不快就會死。對于這種情況,不知道真的是‘天下武功唯快不破’,還是老板壓榨員工勞動力的借口而已。

快,必然導致項目迭代速度快,需求被催來催去,產品、測試以及經理都在后面催。遇到這種情況雖心里不爽,但我知道產品、測試以及經理也不容易,能夠理解就理解,畢竟大家也都是為了工作。

需求被催的緊會導致代碼質量完全沒有保證。由于時間不夠,看到需求想到實現方案就要開始動手寫,根本沒時間去考慮是不是最優的,后續的擴展性,這樣寫了會不會引起其他的問題等等。

由于最初沒有時間考慮周全,開發時有可能會遇到一些完全沒有預料到的問題,但仍舊是由于沒有時間,根本沒法返工重新設計,只能隨便找一個能夠解決問題的hack方法解決了。

由于項目時間緊,開發文檔幾乎不會有。一來可能是項目一個挨著一個根本沒時間寫。二來是需求做完了,開發都不清楚代碼為何要那樣寫了。因那段代碼可能是開發連續高負荷工作十幾個小時下寫出來的,那段時間開發的精神是恍惚。也許有人會說精神都恍惚了,為什么還不去休息啊,只能說需求不允許,開發比較敬業,不是老油條。

由于記不清當時為什么那樣寫,加上人都是有惰性的,沒有人催促自然就不會去從倉促趕出來的垃圾代碼扒邏輯了,況且一般來說開發根本沒有完全的清閑時光,自然也就不會去補文檔了。

除了文檔,項目需求被催得緊也會導致代碼注釋不全。編碼習慣好的可能會隨手寫些注釋,編碼習慣一般的就極有可能由于時間倉促而不寫注釋了。

項目需求被催得緊也會造成代碼review形同虛設。因代碼還未提交就有一幫人在后面催,想一想這樣的情況還能愉快地走代碼review嗎?但對于新人來說,代碼review是規范代碼風格的必要步驟,是從師父的review中學習編碼技巧的重要途徑之一。

前三種令代碼不整潔的情況在一定程度上不可避免,只能做到盡量的減少其對代碼的影響,但催促項目需求這一點完全可以避免。

雖可避免,但從實際來看很少有互聯網公司去注意這一點,似乎大家仍舊覺得只有快才能在‘拼殺’中勝出,根本不去考慮代碼一旦混亂,后續的維護以及二次開發增加的時間、人力以及財力成本。

混亂的代碼爛賬也是跳槽的誘因之一,面對一份雜亂的代碼時間長了會覺得惡心,惡心到受不了也就走了。

有時快是勝出的關鍵,但盲目的追求快也就是急功近利了,而急功近利往往是在自掘墳墓。

5、特殊需求

有時業務或產品會提出一些常人難以理解的邏輯。這可能是由于業務或產品想要實現某個功能,但當前的系統架構、技術實現或開發時間不允許,他們又非要想實現該功能,于是便整出了一個最初需求的閹割版,馬不像馬牛不像牛的閹割版需求。

一般來說這種需求會擬定后續版本,但這就猶如程序員說這個方法先實現了,后續有時間再優化一樣,很少有下文了。造成這種現象的原因之一還是項目迭代快、時間不允許,另一點就是人的惰性。

除了閹割版需求稱得上特殊需求,還有可能是想一出是出,但根本不了解實際情況的老板,或者高層提出來的需求,一般來說由于提需求的人地位在那里,做事的開發與產品等也就很難拒絕做了。

6、好代碼需經驗:

寫出高效整潔的代碼一來是程序員需要很高的素質、很好的習慣,二來真的需要經驗。由于程序員缺口眾多,新人不斷的涌入近來。想一想網上之前的嘲諷段子“我們有一個非常好的idea,什么都準備好了,就缺一個程序員了”。從這一段子可以看出,有想法的人很多,但能夠將想法實現的程序員很缺。

指望著沒有經驗的新人能夠寫出高效的,邏輯性非常強、沒有任何冗余邏輯的代碼我覺得不現實。新人代碼風格不錯就是比較好的了。其實,這個時候若是有一個好的代碼review機制就非常好了,可是上面也提到了,由于種種原因,不知道多少公司的代碼review根本形同虛設。

7、代碼風格因人而異:

每個人的編碼風格都不一樣,習慣閱讀的編碼風格自然也就不一樣了。實際項目開發往往又是由多人共同完成的,也就造成代碼庫內會包含各種風格的代碼。風格一多,就自然有了與自己習慣風格不符的了。

雖這也算是閱讀代碼的一個障礙,但相對于上面的問題來說,它似乎不是什么大問題,除非遇到寫代碼完全不注意的人,再加上第四條提到的沒有人review。

總結:

以上算是介紹了代碼之所以雜亂的七點原因。說到這里,對代碼多多少少有些認識的人,你們應該了解我最上面的“有整潔強迫癥的慎當程序員”絕非危言聳聽了。

在這里,我再次告誡所有后輩們,若是你有整潔強迫癥,或者說你屬于急性子,慎入程序員這一條路。否則會被代碼虐千百次,虐的你心力憔悴,牙口胃口都不好了,心情也不好了,覺得整個世界都是灰暗的,人嘛,何必那么自找沒趣,對不起自己呢?

最后,說點工作中的感悟。工作大家誰都不容易,部門不一樣工作中考慮的出發點也就不一樣,所以相互理解非常重要。若是真的遇到強橫無理、不可以商量的,我會選擇離開,省的整天與這種人生氣添堵。工作畢竟是工作,令工作太過影響心情真的劃不來。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,765評論 25 708
  • 先說項目開發過程中團隊人員的分工協作。 一 人員安排 畢業至今的大部分項目都是獨立完成,雖然也有和其他同事協作的時...
    SnowflakeCloud閱讀 10,808評論 3 59
  • 在河源,街頭巷尾都有著缽仔飯、缽仔湯之類的店,這是當地的飲食特色。但問了當地人,現在一般家庭做飯已經不會這么做的。...
    幸福的西瓜君閱讀 540評論 1 0
  • 恨水東流 寒蟬一泯 朝三暮四 飄絮楊柳 般若菩提 亂世浮沉 一葉飄零 落葉歸根 追花沃土 西風窮碧 羽扇綸巾 大漠...
    緋辰閱讀 288評論 0 2
  • 終于可以把魔方從頭到尾轉完了,雖然在很多人眼里不值一提,但是我仍然如同實現了童年小小的夢想那樣興奮不已。 從魔方中...
    Sandy的小屋閱讀 480評論 1 3