色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

你見(jiàn)過(guò)最糟糕的代碼是什么?25,000,000 行的代碼就問(wèn)你敢不敢動(dòng)?

電子工程師 ? 來(lái)源:lq ? 2018-12-12 09:51 ? 次閱讀

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

25,000,000 行的代碼就問(wèn)你敢不敢動(dòng)?!

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

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

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

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

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

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

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

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

- 開(kāi)始處理一個(gè)新的 Bug。

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

- 再添加一個(gè) flag 來(lái)處理新的特殊情況。添加幾行代碼來(lái)檢查此 flag 并解決有問(wèn)題的情況,避免該 Bug。

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

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

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

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

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

- 終有一天,你會(huì)成功,帶來(lái)測(cè)試失敗為零的結(jié)果。

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

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

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

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

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

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

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

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

測(cè)試運(yùn)行間隔 30 小時(shí)! 我絕對(duì)不會(huì)接受這份工作, 因?yàn)楣饴?tīng)起來(lái),就像是地獄。

rm-rf 的怨念

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

必須有!

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

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

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

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

@小豬:

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

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

@周越:

(a != b) ? b : a

@侯杰:

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

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

@玻璃杯中的魚(yú):

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

// 以下所有right代表左

寫(xiě)在最后

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

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

    關(guān)注

    7

    文章

    3822

    瀏覽量

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

    關(guān)注

    30

    文章

    4799

    瀏覽量

    68728
  • Oracle
    +關(guān)注

    關(guān)注

    2

    文章

    289

    瀏覽量

    35144

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TLC1514的初始化問(wèn)題,是直接寫(xiě)“A000+12位數(shù)據(jù)” 還是寫(xiě)“A000+AXXX” ?

    TLC1514的初始化問(wèn)題: 是直接寫(xiě)“A000+12位數(shù)據(jù)” 還是寫(xiě)“A000+AXXX” ? 在數(shù)據(jù)表中沒(méi)太看明白。 謝謝!
    發(fā)表于 12-31 07:13

    AFE5816在12位ADC的應(yīng)用中,0V輸入對(duì)應(yīng)的輸出是12‘h000還是12’h800?

    在12位ADC的應(yīng)用中,0V輸入對(duì)應(yīng)的輸出是12‘h000還是12’h800? 對(duì)AFE5805來(lái)說(shuō)都在對(duì)代碼最高位取反才,但是5816貌似不行,但手冊(cè)上也沒(méi)找到說(shuō)明!!!
    發(fā)表于 12-09 08:33

    代碼整潔之道-大師眼中的整潔代碼是什么樣

    幾個(gè)月前寫(xiě)了一篇文章“如何寫(xiě)出難以維護(hù)的代碼”,從中能大概了解到不好維護(hù)的代碼是什么樣,有哪些壞味道,那肯定有人會(huì)反問(wèn),難以維護(hù)的代碼見(jiàn)的太多了,也知道長(zhǎng)什么樣,但是對(duì)于好維護(hù)的代碼
    的頭像 發(fā)表于 09-09 16:30 ?363次閱讀
    <b class='flag-5'>代碼</b>整潔之道-大師眼中的整潔<b class='flag-5'>代碼</b>是什么樣

    國(guó)內(nèi)低代碼平臺(tái)推薦--萬(wàn)界星空科技低代碼平臺(tái)

    代碼平臺(tái)是一種應(yīng)用程序,它為編程提供圖形用戶界面,從而以極快的速度開(kāi)發(fā)代碼,減少傳統(tǒng)編程工作。 這些工具有助于快速開(kāi)發(fā)代碼,最大限度地減少手工編碼的工作量。這些平臺(tái)不僅有助于編碼,還有助于快速設(shè)置和部署。
    的頭像 發(fā)表于 07-18 15:39 ?320次閱讀
    國(guó)內(nèi)低<b class='flag-5'>代碼</b>平臺(tái)推薦--萬(wàn)界星空科技低<b class='flag-5'>代碼</b>平臺(tái)

    NONOS_SDK 1.5.4.1導(dǎo)致致命錯(cuò)誤的補(bǔ)丁怎么處理?

    從 1.5.4 代碼庫(kù)返回對(duì)應(yīng)用程序二進(jìn)制文件進(jìn)行編程,我的應(yīng)用程序?qū)⒄?dòng)。 見(jiàn)過(guò)類似的問(wèn)題嗎?
    發(fā)表于 07-11 07:57

    該如何提高代碼容錯(cuò)率、降低代碼耦合度?

    提高RT-Thread代碼的容錯(cuò)率和降低耦合度是確保代碼質(zhì)量和可維護(hù)性的關(guān)鍵,下面列舉了幾種在編寫(xiě)代碼時(shí),提高代碼容錯(cuò)率和降低耦合度的思路。讓我們一起來(lái)看看吧~一、提高
    的頭像 發(fā)表于 06-26 08:10 ?687次閱讀
    該如何提高<b class='flag-5'>代碼</b>容錯(cuò)率、降低<b class='flag-5'>代碼</b>耦合度?

    STM32CUBE ETH-&gt;DMABMR一直不為0x000的可能原因是什么呢?

    用的F407+rtl8201F芯片(網(wǎng)口芯片又晶振輸入25M) 調(diào)用官方庫(kù)文件一直卡在下方代碼這,ETH->DMABMR一直不為0x000 while
    發(fā)表于 05-20 06:06

    如何提升代碼質(zhì)量與效率的秘訣

    提高編程能力其實(shí)沒(méi)有捷徑,最佳方式就是多寫(xiě)代碼。 不過(guò),除了寫(xiě)大量代碼,提升編程能力還需要大量閱讀別人寫(xiě)的代碼
    的頭像 發(fā)表于 04-28 14:53 ?407次閱讀
    如何提升<b class='flag-5'>代碼</b>質(zhì)量與效率的秘訣

    在uCGUI的回調(diào)函數(shù)里加了代碼,stm32無(wú)法啟動(dòng)怎么解決?

    我是一個(gè)初學(xué)者。最近在寫(xiě)一個(gè)uCGUI上的小應(yīng)用的時(shí)候遇到了這樣的問(wèn)題,我在MULTIEDIT控件的回調(diào)函數(shù)里加了一代碼,運(yùn)行我自己寫(xiě)的一個(gè)用于計(jì)算的函數(shù),在沒(méi)有加這一代碼的時(shí)候運(yùn)
    發(fā)表于 04-24 07:06

    賈揚(yáng)清的500代碼,掀翻了Perplexity5.2億的桌子?

    500代碼VS估值5億1月25日,自從宣布創(chuàng)業(yè)后就備受社區(qū)矚目的賈揚(yáng)清,在推特上展示了一個(gè)對(duì)話式搜索引擎的demo。這個(gè)demo基于他創(chuàng)辦的LeptonAI提供的框架,“只用500
    的頭像 發(fā)表于 04-17 08:05 ?128次閱讀
    賈揚(yáng)清的500<b class='flag-5'>行</b><b class='flag-5'>代碼</b>,掀翻了Perplexity5.2億的桌子?

    怎么給stm8s000f3燒錄.bin文件?

    求助,怎么給stm8s000f3燒錄.bin文件?謝謝!手里有stlink-v3set
    發(fā)表于 04-10 06:48

    GitHub Copilot:代碼超級(jí)助手!程序員的最強(qiáng)福音

    今天小啟給大家安利一款令人興奮的AI工具——GitHubCopilot。它無(wú)疑是程序員們的最強(qiáng)福音!無(wú)論是新手還是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,GitHubCopilot都將成為代碼超級(jí)助手。想象一下
    的頭像 發(fā)表于 03-05 08:04 ?1155次閱讀
    GitHub Copilot:<b class='flag-5'>你</b>的<b class='flag-5'>代碼</b>超級(jí)助手!程序員的最強(qiáng)福音

    g代碼和m代碼表示什么功能

    G代碼和M代碼是數(shù)控機(jī)床程序中常用的兩種指令代碼,用于控制數(shù)控機(jī)床的工作動(dòng)作和運(yùn)動(dòng)方式。 G代碼是指控制機(jī)床工作動(dòng)作的指令代碼,它是一種簡(jiǎn)單
    的頭像 發(fā)表于 02-14 15:49 ?4468次閱讀

    tle9877刷寫(xiě)codeflash(0x11000000-0x1100f000)后,flash刷寫(xiě)失敗且中斷停止響應(yīng)怎么解決?

    當(dāng)前問(wèn)題:在用戶代碼運(yùn)行期間,嘗試刷寫(xiě)codeflash(0x11000000-0x1100f000)后,flash刷寫(xiě)失敗且中斷停止響應(yīng)。 請(qǐng)問(wèn)能否直接刷寫(xiě)codeflash?可以的話,應(yīng)怎么操作?
    發(fā)表于 01-31 08:28

    淺談代碼優(yōu)化與過(guò)度設(shè)計(jì)

    本文記錄了作者從“代碼優(yōu)化”到“過(guò)度設(shè)計(jì)”的典型思考過(guò)程,這過(guò)程中涉及了很多Java的語(yǔ)法糖及設(shè)計(jì)模式的東西,很典型,能啟發(fā)思考,遂記錄下來(lái)。 有一天Review師妹的代碼,看到一很難看的
    的頭像 發(fā)表于 01-19 10:05 ?557次閱讀
    淺談<b class='flag-5'>代碼</b>優(yōu)化與過(guò)度設(shè)計(jì)
    主站蜘蛛池模板: 影音先锋av天堂| 久久精品亚洲AV中文2区金莲 | 2021国产精品国产精华| 国产网红主播精品福利大秀专区| 青青青青草| 天堂视频在线观看免费完整版| xxx88中国| 日本漫画大全无翼乌| yellow视频免费观看| 日本漫画无彩翼漫画| 丰满大爆乳波霸奶| 同房交换4p好爽| 国产亚洲精品V在线观看一 | 深夜释放自己污在线看| 芳草地在线观看免费观看| 色AV色婷婷66人妻久久久| 国产精品99久久久久久动态图| 午夜影院一区二区三区| 国产精品久久人妻拍拍水牛影视| 老鸭窝毛片| 91黄色影院| 青青草原国产| 国产69精品久久久久麻豆| 熟女人妻-蜜臀AV-首页| 国产人妻精品午夜福利免费不卡| 欧美精品一区二区三区四区| 99久久免费精品国产| 日本夜夜夜| 国产欧洲野花A级| 亚州AV中文无码乱人伦在线| pkf女尸studiosxnxx| 日韩午夜欧美精品一二三四区| 国产精品JK白丝AV网站| 亚洲免费精品视频| 男gv纯肉免费视频| 第一次处破女完整版电影| 亚洲 自拍 偷拍 另类综合图区 | 久久久久免费视频| 成年人视频在线免费播放| 午夜人妻理论片天堂影院| 久久精品国产96精品亚洲|