最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第8篇:用腦袋執(zhí)行程序,清楚數(shù)據(jù)走向

2020-09-25 16:46 作者:博毅創(chuàng)為  | 我要投稿

前言

每天寫完代碼后,要花很長時間調(diào)試。一個功能還好說,等到后期代碼功能越來越多,bug也越來越多, 慢慢程序就會失控。

很多人問我,如何寫出穩(wěn)定的代碼,如何讓后期的代碼穩(wěn)定,平穩(wěn)的把項目做上線?


我的答案是: "用腦袋執(zhí)行程序,掌握每行代碼后數(shù)據(jù)的走向"。越早明白這個道理,越早寫出穩(wěn)定的程序。

01 開始寫程序時,學(xué)會拋開調(diào)試器。

很多同學(xué)寫代碼時過度依賴調(diào)試器,離開了調(diào)試器就無法寫出正確的程序。

調(diào)試器在開始調(diào)試程序的時候確實是個好東西,但是調(diào)試器調(diào)試的時候,一個一個變量看數(shù)據(jù)會耗費(fèi)很多大量的時間。

計算機(jī)不會像人一樣,是非常準(zhǔn)確的,基本計算是不會錯的。一般錯都是我們的邏輯錯誤,或數(shù)據(jù)錯誤。只要數(shù)據(jù)對,邏輯正確,都能得到正確的結(jié)果。

所以真正寫程序的時候,沒有必要一個一個變量數(shù)據(jù)的核對,這樣會浪費(fèi)時間,同時很多開發(fā)環(huán)境無法下斷點,比如服務(wù)器程序,比如android 真機(jī)環(huán)境,要下個斷點,非常的麻煩。


我鼓勵拋開調(diào)試器,用自己的腦袋來分析與運(yùn)行程序的結(jié)果,核對代碼流程,核對數(shù)據(jù)。

我們剛開始寫程序的時候,要練習(xí)用自己的腦袋看代碼,然后問自己這行代碼執(zhí)行完后得到什么樣的結(jié)果。配合調(diào)試器的時候,加強(qiáng)這種腦袋執(zhí)行程序數(shù)據(jù)的能力。

練習(xí)一段時間以后,你就會清楚地知道自己每寫一行代碼都會得到什么樣的結(jié)果,這樣你寫代碼會變得更穩(wěn)定,同時每行代碼如何跑,在你的腦子里面非常的清晰。

02 了解編程語言核心機(jī)制,了解計算機(jī)運(yùn)行程序機(jī)制。

要能用腦袋清楚地跑出代碼的結(jié)果,就需要你了解編程語言的核心機(jī)制,需要了解清楚計算機(jī)運(yùn)行程序的原理。

腦袋運(yùn)行代碼,就是要搞清楚每行代碼的意思和數(shù)據(jù)有哪些,存放在哪些地方,什么時候分配,如何釋放這些?

你必須要了解計算機(jī)運(yùn)行程序的原理。內(nèi)存開在哪里,什么時候回收,為什么能夠使用?


比如程序的內(nèi)存分為4個段:代碼段,數(shù)據(jù)端,堆,棧。

代碼段用來存放代碼指令,所有的代碼都會加載到代碼段;

數(shù)據(jù)端存放全局變量,內(nèi)存長期存在;

堆用來存放動態(tài)分配的對象,釋放后對象的內(nèi)存回收;

棧是局部變量,函數(shù)參數(shù),函數(shù)返回機(jī)制實現(xiàn)的地方,局部變量的數(shù)據(jù)內(nèi)存。

函數(shù)返回后就被回收了,如何回收的,為什么函數(shù)的return語句,能回到調(diào)用地方的下一條指令,如何做到的?這些在腦袋里面必須要有深刻的認(rèn)識和理解,這樣,每行代碼下來,數(shù)據(jù)分配在哪里,數(shù)據(jù)存儲在哪里,如何回收你都清清楚楚。

把這些東西都搞懂了,那么每行代碼執(zhí)行的時候,產(chǎn)生哪些數(shù)據(jù),導(dǎo)致哪些結(jié)果在腦袋里面就清清楚楚,這樣你就思考了你寫的代碼。經(jīng)過了這樣的思考,自然寫出來后代碼是正確的,這樣你就可以拋開調(diào)試器。


大部分的代碼寫完以后就能得到一個正確的結(jié)果, 自然你寫代碼就會越來越高效,bug自然也就越來越少。同時每行代碼你都用腦袋思考跑程序,反過來也會讓你的代碼寫的越來越好。

很多同學(xué)問我說,在上項目課的時候,那么多代碼,感覺你都能一遍寫出來為什么?

我告訴大家,秘密就在這里:我寫程序的時候,一邊寫,一遍用腦子執(zhí)行代碼。寫完后,自己的想法也就基本實現(xiàn)了,很少需要反復(fù)用調(diào)試器來調(diào)試數(shù)據(jù)的。同時寫代碼也會越來越自信,問題都會繞著你走。

03 每段邏輯盡量分開,分成段落或函數(shù)。

編寫代碼時,由于要用人腦來執(zhí)行維護(hù),方便人閱讀,所以盡量要將每段邏輯板書的比較清楚。

我一般是:每個邏輯幾行代碼為一個段,段與段之前空一行,同時盡量每個函數(shù)不超過100行,盡量值完成特定的功能。功能函數(shù)邏輯清晰,流程函數(shù)流程清晰,絕對不把功能和流程混合在一起。

如圖,功能代碼分段編寫。


流程代碼,注重流程,每個流程盡量用功能函數(shù)封裝,如圖:


幀同步的流程,如上圖,第一段保存這幀的操作,第二段遍歷所有玩家給每個玩家發(fā)送沒有同步的幀,第三段進(jìn)入下一幀。這樣流程就比較清晰。執(zhí)行起來就比較方便。

久而久之,你的代碼越寫越工整,越寫越穩(wěn)定。同時一邊寫代碼,一邊用腦袋執(zhí)行,也不容易出語法錯誤,我現(xiàn)在寫代碼已經(jīng)很少有語法錯誤了。

04 CTO 每天review團(tuán)隊代碼,用腦袋執(zhí)行程序,關(guān)鍵時刻能力挽狂瀾。

曾經(jīng)有一個網(wǎng)絡(luò)游戲項目遇到一個bug:運(yùn)行10多天以后,偶爾會出現(xiàn)有些機(jī)器畫面錯亂、卡主。

這個bug就比較難追,你無法下斷點,因為服務(wù)器多線程,高并發(fā),根本就無法用斷點來調(diào)試。


這個bug怎么找呢?團(tuán)隊客戶端和服務(wù)端程序頭痛不已,都感覺自己沒有問題,不知道如何追。自然問題就到我這里來了。

我怎么查呢?坦白講也很為難,代碼那么多,而且不容易重現(xiàn)。也不知道如何入手。項目壓力也很大,每天都來催,怎么辦呢?也沒有頭緒。

首先我命人做了一個錄像系統(tǒng),來采集數(shù)據(jù),讓測試重現(xiàn),希望能采集到重現(xiàn)錯誤的錄像數(shù)據(jù)。

測試了2天以后,沒有重現(xiàn)。因為服務(wù)器本身環(huán)境比較復(fù)雜,只能根據(jù)測試的描述來把當(dāng)時出問題的操作情況了解清楚,讓測試盡量回憶,問一些關(guān)鍵的數(shù)據(jù)結(jié)果,怎么樣就出現(xiàn)了畫面錯亂。

帶著這些問題,就是通過review代碼,用大腦看數(shù)據(jù)可能的點,看出來了代碼出錯的地方,一個不容易發(fā)現(xiàn)的點,函數(shù)的局部數(shù)組內(nèi)存越界。不是所有的代碼調(diào)試都適合用調(diào)試器。

CTO薪資高,高就高在他要確保項目穩(wěn)定上線。

以前我寫代碼也和大家一樣,也用調(diào)試器一個一個調(diào)試。剛學(xué)的時候很感興趣,所以寫代碼比較多,時間比較長。一開始也是用調(diào)試器,后來慢慢發(fā)現(xiàn)其實程序每行代碼指令寫下去,你自己都知道為什么要這么寫,知道這么寫下去是一個什么樣的結(jié)果。我開始對自己的代碼有了掌控力,不容易寫出自己失控的代碼,后來每個項目都穩(wěn)定的上線,機(jī)會很少有研發(fā)失敗的。


以上就是我今天要分享給大家的技術(shù)心得,希望這個經(jīng)驗?zāi)軒椭蠹摇?/p>

如果認(rèn)為文章還不錯,請分享給更多的朋友。

3


第8篇:用腦袋執(zhí)行程序,清楚數(shù)據(jù)走向的評論 (共 條)

分享到微博請遵守國家法律
大安市| 嘉善县| 安阳市| 宁津县| 诸城市| 阿勒泰市| 习水县| 曲麻莱县| 乌鲁木齐市| 咸宁市| 济南市| 荔浦县| 上栗县| 岳阳县| 绥芬河市| 谷城县| 涡阳县| 当阳市| 绥化市| 仙游县| 武穴市| 阳江市| 常熟市| 五莲县| 陵川县| 晋宁县| 于都县| 上蔡县| 板桥市| 荣成市| 重庆市| 深州市| 常宁市| 宁强县| 永登县| 上杭县| 额尔古纳市| 桐乡市| 栾川县| 阳江市| 安远县|