首頁>Club>
14
回覆列表
  • 1 # 中國城市之旅

    幾年前加入了微軟的Office部門,巨型C++專案。Office一開始是給麥金塔寫的,後來billgates說蘋果的東西太貴了這樣沒人用Office的,於是移植到了Windows。後來麥金塔的東西沒寫了,再後來移植回去,移植了不知道多少年,最近終於100%完成了。這個事情超級難,題主有可能永遠都不能適應這個專案,直到退休。軟體工程神奇的地方就在於,儘管如此,你還是能把東西做出來。

    Office光客戶端的程式碼就有幾百G(不含歷史),所有了解一份程式碼的方法都失效了。什麼編譯後除錯啊,你的硬碟連編譯的log都裝不下,你還想除錯。你能做的就是WinDBG上去,出了問題看看斷在哪裡,下載個符號看到函式名和行號,然後就自己去伺服器看那個程式碼檔案。我們還有一個軟體用來查閱伺服器端的程式碼,基本就是搜字串,沒有任何高階功能,索引也沒地方放,於是乾脆就沒有。

    現在我在改Office的程式碼的時候,就是先看要求,然後去看看大概要改什麼檔案,查一下這檔案以前是誰寫的,挨個拜訪一下問問情況,搞到一個大概的思路之後,開始寫。寫的過程中要依賴很多庫,這些庫都是不可能全部下載下來的,所以編譯的時候,你沒下載的那部分程式碼會被識別出來,然後從伺服器把編譯好的符號和二進位制拉下來連結。

    跨度將近40年的程式碼,每個資料夾下面的風格都不一樣。之前為了改一個安全問題,打開了一個沒有母音字母的檔案,看到都爆炸了。我不知道每一個變數都是什麼意思,也不知道我寫的到底是什麼,只能靠對C++的理解來確保我的改動不會影響到我不該影響到的東西,然後把問題修掉。幸好這個問題是跟業務邏輯無關的,所以我才能這麼做。

    總之,題主想要適應大型C++專案的這個想法從根本上就是有問題的。你要學會如何在根本不知道那個程式碼是幹什麼的情況下把事情做完,這才是正確的思路。

    這讓我想起來,剛進微軟的時候給SQL Profiler修一個幾年前的bug。我以前從來就沒有開啟過那個軟體,然後憑藉著bug的描述,自己手動復現,想辦法把行為改成要求的那個樣子,然後給幾個大佬看了一下好了,就提交了。整個過程中,我根本不知道那個軟體到底在幹什麼,也不知道我寫的程式碼有什麼用,也不知道別人到底用這個來幹嘛,總之反正是做出來了。

    道理都是一樣的。

  • 中秋節和大豐收的關聯?
  • 《甄嬛傳》中演安陵容很出彩的陶昕然為什麼在《演員的誕生》輸給了新人金晨?