程序員有哪些借口可以讓自己寫出低質量的代碼?

寫出低質量的代碼的特徵包括但不限於:

  • 心安理得地寫出低質量的代碼
  • 最終寫出了低質量代碼卻不在之後改善它
  • 自以為寫出了質量很高但實際質量很低的代碼

低質量的特徵包括但不限於:

  • 文件關係混亂
  • 注釋過期、不明確或者沒有
  • 文檔過期、不明確或者沒有
  • 架構亂設計
  • 過度設計
  • 不檢查用戶輸入的錯誤情況
  • 不檢查API或者函數返回的errorcode或者exception
  • 沒有單元測試等自動化測試過程
  • 編譯起來很難
  • 到處複製代碼,公用的部分不整理成內部庫

每一個程序員在他的職業生涯中某一天都會突然獲得開示,這種開示在通常某一個夜晚悄然降臨,有時是以圖靈本人託夢的形式出現。
這一開示的主要內容如下:
程序員是真正理解思維和邏輯真諦的人。非程序員是被蒙蔽的無知者。
每一個程序員對於世界上其他程序員有著不可推卸的責任。每一個程序員都必須儘力維護程序員這一高貴種族的延續,並保證世界的命運控制在程序員手中,既不被無知者淹沒,也不被機器智能取代。
完成這一使命的唯一方式,是保證穩定地出產低質量,難以理解,修改和維護的代碼。每一個負責任的程序員,他每一年的產出,必須為另外三個程序員製造一年的就業機會。唯此,程序員一族可生生不息,整個IT行業欣欣向榮。
圖靈大神在冥冥中微笑,他的紙帶機將嗒嗒作響,直至永恆。


「負責驗收的領導都打好招呼了,到時候走個過場就行。反正項目經費到手之後這東西也不會有人真用,抓緊時間,兩周之內完成。對了,首頁做漂亮點。」


淫才啊

或者這樣的:

行咯。你逼我的
String ni;

String bi;

String wo;

String de;

If (ni==ni)
{
ni=ni;
}
else
{
ni=ni;
}

If (bi==bi)
{
bi=bi;
}
else
{
bi=bi;
}

If (wo==wo)
{
wo=wo;
}
else
{
wo=wo;
}

If (de==de)
{
de=de;
}
else
{
de=de;
}


你知道我碰到過客戶主動要求降低代碼質量並加 BUG 的情況嗎?原來他是要把我們的項目送去第三方機構評測,但是又害怕對方收錢不辦事,不加幾個 BUG 怎麼知道對方測沒測?不降低點代碼質量搞得混亂點,怎麼防止對方拿了代碼又出去賣或者開發同類產品?

我被客戶「高瞻遠矚」的思考深深的「折服」了,於是我生平第一次開始琢磨怎麼才能把一切搞亂?怎麼才可以把 BUG 加的有深有淺……

你遇到過這樣奇葩的事么?


很顯然這個SB的功能不會真的有人去用的。


「這個功能大概幾天能完成?」
「五天吧。」
「給你三天,代碼跑起來再說。」


老闆最近接了個維護網站的項目,是個賣門票的網站,平台用的fuel CMS,沒有任何文檔!!!估計客戶以前包給一個人或者一個小團隊做完然後幾度易手到了我們這裡。客戶只管最終結果,要求在規定時間完成,人家自然是趕出來拿了錢就是,管他代碼長什麼樣子,後面出了問題再算,而且還不一定會算到自己頭上,因為到時可能項目已經易手了!


然後某天客戶的伺服器崩了,於是乎同事把整個拷貝到了aws上。沒幾天客戶說沒收到每天自動發的報告,門票數量也不對。
我們當時第一個反應就是應該用了cron每天自動發報告,但苦於無文檔只能翻代碼找。我們其實是用Java的公司,所以我也不懂老闆幹嘛找來個這個項目,大概期望能取得用戶信任重新寫個買票平台吧。後來終於找到了,也讓我們開了眼界。

有一個cron.php的文件裡面包含了清空購物籃,發報告,點票數,查看伺服器狀態等等等一系列function

發報告這個是這麼寫的
十分鐘執行一次,每次檢查得取的時間String為16:00然後執行任務發報告[捂臉]!!!納尼?!

而且所有這些都可以從uri直接執行,不需要用戶名和密碼。比如你能看到

這不直接跟人叫說來呀來呀快來黑我呀!客戶只追求快速交卷的後果就是這樣。


8月1日更新
首先我要向大家檢討,這樣惡意求贊的方法是不對的,所以如果大家覺得我說得故事沒意思可以取消贊。 (⊙_⊙!)

(啊喂!我說取消贊你就真取消贊啊, 醬紫還能愉快的答知乎上題目了嗎?)

---------------------------------------------------

當我還是個實習僧的時候,我做了個項目,將在新加坡,台灣,馬來西亞等地區分行上線。

一個小小實習僧就接了幾百萬美刀的項目啊!有多緊張多害怕你造嗎???那種既喜歡又害怕的心情就跟便秘一樣你造嗎???
滿心歡喜顫抖著接過了User Requirement,洋洋洒洒的英文好雞凍啊。

然後我一個月不到完成了第一階段的Coding,我蹦啊跳啊到老闆面前,『Samseng,請賜予我高級武功秘籍吧』 『納尼?沒、、沒了?⊙﹏⊙b汗』

滿懷忐忑的上交了代碼,(中間省略1萬字打醬油的時間)莫名其妙就成功上線新加坡了。

台灣User Acceptance Testing 的時候,突然來問題了。 客戶姓名還有地址欄很多繁體字顯示不出來啊摔!
台灣嗲妹(後來才知道是大媽,為毛大媽的聲音都這麼嗲啊摔!默默對著聲音擼了無數管了讓我以後如何面對啊)說,老濕,怎麼這麼不給力啊。
我。。。。。。
問題最後發現是,中文字錄入的時候格式是ASCII,一個字元佔2個位元組,輸出到目標系統的時候是UTF-8,一個字元佔3個位元組,但是設計的時候,沒有考慮到(鄙視所謂Architect)全部規定長度20.
問題發現了,如何解決呢?
台灣da嗲ma妹說,你介系統有bug啦,趕緊幫人家解決啦。
我老闆默默拿出用戶簽的設計書sign-off文檔。
台灣da嗲ma妹說,客戶的名字都顯示不出,客戶都走了啦。
我老闆默默拿出用戶簽的用戶需求sign-off文檔。
台灣da嗲ma妹找到大老闆,你們的人都不給倫家解決問題,真系討厭啦
大老闆面無表情,煙霧瀰漫中,若隱若現的聲音傳來,『加錢』
台灣da嗲ma妹只好找到我,老濕,你要給力啊老濕
我。。。。
我想了個辦法,超出20字元的我全部砍掉,強行把第19、20位字元賦空,於是頂多顯示18/3 = 6個字。
台灣da嗲ma妹說,不給力啊,老濕
我。。。。那加錢吧。。。

台灣da嗲ma妹以訊雷不及掩耳盜鈴兒響叮噹機立斷章取義博雲天雞不可泄露之勢說,』那就按你說的方法做吧,謝謝,再見!『(喂喂,加點錢能死嗎?話說你為什麼不發嗲了啊。T_T)
於是我瞞著老闆給她寫了這個fix。

(台灣上線一片坎坷,差點最後上線失敗的說)

終於來到馬來西亞了,這次換了個馬來華人大叔。
我說,大叔,你要做好準備,台灣出了很多問題的。
大叔說,哦。
我說,大叔,這些question description的郵件你拿去,他們都不肯加錢呢。
大叔說,哦。
我說,大叔,那馬來西亞就和台灣一樣,就這樣放了?
大叔說,哦。
我說,大叔,你不考慮考慮加錢強化強化點么?
大叔說,哦。
我。。。。。。。。。

然後,大叔轉身找到馬來技術部門自己開發了個類似的系統。。。。。。。。。。。。。。。

我終於明白那個等咱有了錢,豆漿買2杯,喝一杯倒一杯的哏了。

這邊的項目都是先出錢再開始的,也就是說馬來弄了2套一樣的系統。。用一套,擺著鄙視一套。。

後來我問大叔,你們為什麼不給我加錢,要自己做一套呢?
大叔說,你們,不能太慣。
我。。。。。。。。

---------------------------------------------------

謝不邀

這個問題我必須回答一下,我從上家公司離職前也寫了不少低質量代碼。原因倒不是我有多麼不負責任,而是老闆讓我這樣。

事情是這樣,走之前最後一個項目,本著好聚好散的態度,我以平常態度完成了代碼,結果提交給老闆審查的時候,老闆說,你寫這麼複雜幹嘛?給多少錢做多少事,並且你寫這麼複雜,以後誰來維護?把這些邊路條件判斷全刪了,不用catch這些exception了,死就讓他死了。到時候用戶會加錢來增強功能的blabla

於是,我走之前寫了一段極簡單毫無任何錯誤判斷的代碼。


—————————————————
如果贊過50我明天再分享幾個奇葩案例給大家把,賣方市場強勢的it領域就會誕生很多大家平時見不到的情況


我很久很久以前曾經經歷的一個公司特別傻比,人力資源和svn管理員不懂程序。
作為服務端的主程序,一直以來都是代碼精簡,效率最優,沒有冗餘為畢生追求。
突然我無意中發現了一個秘密,我的績效居然不如幾個公司剛招進來的新手。
我每天刻苦努力,優化代碼,讓公司的服務端7*24穩穩跑在伺服器上,還一心研究各種熱切換,換來績效考核好久沒有優秀了。
這究竟是為什麼呢,後來好心人告訴我,人力資源說了,他們看了svn的日誌記錄,其他人工作很努力,每天提交很多代碼,每天新編寫很多很多代碼文件,貢獻了好多好多的勞動成果。
而看看你這個號稱技術排第一的傢伙,根本就沒幹活嘛,3個月下來,你一共就寫了這麼十來個cpp和.h,每天改來改去就這麼幾個文件,還好多天差不多行數的位置回改,根本就一直在偷懶。
我聽完以後以後直介面吐鮮血,無語至極了。
然後我就申請離職了,在那個公司剩下不多的日子了,我為了心安理得的拿最後2個月的工資,為了讓老闆知道其實我一直很努力,我在最後一個月更新了幾千個文件,讓服務端的內核穩定度下降了好幾個檔次,內存消耗上漲了好多個數量級,並且把容易讀,容易後續擴展的部分,全部用c++最高級的模版進行擴展,同時刪掉了我以前用彙編寫的優化代碼。
嗯,我想以後這個公司估計會倒閉,我走了以後,再也沒有人能維護這份代碼了,估計3個月以後,我自己也搞不定了。
然後我就離職了,離職之前老闆大誇我厚道,最後一個月還給公司做了這麼多的事情,別人走都是刪代碼,我居然還毫無保留的為公司做出貢獻。
然後我走了不到半年,公司就呵呵了。
我想那是我此生唯一寫垃圾代碼寫的心安理得的一次機會了。


根本不懂自己寫出的這個產品有個屁用。


先把功能實現了,然後再優化代碼!然後故事發展的路線就是這樣:實現功能--實現功能--實現功能--實現功能--實現功能--實現功能......
然後就離職了!


感覺好的程序員不能同時做到心安理得和寫出低質量代碼.


一切技術問題歸根到底都是人的問題,包括不寫代碼的人的問題。對得起自己的職業素養,對得起報酬,其他的愛咋咋地。


「別想太多,先讓代碼work起來,大家都這麼乾的!」簡直是神借口啊!
------------------------------------------------------------------------------------------------------

  • 心安理得地寫出低質量的代碼

親,我是個傻逼來的,從來就沒見過好代碼或者根本不知道好代碼長啥樣子。我一直寫爛代碼,專註爛代碼30年,挖坑挖到天荒地老。這不叫心安理得,而是天真無邪爛漫蠢!!!因為無知,所以不存在良心被譴責的問題。

  • 最終寫出了低質量代碼卻不在之後改善它

代碼能work,我看不出有bug。喂喂,QA也測不出有bug啊。寫單測浪費時間啦,我還有更多的代碼要寫。再說,這個東西也不好測試啊,別太認真啦。。。由於原因A,我那麼爛,我根本就不知道我寫的代碼很爛啊啊啊啊!
哦哦,還有還有,我今天已經加班到11點了啊,確實不想再clean up以前的mess了。哦哦哦!不對,那些爛代碼是離職的大石君寫的。太君,不是我的錯啊,我只是帶路的啊啊啊!

綜上所述:
不知者不罪,我都不知道我的代碼爛,那何來改善?或者,我加班加成狗,哪有時間改善?

PS:有鑒於我實在太爛了,有可能越改越爛,化神奇為腐朽,而且還會引入更多的bug。不不不!QA會測出來的!我絕壁不能這麼干!!!既然能work,就讓它這樣好了恩恩。


如果項目重頭開始都是自己開發,或者自己主導開發,那代碼潔癖是必然的。。
只不過當你拿到一個屎一樣的需求、要你在一個屎一樣的架構上改動別人屎一樣的代碼然後實現屎一樣的功能,甚至連屎一樣的文檔都不給我,不好意思,那我只能屎一樣地實現了。。


呃……這麼晚了居然……好吧先謝喵(邀?)

要說讓大家心安理得的寫出來低質量代碼,至少我這裡常見的理由是:

1、先讓程序跑起來。只要能讓領導們看到現象就行了。

1.1、這個模塊的現象出來了?來我們放下這個工作先來做下一個模塊(以及以後再也不會想起來現在的這個模塊了)。

1.2、現象出來了?ok,那麼就當程序調通了。交工!

2、你讓我做太空梭卻只給了我做遙控飛機的錢?呵呵,那你看到最後交工的是一個塑料太空梭也就別怪我工作不盡心盡責了。

3、什麼叫低質量的代碼?什麼叫單元測試?什麼叫聯調?什麼叫黑盒測試?還有什麼壓力測試性能測試我都統統不知道啊。我本科是學機械啊怎麼可能知道這些東西啊。你看看編譯器又報了50個error和100個warning,我先去看看到底哪一行少寫了點啥……


給多少錢,出多少力


告訴我你的代碼不重要,不會合入。他媽的!
不過還有一種是真正的名正言順寫爛代碼,那就是原型代碼。
我不知道這東西在別的地方怎麼叫,大致就是:要實現一個功能,但這個功能到底是啥樣子誰也沒底,所以就先弄個草稿出來,先把這功能跑起來看看再說。
這種代碼的應用場景大概有這些:
1,測試驗證:比如開發了一種演算法,但不知道這種演算法是否可行,於是用原先的笨演算法先寫一個原型出來,然後對比兩種演算法跑出來的結果,以此來驗證前者的準確性。
2,客戶需求分析:客戶提出了一種功能,為了管控開發過程於是先在短時間內做一個粗糙的原型show給客戶看,以此確認客戶需求,有時候客戶太急切要了,你告訴他這是個爛軟體他也非得要。
3,測試代碼:在做單元測試的時候通常需要打樁,但有的數據很難模擬,於是就用複製粘貼東拼西湊先改出一個上下文出來,就算有內存泄漏也不管了,反正我就要那一點功能。
4,可行性分析:大概就是這個功能或架構很複雜,設計者也不知道這樣可不可行,於是就先馬馬虎虎做一個出來,只做功能測試,用來驗證類似這個齒輪在實際運轉過程中咬合的怎麼樣之類的問題。通常在寫並行非同步類代碼的時候經常搞這些,經常是測試代碼比被驗證代碼多幾倍。


確實不能心安,所以我回家又在github上寫了一晚上的代碼.


LZ真的覺得程序員寫出低質量的代碼是需要理由的嗎?
非也,大多數程序員只把寫代碼當作謀生的手段而已,上個班、領點錢。

Because they do not care.

寫出高質量的代碼,反而是需要理由的。


推薦閱讀:

培訓班輸出的2百萬「碼農」會對IT行業造成什麼影響?
中國電信國際出口是否存在網速問題?
中國有哪些互聯網的國際出口,周邊有什麼國際線路?
現在什麼職業最容易被人工智慧取代?
IT 大牛是怎樣煉成的?

TAG:互聯網 | 程序員 | 編程 |