如何看待「大部分程序員只會寫三年代碼」的說法?
全文貼上,是否真如他所說
程序員這個工作與別的工科專業有個區別,其他工科專業一般都是越老越吃香,而程序員是個例外,因為計算機技術更新太快,而且這又是一個工作強度很大的工種,大部分人只會寫三年的代碼,三年後要不就繼續留在公司做項目經理,再繼續升總監,要不就轉行(研究所類除外,我上一家公司是就是研究所,大部分人會在裡面一直干到退休,所以單位里中老年人特別多,但乾的活其實跟軟體公司一樣,只不過壓力沒那麼大)。目前大家普遍都觀點是軟體類公司最不值錢的崗位就是做技術的,因為懂技術的太多了,現在計算機類專業的學生這麼多,隨便招個應屆生就能做,而且應屆生很便宜,所以除非你是一個技術特別特別牛的人,否則在公司里想通過技術這條途徑上升會很難。公司里最值錢的人才是懂業務的,這也是經驗積攢出來的,可能大家覺得業務知識看起來沒難度,沒逼格,但我告訴大家懂業務的人才非常稀缺,我記得我曾經在一家軟體公司做銀行的票據系統,那是09年央行剛要求各大銀行上線這個系統,而銀行里的人很少有懂這個的,我們公司里就有一個人一點代碼都不會寫,但對票據系統非常精通,在我們的項目做需求分析的時候他負責給各大銀行的人培訓,以前銀行甲方的人總會對我們做的軟體系統不滿意,這裡要求改那裡要求改,而那次是我們說怎麼做他們都乖乖地聽著,後來那個人也被甲方重金挖走了。
可能現在很多面臨畢業的工科學生都會擔心啥也不會,特別是一些學計算機的感覺自己連段代碼都寫不好,其實完全沒必要,工作了都是從頭開始學,很多商業軟體公司都有自己成熟的系統,一些新項目也就是ctrl+c和ctrl+v的事情。當然還是那句話,經驗和人脈才是最重要的,這些都是需要時間來積累的。
你們不要噴題主,其實那人也沒說錯。
你們仔細看看那段話就明白了:我記得我曾經在一家軟體公司做銀行的票據系統
這是什麼公司呢?為傳統企業定製內部系統的外包公司。
這種公司裡面確實是懂業務的比懂技術的吃香,因為他們做的東西確實沒太多技術含量。
而且這種公司盈利的增長點也不是新技術提高生產力,而是通過重複利用舊系統來壓低人力和時間成本賺錢。他們不會採用新技術,畢竟穩定才是第一位的,而且投入新技術伴隨著更大的成本。他們也不需要設計師,企業內部系統反正丑不醜將就著用就行了。
而「懂業務」則是非常重要的,也是很難的。
並不是說業務規則有多複雜,而是因為這種企業一般缺乏良好的文檔規範甚至沒有文檔。有很多隱藏很深的feature,只靠員工們口口相傳——甚至到最後沒有人知道需求的細節是什麼樣的。當然,這也就進一步阻止了公司技術的積累——你沒有辦法用新技術來改善舊系統,你的每一行重構代碼都會引入難以想像也難以排查的bug。在這樣的公司,很多年輕人做了不到三年就辭職了——或轉行,或去了其他公司;留下的人經過多年的積累和填坑,對舊系統任務了解的也差不多了,就升了管理職,專門負責給新人講解業務。公司里最值錢的人才是懂業務的,這也是經驗積攢出來的
這個作者並沒有胡說,他只是在他眼界的範圍內講了一點點他的經驗。
我的第一個老闆也是這樣想的。
所以在我辭職6年之後,他們不知用什麼方式輾轉拿到了我的手機號:「你的那個系統我們現在找不到人維護……你走後先是xxx,後是yyy,然後是zzz……都接不下……然後一直是小M維護的,他水平不行,很多問題一直沒解決……去年小M覺得壓力太大,辭職了……現在一年多了,還沒人能接手」……
這個項目當年在六家公司手裡輾轉兩年半,沒一點眉目。後來由我和另一位同事給搞定了。
之後給用戶試用,發現原始需求/設計有很多問題。我和用戶溝通之後總結了40多條意見,獨自負責制定方案並完成「二期工程」後,這才通過驗收。這套軟體在國家xx部一炮打響,至今十幾年了,公司簡介里仍稱其為「XX行業最先進的軟體……佔有全國30%以上的市場」。
項目成功並與國家XX部搭上關係後,公司雇了某211高校的一教授帶著自己的研究生來「設計協議」,大概想要藉此「為國家xx行業制定標準」然後「一流公司賣標準」。
這位教授只會天天拉人開會,技術方面嘛……極簡單個小問題,他折騰三天都搞不定;我隨口說可以如何如何做……於是第二天就被排擠出去,到某地和之前突然消失的那些同事們一起「修bug」去了。
那裡沒暖氣,一個冬天右腳5根腳趾有3根凍成了蘿蔔;所以到第二年就辭職了。這個公司後來怎樣就不知道了。
不過從後來那個電話看,似乎不僅沒能賣上標準,就連能接手維護的人都沒找到——最好的一個也不過是「幹了幾年積了一堆問題壓力太大辭職了」。
嗯,我當然沒回去。因為當時拿的薪水已經讓他們當場沉默了,幾年後又翻了次倍……
PS:我這人很「書獃子」。當時公司壓根沒文檔這一說,我仍然堅持「先設計後編碼」;編碼時也嚴格遵循各種編碼規範;所以留下那個項目文檔齊全,注釋詳盡——哪怕按現在的眼光看,很多公司的文檔還達不到這個水平。
當然,用現在的標準看,那個項目做的並不怎麼好;但相比於「維護了三四年問題越來越多」的,恐怕還是高了那麼一點點。
——前面說過,這個項目是先收集40多條意見大修後才通過驗收的。然後實踐中又提出了不少新需求;代碼質量嘛……反正後面有接近一年,都是客戶上午提意見、我下午出補丁包,然後測試組不測,直接給客戶安裝。先後打過若干個補丁,客戶才逐漸不提意見了。期間一直保持0 bug(所以測試組才不測)。可見這個項目並不是那麼難維護的(嗯,這可能也是那位可憐的小M一直「壓力很大」的原因之一)。
至於那些「只會寫三年代碼」的「大部分程序員」,我以為他們比起那位小M,可能還要低上那麼一點點——恐怕這也正是他們「只會寫三年代碼」的真實原因吧。今年28歲,08年20歲休學之後就開始做.net程序員。目前在一家電商公司的一個項目中全權負責技術。目前房貸已經提前還清。如果不出意外的話可能未來的十年還會繼續寫代碼。
至於樓主說的只寫三年代碼的程序員我個人也遇到過一些,如果讓我來評價的話就是這些來寫代碼就已經入錯行了,不適合。很多人是否適合其實第一年就已經能看出來了,等到第三年的時候差距已經分化的不是一點半點了,頂著三年工作經驗,本質和一年工作經驗的人沒有太大區別。還是趁早轉行比較明智。利用寫過代碼的自身優勢,再恰好有一些情商,干一些非技術崗的事情也不乏是明智之舉。
有人說技術更新換代的快,其實只是一個託詞,技術也許會更新換代,但是任何一個成熟技術的淘汰都需要時間,不是一蹴而就的。而且很多核心思路原理其實都一樣,一個有N年開發經驗的人去學一個新技術一定比一個準備入門的菜鳥快的多,甚至有些時候通過通讀文檔,然後了解相關技術的核心思路。就已經可以上手了。明年就是我從業二十周年了,要寫個程序慶祝下。
又要舉那個例子了:認識曾在巨硬幹過的一個高級工程師,40多,干過幾年管理,最多時手下40+人。後來不爽,回頭搞技術,密碼學方向。這就是巨硬為什麼是巨硬。@vczh
還有個例子。第一個東家,做電信業務。一堆業務專家,比客戶都懂業務,但程序寫得爛,自家系統都完全沒法整合,最後被競爭對手搞到完蛋了。也曾有過輝煌,但大部分項目是銷售們憑關係拿的。
那些個玩業務,只寫三年程序的,他們從事如果不是銀行金融業,或者有充分的競爭,絕對是沒任何錢途的。一旦行業有充分競爭,那些只寫三年程序的人寫出來的程序能有競爭力?除非個個是天才程序員。
十年前我的觀點就是這樣:那些宣稱寫程序3/5年(或30歲後要轉管理)的人,技術能力都相當差。真轉了之後,管理水平也一般。十年來,身邊的事每每印證了我的觀點。
還是那句話,別三年再轉了,從一開始就轉吧,否則在技術強人眼裡留下干技術不行才轉管理的印象,不利於開展工作。
題外話:最近從知乎上嗅到了一些味道,那就是有很長時間工作經驗的人不如畢業生有競爭力(百度停社招)。嗯,我剛畢業時也認為那些老工程師各方面都不如我(還各種家長里短,天天請假,不幹活。)
註:注意區分業務和領域知識。咱這世界進入商業社會以來,能跳出「中產」的群體而上升到下一個階段的人,其模式萬變不離其宗,就只有四個可能:
1,掌握資本/股權
2,掌握核心技術(包括對產品的敏銳度)3,掌握客戶資源(包括對產品的敏銳度)4,掌握內部管理1/3/4不多說了,很直白,這裡單說2。
何謂「核心技術」?簡單的比方,如果你在公司是做技術的,然後突然你覺得呆在公司不爽了,跳出去自己干,或者跳到公司的競爭對手那裡干,會給公司業務帶來實質的衝擊,就叫做「掌握核心技術」。對於這種人,公司只能老老實實給TA相應的資源:股票、職位、客戶面前的話語權等。
於是,「大部分程序員」,甚至可以說是全部狹義的「程序員」,都跟「掌握核心技術」沒有半毛錢關係。
於是的於是,對於「大部分程序員」來說,如果從頭至尾只是埋頭編程,而毫無轉向產品、客戶、管理等方面的主觀意願或客觀能力,想要「上升到下一個階段」,就只有一種可能了:掌握資本/股權。即,你需要跟著一個未上市剛融到資的小團隊去創業,並取得成功。
在我看來,程序員是一個還不錯的工作,起碼是一個年輕人還不錯的工作。它能讓你在最需要用錢的時候,拿得到同齡人中較高的薪水(雖然同時也被剝奪了拿這些薪水去享受年輕的人生的時間)。
但如果你真的是一個略有野心的人,目光不僅僅停留在「我是碼農我驕傲,別人起薪5k,哥起薪20k」這種級別的自我陶醉上,那就真的需要骨子裡認清楚這樣一套道理:
人類文明是科技推動的,其次才是什麼關係人脈,這沒錯兒。但你只是一個coder,一個「工科畢業生」,拿錢賣命的,而不是一個「工程師」,連computer scientist都不是,更不是什麼"rocket scientist",自詡的"geek"身份也僅是潛意識裡的自我安慰而已。純粹的編程,你鑽研到(常人中的)極致,對公司的意義也僅是點狀的效率微提升,如果這種提升能補償你對提升薪水的期待的話。在這種情況下,除非你對職業發展和收入水平的期待穩定在現有的環節,否則你的可替換性是與日俱增的。而跳出這一死循環的路子也只有一個:
或更多尋求內部團隊管理的上升路徑,或更多尋求接觸客戶了解客戶的機會。
這邏輯背後,更是一句相當普適的道理:
莫要用你戰術上的勤奮,去掩蓋你戰略上的畏懼和懶惰。所以叫他們碼畜是正確的
題主問題的核心應該是想討論技術崗的前途問題,也就是技術崗在公司/行業中的重要性。因為就我理解,寫代碼的就是技術崗,技術崗就該寫代碼,題主用來做對比的幾個例子在我看來算管理崗、產品崗、運營崗、銷售崗等等,那麼我們就來談談有3年技術工作經驗背景的開發人員應該怎麼規劃未來的問題。
--------------以上是我對問題的理解,以下是我的回答-------------------------------------
在我看來,3年coding,具備軟體開發的基本素質後,面臨的幾個選擇包括:1. 繼續走技術路線,又可細分為技術專家和架構師兩個方向2. 轉向技術相關崗位,即上面提到的管理、產品、運營、售前售後等3. 跳出天坑,轉行就前景而言,3不做討論,僅比較1和2在知乎上看到過一個回答(為什麼技術總是被輕視?國內做技術能不能有較大發展? - 互聯網這個問題下韋易笑的回答 ),說的是文臣武將的對比,可以做個參照,武將就像技術崗,夢想的是「來到疆場,一刀一槍,博得個封妻蔭子,也不枉了一個青史留名」,在亂世、在草創期是最重要的人才,一旦天下大定,就要良弓藏走狗烹了。畢竟不能馬上治天下(軍國體制),而要靠文臣來治理來創收(收稅)。此時武將的作用是對外防禦對內鎮壓,但根本不需要維護一支大規模的軍隊,文官管理下的邊防軍和警察就OK了。
技術人員在公司創建時的重要性不言而喻,一旦公司站穩腳跟,並且有了成熟的產品和服務模式,銷售(意味著營收)的重要性就會迅速超過技術,運營(意味著長期穩定的營收)也只需要對成型的產品有了解並且根據運行情況進行微調。題主提到的那個被甲方挖走的人在我看來是運營或實施,也不屬於技術崗,題主也說客戶更看重這個人的業務能力而非技術能力。而此時,技術人員處境好的就杯酒釋兵權,拿著乾股享清福去了,還想在公司內部折騰技術的,立刻會被邊緣化(太平時代弄刀弄槍的不是唯恐天下不亂嗎?)
那麼技術人員的出路在哪裡?
1個是技術專家的方向,然後走向技術顧問或者開個技術諮詢公司,因為除非公司規模特別大,否則出於成本考慮一般不會養此類技術專家。比如安全技術,這是個極深的坑,中小公司(除非是專做安全方面的)不會願意在這方面有很大的投入,要麼根本沒有安全意識,就算有,也是通過購買現成產品、技術方案和諮詢服務來解決,我覺得演算法研究、交互設計甚至系統集成都可以算是這個方向。
另外就是架構師,現在軟體越來越複雜,如果業務領域相對穩定(或保守)如題主提到的銀行業,架構師就沒啥用處,但如果是業務規則不斷變化,則不但特別了解整個系統還能夠在不中斷業務的情況下對架構進行調整的技術能力就是特別重要的(一邊開車一邊換輪胎的事不是誰都能做的,有的時候連發動機都要換)。題主提到的那個不會技術只懂現有產品的人來負責此類架構升級,十有八九會造成大災難,和只懂技術不懂業務的人創造災難的可能性不相上下。
以上兩個崗位中,技術專家對技術能力的要求是很高的,架構師雖然需要的是綜合能力,但技術能力(包括coding)是首要的。
如果做了3年coding,對技術完全沒興趣,又對架構和業務沒感覺的,只能日復一日的做前3年的那些工作的,也只能一聲嘆息了。【補充:其實問題中那種絕望的氣息並不是不可理解,這就像富士康跳樓的那些員工一樣,都是流水線上的工人,日復一日做相同的事完全沒有出路,建議儘早轉行
至於要轉行的,銷售、管理、運營等等的確不需要coding,並且也都很歡迎有技術背景和開發經驗的人,但是轉行前要捫心自問,是否具備這些崗位必要的素質,不要以為銷售就是陪客戶喝喝酒吃吃飯、技術售前就是講講PPT、售後就是裝裝系統配配參數、運營就是做做報表、管理就是排排計劃做做跟蹤……我希望我50歲的時候,可以依然在工作崗位上研究自己喜歡的技術,寫出優秀而精美的的代碼開源給所有人。
我希望我可以寫一輩子代碼,享受coding所帶來的樂趣。「懂技術的太多了,」
在我沒入編程門時在一小諮詢公司做項目錄個宏寫寫VBA也被同事認為懂技術。。我那毫無技術含量的VBA用半個鐘做了他們4個人做將近一個下午的活在他們看來我簡直叼,簡直就是一個不可或缺的角色如果有高就的機會,不寫代碼也行啊。
千萬別聽那些熱愛寫代碼的逗逼說碼農一定要寫多久多久代碼,技術一定要多少多少高深,然後開啟優越嘲諷模式嘲諷一下題主的淺薄就覺得鑽研技術怎麼著呢么樣了,給他們兩百萬一年讓他們去做辦公室助理,你看他們用腳投票快不快。所以,寫不寫代碼其實不重要,一年兩年三年還是幾年不重要,這是個虛數罷了。重要的是錢途。有好的機會,不要放棄。手中寫著代碼,心理做好時刻準備著脫離碼農行當的準備。拿我個人經歷談一談,我六年前去了一家銀行的省分行,當然一級行的科技沒啥開發要求,會寫個SQL下個數就不錯了,但我是個碼農呀,不止會修機器,做一倆個系統的維護,下個對賬數據就熬退休吧。和文里說的一樣,銀行重業務,技術在行長眼裡就是個修電腦,手機裝WiFi的。然後我修理了倆年多機器,硬體倒也不常壞,但銀行的系統既多又難用,各種系統在使用過程中遇到問題,如IE的ActiveX調用,JRE有Oracle,sun,Microsoft各種版本兼容問題,各種cs端驅動問題,我發揮我碼農的技術,看異常,看日誌,基本沒遇到解決不了的問題,通過修機器我迅速認識了很多人(官僚機構混,人脈很重要)。然後我白天修機器混熟人,晚上碼代碼,幾年碼了財務系統,監控系統,數據平台,還有很多零零碎碎的小業務軟體。然後辭職創業繼續碼,在推軟體的過程中,我和客戶管業務的領導談笑風生,他們都覺得我對業務很通,這都是那些年通過做系統下數據積累的,一個系統我可能重碼三到五遍並頻繁重構,因為需求部門一次根本想不全,有時系統出來發現有一些功能無法實現,可要改就得重構整個系統,我就重新開發一遍,沒有PM反而不用互相扯皮,反正需求部門只要提的合理我就改,哪怕推翻重新來過。碼了將近十年,語言從c換java換python換go,感覺寫行業軟體需要花很大的心思,接觸的也是各個部門還得了解各種專業知識,就像雕刻一個藝術品,不僅需要雕工,還需要對產品本身花時間了解,而這種精雕細琢的工藝品出來也會給自己帶來巨大的滿足感。接觸的人多了,會發現各個專業領域的牛人好多,技術只是一個完整系統成型的一個環節而非全部,我就是個業務懂皮毛、技術剛入門的碼農,但就是喜歡,如果上天給我個當碼農的期限,我希望是一萬年。
是的,這還不是真相。
我們碼農工資低,壓力大,工作996,有時還可以看見凌晨4點鐘的太陽。
我們碼農全屌絲,格子衫+牛仔褲+雙肩包,沒有妹子,只能對著電腦擼。
我們碼農人才多,應屆生吊打5年高級工程師,我們為了學習新技術,才三十歲頭髮就沒了。有些人轉行賣水果和煎餅,也找到妹子了,生活美滿幸福,羨煞單身狗。
我現在轉行做煎餅了,頭髮也長出來了,還有妹子,真是太幸福了。—————————————————————分割線———————————————————我還會騙你們嗎?讓你們看看人生贏家是什麼樣子。好兔網 - 深圳一網遊程序員轉行賣燒餅 買房買車娶靚妹 ————來自網路,圖侵刪。顯然要搬出我狗的Jeff Dean大神啊:
寫代碼年頭久的有很多神級的人物,而絕大多數人都沒法達到那種水平。看到這個帖子
就象在聽一個嗆過水的人繪聲繪色地說游泳如何如何危險一樣或者,象在聽一個情商太低的人說公司里的政治如何如何激烈一樣又或者,象一個老科研在聽一個又懶又笨、不會看文獻、不會做實驗、剛剛勉強畢業的學姐在言之鑿鑿地告訴學弟們碩士學習如何如何苦逼、學術如何如何腐敗一樣。。。。他說的論據一部分正確,結論卻並不對。
熟悉業務流程,本質上就是熟悉用戶需求,熟悉用戶需求會使雙方都更愉快。不同行業的用戶需求特點大相徑庭。有的行業你可以用革命的方式重定義用戶需求,而有的行業用戶需求存在很多潛規則,換句話說用戶根本不認為這是一個需求,但按照行規你是必須要實現否則用戶一定審核不過的功能。
對於業務需求重要的行業,程序員就是越老越吃香,因為這樣的程序員意味著更少的需求變更。如果這種程序員缺乏,你的項目見到用戶之後就會不斷的被提出意見,被不斷修改,然後搞得雙方都不愉快。
有些行業,尤其是一些互聯網行業,由於始終是在定義新的業務,所有人都沒有業務經驗,那麼熟悉業務流程可能成為不那麼重要的事,總是可以自己發明或者定義業務流程,這種情況下,業務流程的理解就不那麼重要了,這裡我不討論這種情形,因為知乎更多的人在這些行業並且有更豐富的經驗。
而在其他的一些行業,正因為業務流程對這些行業非常重要,所以程序員就更不可能只干三年。不然,如果熟悉業務的程序員都流失,重構應用的代價就太大了。
我所見到的這類企業大多都不願意花力氣給技術人員培訓業務流程,而是願意招熟悉業務流程的程序員來培訓技術。現實例子是培訓一個程序員掌握新技術用兩三個月就夠了(Java程序員培訓用來搞android開發也就兩三個月的事),培訓一個程序員掌握業務流程則一般要一年以上,這是我見到的真實數據。
所以,業務流程越是重要,越是意味著程序員不服老,掌握業務流程的程序員集體學習新構架新技術可以更容易的重構現有應用,在開發方面少走很多彎路。他的論據恰恰證明了程序員不可能只干三年。老聽說機械行業越老越值錢,但實際上機械干三十年,工資都不一定有你寫三年代碼的多
從寫這個文章的內容來看,作者就是人力外包公司的,還是給銀行做的最便宜的那種。
3年還在這家公司,確實該思考一下自己是不是適合干這行了。30多歲還在寫代碼的擼過,軟體公司的管理,1沒有公權力2沒法貪污3不能欺負人4專業背鍋,有毛意思
作為一個寫了31年程序的程序員(從小學寫到現在)表示,做程序員很快樂。
推薦閱讀:
※利用hexo搭建自己的博客,為什麼沒有識別出markdown語法?
※為什麼Windows可以運行在不同的硬體環境下?
※編程的時候 命名 方法或變數 詞窮了怎麼辦?
※學過C,如何快速上手C++?
※清華大學計算機系與普通大學計算機系的區別?