前谷歌技術主管親述:程序員請避開這幾大雷區

軟件工程師的技能發展都會經歷一個自然的過程——經驗從無到有,最後變成老手。而一旦到了經驗豐富的階段,他們對代碼就不那麼感興趣了。恰恰相反,他們會把更多的精力放在文件設計和代碼重構上。

奇怪的是,不管任職於哪家公司,大多數經驗豐富的工程師都會表現出同樣的特點。他們缺乏對代碼的關注,和其他工程師相比,他們寫代碼的速度較慢。這是因爲和僅僅編寫代碼相比,他們會將更多的時間花在設計上面。

從一個新手到經驗豐富,這個轉變過程不是一蹴而就的。但一般而言,這些工程師會用幾年甚至幾十年的時間,逐漸成爲領域內資歷很高的人。

他們似乎在每個公司都是一樣的——不斷地處理新出現的需求,進行不必要的繁忙工作——這無疑會讓他們感到沮喪。本文將指出工程師們可能表現出的一些抑制其發展的特徵。

1. 在代碼重構上浪費時間

@techleadhd作爲目前在世的經驗最豐富的工程師之一,在推特上透露了他關於編寫代碼的真實想法。

他顯然不相信編寫代碼的意義。相反,他暗示稱刪除和重構代碼是有價值的。

但這項工作並不是軟件清理,而是做軟件工程。

這就意味着工程師需要設計代碼,而不是維護代碼。維護代碼是其他人的工作,興許實習生就能做到。

軟件工程師們應該花時間對那些陳舊低效的代碼進行編程,而不是試圖改進舊的基礎結構。只要工作正常運作,就還可以用尚有不足的代碼。然而,不少經驗豐富的工程師似乎認爲維護舊代碼具有很重要的意義。

2. 關注整體情況而不是代碼

值得明確的一點是,整體情況和業務方面的事情並不重要,重要的是代碼!

經驗豐富的軟件工程師有一個壞習慣,就是把注意力集中在整體情況而不是代碼本身。他們喜歡提出這樣的問題,比如“這個項目將對誰產生影響”“最終用戶將如何與代碼交互”以及“工程師將如何維護代碼”。

他們花費很多時間試圖去了解項目的範圍以及它對於公司的影響。有時,他們甚至會用他們認爲的“更好的解決方案”來挑戰領導階層。那麼,當他們專注於諸如“影響”和“優先次序”之類的瑣事時,他們如何抽出時間來完成所有代碼?

把所有的時間都花在會議、鞏固、度量跟蹤和代碼審查上,會導致代碼編寫不再純粹。

優秀的程序員不應該質疑他們正在做的事情。相反,無論是什麼請求,他們都應該低下頭來編碼。在任何時候,企業都確切清楚什麼樣的行爲將會對公司產生影響。作爲程序員的工作職責,就是做好本職工作,而不是弄清楚他們做的事情是否值得,或者是否符合公司的戰略。

希望經驗豐富的工程師們記住:你是程序員,而不是領導者。

3. 總是想要一個設計文檔

出於某種原因,經驗豐富的軟件工程師們總是想要一個設計文檔。其實,在不考慮設計文檔的情況下,無論項目規格多大,直接開始編寫都要快得多。

人們不會用一個稍微不同的對象或任何東西去重複功能。那麼,爲什麼經驗豐富的軟件工程師偏要如此在意呢?

最後,如果不需要花時間考慮設計文檔,工程師很可能將以快十倍的速度編寫代碼。

4. 不喜歡“複雜性”和“設計過度的工程”

在某種程度上,有些資歷頗深的工程師不再願意深思其他人的代碼。

因此,當創建一個模塊時,他往往把在學校學到的所有知識都融合到一個面向對象記憶體中,並通常聲稱這是過度設計的代碼。

其實他們只是不想深思別人的傑作。

花時間去理解如何從對象B中得到對象A,然後調用函數C,調用函數D,有時選項F和選項G從配置文件E提取,配置文件E用函數F從數據庫G中來解析數據,然後將日誌存儲在Hadoop、 CouchDB和S3中,這會很困難。

人們開始抱怨,說代碼太簡單,或者設計太複雜。懶惰使得精心設計的代碼很容易停產。

5. 他們都被困在未來

事實上,我們現在所瞭解的框架往往是一生中所需要了解的唯一框架。

然而,經驗豐富的工程師似乎花費了大量的時間去學習新的框架和語言,最起碼去研究新的設計原則,但這往往並非是必須要做的事情——很多事情並非是越多越好的。

事實上,從這一點來考慮的話,經驗豐富的軟件工程師可能正是阻礙社會發展的因素之一。

隨着對代碼重構、設計文檔和學習所提出的源源不斷的需求,他們不斷地推進着軟件的迭代。我們甚至可以這麼想:如果沒有那些經驗過度豐富的工程師,現在說不定已經出現比我們更智能的飛行汽車和機器人了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章