转:掌握编程
轉(zhuǎn)自:https://www.oschina.net/translate/mastering-programming,有刪改
文章目錄
- 時間
- 學習
- 超越邏輯
- 風險
通過對優(yōu)秀程序員的多年觀察,我觀察到了他們工作流程中的某些常見模式。通過對所職教的熟練程序員的幾年,我觀察到他們?nèi)笔н@些模式。我已經(jīng)看到了引入這些模式的不同之處。
(注:從內(nèi)容看,是對工作模式和原則的思考,也不僅僅針對編程)
時間
- 分片。完成一個大項目時,將其分割為小的切片,并重新排列這些切片以適合你的場景。我總是可以更好地分割項目,我總能找到滿足不同需求的切片的新排列。
- 一次做一件事。我們?nèi)绱藢W⒂谛?#xff0c;以致于我們在一次降低開銷的嘗試中減少了反饋周期的數(shù)目。這導致難以調(diào)試的情況,其預期成本大于我們所規(guī)避的周期開銷。
- 使它運行,確保其正確,使其快速。(一次做一件事、分片和簡單改動的例子)
- 簡單的改動。當面對困難的改動時,首先要簡化之(警告,這可能會很難),然后完成簡單的改動。(例如分片、一次做一件事,集中,隔離)。分片的例子。
- 集中。 如果你需要改動多個元素,請首先重新排列代碼,以便只需要在一個元素中進行改動。
- 隔離。如果你只需要改動元素的一部分,則提取該部分以使整個子元素發(fā)生改動。
- 基線測量。通過衡量當前世界狀況來啟動項目。這違背了我們開始修正錯誤的工程本能,但是當你測量基線時,你實際上會知道你是否在修正什么。
學習
- 表明想法。在運行代碼之前,準確預測會發(fā)生什么。
- 實際猜測。當程序行為不正常時,在做出改變之前,準確地闡明你認為錯誤的部分。如果你有兩個或更多猜想,請予以鑒別區(qū)分。
- 刪除無關(guān)細節(jié)。在上報錯誤時,請找到最短的復現(xiàn)步驟。在隔離錯誤時,找到最短的測試用例。在使用新的API時,請從最基本的示例開始。“所有這些東西都可能不重要”,在它是錯誤的時候,這是一個代價很高的假設(shè)。
- 例如,查看手機上的一個bug,可使用curl復現(xiàn)
- 多維度。在不同維度間自由穿梭。也許這是一個設(shè)計問題,而不是測試中的問題。也許這是一個人的問題,而不是技術(shù)問題[騙人,這總是對的]。
超越邏輯
- 對稱性。幾乎相同的事物可以分為相同的部分和明顯不同的部分。
- 美學。美麗是一種強大的攀登階梯。它也是一種對蔑視的解放之階梯(例如將一堆函數(shù)內(nèi)聯(lián)成一個巨大的集合)。
- 韻律。等到合適的時刻可以節(jié)省能量并避免混亂。在行動之時快速行動。
- 權(quán)衡。所有決策都需要權(quán)衡。知道決策取決于什么比知道今天選擇哪個答案(或者昨天你所選擇的答案)更重要。
風險
- 興趣列表。當次要的想法出現(xiàn)時,請記錄之并快速恢復繼續(xù)工作。當你到達停靠點時重新閱讀此列表。
- 喂養(yǎng)想法。想法就像受驚的小鳥。如果你嚇跑了他們,他們就會停止造訪。當你有一個想法,喂它一點吃的。盡可能快地證明其錯誤性,但需要基于數(shù)據(jù)而不是出于缺乏自尊。
- 80/15/5。將80%的時間花在低風險/合理報酬的工作上。將15%的時間花在相對高風險/高回報的工作上。無論收益如何,將5%的時間花在讓你愉悅的事情上。教導下一代完成你80%的工作。當有人準備接任時,你的15%實驗中的一個(或者,不那么頻繁,你5%實驗中的一個)將獲得回報,并將成為你的新80%。重復這一過程。
總結(jié)
- 上一篇: Promise源码解析
- 下一篇: 【TensorFlow】随机训练和批训练