文章目錄
- 第一階段就是具有基本的編碼能力。
- 第二階段就是對代碼有著很強的控制能力。
- 第三階段就是對產品的駕馭能力。
看了這篇文章《優秀程式員無他-善假於物也》,我忍不住再次吐嘲。其實,這篇文章對於剛剛接觸編程——也就是剛剛會寫"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++ 。
以前就是我對程式員技能的一些理解,歡迎拍磚。
我最近所寫的一些文章連結:
《被神化的架構和被誇大的CTRL+C、CTRL+V》《一位軟體作者的吐嘈——讀《Google Reader猝死啟示錄:互連網無法永遠免費》有感》