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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

電子工程師 ? 來源:lq ? 2018-12-12 09:51 ? 次閱讀

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

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

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

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

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

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

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

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

Oracle 這個產品仍然存活并且可以供企業和開發者使用的唯一原因是數百萬次測試!

接下來,該程序員分享了 Oracle 數據庫開發人員的日常:

- 開始處理一個新的 Bug。

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

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

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

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

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

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

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

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

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

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

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

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

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

對于這一現狀,更有不少網友表示了同情:

@nathan_f77:這絕對是瘋了。 我甚至無法想象代碼庫的復雜性。我認為我的 Rails 測試套件已經很慢了,因為它需要 4 分鐘。如果我用 C 或 C ++ 編寫它可能是 10 秒。

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

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

rm-rf 的怨念

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

必須有!

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

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

那些年,我們見過和創造的“渣渣”代碼

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

@小豬:

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

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

@周越:

(a != b) ? b : a

@侯杰:

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

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

@玻璃杯中的魚:

// 以下所有left代表右

// 以下所有right代表左

寫在最后

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3845

    瀏覽量

    64619
  • 代碼
    +關注

    關注

    30

    文章

    4823

    瀏覽量

    68948
  • Oracle
    +關注

    關注

    2

    文章

    296

    瀏覽量

    35200

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

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TLC1514的初始化問題,是直接寫“A000+12位數據” 還是寫“A000+AXXX” ?

    TLC1514的初始化問題: 是直接寫“A000+12位數據” 還是寫“A000+AXXX” ? 在數據表中沒太看明白。 謝謝!
    發表于 12-31 07:13

    AFE5816在12位ADC的應用中,0V輸入對應的輸出是12‘h000還是12’h800?

    在12位ADC的應用中,0V輸入對應的輸出是12‘h000還是12’h800? 對AFE5805來說都在對代碼最高位取反才,但是5816貌似不行,但手冊上也沒找到說明?。。?
    發表于 12-09 08:33

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

    幾個月前寫了一篇文章“如何寫出難以維護的代碼”,從中能大概了解到不好維護的代碼是什么樣,有哪些壞味道,那肯定有人會反問,難以維護的代碼見的太多了,也知道長什么樣,但是對于好維護的代碼
    的頭像 發表于 09-09 16:30 ?393次閱讀
    <b class='flag-5'>代碼</b>整潔之道-大師眼中的整潔<b class='flag-5'>代碼</b>是什么樣

    愛普生S1X8H000和S1K8H000系列單芯片DMOS-ASIC1

    開始接受S1X8H000和S1K8H000系列DMOSASIC的國內訂單。與此同時,隨著世界越來越關注應對全球變暖的努力為了實現可持續發展,半導體市場正在尋求解決電
    的頭像 發表于 08-15 10:22 ?359次閱讀
    愛普生S1X8H<b class='flag-5'>000</b>和S1K8H<b class='flag-5'>000</b>系列單芯片DMOS-ASIC1

    國內低代碼平臺推薦--萬界星空科技低代碼平臺

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

    NONOS_SDK 1.5.4.1導致致命錯誤的補丁怎么處理?

    從 1.5.4 代碼庫返回對應用程序二進制文件進行編程,我的應用程序將正常啟動。 見過類似的問題嗎?
    發表于 07-11 07:57

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

    提高RT-Thread代碼的容錯率和降低耦合度是確保代碼質量和可維護性的關鍵,下面列舉了幾種在編寫代碼時,提高代碼容錯率和降低耦合度的思路。讓我們一起來看看吧~一、提高
    的頭像 發表于 06-26 08:10 ?735次閱讀
    該如何提高<b class='flag-5'>代碼</b>容錯率、降低<b class='flag-5'>代碼</b>耦合度?

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

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

    如何提升代碼質量與效率的秘訣

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

    在uCGUI的回調函數里加了代碼,stm32無法啟動怎么解決?

    我是一個初學者。最近在寫一個uCGUI上的小應用的時候遇到了這樣的問題,我在MULTIEDIT控件的回調函數里加了一代碼,運行我自己寫的一個用于計算的函數,在沒有加這一代碼的時候運
    發表于 04-24 07:06

    賈揚清的500代碼,掀翻了Perplexity5.2億的桌子?

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

    怎么給stm8s000f3燒錄.bin文件?

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

    GitHub Copilot:代碼超級助手!程序員的最強福音

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

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

    G代碼和M代碼是數控機床程序中常用的兩種指令代碼,用于控制數控機床的工作動作和運動方式。 G代碼是指控制機床工作動作的指令代碼,它是一種簡單
    的頭像 發表于 02-14 15:49 ?4613次閱讀

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

    當前問題:在用戶代碼運行期間,嘗試刷寫codeflash(0x11000000-0x1100f000)后,flash刷寫失敗且中斷停止響應。 請問能否直接刷寫codeflash?可以的話,應怎么操作?
    發表于 01-31 08:28
    主站蜘蛛池模板: 91亚洲精品福利在线播放 | 2020精品极品国产色在线 | 美女叉腿掰阴大胆艺术照 | 国产在线精品亚洲第一区 | 被男按摩师添的好爽在线直播 | 国产午夜人成在线视频麻豆 | 拔萝卜在线高清观看视频 | 嗯啊快停下我是你老师啊H 嗯啊快拔出来我是你老师视频 | 老师的玉足高跟鞋满足我 | yellow日本动漫高清 | 久久国产精品永久免费网站 | 99久热这里精品免费 | 国产av免费观看日本 | 羞羞影院午夜男女爽爽影院网站 | 免费观看高清黄页网址大全 | 草莓在线观看 | 男人扒开添女人屁股 | 4484在线观看视频 | 日本人奶水中文影片 | 真人裸交有声性动态图 | 羞羞答答的免费视频在线观看 | 精品久久久99大香线蕉 | 日日日操操操 | 日本高清无卡码一区二区久久 | 国产精品一区二区亚瑟不卡 | 你的欲梦裸身在线播放 | 泡妞高手在都市完整版视频免费 | 国产亚洲视频中文字幕 | 日本一区精品久久久久影院 | 一二三四在线高清中文版免费观看电影 | 国产亚洲精品字幕在线观看 | 考好老师让你做一次H | 久久水蜜桃亚洲AV无码精品偷窥 | 亚洲欧美一级久久精品 | 久久99热狠狠色一区二区 | 中文无码熟妇人妻AV在线 | seyeye在清在线 | 污污内射久久一区二区欧美日韩 | 蜜臀AV久久国产午夜福利软件 | 综合色中色 | 村妇偷人内射高潮迭起 |