“三行代码,确实需要耗上一整天!”
導(dǎo)讀:迭代時(shí)間短有多重要?
作者:Adam Berg,譯者:彎月
本文經(jīng)授權(quán)轉(zhuǎn)自公眾號(hào)CSDN(ID:CSDNnews)
我先后曾在五家軟件公司工作,其中既有游戲開(kāi)發(fā)、移動(dòng)開(kāi)發(fā),也有 Web 開(kāi)發(fā)。回顧以前的工作經(jīng)歷,我認(rèn)為有一個(gè)問(wèn)題始終未能得到應(yīng)有的重視,那就是:迭代時(shí)間。本來(lái)我打算寫(xiě)一篇有關(guān)構(gòu)建時(shí)間的文章,但我認(rèn)為迭代時(shí)間能夠更準(zhǔn)確地表達(dá)我的想法。
注:本文中的迭代時(shí)間指的是,看到修改后的代碼能夠按照預(yù)期工作所需的時(shí)間。
這篇文章的目的是幫助我們反思當(dāng)前的開(kāi)發(fā)流程。想一想,在你們的流程中,哪些環(huán)節(jié)占據(jù)的時(shí)間超出了實(shí)際的需要?我們都知道單元測(cè)試的好處,但因?yàn)榍疤岬耐度胩?#xff0c;所以很多人都不想做。
01 每次都需等待 15 秒,才能看到代碼錯(cuò)在哪里
2014 年,我以一名實(shí)習(xí)生的身份加入了 FIFA 團(tuán)隊(duì),對(duì)于當(dāng)時(shí)的我來(lái)說(shuō),3A 游戲開(kāi)發(fā)完全是一個(gè)陌生的新世界。我記得當(dāng)我看到我的電腦有 16 個(gè) CPU 核心時(shí),十分驚訝。我還記得,當(dāng)時(shí)我按照說(shuō)明進(jìn)行了設(shè)置,并得知第一次構(gòu)建需要 30 分鐘的準(zhǔn)備時(shí)間。不過(guò),據(jù)說(shuō)之后的增量構(gòu)建會(huì)快很多。
雖然增量構(gòu)建確實(shí)快了許多,但每修改一行代碼仍然需要花費(fèi) 10 秒來(lái)編譯。當(dāng)時(shí)的我還是一名 C++ 開(kāi)發(fā)新手,犯的語(yǔ)法錯(cuò)誤數(shù)量很多。每次修改完代碼,都需要等待 15 秒,才能看到究竟哪里錯(cuò)了。
02 修改三行代碼確實(shí)需要一整天的時(shí)間
我會(huì)在等待期間找一些別的事情做,比如上網(wǎng)查資料,修改其他代碼,或者檢查郵件等。因此,難免會(huì)分心,往往一個(gè)不小心就過(guò)了幾分鐘,才想起來(lái)檢查編譯狀態(tài)。
然而,編譯只是第一步。接下來(lái),我還需要打包應(yīng)用程序,并部署到我使用的游戲機(jī)。最初,我使用的是 PS Vita、Nintendo 3DS 和 Nintendo Wii,這就又需要花費(fèi)半分多鐘才能完成游戲的加載。接著,我需要啟動(dòng)游戲,找到我負(fù)責(zé)的游戲區(qū)域,然后才能看到代碼的修改結(jié)果。
當(dāng)時(shí)我負(fù)責(zé)的是競(jìng)技邏輯部分。為了測(cè)試前后變化,我需要在生涯模式中進(jìn)行至少幾個(gè)賽季,才能測(cè)試自己的修改。
所以,不是開(kāi)玩笑,修改三行代碼確實(shí)需要一整天的時(shí)間,才能知道是否可以正常工作。
03 調(diào)試工具
后來(lái),我開(kāi)始使用較新的游戲機(jī),并開(kāi)始接觸 testbed。這些 testbed 不過(guò)是一些精簡(jiǎn)的游戲包,僅包含特定的代碼,目的是縮減迭代時(shí)間。在找到生涯模式的 testbed 后,我?guī)缀踉僖矝](méi)有運(yùn)行過(guò)整個(gè)游戲。這個(gè) testbed 可以在幾秒內(nèi)構(gòu)建完畢,而且還包含各類調(diào)試功能。testbed 可以在 PC 機(jī)上運(yùn)行,因此可以大幅提高效率。
在發(fā)現(xiàn)這款工具后,我非常激動(dòng)!但我發(fā)現(xiàn)周圍的很多人都不知道如何使用這個(gè)工具。他們只是按照原有的方式啟動(dòng)完整的游戲,手動(dòng)找到所需的位置,然后測(cè)試代碼的變更。很快,我就熟練地掌握了 testbed,并添加了很多新功能,大幅地減輕了開(kāi)發(fā)新功能的負(fù)擔(dān)。
不過(guò),偶爾我還是需要運(yùn)行完整的游戲,但這個(gè) testbed 提供了很多便利性,我能夠在 testbed 上快速實(shí)驗(yàn),然后看看代碼的運(yùn)行。此外,我還能夠借助 testbed 快速解決實(shí)際的問(wèn)題。
04 單元測(cè)試
后來(lái),我又換了一個(gè)團(tuán)隊(duì)。我發(fā)現(xiàn),這個(gè)團(tuán)隊(duì)已經(jīng)全面實(shí)施了單元測(cè)試。雖然當(dāng)時(shí)我有一些單元測(cè)試的經(jīng)驗(yàn),但從未在游戲開(kāi)發(fā)中使用過(guò)。
我簡(jiǎn)單地學(xué)習(xí)了代碼、不同的測(cè)試,以及如何運(yùn)行我們的游戲。我發(fā)現(xiàn),實(shí)際上測(cè)試包只包含我們團(tuán)隊(duì)負(fù)責(zé)的特定游戲部分。第一次構(gòu)建大概需要 10 秒,之后的增量構(gòu)建可能不到 1 秒。
這個(gè)數(shù)字對(duì)我的工作有非常重要的影響——因?yàn)榫幾g和測(cè)試能在不到 1 秒的時(shí)間內(nèi)完成,所以我就可以專注于一項(xiàng)任務(wù)了。編譯和邏輯錯(cuò)誤是不可避免的。但是,當(dāng)我可以快速發(fā)現(xiàn)錯(cuò)誤并重新編譯時(shí),整個(gè)工作狀態(tài)就變得流暢起來(lái),再也不會(huì)磕磕絆絆了。
我第一次享受到在工作中編寫(xiě)代碼的樂(lè)趣:重構(gòu)和移動(dòng)大塊代碼非常簡(jiǎn)單,修改別人的代碼也非常容易,并且我的修改不會(huì)導(dǎo)致整個(gè)游戲崩潰。因此,修改代碼的焦慮也就是消失了。
我著手重寫(xiě)競(jìng)技模式的邏輯,并添加了單元測(cè)試。單元測(cè)試基本可以覆蓋各種各樣的邊緣情況。在最終離開(kāi)公司的時(shí)候,我感覺(jué)很放心,因?yàn)槲业拇a擁有自己的檢查系統(tǒng)。原本我需要花費(fèi)大量時(shí)間確認(rèn)的錯(cuò)誤如今已經(jīng)被編寫(xiě)到了測(cè)試規(guī)范中。
05 總結(jié)
回顧這段工作經(jīng)歷,我心懷感激。在這個(gè)項(xiàng)目中,我親身感受到長(zhǎng)期的工程計(jì)劃為開(kāi)發(fā)人員的日常工作提供的便利。在某些時(shí)候,必須有人站出來(lái)說(shuō):“測(cè)試這些代碼變更需要花費(fèi)很長(zhǎng)時(shí)間,難道我們就沒(méi)有更好的方法了嗎?”這也是我們每天都應(yīng)該思考的問(wèn)題。
本文轉(zhuǎn)自公眾號(hào)“CSDN”,ID:CSDNnews
延伸閱讀👇
延伸閱讀《編程原則》
干貨直達(dá)👇
終于有人把ROS機(jī)器人操作系統(tǒng)講明白了
6個(gè)實(shí)例,8段代碼,詳解Python中的for循環(huán)
這10本硬核技術(shù)書(shū),帶你讀懂5G、物聯(lián)網(wǎng)和邊緣計(jì)算,玩轉(zhuǎn)元宇宙
手把手教你獲取、編譯和調(diào)試Flink的源代碼
更多精彩👇
在公眾號(hào)對(duì)話框輸入以下關(guān)鍵詞
查看更多優(yōu)質(zhì)內(nèi)容!
讀書(shū)?|?書(shū)單?|?干貨?|?講明白?|?神操作?|?手把手
大數(shù)據(jù)?|?云計(jì)算?|?數(shù)據(jù)庫(kù)?|?Python?|?爬蟲(chóng)?|?可視化
AI?|?人工智能?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?NLP
5G?|?中臺(tái)?|?用戶畫(huà)像?|?數(shù)學(xué)?|?算法?|?數(shù)字孿生
據(jù)統(tǒng)計(jì),99%的大咖都關(guān)注了這個(gè)公眾號(hào)
👇
總結(jié)
以上是生活随笔為你收集整理的“三行代码,确实需要耗上一整天!”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 详解自然语言处理5大语义分析技术及14类
- 下一篇: 史上最全!用Pandas读取CSV,看这