1. 程式人生 > >【乾貨】11 條程式設計經驗分享

【乾貨】11 條程式設計經驗分享

從小白到入門,從入門到進階,從進階到高階,從高階到資深,再從資深走不同到路線。這條路可以說是大多數程式設計師的發展路線,在這個過程中經驗就顯得尤為重要,尤其是後期,經驗可以佔據很大的優勢。

 

1. 從小事做起,然後再擴充套件

無論是建立一個新的系統,還是在現有的系統中新增新的功能,我總是從一個簡單到幾乎沒有任何所需功能的版本開始,然後再一步一步地解決問題,直到滿意為止。我從來沒有妄想過能夠一步登天。相反,我一邊開發一邊學習,同時新掌握的資訊還可以用於解決方案中。 我很喜歡 John Gall 的這句話:“複雜系統總是源於簡單系統的演化。”

 

2. 一次只做一件事

當我們在開發時,碰到測試失敗和功能無效的情況,如果你一次只研究一個問題,那將會更容易找到問題的關鍵。換言之,就是使用短迭代。必須確保這個問題解決之後,再轉移到另一個問題上。這適用於向下提交。如果在你新增新功能之前需要先重構程式碼,那麼先提交重構,然後再新增新的功能。

 

3. 儘早地新增日誌和錯誤處理

在開發新系統時,我做的第一件事就是新增日誌和錯誤處理,因為這兩者從一開始就非常有用。對系統來說它比一大把程式碼更有用,你需要一些瞭解程式狀態的方法。如果系統不能照常工作,那麼你就需要知道程式中發生了什麼——這是日誌的作用。錯誤處理也是如此——錯誤和異常越早處理越好。

 

4. 每一行新程式碼必須至少執行一次

在你真正完成一個功能之前,你必須對它進行測試。不然,你怎麼知道它是不是按照你的想法在執行呢?通常情況下,最好的方法是通過自動測試,但並非總是如此。不過,不管怎麼說,每一行新程式碼必須至少執行一次。 一般,我們想觸發某種條件很難。但幸運的是,我們可以作弊。例如,資料的錯誤處理可以通過臨時拼寫錯一個列名來觸發。或者,一個if語句可以暫時顛倒過來(從 if error 變成 if not error),這樣來觸發那些平時很難觸發的條件,這樣只是為了確定程式碼是否正常執行和它會出現什麼結果。有時,我發現有一些行程式碼永遠都不會被執行。當我們做程式碼檢查是它看起來沒有什麼問題,但就是不工作。你要避免這樣的尷尬狀況,如果你想你的每一行新程式碼都會被執行。

 

5. 在整體測試之前先進行模組測試

先進行部分模組測試可以節省時間。通常說來,我們在整合不同的模組時也會出現問題,例如模組之間的介面不匹配。但是如果我們能夠信任各個元件的話,那麼跟蹤整合問題就會變得簡單得多。

 

 

6. 所有事情所花費的時間總是比你預期的要長

特別是在程式設計中,即使一切進展順利,我們也很難對功能所需的時間做出正確的預算。並且,開發軟體時碰到各種意想不到的問題是非常常見的。一個簡單的合併操作會導致一系列小bug,一次框架升級意味著一些函式必須改變或者一些API不按照你想象的那樣工作。

 

Hofstadter Law( 霍夫施塔特定律)其實道出了真諦:做事所花費的時間總是比你預期的要長,即使你在預期中已經考慮了 Hofstadter Law( 霍夫施塔特定律)。

 

7. 先了解現有的程式碼

大多數的編碼都需要以某種方式改變現有的程式碼。即使是新功能,也需要適應現有的程式。所以,在你加進去新的內容前,首先需要了解當前的解決方案。否則,你一不小心就很有可能會打破現有的功能。這意味著,閱讀程式碼和編寫程式碼都是必要的技能。這也是為什麼看似微小的變化仍可能需要很長時間才能解決的原因之一,因為你首先必須瞭解上下文。

 

8.閱讀和執行程式碼

幸運的是,對於理解程式碼,我們有兩種互補的方法。你可以閱讀程式碼,也可以執行程式碼。執行程式碼的確是個非常棒的好方法。所以,請確保充分利用這兩種方法。

 

9. Bug 總是難免的

我不喜歡那些宣稱軟體開發可以“一蹴而就”的高談闊論。不論你再怎麼努力,bug總是難免的(BUG的定義基本上是:“我們沒有想到”)。最好能夠做成可以快速故障排除、修復bug和部署修復的系統。

 

10. 解決故障報告

每個開發人員都應該花時間去處理來自客戶的故障報告,並修復bug。這能讓你更好地理解客戶的意圖,明白如何使用系統,知道排除故障的難易程度,瞭解系統的設計情況。這也是為自己的開發成果負責的好方法。不要錯過這些好處。

 

11. 重現問題

修復bug的第一步就是重現問題。然後你得確保修復之後,問題能夠徹徹底底地消失。這樣一個簡單的規則,可以確保你不會誤將非問題當作是問題,並確保解決方案真的能夠奏效。

 

相關推薦

乾貨11 程式設計經驗分享

從小白到入門,從入門到進階,從進階到高階,從高階到資深,再從資深走不同到路線。這條路可以說是大多數程式設計師的發展路線,在這個過程中經驗就顯得尤為重要,尤其是後期,經驗可以佔據很大的優勢。   1. 從小事做起,然後再擴充套件 無論是建立一個新的系統,還是在現有的系統中新增新

BAT面試Java崗必備併發程式設計乾貨——導圖+題目+答案+分享

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

1129UI自動化測試經驗分享-顯式等待(三)指令碼設定元素等待乾貨

分享到這第三篇了,要說點重點的、大家很願意知道的:在腳本里到底要如何設定元素等待呢? 一)Web指令碼設定元素等待 我和我已離職的同事都喜歡 將元素等待和定位元素結合在一起。 同事A的指令碼(已做修改): def find_element123(self, key,

乾貨月入3000的淘客經驗分享和總結

淘寶客自從07年10月份誕生以來,很快就發展成為數十萬會員。實際上,隨著淘寶客越來越多,競爭越來越大,真正能夠從裡面賺錢的只有那麼一丁點。我從去年開始接觸淘寶客,從原來1個月賺13.7元,到上個月的3000多元,這當中所走的彎路,我覺得很有必要跟A5上面的朋友分享。這裡就簡

乾貨Kaggle 資料探勘比賽經驗分享

簡介Kaggle 於 2010 年創立,專注資料科學,機器學習競賽的舉辦,是全球最大的資料科學社群和資料競賽平臺。筆者從 2013 年開始,陸續參加了多場 Kaggle上面舉辦的比賽,相繼獲得了 CrowdFlower 搜尋相關性比賽第一名(1326支隊伍)和 HomeDep

乾貨Web大前端從入門到進階推薦書籍分享

前言:作為一名前端開發人員,如果你告訴我你沒有看過任何關於前端的書籍,那麼我完全可以認為你不是一名合格的前端開發工程師。為什麼我要以“看書”來衡量合格前端的標準?因為前端作為一個特殊的極具變化與開拓性的工種,沒有較強的自我學習與思考能力,很難在這激烈又紛雜的環境裡存活而

乾貨微信排版實用經驗,看後操作立馬上手

每一個新媒體小編的排版從業史,都是從完全不會,到摸索一下好像又可以會,再到摸完了老闆和讀者又不甚滿意。一上手沒有人教,自己找線上線下課程。沒有人帶,自己求神拜佛。然後歷練500篇起文章排版以後,開始遊刃有餘。 以下,小編從微信公眾號圖文排版的角度,來講講自己從一個排版小白

穩贏pk10幸運飛艇78碼滾雪球計劃一些技巧回來經驗分享

威叩【37010933運,我們都幸運,如果說不幸運,我們其實都一樣。你們可以不設定盈利點,但是你一定要設定止損點,因為誰都賺 的起

Python11、python內置數據結構之字典

dict一、字典1、字典的初始化 字典是一種key-value結構In [160]: d = {} In [161]: type(d) Out[161]: dict In [166]: d = {‘a‘:1, ‘b‘:2} In [167]: d Out[167]: {‘a‘: 1, ‘b‘:

Python11、集合與字典的實現

python一、字典的實現dict是在list之上實現的 i(索引) = hash(key) % solt(槽位數)此時i重復了怎麽辦(hash沖突)?1、拉鏈法 每個槽位上拉一個List,就是拉鏈法2、開地址法 使用某個算法重新計算i,就交開地址法 常用,效率更高,i = fn(key, i)【Pyt

C++11&14新特性

bsp con const 初始 strong ron 賦值和初始化 nbsp 常量 Linux下編譯: g++ main.cpp -std=c++11        g++ mian.cpp -std=c++14 棄用: 1.字符串字面值常量賦值和初始化,用 const

speakingtask3 到 task6 經驗總結

mea con 經驗 ann pro topic think min mat 口語 task3 邏輯關系 R:      What     / \     r1   r2L:    |    |   d1    d2

Java併發程式設計:同步容器

  為了方便編寫出執行緒安全的程式,Java裡面提供了一些執行緒安全類和併發工具,比如:同步容器、併發容器、阻塞佇列、Synchronizer(比如CountDownLatch)。今天我們就來討論下同步容器。   一、為什麼會出現同步容器?   在Java的集合容器框架中,主要有四大類別:Li

乾貨Chrome外掛(擴充套件)開發全攻略(轉載)

轉載來源:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html 【乾貨】Chrome外掛(擴充套件)開發全攻略 寫在前面 我花了將近一個多月的時間斷斷續續寫下這篇博文,並精心寫下完整demo,寫部落格的辛苦大家懂的,

Learning-Python29:網路程式設計之粘包

粘包問題   上一篇部落格遺留了一個問題,在接收的最大位元組數設定為 1024 時,當接收的結果大於1024,再執行下一條命令時還是會返回上一條命令未執行完成的結果。這就是粘包問題。   因為TCP協議又叫流式協議,每次傳送給客戶端的資料實際上是傳送到客戶端所在作業系統的快取上,客戶端就是一個應用程式,需

練習題第一章--程式設計之路(Think Python)

在這貼上電子書(感謝網上大神的分享,這本書確實不錯,在用程式開發的思想教學): https://cycleuser.gitbooks.io/think-python/content/ 1.在print語句後面的括號去掉一個或者兩個,看看會怎麼樣? 據說python2是可以這麼

乾貨微服務設計的基礎知識

人體是不同系統的組合,其中大多數系統是獨立的,並且作為一個整體協同工作。每個系統都有自己的特定功能。所有具有多種其他支援框架的器官構成了一個功能完備的機構。現在,如果應用於軟體系統,這就是微服務架構的概念。 在技術方面,微服務系統允許開發單個功能模組。這種開發單一功能模組的趨勢為大型和小型組織提高了靈活性,

乾貨最好的天線基礎知識,方便查詢,超實用!

天線作為無線電的發射和接收裝置是影響訊號強度和質量的重要裝置,其在行動通訊領域的重要性非常關鍵。通過對天線選型,天 線安裝,天線調整從而保障基站覆蓋區域的訊號強度與質量。對其的 掌握程度是網規與網優工程師的技能基本要求之一。下文重點說明天線要掌握哪些方面及其原理和影響。 1 什麼是天線? 答

乾貨JDK動態代理的實現原理以及如何手寫一個JDK動態代理

動態代理 代理模式是設計模式中非常重要的一種型別,而設計模式又是程式設計中非常重要的知識點,特別是在業務系統的重構中,更是有舉足輕重的地位。代理模式從型別上來說,可以分為靜態代理和動態代理兩種型別。 在解釋動態代理之前我們先理解一下靜態代理: 首先你要明白靜態代理的作用 我們有一

LeetCode11. 盛最多水的容器

題目連結:https://leetcode-cn.com/problems/container-with-most-water/description/ 題目描述 給定 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂