看了這篇文章《優秀程序員無他-善假於物也》,我忍不住再次吐嘲。其實,這篇文章對於剛剛接觸編程——也就是剛剛會寫"Hello World"的人,還是有點參考價值,只是這篇文章說到的技能,應該是優秀程序員所應該具備的,但只會這些就稱之為優秀的程序員,未免過於貶低優秀這個詞了。
很多時候,我聽到一些程序員很愛標榜自己很愛接受新技術,看了多少本書,很上進,相反,象哥哥這種老程序員,則嗤之以鼻,認為不接受新事物,不愛學習,固步之封。對於這種井底之蛙,我是一笑置之,懶得跟他說,免得教聰明他。當然,如果能虛心點,我倒是很樂意和他們探討的。
相反,我是個非常上進的程序員,非常熱學習。能十幾年如一日地編碼,我想在中國里沒幾個人能做得到吧。十幾年,聽上去很遙遠,可是當這一天到來了,也不過如此。為什么不愛跟着這些潮流走?因為昨天還是MVC3,EF4,今天就是MVC4、EF5。明天就是MVC5,EF6了。這些東西根本沒有積累的價值,而只有使用的價值。什么叫積累的價值,什么是使用的價值,我打個比方說吧,家里有個老古董,皇家御用青花瓷的花瓶,就是具有收藏價值。而使用價值,就現在十幾塊錢的那種花瓶,用了一段時間,看着不順眼,就扔了,再買一新的。哪些知識是具有積累價值的呢?在我看來,越靠近底層的,越有積累的價值。比如說,算法、編譯原理等等。
作為程序員,不能僅僅滿足於些看看書,寫寫代碼這個階段。在我看來,程序員大慨可以粗分為三個階段。
第一階段就是具有基本的編碼能力。
在這個階段里寫一些代碼了。主要能力包括:
1、能夠看懂英文文檔,照着文檔上的API寫些例子出來。
2、碰到問題,能夠通過搜索引擎去搜索,去解決一些問題。
3、對源代碼管理有一個基本的認識,能夠使用 SVN 這些進源碼的管理。
4、能夠看懂一些代碼片段。
另外吐嘈一下,我接觸到的程序員,這個階段往往最自以為是,很喜歡弄些名詞來唬人。
第二階段就是對代碼有着很強的控制能力。
1、能夠閱讀一些框架的代碼,並且對框架的設計有個整體的認識。
2、在使用框架的時候,能夠發現,並且解決一些問題。
3、能夠理解並且靈活應用一些設計模式到自己的代碼里面。
4、能夠寫一些框架了。
第三階段就是對產品的駕馭能力。
這個階段應該具備產品的研發能力,把一個產品給你,通過對它把玩一番之后,能把它逆向出來。包括:
1、這個產品的基本原理是什么,都涉及到哪些技術。
2、技術的方向感。要解決某技術上的問題,應該往哪個大方向走,應該收集哪些資料。這里還有個命中率的問題,放向感好的,往往能命中90%。當然,沿着這個方向走不通了,還能夠換個方向,繼續嘗試。
3、代碼級別的逆向分析能力。很多時候,我們做的產品,存在這樣或者那樣的問題無法解決,但別人的產品卻沒有。往往是因為受到不公平的對待,某些API不對我們開發,當然,我假設做的產品是運行在 Windows 平台上,可以說,開源還是相對公平的。這時候,要突破這些限制,就需要對代碼進行逆向分析,去尋找解決的辦法。據說,一度灸手可熱,受歡迎程度遠超 VC++ 的 Borland C++ ,就是因為卡在 Windows 平台的某個 API 上,而漸漸不敵 VC++ 。
以前就是我對程序員技能的一些理解,歡迎拍磚。
我最近所寫的一些文章鏈接: