三年經驗的軟體工程師和十年經驗的軟體工程師有什麼本質的差別?

碩士+博士也有差不多七年的時間,這七年能讓一個人的能力有質的提升。(從本科沒有接觸科研到成為科研主力軍)那麼軟體工程師的這七年有沒有質的提升呢?

這裡的軟體工程師指的是受過良好計算機教育的本科生,在學校已經學過數據結構演算法操作系統等計算機基本知識,以及設計模式,軟體工程等工程方面的知識,工作三年後應該也能成為主力了,那麼再干七年能有質的飛躍嗎?

我能想到的就是成為架構師,然而能成為架構師的應該是鳳毛麟角吧。。

PS:其實是考研與就業的糾結,擔心工作後難有大的提升

請問下:一個7年工作經驗的java開發工程師,跟一個剛畢業的博士生,他們的差別在哪?


先拋開學歷,我來認真回答「3年經驗的軟體工程師和10年經驗的軟體工程師有什麼本質的差別」這個問題。

到今天我工作了2年10個月,勉強算三年經驗的軟體工程師。結合我自己的例子對比一下接觸到的有10年工作經驗的同事,我覺得區別主要在下面(基本按差別大小排序):

1. 工作時間短肯定意味著項目經驗少。我磨練過得技能樹比較單一,稱得上擅長的基本只有前端這一塊。而10年經驗的人,往往在整個軟體開發的技能棧中會有2-3個擅長的點。如下圖:

舉個我自己的實例:如果單比前端技能棧也許我10年經驗的人和我沒有質的差距,但是比較整個全棧,那我還是有明顯的不足。例如我Java也就屬於「還行」這個檔次,Ruby和Python都只能說「懂一點」。而10年工作經驗的人,即使最近幾年做的前端,他們的後端水平一般也完全不弱於前端,甚至還能精通2-3門後端語言和後端的框架。

例如上圖中黃色線代表我,可以看到強項只有一個。而10年經驗的紅色在左邊還有個迷之突♂

2. 工具的使用比我強。

我主要用的IDE是Sublime(如果它算的話),vim/emacs勉強能用用,寫bash腳本的話基本一句話就要查一次文檔。而10年經驗的人基本能在非常熟練應用一個IDE的情況下,同時精通vim/emacs,甚至拿vim/emacs當作主要工具也完全沒問題。

3. Debug的能力比我強。

這點說實話,我自認為自己找bug的能力還挺強,絕大部分時候是別人(同齡人)來讓我幫忙看看代碼哪兒有bug。但之前在IBM的時候,有人遇到一個node.js response.write(data) taking long time when size of data is small的問題,我研究半天沒有方向。但我技術lead看了一會兒就讓我去研究下是不是和Chunked有關。能這樣一下定位到問題的原因,絕對是和豐富的經驗和對整個體系的了解有關的。

4. 有更多領域知識。

至少我們這裡懂機器學習的人有一堆。而除了我大學時候上AI課學過幾個演算法外,這方面基本沒太多研究了。

5. 各種軟技能比我強。

這些和編程沒太大關係,我就不展開了。

0. 他們都有老婆,而我


搞軟體開發快十年了,一路走過來的。不談別人談自己的不同。

三年時軟體異常,第一時間看剛改的代碼想問題在哪。現在第一時間上debug,看錯誤信息,看內存,看單步。

三年時寫代碼總想著上複雜的演算法,無時不刻想著優化。現在盡量用人能看的懂的演算法並配合注釋,大多數時候完成時不需要優化,最多找到熱點優化下。

三年時數據都放在自定義格式的文件里,現在都放在資料庫里。

三年時假定用戶每一步都是正常操作。現在假定用戶像神經病一樣操作。

三年時覺得軟體能寫成這樣真牛。現在覺得這樣的軟體都能賣出去真牛。

三年時覺得windows就是個渣,linux萬歲。現在覺得其實windows還不錯,linux也沒那麼牛。

三年時覺得用emacs和vim寫代碼很牛。現在有啥用啥,有ide就用,沒ide用vi也沒怨言。

三年時覺得寫代碼必須工作站才效率,現在超極本里跑虛擬機也覺得不妨礙思路。

三年時平均一天能寫500多行,0注釋0設計文檔,現在平均一天20到30行,20左右注釋,設計文檔倒寫了有好幾頁。

不同的太多了。。。說句裝逼的話,開始大道至簡了。

_____分割線____

沒有裝大神的意思,只是分享一下自己的心得,看了一下評論還好沒有大神把我貶的一無是處,呼呼。很多人一看軟體設計總會想到java,b/s方面。交代一下背景,鄙人搞的基本上是嵌入式實時控制,互動式界面和三維方面。幾年前搞過一段時間ssh,web方面只能說了解。而且本人非班科出身,相信很多科班的都無法理解我用了多年冒泡後發現標準庫里有qsort時的驚訝和喜悅之情。工作的公司是小企業,估計很多人都不會有從matlab模擬到DSP下位機到vxwork,linux,windows驅動再到上位機界面設計一手包辦的經歷,負責人還差點讓我把中間的vhdl都一起寫了。為了養家糊口接私活,用blender建模,用directx和opengl做兩個版本的介面寫三維模擬軟體。也曾改過別人光構造函數就萬行的代碼,還曾做過把客戶用excel寫得分析報表改成mfc程序的工作。我也很羨慕黑客,學過幾周shellcode就放棄了,現在還是挺羨慕的。不敢說經驗多,只好說經歷挺複雜的。上面說的不同大多是細節,我自己真正認同並為之自豪的是下邊一件事。一個同行一天跟我聊天,說某公司用的那個軟體是不是我寫的,我說是,他說一看就知道是你小子的風格。


我三年經驗的時候是大一下學期,那個時候正處於猛看書的階段,一年抄了四本,看了十幾本。

寒假回來開始寫了第一個超過10K行代碼的Project,是一個 D3D9 的 2D Engine。

第八年的時候在實習單位14個月帶了四個.NET的GIS Project,兩個新開發的,兩個是既有項目的重寫。在單位推廣eXtreme Programming,從配置管理抓起。從DBA到前端都算干過了,雖然乾的不太好。

十年的時候我Master剛畢業,去了Autodesk Debug Maya去了。那個時候為了Debug看Maya 15M行的代碼已經基本上不費力了,第三天有了首次Submit。

SALVIA已經開發了三年,代碼行數剛剛過萬不久,編譯器也動工了。

--------------------------------------------------------------

今年是第十五年,每天寫上三四個十幾行的Python Script,把Log文本裡面不要的字元去掉,變成CSV,然後拖到Excel畫幾個Chart然後郵件發給Lead,然後看下預算表,晚上回去是吃一個雞蛋還是只能吃半個要不然就交不起這個月的房租了。


千萬別覺得什麼學歷就能保證你的水平有什麼樣的提升。一切都靠自己。同樣高中畢業,能力可以千差萬別;同樣本科畢業可以天壤之別,博士碩士更是如此。沒有任何學歷能保證你得到什麼本質提升。其實工作也一樣,有時候項目可以逼你學習,有時候也未必可以。有時候你需要自己在工作選擇上給自己新的挑戰,又有時候可能走了彎路。

如果你認為一個選擇會讓自己一定強於另一個選擇,那就錯了。7年時間很長,沒有什麼選擇可以保證你7年後怎麼樣。7年中或許有許多次選擇,你有的是時間把自己培養成一個什麼樣的工程師。兩條道路都要靠自己不斷的加油努力。

另外說一句讓人罵的話,如果博士不是名校跟名導師的話,還是別讀了,除非為了光宗耀祖。

順便感慨一句,像我這樣實誠的在知乎上回答問題的,是不是沒人喜歡啊。大家喜歡的都是說俏皮話講故事寫小說媚俗的吧?

========

從來沒有得過知乎高票的,很高興看到這麼多人贊同,心情好多寫幾句。我前面想表達的是經歷和年資未必能代表能力的提升,需要個人不斷主動努力以及尋找機會才可以,估計得到了不少人的共鳴。

多說幾句我見過的吧,僅供大家批評。我本科畢業10年多了,讀完碩士工作也八年多了。這麼多年來,博士碩士本科畢業生都見了不少。說說我的看法。

比較一下讀博士,還是多工作幾年。讀博士的優勢在於可以把一個問題的來龍去脈、以及相關學習的深入;相比之下工作中的學習多數有點快餐的意味,學到能解決問題一般就可以了。比如我們有的同事博士是做線程並行的,他在這方面的理解就很深入,他在公司里一直是這方面的專家,同事們遇到什麼spinlock,atomic操作這樣的問題,都會想到去問他。即使是系統領域工作很多年的專家,很多時候還是要就這些問題請教他。另外,博士學習是一個更全面的訓練,除了代碼實現的能力外,還要學著深入思考一些高層構架的知識,講故事的能力,演講能力,幻燈片製作能力等等。這些一般剛工作的程序員得到鍛煉的機會不多,等升職到需要這些技能的層次的時候,也許學校的訓練能節省很多經歷。這裡只是說能力的部分,讀學位當然對招聘啊、戶口啊、忽悠啊,人脈啊之類的有別的好處,只不過不是題主問的,在這裡略去不表。

說完了博士在能力培養上的優勢,就說說早工作在能力培養上的優勢了。首先是解決實際問題的能力,工作時間長了,實際問題見得多了,對後面的發展肯定是有益處的。然後是編碼能力,研究生學習是一個綜合的部分,編碼最多只是其中的一小部分,而畢業工作的程序員則在前幾年幾乎把所有經歷都鋪在編碼上。另外工作中見到工業界經驗豐富的大拿指導的機會多於學校,學校里老師們的經歷更多的是在別的方面。

最後來說說三年七年的問題。題主提出三年估計不是亂提的。看上去在國內,三年軟體工程師經歷就可以達到一個熟練工的級別,對應各大公司「senior"的頭銜。所以有的人會問,三年就到這個級別了,而十年還在這個級別的人比比皆是啊,是不是瓶頸了。這也錯,也不錯。不錯的地方是,一般的公司會著重培養新手,以達到一個熟練工的級別發揮全部的生產力,但並不會著重培養每個熟練工到更高的層次。通常只有領導們看重的人會給予最大的機會重點培養。但也有不對的地方,首先,機會是自己尋找出來的,就算在一個公司一個組看不到機會,可以試試另一個公司另一個組。其次,即使無法在職業發展上更進一步,並不代表在技術發展上不可以繼續發展,很多人會在一個領域無法超越自己後,選擇全新的領域,這樣知識技能就大大拓寬了,還是在技術上做到了積累。最後,三年熟練工只是一些領域罷了,在一些專業性比較強的領域,也許三年未必有熟練工作的能力。比如我所在的資料庫系統領域,絕大多數人三年後只能一兩個方面達到熟練,在其他很多方面還有很多需要學習之處。所以,三年的瓶頸是完全有可能的,但只要個人不斷地創造機會挑戰自我,還是很有可能獲得突破的。

所以如果在這個語境下回答題主的問題的話,是的三年後的七年還是有機會獲得突破而達到構架師的級別的,但這就要看個人挑戰自己的決心和努力了。而反過來博士的經歷是不是會在三年後更進一步獲得更大的籌碼,這也看個人了。我個人認為,如果充分利用博士期間學習的機會的話,的確是很有可能在三五年熟練之後更容易達到融會貫通的境界然後突然如沐春風的,但這顯然不是決定性的。但反過來早工作如果一路混得順風順水的話,十年後達到的境界,是絕大多數博士畢業三年後無法望其項背的。這時候也許會有心裡很不平衡的可能性。


工作三年,對代碼的掌握能力遠超博士


工程師在工作的時候可以鍛煉撕逼能力,你讀個博士可不行。出來差遠了。


本科畢業5年多了,我本科同學讀博士的基本要麼已經畢業要麼馬上畢業正在招工作。(題主的7年博士怎麼來的?)

我的樣本只有我本科同學啦,所以不具有普遍性。並且,我比較的是博士剛畢業和工作5年的,所以不完全切題。

從公司上來說,博士畢業的同學有一個繼續深造,兩個在上海創業,其他的基本拿到了矽谷的熱門創業公司或者熱門大公司的offer。創業的幾個錢不詳,矽谷大公司的基本大概就是一年20萬美元級別的package(股票加獎金加工資加簽字費)

本科畢業的,混得差的不談了,沒可比性。創業的有一個估算大概3000萬身家。在公司工作的,國內的年薪可能20-50萬級別吧。好幾個在國內幹了幾年也跳到美國來了。年收入從10萬美元到20萬美元不等。

結論,最終出國了的,從薪水上看,差別不大,博士略佔優。在國內混的,本科畢業的薪資高。(我想不出博士畢業在國內混的不在創業的同學。。。我猜剛畢業的博士工資沒有20-50萬)。創業的,本科畢業有已經成功的,博士的剛起步。

順便補充一下3年和10年工作經驗的區別。我大概是3年,出了問題就去找bug,想演算法怎麼優化。我老公大概10年,出了問題在想是不是在做應該做的事,有多大的商業上的影響。換言之,他看問題的層次比我高。


三年經驗的時候吧,那一年就寫了一個類似於Excel的OCX,附帶支持公式計算和VB腳本;還寫了一個IM,連帶伺服器客戶端,裡面還附帶實現了一個簡陋的插件系統。

那時候應該是最不知道天高地厚的時候,自我感覺什麼都能寫出來,只要給錢給時間。

(前幾天跟人聊起,還特意把這個10多年前的垃圾Excel給人演示了一下,收穫了點佩服。)

十年工作經驗的時候,恰好因為之前幾年有人持續給錢給時間,單槍匹馬3年多干出來2個小產品,全球範圍也賣了上萬套。

發現演算法上深入下去吧,都是數學。產品設計深入下去,得研究點工業設計甚至心理學。

當時跟合作者基本上貌合神離,準備走又覺得還可以混幾年舒服日子,很糾結。當時想拉我入伙的一個小創業公司,如今已經成長為知名的技術性網路公司。說起來真鄙視自己當年的眼光。哈


你的思路不對。

如果單純是糾結是否考研然後再讀博進而花了7年,不應該糾結讀研那幾年換成直接工作能提升多少能力,尤其是去拿3年和10年比。即使比也是比0年和7年,你剛畢業的時候和一個有7年經驗的人比,你倆是完全兩代人,雖然可能年齡一樣,但是在你倆智商和本科教育同樣的情況下,他應該處處比你牛逼才對,單純因為入行早從而有更高級別/拿更多錢/拿更多股票的例子太多,很多時候看的並不是所謂的技術能力,何況到時候你的技術能力肯定不如工作7年的人,即使人家後來幾年技術上沒有提升,那麼你工作三年後也一樣沒有。

而且如果按照你的假設,3年到10年這段時間內技術上沒什麼提升,那麼說明這個工作不夠高端因為不需要解決什麼困難的問題,那你讀研學到的科研能力也肯定無法運用到工作當中,只剩個文憑的區別,更何況讀研不見得能提高多少科研能力(博士能好點,主要還是看學校/實驗室/導師)。


三年經驗時覺得自己特nb,十年經驗時覺得自己特sb。

開發軟體時間越長,越覺得軟體知識是個無底洞,越發現這圈子的高人太多,所以不會再輕言nb,只會覺得自己還需努力。


不說那些虛的,說點乾貨,以我公司為例,招人幹事的,都是專科本科有幾年經驗的,博士的主要作用不是做事,是拿他的資質掛名,混些紅利,為啥呢,因為性價比不一樣,價值不同


三年和十年的差別,是人和人的差別,而不是單純工作經驗能改變的。見了太多1-13年經驗的人實際水平不如比較優秀的畢業生的了。

樓主,個人認為,磨刀不誤砍柴工。是人才,或者能人,晚工作幾年,趕超平均水平也是非常快的。


本科乾的博士可能幹,博士乾的本科幹不了。


我覺得方向不一樣是很難比較的

一個博士畢業的人,進企業也應該是進一些大企業的研究院,或者一些技術驅動的創業公司,研究圖像渲染的演算法、地圖檢索的演算法或者大數據處理的基礎研究等等

如果一個博士畢業的人出去工作還和本科生一樣做業務項目,每天和產品經理撕逼,這個博士生做得也太憋屈了


看過金庸裡面大俠之間打架嗎,對掌比內力


笑看一幫工作了幾年的小本、小碩噴博士。沒錯,你早工作了幾年是多寫了些代碼,是對工作流程更熟悉了些,是對人情世故多見識了些。但是,那又怎樣?再過10年呢?你依然是個碼農,混好點是個產品經理,你會的那些東西一個博士早晚也能學會,而你一輩子幾乎是不可能擁有博士的頭銜的。不知道博士頭銜有什麼用?你們以為西方世界在 Mr. 和 Ms. 之外發明一個 Dr. 的頭銜是為了搞笑的?

跨國公司和各國研究機構的研發總管,這些年科技類上市公司的CTO、CEO擁有博士學歷的是絕對多數。北京戶口,博士學歷比碩士學歷要好拿得多,本科的話你工作再多年也沒用。至於這些年的國家、地方的創業、創新基金,那也基本都是給博士準備的。本科?呵呵厚。至於傑青、優青、千人計劃這些就不說了,不是博士的根本沒資格,當然,你們可能也並不關心這些,根本不是一個世界的好么……

工作時間不長,但是出門在外,面對陌生企業的老總和技術主管推銷我的項目,亮出博士頭銜和科研經歷,人家至少會安靜地聽我把話講完。你是碩士、本科?誰叼你個推銷員?


不怕一個人工作了十年,就怕一個經驗用了十年


不同意輪子哥的思路,讀博士更會撕逼,而且和各種人士撕,尤其是作為一個計算機系帶項目的博士生。

大部分公司的開發只和本公司和合作方的人撕逼,而且撕逼對象都是有一定素質和水平的人,個人認為這個過程是快樂的,尤其相較於博士的撕逼過程......

作為一個博士

首先,你需要和國內外學者,863/973評委進行友(各)好(種)探(撕)討(B),裡面很多人都脫離了實際開發,各種天馬行空的想像,各種不切實際的概念!但你必須和他們撕到底,以獲得項目/論文答辯的通過。他們最喜歡乾的事情是:追著你問出去三條街啊!

其次,你要和各種靠譜不靠譜的友(坑)方(爹)團隊合(撕)作(B),上到BAT雲計算項目組核心開發成員,下到某不知名套牌公司找來的什麼什麼兼職,總之項目書里有的人,你都會遇到。還有保守的不行、寧可性能差很多也不能出一點差錯的保密單位。上網不涉密,涉密不上網對啊,我們都用手機上4G查資料!

這僅僅是合作方,你以為實驗室里一片祥和?

大導師多數都很剛正不阿,學術嚴謹,但他們都!很!忙! 讓小導師管你,就會出現各種意(坑)外(爹)。

哎,不想回憶了,我只能說,小導師,用實踐,教給了我很多,很多做人的道理。

現在博士畢業工作了,感覺小公司他們撕來撕去的那點事情,真的好無聊。

當然,就算博士撕b厲害一些,作為一個過來人:

我也不建議你讀博。

我更非常非常不建議你讀國內top2之外的博士。


抗壓能力,撕逼能力,甩鍋能力

這三點在學校很難學到,而且適用於各個行業


都特么讀到博士了,幹嘛要去找本科生就可以勝任的工作呢。


推薦閱讀:

office安裝報錯,已用官方清理工具清理,但是仍然報錯是怎麼回事?
Developer思維和Engineer思維有什麼區別?
Windows下的Sleep(0)具體做了什麼?
軟體測試有前景嗎?
計算機學科本科可參加的國際競賽?

TAG:互聯網 | 軟體開發 | 軟體工程 | 軟體工程師 |