日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

25,000,000 行的代码就问你敢不敢动?!

發(fā)布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 25,000,000 行的代码就问你敢不敢动?! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


導(dǎo)讀:你經(jīng)歷過絕望嗎?


前一段時間,Hacker News 上發(fā)起了一個名為“你見過最糟糕的代碼是什么?”的話題,引發(fā)了無數(shù)網(wǎng)友回憶討論,甚至還再次讓軟件巨頭 Oracle 登上頭條。


鏈接:

https://news.ycombinator.com/item?id=18442637


本文經(jīng)授權(quán)轉(zhuǎn)自公眾號CSDN(ID:CSDNnews),作者:屠敏




01 25,000,000 行的代碼就問你敢不敢動?!


日前,我們還在說如今的 Oracle?慘遭亞馬遜、Salesforce 棄用,究其根本原因,不是因?yàn)閬嗰R遜等企業(yè)為了省錢,而是因?yàn)?Oracle 數(shù)據(jù)庫逐漸滿足不了他們業(yè)務(wù)的發(fā)展需求。


在 Oracle 內(nèi)部,相比每隔六個月就更新一次的 Java,Oracle 數(shù)據(jù)庫版本的更新頻率可以用 2-3 年甚至更久來表示。就在上文所述的?Hacker News 話題中,來自 Oracle 的程序員為我們解釋了其中的緣由,龐大的 Oracle 數(shù)據(jù)庫并不像外人看得那么簡單,修復(fù) Bug 可以分分鐘讓人奔潰。


該程序員以?Oracle 數(shù)據(jù)庫 12.2 版本為例,它擁有了近?2500 萬行的 C 代碼。


每次更新,你需要在不破壞現(xiàn)有測試 1000 次的情況下更改產(chǎn)品中的單行代碼。就 Oracle 數(shù)據(jù)庫產(chǎn)品而言,是好幾代程序員在有限的期限內(nèi)編寫的這些代碼,但與此同時,這些代碼中也充斥著大量的垃圾代碼。


非常復(fù)雜的邏輯、內(nèi)存管理、上下文切換等都與數(shù)千個 flag 一起保存。整個代碼都帶有神秘的宏命令,如果沒有使用筆記本而是手動擴(kuò)展相關(guān)的宏,那么你就無法清楚地明白這些宏。甚至可能需要一天到兩天才能真正理解某個宏的作用。


有時你需要了解 20 個不同 flag 的值和效果來預(yù)測代碼在不同情況下的行為方式。有時多達(dá)數(shù)百個 flag!“我并不夸張。”該程序員表示道。


Oracle 這個產(chǎn)品仍然存活并且可以供企業(yè)和開發(fā)者使用的唯一原因是數(shù)百萬次測試!



接下來,該程序員分享了 Oracle 數(shù)據(jù)庫開發(fā)人員的日常:


- 開始處理一個新的 Bug。


- 花兩周的時間試圖了解 20 種不同的 flag,這些 flag 以神秘的方式相互作用,造成了這個困境。


- 再添加一個 flag 來處理新的特殊情況。添加幾行代碼來檢查此 flag 并解決有問題的情況,避免該 Bug。


- 將更改提交到包含大約 100 到 200 臺服務(wù)器的測試服務(wù)器集群,這些服務(wù)器將編譯代碼,構(gòu)建新的 Oracle 數(shù)據(jù)庫,并以分布式方式運(yùn)行數(shù)百萬個測試。


- 下班回家。第二天來上來,繼續(xù)做其他事情。測試可能需要 20 小時到 30 小時才能完成。


- 一天結(jié)束,下班回家。再來上班時,檢查前天的集成測試結(jié)果。如果幸運(yùn)的話,將會大約有 100 個失敗的測試。如果運(yùn)氣不好,將大約會有 1000 個失敗的測試。隨機(jī)選擇一些測試并嘗試了解你的假設(shè)出了什么問題。也許還有 10 多個 flag 要考慮才能真正理解 Bug 的本質(zhì)。


- 添加一些 flag 來嘗試解決問題。再次提交更改以進(jìn)行測試。再等 20 到 30 個小時。


- 另外,重復(fù)以上步驟大概兩周左右,直到你能得到將這些 flag 組合起來的“神秘咒語”(沒有錯誤發(fā)生)。


- 終有一天,你會成功,帶來測試失敗為零的結(jié)果。


- 針對你新更改的部分添加 100 多個測試,以確保下一個不幸接觸這段新代碼的開發(fā)人員永遠(yuǎn)不會破壞你的修復(fù)程序。


- 完成最后一輪的測試提交工作。然后提交以供審核。審查本身可能還需要 2 周到 2 個月。所以現(xiàn)在繼續(xù)討論下一個 Bug。


- 在 2 周到 2 個月之后,當(dāng)一切都完成后,代碼將最終合并到主分支中。


以上是在 Oracle 修復(fù) Bug 的程序員日常的非夸張描述。現(xiàn)在想象一下開發(fā)新功能會有多么恐怖。開發(fā)一個小功能需要 6 個月到一年(有時是兩年!比如添加一種新的身份驗(yàn)證模式,比如支持 AD 身份驗(yàn)證),現(xiàn)在也可以理解為什么 Oracle 數(shù)據(jù)庫的更新速度永遠(yuǎn)追不上 Java 了。


而對于這款產(chǎn)品可以商用也真的是一個奇跡。到了最后,這名程序員崩潰地說:我不再為 Oracle 工作了。永遠(yuǎn)不會再為 Oracle 工作了!



對于這一現(xiàn)狀,更有不少網(wǎng)友表示了同情:


@nathan_f77:這絕對是瘋了。 我甚至無法想象代碼庫的復(fù)雜性。我認(rèn)為我的 Rails 測試套件已經(jīng)很慢了,因?yàn)樗枰?4 分鐘。如果我用 C 或 C ++ 編寫它可能是 10 秒。


我無法想象一個 C / C ++ 的應(yīng)用程序,其中測試套件在具有 100-200 臺服務(wù)器上需要 20-30 小時。如果你僅更改一次之后突破 100-1000 次測試,那么它就不像獨(dú)立的模塊化那樣了。


測試運(yùn)行間隔 30 小時! 我絕對不會接受這份工作, 因?yàn)楣饴犉饋?#xff0c;就像是地獄。



02 rm?-rf 的怨念


那如果說在 2500 萬行的代碼上動刀,光是測試就已經(jīng)如此復(fù)雜了,除了之外,是否還有比這更可怕的代碼?


必須有!


讓很多程序員后悔到想剁手的“rm -rf”絕對要算一個,糟糕的不是命令行本身,而是它帶來的后果。此前,不僅有順豐程序員的刪庫跑路事件,就連前MegaEase 創(chuàng)始人&CTO 陳浩(微博@左耳朵耗子)也未能逃脫該命令行帶來的魔咒。


那年寫 Unix Shell 腳本,本想刪除一些臨時的子目錄,如:rm -rf ${mydir}/ ,結(jié)果呢,我沒檢查 ${mydir} 這個變量是否為空,于是呢,在某種情況下,這變量真的為空了,于是,我成了團(tuán)隊(duì)的千古罪人。




03 那些年,我們見過和創(chuàng)造的“渣渣”代碼


論起是否遇到過糟糕的代碼時,天下的程序員似乎有著極高的相似性,在此,更有知乎網(wǎng)友吐槽:


@小豬:


if (b == true) {...}


我不常寫 C,不知道 C 程序員是不是覺得這種寫法是理所當(dāng)然的,但當(dāng)我在 Java 代碼中頻繁的看到這種代碼的時候,我真的很無力。


@周越:


(a != b) ? b : a


@侯杰:


enum?FiveLine
{
??Gold,
??Wood,
??Water,
??Fire,
??Earth,
};


看枚舉名字不知道五行(hang)是什么鬼,看了枚舉內(nèi)容恍然大霧,原來是五行(xing)……


@玻璃杯中的魚:


// 以下所有l(wèi)eft代表右

// 以下所有right代表左


鏈接:

https://www.zhihu.com/question/30776912



04 寫在最后


在程序員的日常生活中,面對參差不齊的代碼,Debug 成功了叫創(chuàng)新,失敗了叫掉坑。但是,如今的大牛哪一個又不是在寫 Bug 與?Debug 中博弈過來的呢,也正是有了這些糟糕的代碼才能讓彼時的菜鳥們真正得以歷練。


你曾經(jīng)又寫過哪些讓你后來捂臉的糟糕代碼?歡迎下方留言,分享那些年的菜鳥歲月。


本文經(jīng)授權(quán)轉(zhuǎn)自公眾號CSDN(ID:CSDNnews),作者:屠敏



據(jù)統(tǒng)計,99%的大咖都完成了這個神操作



更多精彩


在公眾號后臺對話框輸入以下關(guān)鍵詞

查看更多優(yōu)質(zhì)內(nèi)容!


PPT?|?報告?|?讀書?|?書單

大數(shù)據(jù)?|?揭秘?|?人工智能?|?AI

Python?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?神經(jīng)網(wǎng)絡(luò)

可視化?|?區(qū)塊鏈?|?干貨?|?數(shù)學(xué)


猜你想看


  • 燒腦科普:從亞里士多德到牛頓,7位大佬都被這個問題搞懵了

  • 干貨:4個小技巧助你搞定缺失、混亂的數(shù)據(jù)(附實(shí)例代碼)

  • NumPy入門攻略:手把手帶你玩轉(zhuǎn)這款強(qiáng)大的數(shù)據(jù)分析和計算工具

  • 谷歌最新開源前端框架了解一下?前端小白都能看懂的8本書



Q:?你都遇到過哪些讓你抓狂的代碼?

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉(zhuǎn)載 / 投稿請聯(lián)系:baiyu@hzbook.com

更多精彩,請在后臺點(diǎn)擊“歷史文章”查看

總結(jié)

以上是生活随笔為你收集整理的25,000,000 行的代码就问你敢不敢动?!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。