從程序員到軟件工程師[1]
看了程序員系列文章,頗多同感。做為一個從業(yè)13年,一直做軟件開發(fā)的人,我想給那些已經(jīng)、將要和有志于走上這條路的朋友一點點忠告。
首先,說說程序員和軟件工程師。雖說都是編程的干活,但是還是有一點高下區(qū)別。
主要說來區(qū)別是程序員programmer是將程序(已經(jīng)有流程,偽代碼或設計模板)寫成代碼;需要熟練掌握至少一門編程語言。而軟件工程師則要將目的描述成程序語言并實現(xiàn)的能力。例如將數(shù)學算法、自然語言、思維模式描述成程序算法,程序流程/類或/和人工智能,并寫成代碼的能力。
對初入行的人,當然重在語言,要做一個合格的程序員,首先要熟練掌握語言。包括語言特性和實現(xiàn)的能力。例如使用盡量中文說的面試題,就要求面試對象掌握C++中的類的封裝;構造函數(shù)的重載和運算符重載。
做過一兩年后,要想繼續(xù)吃這碗飯就必須提高自己,首先當然是深入了解語言,特別是語言的思維方式,編譯器的工作方式和常用設計模板。就拿C++的多態(tài)性來說,很多公司面試就會問什么是虛函數(shù)/純虛函數(shù)(思維方式)?用C如何實現(xiàn)函數(shù)重載(函數(shù)指針和了解編譯過程)?接口類/工具類/工廠類和 Sigleton類的實現(xiàn)(常用設計模板)。另外還有一大塊就是內存管理了。
如果能做到深入了解語言本身,那么恭喜你,你現(xiàn)在Title至少是高級程序員了。
在對自己的語言有信心后,下一步就想一想自己要想哪方面發(fā)展。是管理方面(項目經(jīng)理)還是技術方面(軟件工程師)。既然這里討論編程,我們就先不考慮項目經(jīng)理。想發(fā)展為一個軟件工程師其實也有兩條路。一條是走系統(tǒng)軟件工程師或者叫架構工程師的路;另一條就是算法工程師。
在國內的朋友我建議走架構工程師的路。要求就是知識面廣,對整個系統(tǒng)熟悉,能很快了解和分析客戶/設計需求,很快估計工作量、風險和所需要的資源(承擔相當部分項目經(jīng)理的任務),能根據(jù)現(xiàn)有技術人員儲備提供一個解決方案。當然還需要一定的表達能力和文檔寫作能力。例如我當年走訪某省農(nóng)行,和對方聊了銀行卡和醫(yī)院醫(yī)療卡的聯(lián)網(wǎng),當天晚上就和市場部的人合作,搞了一個通宵,寫出了60頁的技術方案和外加40頁的基于此方案的標書。
一般來講,要做到對整體系統(tǒng)的深入了解,沒有兩三年的時間是做不到的'。所以給國內程序員的建議是不要頻繁跳槽,尤其是不要頻繁跨行業(yè)跳槽。踏踏實實地將本行業(yè)的軟件吃透,最好每個部門或模塊都工作過。如果有這個想法,一般情況下你可以和項目經(jīng)理溝通,通常他們會鼓勵你這樣到各個部門/模塊工作。
我出國后,發(fā)現(xiàn)情況有點變化,由于語言和文化的區(qū)別,對自己走系統(tǒng)工程師的路沒有很大的信心。只好轉向走算法工程師的路了。
確定了這條路后,突然發(fā)現(xiàn)自己的數(shù)學能力太差了。不得不重新惡補線性代數(shù),概率和數(shù)理統(tǒng)計等高等數(shù)學。同時將《數(shù)據(jù)結構與算法:C++版》好好從頭到尾讀了一遍。然后終于蒙混到了一個職位。
當時第一個任務就是在一個嵌入系統(tǒng)中寫一段程序將bmp壓縮為jpg。各位可能會問了,這個在網(wǎng)上滿大街都是源代碼,為啥還要自己寫呢?其實這就是我不太建議國內工程師走算法這條路的原因。除非你是數(shù)學大牛,有自己原創(chuàng)的算法。否則在國內實在沒有算法工程師很大的生存空間。但是在國外有很大的不同,稍正式的公司基本上都禁止使用open source。因為open source也是有版權的,有的是不能商用,更有的copy left是那些公司碰都不敢碰的。因為copy left要求你使用了他的代碼,你也必須公開你的代碼。
當然,我們可以看那些open source,然后自己重寫。不過相信我,通常情況下如果你不是想簡單做些變量替換就交差的話,看原代碼不如看這個算法文檔本身。
【從程序員到軟件工程師[1]】相關文章:
從0到1讀書筆記08-21
專訪彼得·蒂爾:中美合作不光是“從0到1+從1到N”11-03
從0到1讀后感2000字10-31
程序員、軟件測試工程師簡歷范文10-16
軟件程序員簡歷范文08-23
0到1的求生12-04
從洗臉到化妝的步驟10-07
從平凡到卓越培訓心得01-20
從春天到冬天的成語02-11