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

最近跟朋友聊天,常常聊到全棧工程師,我就問他們爲何要成爲全棧工程師?技術派的回答:「全棧工程師,先後端技術都會,感受很牛!」,職業派的回答:「全棧工程師不少公司都須要,不擔憂工做找不到,工資也比普通的工程師高。」,跟風派的回答:「我好多朋友都想當全棧工程師,都說全棧工程師很好。」 有時候,我就賤賤的問他好在哪裏?他當場傻了,回答不上來。php

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


1. 什麼是全棧工程師


全棧0.png


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

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


這個定義是正確的嗎?請你花幾秒種想一下,這個很是重要!程序員


這個定義是錯誤的!web

這個定義是錯誤的!面試

這個定義是錯誤的!數據庫

重要的事情說三遍,因此纔會有百科詞條後面講的困境。編程


全棧5.jpg

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.jpg


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全棧能力要求第六、7點,這個是架構師的能力,因此成爲全棧工程師,這7點掌握了,能夠達到架構師,或者主管程序員以上。其它三個點是技術總監要掌握的能力,若是掌握這三個點,有可能成爲技術總監。

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

若是你對不一樣級別程序員須要掌握哪些技能不熟悉,你能夠搜我寫的「程序員職業次第」的內容。


全棧4.jpg



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


百度百科對全棧工程師「困境」的描述:

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

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

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


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

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


全棧工程師的因果

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

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


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

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

而難找工做的這個時間點是何時呢?咱們來算一下,22歲畢業,3-4年成長到高級程序員,成爲全棧工程師,差很少要通過3年,就能夠成長到只能靠百度或谷歌來工做了。這個時候差很少29或30歲。

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


相信有很多小夥伴這段看得不寒而慄,這就是互聯網行業,咱們行業全部的麻煩都是自找的。這篇文章分享的觀點,成爲真正意義的全棧工程師,是能夠避開這個因果的。


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

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

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


咱們來看個案例:

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

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

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


全棧1.jpg


6. 全棧工程師的價值


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

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


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


我寫這篇文章,不是打擊你們成爲全棧工程師,而是但願你們能關注本身的職業成長,成爲真正的全棧工程師。

java程序員,會web開發是理所應當的,這個是成爲合格的java程序員必備的技能,若是公司的人員配備,有專人來作H5開發,那就由專人來作,本身有這個技能不用就好了。偶爾出現web人力不足,就幫個忙分擔些工做量;或者是有小項目,一我的能完成的,就本身把先後端一塊兒擔起來就能夠了。

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


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


這篇文章的觀點是我首次提出來的,網上也沒有找到相似的觀點,準確性你本身把握,但願對你有幫助。若是你有不同的見解,咱們能夠一塊兒討論。若是對你有幫助,請關注我,我按期會分享程序員相關的話題。若是你有須要我分享的知識點或困惑的地方,能夠給我留言,我在下一次作針對性的分享。


做者介紹

陳華祥

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

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

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

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

銳思克網絡創始人

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

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

相關文章
相關標籤/搜索