大多數人以為他們需要學習特定技術、算法、數學或其他形式的具體知識。 但是在Joost看來,這些從來都不是最主要的。 最主要的是他們需要學習“ 自律 ”。
過去七年半以來我在Ronimo輔導了很多編程實習生,數百名學生和畢業生,在他們身上我看到一樣同樣的東西需要學習,也許有人認為,他們應該是需要學習特定技術、算法、數學或其他形式的具體知識。 但是在Joost看來,這些從來都不是最主要的。 最主要的是他們需要學習“ 自律 ”。有紀律地編寫清晰代碼,有紀律地在代碼變得混沌時重構它們;有紀律地刪除未使用的代碼和添加備注。
我在這個主題上花了大部分時間輔導實習生,不是解釋先進的技術或我們的引擎的細節,而是讓他們編寫更好的代碼,我總是詢問有工作經驗的開發者,他們認為成為優秀程序員最重要的是需要什么?他們通常回答代碼應該清晰,易于理解和維護。這確實也是我想聽的,但是年輕的程序員罕有能始終遵循的。
記住自律,不要停息,如果所有變量的名稱都錯了,但是功能完美,那么代碼將超級混亂,從功能代碼中逐步理清雖然在短期內可能得不到回報,但這就是邁向自律的第一步,這也是作為實習生的好的導師通常非常注意代碼質量,從而能迫使實習生邁出正確的第一步。
下面是我經常看到的一些例子:
假的函數/變量/類
這些函數 類和變量實際做的事情并不是它們名稱的意思所代表的,而是實現其他功能,它們的名字是假的,名不符實,很明顯,名字應該是正確的,但是讓我們驚訝的是很少見完全封閉的名稱。
。..。..
(banq注:緩存失效和命名是計算機科學最難的兩件事)
糾結在一起的類
我看到另外一個問題是泥團一樣黏糊在一起的類,做了很多無關的事情,無關的新特性新功能一點點加入,讓簡單的類變得臃腫,塞入各種與該類名無關的行為,有時一個類的大小超過幾百行代碼。
。..
避免這個問題的辦法應該總是想:我在這里添加的功能符合類名本身嗎?如果不是,那么重新命名類的名稱,或者分成兩個獨立的類。
如果你不能想出一個代碼類的合適名稱,就會發出壞味道,那類的內部就會變得混雜。有時可能一個需要分成兩個部分,才能找到合適的名稱分別代表它們。
超大號的類
隨著時間推移,越來越多代碼添加到一個類,變得非常臃腫,雖然這個類還能工作,但是代碼太長,非常繁瑣,容易發生很多bug,方向和細節混同在一起。
切分一個非常大的類的工作是枯燥的,也是一個挑戰,類中代碼高度交織在一起,運行中不斷修復添加新功能,最后結果是必須有自律才能阻止它變得更大。
一般經驗是我們盡量保持類代碼低于500行,函數低于50行,有時雖然不可行,但是我們總能尋找到辦法來重構它,切分成更小 更易于管理的代碼塊。
代碼的注釋
如果沒有注釋,代表沒有任何信息,這是臨時破碎的代碼嗎?被取代的舊代碼在哪里呢?
。.
并行邏輯和重復代碼
舉一個例子,有某個結構特征的名稱暗示我們一些它是什么的信息,比如“TreeBackground.dds”。 為了了解這個特征能被用于一個tree類,我們需要檢查文件名中是否以單詞“Tree”開始。 通過使用 filename.beginsWith(”Tree”)檢查得很快。 這段代碼如此短,但是我們在不同地方需要它,這樣我們就拷貝粘貼它,這就造成了重復代碼,當然每個人知道重復代碼不好,但是這段代碼真的很短,拷貝粘貼非常容易,我們這里面臨的問題很明顯:也許以后我們會檢查這個結構特征是否適合樹tree的改變,那是我們就需要在每個地方單獨一個個去解決(因為這段短代碼被復制到這些地方)
一般經驗是,這段代碼不應該被復制,應該放在一個函數中,即使它超級短,主要因為做一個函數再調用需要許多代碼,而直接復制粘貼更直接簡單?
本文討論的事情似乎很簡單,它們應該是大學第一年教,但是面臨的挑戰是如何讓他們花時間去遵循,總是記住它們,這就是這為什么是最重要的事情,他們最應該學習的不是知識,而自律。
-
程序員
+關注
關注
4文章
953瀏覽量
29819
發布評論請先 登錄
相關推薦
評論