軟體開發中最重要的一項技能

Jodoo發表於2016-01-28

以下這段極富洞察力的文字源自 James Hague 撰寫的一篇文章 Organization skills beat algorithmic wizardry

當我們談及程式碼編寫的時候,最重要的一項技能就是如何保持軟體功能與程式碼的簡單性,即軟體開發的複雜度管理。我曾經工作過的專案包括大型通訊系統、主機遊戲、部落格系統以及一大堆個人工具類軟體,在這些專案的實際開發過程中,很少出現特別棘手的資料結構和演算法之類的問題,相反,大量亟待解決的問題大都與狀態跟蹤、程式碼組織、特殊情況處理以及系統互動相關。在一定程度上,程式碼編寫這個行為本身,實質上就是一個組織、重構以及簡化的過程 - 探究和思考如何移除隱藏在各處的無關或冗餘操作。

演算法技能與諸如程式碼組織相關的複雜度管理技能相比,更容易教授和學習,因此,我們一般通過課堂和部落格來傳遞這方面的知識資訊。一節個把小時的課程或部落格文章就能夠清晰地展現一個聰明的演算法。然而,對於複雜度管理技能來說,有誰知道究竟應該如何呈現嗎?如果你直接給出答案,不僅枯燥乏味,而且效果非常不好。“這是我總結的一個小經驗。別看它不怎麼起眼,但請相信我,它真的很有用,你要知道,這是我費了九牛二虎之力才想出來的呀。” 或者更糟糕的情況,“這是一堆中等難度的程式碼,但在此之前,這些程式碼要比現在複雜得多。起碼從目前看來,至少有人已經可以理解它了。” 這多沒意思呀,你要是在場,想必也會哈欠連天。

只有在真正體驗過混亂之後,你才能認識到複雜度管理的重要性。但是,如果你根本不關心這些雜亂無章的混亂狀況,你不可能有埋頭處理它們的耐心。只有當處理這些混亂變成了你的義務或責任,或者換言之,你不再將其看作是另一次案例學習的時候,你才會深入地研究、學習和提高自己的複雜度管理技能。我的意思是說,你完全可以通過類似家庭作業的方式學習和掌握演算法技能,但是,你不太可能學到複雜度管理這項技能,除非你在一個你真正關心的大型專案上工作過,而且,大多數情況下,這種事情發生的前提條件是:有人付錢讓你來關心這件事情。


作者:John D.Cook,數學博士,應用數學、統計學及軟體開發顧問,生活在美國休斯敦。

原文:The most important skill in software development

感謝:Qingniu 幫助審閱並完成校對。

原載:明珠夜話

相關文章