chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

你見過最糟糕的代碼是什么?25,000,000 行的代碼就問你敢不敢動?

電子工程師 ? 來源:lq ? 2018-12-12 09:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

你經(jīng)歷過絕望嗎?近日,Hacker News 上發(fā)起了一個名為“你見過最糟糕的代碼是什么?”(https://news.ycombinator.com/item?id=18442637)的話題,引發(fā)了無數(shù)網(wǎng)友回憶討論,甚至還再次讓軟件巨頭 Oracle 登上頭條。

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

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

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

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

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

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

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

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ù)庫,并以分布式方式運行數(shù)百萬個測試。

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

- 一天結(jié)束,下班回家。再來上班時,檢查前天的集成測試結(jié)果。如果幸運的話,將會大約有 100 個失敗的測試。如果運氣不好,將大約會有 1000 個失敗的測試。隨機選擇一些測試并嘗試了解你的假設(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 的程序員日常的非夸張描述?,F(xiàn)在想象一下開發(fā)新功能會有多么恐怖。開發(fā)一個小功能需要 6 個月到一年(有時是兩年!比如添加一種新的身份驗證模式,比如支持 AD 身份驗證),現(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)很慢了,因為它需要 4 分鐘。如果我用 C 或 C ++ 編寫它可能是 10 秒。

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

測試運行間隔 30 小時! 我絕對不會接受這份工作, 因為光聽起來,就像是地獄。

rm-rf 的怨念

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

必須有!

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

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

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

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

@小豬:

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

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

@周越:

(a != b) ? b : a

@侯杰:

enumFiveLine{Gold,Wood,Water,Fire,Earth,};

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

@玻璃杯中的魚:

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

// 以下所有right代表左

寫在最后

在程序員的日常生活中,面對參差不齊的代碼,Debug 成功了叫創(chuàng)新,改 Bug 失敗叫掉坑,但是,如今的大牛哪一個又不是在寫 Bug 與Debug 中博弈過來的呢,也正是有了這些糟糕的代碼才能讓彼時的菜鳥們真正得以歷練,而對于歷練過程中需要注意什么,對此,CSDN 也曾發(fā)文從代碼的基本規(guī)范和約束、編程思想、版本迭代與重構(gòu)、設(shè)計模式等角度,為大家一一講清如何才能成長為優(yōu)雅的大牛程序員。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    4020

    瀏覽量

    68369
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    74011
  • Oracle
    +關(guān)注

    關(guān)注

    2

    文章

    302

    瀏覽量

    38270

原文標(biāo)題:25,000,000行的代碼就問你敢不敢動?!

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    深開鴻開源鴻蒙社區(qū)主干代碼貢獻(xiàn)量破650萬

    歷經(jīng)五年發(fā)展,開源鴻蒙已從技術(shù)萌芽成長為萬物智聯(lián)時代的核心數(shù)字底座。秉持開源、共建、共享、共榮的理念,其生態(tài)規(guī)模持續(xù)擴張,累計匯聚超10000名貢獻(xiàn)者、510多家合作伙伴,沉淀1.3億代碼
    的頭像 發(fā)表于 01-07 10:22 ?520次閱讀

    探索Broadcom HL3P - 6xC0 - 000xx雙色LED燈的奧秘

    探索Broadcom HL3P - 6xC0 - 000xx雙色LED燈的奧秘 在電子設(shè)備的設(shè)計中,指示燈的選擇至關(guān)重要,它不僅要滿足功能需求,還要考慮到成本、易用性等多方面因素。今天,我們就來詳細(xì)
    的頭像 發(fā)表于 12-30 14:05 ?905次閱讀

    KYOCERA AVX 9289 - 000 防水線對線連接器:工業(yè)應(yīng)用的理想之選

    KYOCERA AVX 9289 - 000 防水線對線連接器:工業(yè)應(yīng)用的理想之選 在電子設(shè)備的設(shè)計與制造中,連接器的性能和適用性對整個系統(tǒng)的穩(wěn)定性和可靠性起著至關(guān)重要的作用。今天,我們就來詳細(xì)
    的頭像 發(fā)表于 12-30 10:40 ?308次閱讀

    KYOCERA AVX 9169 - 000 線對板卡邊緣連接器:創(chuàng)新設(shè)計與卓越性能

    KYOCERA AVX 9169 - 000 線對板卡邊緣連接器:創(chuàng)新設(shè)計與卓越性能 作為電子工程師,我們在設(shè)計中常常需要為 PCB 與電線的連接尋找可靠且高效的解決方案。今天,就來和大家
    的頭像 發(fā)表于 12-30 10:35 ?507次閱讀

    KYOCERA AVX 9288 - 000 系列雌雄同體連接器:設(shè)計與應(yīng)用指南

    KYOCERA AVX 9288 - 000 系列雌雄同體連接器:設(shè)計與應(yīng)用指南 在電子設(shè)備的設(shè)計中,連接器的選擇至關(guān)重要,它直接影響到設(shè)備的性能、可靠性和安裝便捷性。今天,我們來詳細(xì)
    的頭像 發(fā)表于 12-30 10:10 ?505次閱讀

    分析嵌入式軟件代碼的漏洞-代碼注入

    ,實現(xiàn)自己的目標(biāo)。當(dāng)函數(shù)返回時,攻擊者還可以將指令要被送達(dá)的地址覆蓋重寫。 2、避免代碼注入 避免代碼注入的最佳方法是通過設(shè)計。 如果可以使用一種***不會出現(xiàn)漏洞的語言,那么這是最好的因為
    發(fā)表于 12-22 12:53

    安寶特 FME:零代碼實時數(shù)據(jù)管理標(biāo)桿,Safe Software 中國授權(quán)合作首選

    在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)集成、管理效率的需求日益迫切。Safe Software 旗下的 FME 空間數(shù)據(jù)集成平臺,憑借全數(shù)據(jù)兼容、零代碼操作、實時響應(yīng)的核心優(yōu)勢,成為 25,000
    的頭像 發(fā)表于 12-18 17:12 ?695次閱讀

    敢不敢的芯片上榜?RT-Thread最全BSP支持清單重磅更新!| 技術(shù)集結(jié)

    作為全球領(lǐng)先的實時嵌入式操作系統(tǒng),RT-Thread已經(jīng)積累了超過400款芯片的成熟板級支持包(BSP),覆蓋主流架構(gòu)Cortex-M/R/A、AArch64、RISC-V(32/64)以及多種高端SoC,真正做到“拿來即用、開箱即跑”。在此我們希望全面的向大家介紹RT-Thread的BSP(板級支持包)支持現(xiàn)狀,并誠摯邀請每一位嵌入式工程師和芯片合作伙伴,
    的頭像 發(fā)表于 11-22 09:04 ?1174次閱讀
    <b class='flag-5'>敢不敢</b>讓<b class='flag-5'>你</b>的芯片上榜?RT-Thread最全BSP支持清單重磅更新!| 技術(shù)集結(jié)

    HarmonyOS應(yīng)用代碼混淆技術(shù)方案

    代碼混淆技術(shù)可以增加代碼的復(fù)雜性和模糊性,從而提高攻擊者分析代碼的難度。
    的頭像 發(fā)表于 11-21 16:17 ?5613次閱讀
    HarmonyOS應(yīng)用<b class='flag-5'>代碼</b>混淆技術(shù)方案

    Java 25正式發(fā)布,重要特性詳解(附代碼示例):靈活構(gòu)造函數(shù)體、模塊導(dǎo)入聲明、AOT方法分析等

    Java 25現(xiàn)已發(fā)布,更多新特性來了!配合Perforce JRebel,代碼修改即時生效,無需重啟服務(wù),即可實現(xiàn)“改完就看效果”。新特性+快工具,讓的Java開發(fā)體驗雙倍提升!
    的頭像 發(fā)表于 10-29 13:16 ?1477次閱讀
    Java <b class='flag-5'>25</b>正式發(fā)布,重要特性詳解(附<b class='flag-5'>代碼</b>示例):靈活構(gòu)造函數(shù)體、模塊導(dǎo)入聲明、AOT方法分析等

    代碼開發(fā)平臺推薦:2025國內(nèi)低代碼開發(fā)平臺排名TOP10

    代碼開發(fā)平臺排行榜 在企業(yè)數(shù)字化轉(zhuǎn)型的浪潮中,低代碼開發(fā)平臺正逐漸成為企業(yè)實現(xiàn)高效開發(fā)和快速迭代的重要工具。隨著技術(shù)的不斷進(jìn)步和市場需求的持續(xù)增長,低代碼開發(fā)平臺的市場競爭也日益激烈。以下
    的頭像 發(fā)表于 10-28 10:22 ?758次閱讀

    DigiKey 擴充庫存:2025 年第二季度新增 32,000 多種新品現(xiàn)貨

    第二季度公司總體產(chǎn)品組合新增 236,000 多種產(chǎn)品和 127 家供應(yīng)商 美國, 明尼蘇達(dá), 錫夫里弗福爾斯市 - 2025 年 07 月 30 日 2025 年第二季度 DigiKey 在其產(chǎn)品
    的頭像 發(fā)表于 07-31 20:23 ?1287次閱讀
    DigiKey 擴充庫存:2025 年第二季度新增 32,<b class='flag-5'>000</b> 多種新品現(xiàn)貨

    DSG9500-000: 平面光束引線 PIN 二極管 skyworksinc

    電子發(fā)燒友網(wǎng)為提供()DSG9500-000: 平面光束引線 PIN 二極管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有DSG9500-000: 平面光束引線 PIN 二極管的引腳圖、接線圖、封裝手冊、中文資料
    發(fā)表于 07-21 18:35
    DSG9500-<b class='flag-5'>000</b>: 平面光束引線 PIN 二極管 skyworksinc

    T1410162000-000重載連接器現(xiàn)貨庫存

    T1410162000-000重載連接器現(xiàn)貨庫存T1410162000-000是由TE Connectivity制造生產(chǎn)的重載功率連接器底座。屬于AMP HDC系列。該連接器底座通常用于面板安裝
    發(fā)表于 06-20 09:51

    OLED代碼分享

    OLED代碼
    發(fā)表于 04-29 17:04 ?1次下載