全棧工程師爲什麼越混越困難,看這篇就夠了

最近跟朋友聊天,經常聊到全棧工程師,我就問他們爲什麼要成爲全棧工程師?技術派的回答:“全棧工程師,前後端技術都會,感覺很牛!”,職業派的回答:“全棧工程師很多公司都需要,不擔心工作找不到,工資也比普通的工程師高。”,跟風派的回答:“我好多朋友都想當全棧工程師,都說全棧工程師很好。” 有時候,我就賤賤的問他好在哪裏?他當場傻了,回答不上來。

各位小夥伴能看這篇文章,相信要麼是全棧工程師,要麼對全棧工程師有興趣,這個問題也問下你:“全棧工程師,好在哪裏?”你可以花幾秒鐘想一下,這樣你從這篇文章中收穫的價值會更高。

 

1. 什麼是全棧工程師

 

 

百度百科上對全棧工程師的定義:

全棧工程師是指掌握多種技能,勝任前端與後端,能利用多種技能獨立完成產品的人。

 

這個定義是正確的嗎?請你花幾秒種想一下,這個非常重要!

 

這個定義是錯誤的!

這個定義是錯誤的!

這個定義是錯誤的!

重要的事情說三遍,所以纔會有百科詞條後面講的困境。

 

 

2. Facebook 的全棧工程師

 

Facebook 宣稱她只招全棧工程師,我們來看下Facebook對全棧工程師的能力要求:

Layers of the Full Stack:

1. Server, Network, and Hosting Environment. 

2. Data Modeling 

3. Business Logic 

4. API layer / Action Layer / MVC 

5. User Interface 

6. User Experience 

7. Understanding what the customer and the business need. 

 

Other Pieces of the Puzzle:

1. Ability to write quality unit tests. By the way, even JavaScript can have unit tests these days.

2. Understanding of repeatable automated processes for building the application, testing it, documenting it, and deploying it at scale.

3. An awareness of security concerns is important, as each layer presents its own possible vulnerabilities.

按市面上講的全棧工程師來理解:

1到4點是java(後臺)開發人員必備的技能,第5點是web前端工程師的技能。

全棧工程師,就是要掌握1-5點的技能。

 

第6點用戶體驗、第7點理解客戶和業務需求,這兩點不在市面上的全棧工程師的技能範圍內。你可能會抱不同的看法,我們來看一些常見的案例。

一.

產品經理來找程序員;“你做的這體驗像什麼鬼,用起來多不方便。”,

程序員:“現在哪有時間搞這些,項目都延遲這麼多了,等有時間再來優化吧!”

二.

產品經理又來找程序員改需求,這是第5次改需求了,於是程序員忍無可忍:“你怎麼搞得,能不能想清楚一點,一個需求改五遍了。”

這個是產品經理的問題嗎?不是的,是程序員的問題。

 

案例一,用戶體驗不是全棧工程師重點考慮的,完成功能纔是最重要的。

案例二,一款產品,一般產品經理設計40%,程序員設計20%,其它人設計40%。程序員拿到產品,要搞清楚客戶需求、業務邏輯、功能間的關係、數據流和交互方式等,這些是程序員對產品需求的理解,更是對產品功能的細化。如果程序員有做這個步驟,在開發之前,就能找出產品中隱藏的問題和設計上的錯誤,就不需要產品經理反反覆覆的過來改需求。理解客戶和業務需求不是全棧工程師重點考慮的,在全棧工程師眼裏,功能都不是個事,我先做了再好。

 

全棧工程師的能力水平是高級程序員,高級程序員沒有6和7點能力,6和7點是架構師、主管程序員以上級別程序員要掌握的技能。

再看其它拼圖中的三個點,就自動化部署因爲有框架,有人會做;單元測試、安全,有多少全棧工程師會做?這個不是說我對全棧工程師不尊重,市面上講的全棧工程師,在公司裏面基本上是屬騾子的,每天做大量的工作,加班加點趕項目,做完前端做後臺,改完後臺bug改前端bug。根本就沒有時間來考慮這些,更不要說花時間做了。

 

可見,市面上說的全棧工程師,或者百科詞條上定義的全棧工程師,跟實際全棧工程師要掌握的技能不同。

 

3. 全棧工程師,不是你想的那樣

爲什麼會出現這種情況?關鍵出在前後端分離。這個即是技術進步帶來的好處,也是技術進步帶來的麻煩。

早些年,我們做開發,都是前後端一起做,只是要自己去設計框架來做前後端隔離。後來有些前端框架出來,我們也會用這些框架,自己做開發。後來慢慢的,就有程序員專門做前端開發,特別是像VUE這類框架出來,前端程序員徹底淪爲界面交互工程師。

 

我分享一個案例:

前兩年搭一個新團隊,我根據公司方向和產品需求,團隊配置是3個java和2個web,我的想法是java負責接口和後臺開發,web負責app嵌入頁和活動頁的開發,這樣的配置是合理的。結果在做計劃的時候,web就報工作量大,時間內完不成。我就好奇,這怎麼可能?

我深入瞭解了一下,技術經理採用的方案就是前後端分離,java只做接口,後臺的頁面由web程序員來開發,這就完蛋了,這樣的配置用這種方案,肯定不能按時完成工作。這種技術方案,就是java程序員砍掉兩隻手,只做一塊業務,而web程序員淪爲界面交互工程師。

 

我們接着前面的分享,web程序員不甘心侷限在界面交互上,想找回自己的價值,就開始學習1-4點的能力,於是全棧工程師就大火起來。

由於一些誤導,就變成是:web程序員學習後臺開發,成爲全棧工程師;java程序員學習web開發,成爲全棧工程師;Android/IOS app端程序員,學習後臺,又可以開發app,又可以自己寫接口,成爲全棧工程師。

加上大衆創新,萬衆創業,很多創業公司招不到合適的程序員,或者是爲了省成本,就開始大量的招這種全棧工程師,對公司來說,是花一份的錢做兩份的事。這種做法對公司和個人都是沒有好處的,對公司有害不在這裏討論,有機會我另外寫篇文章分享;對於全棧程序員的傷害,後面二小節分享。

 

全棧工程師是鬼老提出來的概念,我沒有找到是誰提的這個概念,不清楚作者原著是怎麼講的。但是鬼老的書我看的多了,像《**編程思想》、《敏捷開發》、《XP》、《Scrum》、《重構》、《測試驅動開發》... ... ,像這些書都有個特點,比如《重構》,講的是代碼重構,但是它講了很多設計思維、設計模式、產品理解、用戶體驗等內容,所以學習這本書的內容,不僅可以寫出好的代碼,還能成爲一個優秀的架構師。再比如《敏捷開發》,它是講敏捷開發方法,看是講項目管理,實際它講了很多技術管理、開發方法,學習這本書,可以成爲敏捷開發的項目經理,還可以成爲架構師或技術總監。

所以鬼老提出來的概念,它都不是一個單純的概念,都是讓你職業能有成長。我們再看這些書的作者,都是從事這個行業一二十年的時候寫的,看介紹都是某科技公司的CEO或技術副總,到這個級別,都很關注程序員的成長,而不僅僅只是傳授一個技能。

 

我們回到facebook全棧能力要求第6、7點,這個是架構師的能力,所以成爲全棧工程師,這7點掌握了,可以達到架構師,或者主管程序員以上。其它三個點是技術總監要掌握的能力,如果掌握這三個點,有可能成爲技術總監。

真正的全棧工程師,是讓你職業向上成長的概念,簡單的說,是讓你成爲高富帥;不是讓你掌握更多開發語言,往旁邊成長,這樣只會成爲一個大胖子,互聯網行業發展這麼快,大胖子是跟不上節奏的,會帶來職業生涯的災難。

如果你對不同級別程序員需要掌握哪些技能不熟悉,你可以搜我寫的“程序員職業次第”的內容。

 

 

 

4. 高級程序員往全棧工程師發展的後果

 

百度百科對全棧工程師“困境”的描述:

技術有兩個發展方向,一種是縱向一種是橫向的,橫向的是瑞士軍刀,縱向的是削鐵如泥的干將莫邪。這兩個方向都沒有對與錯,發展到一定程度都會相互融合,就好比中國佛家禪修的南頓北漸,其實到了最後,漸悟與頓悟是一樣的,頓由漸中來。可以說全棧什麼都會,但又什麼都不會。

如果一個公司不太懂全棧工程師的價值,那麼全棧工程師的地位將會很尷尬,說得不好聽一點,全棧工程師就是什麼都會,什麼都不會。曾經有一次面試,對方問很基礎的問題,他答不上來,但他能做出產品,也知道什麼是怎麼一回事,他也不會犯那些錯誤,可他就是答不上概念,要考倒他非常容易。所以在應聘面試的時候,有些時候會吃虧,他可能會不如那些在某一方面鑽得很深的人工資拿得高。

由於經常在各種技術穿梭,他會經常忘記代碼的語法和一些API,所以他經常需要去查API甚至查語法,他覺得沒有Google我幾乎沒法工作。這在某些人的眼裏,是技術不夠的表現。他記的只是一個Key,一個如何找尋答案的索引,而不是全部,人腦不是電腦,他不可能能記下所有的東西。

 

百度百科對全棧工程師價值的描述:

對於創業公司來說,全棧工程師的價值是非常大的,創業公司不可能像大公司一樣,各方面的人才都有。所以需要一個多面手,各種活都能一肩挑,獨擋多面的萬金油。對於創業公司,不可能說DBA前端後端客戶端各種人才全都備齊了,很多工作請人又不飽和,不請人又沒法做,外包又不放心質量,所以全棧工程師是省錢的一妙招。雖然說全棧工程師工資會比一般的工程師會高很多,但綜合下來,成本會低很多。

 

全棧工程師的因果

我們結合價值和困境,來做下分析:全棧工程師是多面手、萬金油,哪些方面都會一點,都不精,能體現價值的地方是創業公司,大公司面試通不過。在一家人員不齊的公司上班,你說項目進行能順暢嗎?晚上加班到十點之後是不是情理之中的事?所以你選擇當全棧工程師,你是不是已經決定了以後只在創業公司混,每天要加班到晚上十點之後,一週要上六天班?

現在創業公司一年半內倒閉的概率是97%,也就是說,選擇了全棧工程師,你基本上就選擇了每一年左右要換份工作。你想在一家公司穩定的工作,好好的發展,基本上是奢望。

 

全棧工程師應該都有個感覺,剛開始的時候,面試很順利,很容易就被錄用,隨着年限的增加,面試會越來越困難。這個是爲什麼呢?

剛成爲全棧工程師的時候,還有一門語言精通,所以面試的時候,面試官看你一門語言精通,還會其它的語言,所以很容易就面試上了。但是,全棧工程師大量的時間都花在趕項目、加班和解決各種語言的問題上,隨着年限的增加,這門精通的語言,也不精通了,越來越依賴百度或谷歌。面試的時候,面試官一問三不知,想找份工作就困難了。

而難找工作的這個時間點是什麼時候呢?我們來算一下,22歲畢業,3-4年成長到高級程序員,成爲全棧工程師,差不多要經過3年,就可以成長到只能靠百度或谷歌來工作了。這個時候差不多29或30歲。

我們再往下聊,三十歲之後,體力還跟的上這種強度的工作嗎?這個時候很多人剛有小孩,這個階段的小孩是最鬧騰的,你多多少少都要照顧下小孩子,每天只能睡兩三個小時,頂得住嗎?所以現在很多公司不要三十歲之後的工程師,是有道理的,你只能當個萬金油,能力跟不上公司要求,加班又加不過小年輕,工資又比小年輕高很多,公司不炒你炒誰?

 

相信有不少小夥伴這段看得毛骨悚然,這就是互聯網行業,我們行業所有的麻煩都是自找的。這篇文章分享的觀點,成爲真正意義的全棧工程師,是可以避開這個因果的。

 

5. 中級程序員往全棧工程師發展的後果

本來,全棧工程師是因爲高級程序員升不到架構師或部門經理,退而求其次,通過學習更多語言來提升自己價值,提升自己薪資的手段。不知不覺,在行業中就變成是僅次於架構師的職位

所以,很多程序員立志成爲全棧工程師,這種思想已經延伸到中級程序員,我甚至聽到初級程序員講他要成爲全棧工程師,這太離譜了。我們來聊聊中級程序員成爲全棧工程師會有什麼後果。

 

我們來看個案例:

Android中級程序員,學習後臺語言,打通前後臺成爲全棧工程師。

中級程序員的能力範圍是什麼呢?中級程序員只能負責模塊,對完整的項目玩法是搞不清楚的,搞定完整項目是高級程序員的能力範圍。Android程序員,在APP開發團隊中,只能負責項目中的模塊,後臺缺人,把這個程序員拉到後臺幫忙開發接口,後臺他也只能寫點接口,最多是負責到模塊。你看他到哪裏都是負責模塊,只能在中級程序員水平。而且這種人好用啊,在公司會很吃香,項目組都想要他。他一會兒負責android,一會兒負責後臺接口,他永遠都不可能完整的搞定項目,不管是android,還是後臺。

像這個中級程序員,剛成爲全棧工程師的時候,工資會比同樣崗位的程序員高,因爲他可以做比別人多的事。但是,他只要做一兩年,換工作就麻煩了,本來以他的年限,應該是高級程序員水平,面試官按高級程序員來面試,肯定是蒙的,如果按中級程序員來面試,他基本上也只能回答些key,所以面試效果肯定一般,就算過了技術面試,談薪也會出問題,這種水平的薪資是中級偏下,而他當全棧工程師時,已經拿了接近高級程序員的薪資,自己不願意接受降薪入職,所以,他的職業發展就差不多了。

 

 

6. 全棧工程師的價值

通過前面的分析,我們知道,全棧工程師,它不是指掌握多種技能,勝任前端與後端,能利用多種技能獨立完成產品的人。

它是指全面掌握某個技術棧的人。

 

我們以facebook的全棧技能爲例,全棧工程師是有層次的,掌握1-5點是優秀的高級程序員;掌握1-7點,可以成長爲架構師或主管程序員;掌握其它拼圖的技能,可以成長爲技術總監。我們文章開頭說很多公司想要全棧工程師,那是因爲他有更高的技能,可以承載更高的職位;因爲有更高的職位,所以全棧工程師的工資更高。當然,這個是老外公司的想法,國內創業公司招全棧工程師,還是因爲一個人能當兩個人用,可以給公司省成本。

 

我寫這篇文章,不是打擊大家成爲全棧工程師,而是希望大家能關注自己的職業成長,成爲真正的全棧工程師。

java程序員,會web開發是理所應當的,這個是成爲合格的java程序員必備的技能,如果公司的人員配備,有專人來做H5開發,那就由專人來做,自己有這個技能不用就行了。偶爾出現web人力不足,就幫個忙分擔些工作量;或者是有小項目,一個人能完成的,就自己把前後端一起擔起來就可以了。

web程序員,學習後臺語言,職業才能走的更遠。如果只是做界面的交互開發,工作2年和工作5年的能力差不多吧,薪資差一倍,你說工作5年的這位職業是不是很危險。而且《web前端開發》等級考試,它就要考java和php等內容。

 

市面上講的全棧工程師,只是掌握全棧工程師技術部分,而全棧工程師,要全面掌握技術棧,即包括開發前的客戶和業務理解能力,產品分析和設計能力,開發過程中的系統架構能力、代碼開發能力、數據庫能力、單元測試能力、部署能力等,開發後的運維、安全、性能提升等能力。這個是職業成長的路徑,是職業成長之道。

 

這篇文章的觀點是我首次提出來的,網上也沒有找到類似的觀點,準確性你自己把握,希望對你有幫助。如果你有不一樣的看法,我們可以一起討論。如果對你有幫助,請關注我,我定期會分享程序員相關的話題。如果你有需要我分享的知識點或困惑的地方,可以給我留言,我在下一次做針對性的分享。

 

作者介紹

陳華祥

18年全棧工程師,8年集團公司CTO;

項目管理、職業成長、研發系統建設專家;

《艾米視頻聊天》,裝機量3億,註冊用戶4000萬;

騰訊學院《騰學匯》項目負責人;

銳思克網絡創始人

項目管理、程序員職業成長企業內訓講師和教練;

《程序員職場第1課》、《職業規劃:程序員百萬年薪修煉之道》、《高級程序員進階修煉》、《項目管理從入門到精通》,作者、講師。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章