成為一個全棧工程師是一種什麼體驗?
知乎多工程師,那麼就請各位工程師大大們來回答下吧T^T
成為從硬體到前端到後端的全棧工程師是一種怎麼樣的體驗 ? 若對IT感興趣,工作上前幾年應該廣度優先還是深度優先?
看到這個問題忍不住要分享一點自己的想法。本人Google工作兩年,入職之前也是前端後端摸個遍,單擼網站app從coding到deploy什麼的都不在話下,所以找工作的時候也是在自己簡歷上寫下了一筆Full stack engineer。
現在兩年後回頭再看覺得自己太天真了!都不用說全棧,就單單一個前端,吃不透的地方就太多太多了。跟當年自己玩的project不同,從工程的角度來開發一個項目,要考慮的事情真不一樣。比如你用angular,亂watch會讓UI變慢;寫個api,可拓展性怎麼樣,迭代起來向後兼容性怎麼樣;你的style有考慮過從左向右的語言界面是什麼樣嗎;一個函數,不給外部用的就一定要定義為私有的,不然將來想改它的時候還要到處搜有沒有人用這個函數(雖然谷歌有code review,但這種code還是很常見);怎麼debug test?怎麼寫前端的integration test?怎麼寫前端+後端的integration test?chrome console玩的夠溜嗎?考慮到後端那事情就更多了,資料庫設計不好等PM提出一個feature的時候你可能就要用非常複雜,耗時的手段才能得到你想要的數據...所有這些單獨拿出來都是個課題,都值得鑽研。
所以我建議新人切忌貪多,先找家公司干著,自己去把坑踩一遍,然後去搜索成熟的解決方案,學習其背後的原理。這樣漸漸的,你未必會成長為一個全棧工程師,但你一定會成為一個獨當一面的工程師。祝好:)
和女朋友兩人獨立開發一個web在線工具,產品進入beta版。xiaopiu-在線APP原型設計,我算是對這個產品的所有環節都有參與,產品,設計,前端,後端,線上部署,在公司工作的時候還用swift開發過一個ios的app演示demo。所以覺得自己應該可以算是一個初級全棧開發工程師吧。
但是我覺得,我才24.還很年輕,我有大把的時間去學習,工作時間還可以這麼長,之後說不定有機會呢? 也不知道這樣的想法是不是很不恰當,很天真?
樓主說到的24歲,個人覺得不早了,不能說以後還有大把的時間去什麼什麼,最好的學習時間是十年前,其次就是當下。
我們倆都是13年本科畢業以後從事了兩年前端開發,然後離職獨立學習和開發。本人27,妹子明天滿25。首先我認為全棧,不能什麼都厲害,你必須要在你的技能棧里,選擇1-2項去深耕,在保證你的某項技能是不弱於其他人的同時再去追求別的東西。比如我覺得我的前端能力還算可以,其他的能做到應付。一直覺得自己興趣廣泛,對什麼都好奇,都感興趣,但是也是一個很不安分的人,很浮躁。
樓主的這點和我很像,但是我對樓主的建議就是,需要認準方向去執行,懂得從興趣範圍里篩選出當前就能觸及到的,設定出目標。我簡單說一下,比如我當時自己學習後端的時候,就是先給自己設定目標,目標為:要在後面的一個月時間裡獨立完成一個小論壇。然後我會花3-5天的時間去分析產品,搭建好簡單的前端頁面。剩下的時間就是一邊學習後端,一邊把這個東西完成到可以使用,最後花了不到一個月的時間把這個小東西完成,做到了一個小論壇基本的功能,並且讓自己和我女朋友也試用了一下,驗證有沒有功能問題,發現問題就去把問題解決了。
好奇,感興趣,如果不能轉化成自己的東西,你對於它還是一個過客。你必須設定觸及得到的目標去接近它,同時帶著提升學習的方式就最好了。錢、付出回報率。
興趣的前期就是付出,就是花費,時間和金錢都是。回報什麼的都是把興趣轉變為技能以後的事情了。我在對一個東西產生興趣的時候,要是沒對它花錢,就很感激這個興趣了。本來把興趣轉化為技能,就沒有準確的回報率,這個回報率取決於你轉變出的技能的能力值。就比如說兩個人都對編程感興趣,有人5年能成為大牛,有人還是在基礎崗位工作一樣。你要是真的感興趣,就去做,就去執行,別被太多的限制給束縛了。
個人觀點,如有不當之處,歡迎指正交流。在我看來,所謂「全棧「是一個沒有確定意義的動態概念;至多說明「此人比較勝任自己目前所從事的工作,相關領域都能插上一手」罷了;一旦領域換了或者要求提高了,對「全棧」的要求自然大不相同。因此,談論一名工程師是否「全棧」是沒太大意義的:「全棧」應當是一名有追求的工程師在某個職位上對自己的要求,並不是一個頭銜。
比如說我吧。最初使用PB做項目;玩著玩著,從動態界面生成、顯示效率優化到資料庫調優就全都能插上手了;然後,基於自己對底層知識的理解,還能用PB玩一些黑科技,實現官方沒有提供支持的功能(用俺同事的話說就是「你都玩到圈外面了」)。
甚至,我還直接和客戶方技術人員交流,修補了很多過去需求調研時留下的坑(被客戶評價「夠半個XX工程師」、「[去做他們行業的工程師] 日常問題應該沒有能難倒你的了」),然後自己設計方案、制定計劃並成功完成;之後這個軟體才通過客戶驗收。
你看,從需求調研到方案設計;從資料庫設計到網路通信協議制定再到後台邏輯、軟體界面……這差不多算全棧了吧?
後來用C/C++做項目,然後就知道了內存屏障、cache、分支預測,知道了模板推導、編譯期計算;於是開始學著去寫能討好CPU的代碼……埋頭底層N年,逐漸熟悉了linux環境。
於是,往下,改過linux kernel module、挖過tcp/ip協議棧、查過各種加密/驗證演算法/體系的底細(不能說了如指掌,但清楚其來龍去脈、自己也親手實現過一些核心演算法);中間,玩過apache/nginx/django,用C寫過cgi頁面,折騰過hadoop/gluster;上層嘛,用gtk/wpf等等都寫過界面,用腳本寫過自動探測機器硬體然後自動裁剪linux kernel生成最小化系統的東東,用python+django實現過自己的oauth2頁面(當時oauth2剛剛推出,還沒有現成實現可用)……
從kernel一口氣玩到web頁面,從C折騰到js……隨便哪個環節都能摻乎進去,也都搞出過商業軟體。按照定義,這似乎也勉強能算「全棧」吧?
這個「全棧」和當初的「全棧」,含金量是否一樣?
樣樣行,樣樣慫?您可千萬別這樣表揚我。
「樣樣慫「這個評價可謂恰如其分;」樣樣行「可實在是愧不敢當。
在我看來,所謂「全棧」,大概就是「自以為已經在自己所能接觸領域的各個地方都留下過爪印」吧。
很遺憾。雖然的確經常自我膨脹;但有一點很清楚:我從未做到過「在所有地方都留下爪印」。各種意想不到的細節且不提它;比如各種加密演算法背後的數學原理及其證明,其上覆蓋的淤泥太深太硬:既然根本沒有能力去挖掘它,憑什麼在那裡留下爪印呢?
更重要的是,很多地方我甚至都不知道其存在。
一旦跳出自己所熟悉的井口、被新鮮事物糊到臉上……所謂「全棧」就是個笑話。
所以,成為一個全棧工程師的體驗就是:這隻青蛙又進入了新一輪的膨脹周期,現在它迫切需要一塊分量十足的「醒工磚」,否則很可能就要被困死在熟悉的井底了 ^_^
我理解的全棧是這樣的:
1. 熟悉硅的提純,以及晶體硅參雜的基本工藝。2. 精通數字電路,模擬電路。精通 FPGA ,會自己流片。
3. 精通通信原理,數字信號處理。4. 精通程序員的舊三大浪漫: 操作系統, 圖形學, 編譯原理5. 精通程序員的新三大浪漫: 人工智慧, 大數據, AR/VR6. 精通客戶端開發, web 開發, 桌面開發, 熟練掌握一百種語言以及 API7. last but not least, 精通 C++一般來說把自己領域全挖深學透了,沒有新的可以學的東西了的人,才有資格說我想學別的領域,成為全棧並不是目的,僅僅是個結果而已,如果每個領域都淺嘗輒止,那只是在逃避難度。不過也不一定就要賴在自己的第一個領域上,比如你可能覺得對軟體更有興趣,放棄掉硬體也可以。
什麼體驗?
就是不敢說自己是全棧工程師,因為怕被黑,只能自稱打雜的,全乾工程師本來想強答一把,畢竟編了快20年程序了,技術方面還是有底氣的。
結果仔細一看,全棧還要懂硬體?! WTF! 不帶這麼玩的!
不說了,找本電子與電路先看起來,十年後來答。唉,全棧!看著詞覺得很牛逼,其實在全棧工程師的眼中,這兩個字代表著苦逼!
我認為吧,絕大多數的全棧工程師,內心深處都並不想成為全棧的,全都是被逼的啊。沒人沒資源,只能自己寫啊。但凡有非常合適的合作者,我估計工程師們都不至於把自己弄成所謂全棧的!吐槽完了。回答問題。上面各位都說過了很重要的一點,先深度再廣度!沒有錯,我再進一步解釋為什麼?我認為核心原因有兩個:第一:乘年青還學的動,養成好習慣,一定要把自己往深了挖掘,特別是對系統整體的運作理解,例如,可以嘗試去成為各個系統的驅動開發者,內核代碼維護者等等,一定要往深了捅。當然也和你方向相關,例如如果搞人工智慧,那你往驅動方面捅基本就沒意義,就就該往演算法方面捅,而且記得要多寫代碼。為什麼呢?因為年輕時能捅的動,年紀大了就捅不動(年輕時沒養成專註的習慣,年紀大了心散了就很難養成了,學習效率非常低)了,我自己親身帶過一個人,年紀大了,帶不動。所以很簡單的。乘年青趕緊去深入。第二:只有在某個領域深耕超過6年(至少),你才能基本摸清,這個領域某方面的高手有多少,每個高手擅長的是什麼等等,也只有這個時候,你才能看得起,在該領域競爭的這些廠商,各自的優缺點,他們把自己塑造的形象,以及彼此間的出牌方式等等,發展趨勢等等,他們間各種圈外人不知道恩怨等等,所以至少至少要6年。也只有在這種情況下,你才有能力去設計自己看好的產品,為什麼?因為只有這個前提,你才有可能保證你設計出來的東西能在夾縫中生存(做出真正有差異化的產品)。否則可能活都活不下去,也只有這個時候,你才會知道,你才會知道應該怎麼去配置(尋找)各類準確(確保不會被忽悠)技術資源以達成自己想要的那個產品。最後講下如何成為全棧工程師:這個其實非常簡單,你給利用業餘時間督促自己做個產品,定個時間,例如一年,然後你利用業餘時間去實施。一般在擅長的領域的活幹完以後,進入到不擅長的領域時(一般大概會在項目開工3-5月以後),邊吐邊寫自己完全陌生領域的代碼時,你差不多就快成全棧了,當到了第八個月往後,你發現在自己已經毫無感覺(都吐得沒力氣,內心反感到極致又會形成另外一種有點麻木但又會覺得也就那樣了,甚至偶爾還產生哎呀這好像也蠻好玩的感覺),最誇張的時候是你有時實現了一個功能,可特么你不認真想的話,你都不曉得你到底咋實現的(例如人家問你這個功能咋實現時,你可能會楞個三十秒,才慢慢想起並答出,而你自己擅長的領域完全都是脫口而出,我這麼說你大概會明白我什麼意思吧)。你就算是一個完全的全棧工程師了,到那個時候,你眼裡只有目標,你認為去他媽的感覺,去他媽的各種語言差異,都特么的一路貨。寫什麼都是一樣的。你說的全棧就是full stack,就是說前端後端都能做,這都是說做網站,其實沒什麼難的,就那點東西。後端無非就是各種framework,加上新的nodejs,前端就是多了個web上的東西,現在是各種javascript 和 css 的東西,沒人能數清楚有多少,但中心思想不變,browser還是按照自己的方法load page。如果你想再多知道一些,就是弄弄資料庫和大數據的處理還有cloud。前端再加個swift的app。這些我都做過,確實做完眼界更廣一些,至少可以看到計算機系統里體系結構的大同小異,在設計新的系統的時候可以更好的把握結構。
但是計算機編程領域還有很多的其它東西,比如人工智慧,IOT,vision,沒有人能把所有的東西全都整明白。做網站的全棧是好的,至少能自己就能搗鼓點成品出來,找工作也容易對口,但最後你還是在網站這個大的類別裡面。
其實要想做全棧,不完全是為了錢和回報率,而是要有些對新事物的興趣。我覺得一個好的工程師,不因該拘泥於一個系統或者一個語言,而是要能遇到問題就用合適的方法解決問題。經常看到一些工程師,學了java就覺得是萬能的,幹什麼都想用java寫。這種思維是對是錯無法品論。但從實際來看,是微軟一直以來所抱有的,成功了么,不還是被linux,mac,java打的滿地找牙么。多元化是軟體行業的趨勢,所以一直學習也就是工程師的日常工作,也許你在學習過程中有意無意的就成為了全棧工程師。
--------多謝有人點贊,我就多說兩句----------本來其實市場上做前端和後端分的還是比較清楚,但後來要求full stack的職位越來越多了,我覺得這其中有一個重要原因是agile的流行。本來一個軟體大組可能有十幾,二十個人,後來變成agile小組三五個人,負責一小塊feature,小組裡有前端,後端,UI,product manager組合而成。工程師爽了,一個feature可能就一兩個工程師做相關UI,但問題是從管理的角度來看,麻煩來了,因為這麼個組合不好互補,比如如果做UI的工程師有事休假,整個agile team弄不好就沒有人做UI了。這需要manager非常仔細的安排人事變動,確保agile能夠健康運行。可能經常有些team為某個方面的工程師還得爭來爭去,很麻煩。但是full stack在這時非常好用,就像萬精油,可以隨便抹。manager們不用再擔心組裡有人休假,因為full stack可以隨時替補。這也是為什麼有些公司喜歡full stack的原因。我比較精通前端開發,比較精通微服務架構,比較精通大數據相關的技術,雖然達不到全棧,但是至少前、後、數據一整套技術都很熟悉,給我一定的時間我能憑一己之力完成一個系統的全流程開發,但是這在現實中幾乎不會給你這個機會,即便給你這個機會(例如私單),你也會覺得特別累,開價會特別高(最近就遇到了)。
我現在的感受就是,所接觸的技術實在太多,你需要花費太多的精力去維護他們,你就沒有太多時間去研究一些需要大量精力才能掌握的技術,例如機械學習之類。
而我建議以後各位要站在業務的角度來積累自己的技術,如果你不能形成自己的技術閉環,在做產品的時候會比較被動。有限的精力放在自己所關注業務涉及的技術上,用不到的,適當了解即可。
例如我從事安防行業,對gis、視頻識別相關技術可以多了解一點,而對其他技術,例如互聯網高並發相關技術,適當了解即可。我自稱全棧工程師應該不算什麼問題,參看我的部分個人獨立作品:個人作品不完全收錄 - 斯克迪亞 開發者博客
這些年基本都是獨立開發,包攬近乎所有工作,其實也不是刻意去拓展領域,大都是根據自己的需求來走。
我覺得深度和廣度兩條路都可以走,各有其利弊,主要看你要做什麼事。專精適合跟團,也比較容易做出名氣,缺點就是脫離團體的話個體能做的事少(水桶原理),項目全局觀念弱。全棧反之。PS:我覺得全棧工程師都可以拜達芬奇為祖師爺他是一位思想深邃,學識淵博、多才多藝的畫家、天文學家、發明家、建築工程師。他還擅長雕刻、音樂、發明、建築,通曉數學、生理、物理、天文、地質等學科,既多才多藝,又勤奮多產,保存下來的手稿大約有6000頁。
就是每天業餘時間都報廢了的體驗。
不高端只搞了前端後端客戶端,不會提純硅,沒造過晶元,沒拉過光纜。
所以只能回答你後面的問題。當然是先廣度,深度後面自己看著辦,反過來就容易走錯路。
如果說Web全棧的話還是挺有好處的,團隊都是全棧效率跟前後端分工完全不是一個級別的,自己給自己API,高機動-高維護性-低內耗-低閑置率。
用一把小刀在DVD上刻出vr界面安裝的基於c++的強人工智慧。
就是全乾工程師
扎克伯格寫fackbook的時候多大來著? 算是全棧碼? 個人認為面向產品的工程師就是全棧工程師 一切技術從產品出發 相對於清除自己要學什麼更重要的是知道自己不要學什麼 懷著自己心中的產品去研究 才能不浪費時間 不服的解釋下中國這些耳熟能詳的獨立開發者.
不建議全棧,身邊也有向全棧發展的朋友,也沒找到很合適的環境,每個方向都很深,精力是不夠的,找個主要的,其它有些需要大致了解,但不建議就奔著全棧走了
你最後也提到了,重點是「錢,回報率」,換句話說,就是高額的工資,高額的工資意味著你要在一個大廠混一個不錯的職位;考慮到你只有二本學歷(並沒有學歷歧視的意思),進入大廠基本上只剩一條路了:在一個領域做的非常深入,深到hr和面試官可以不在意你的學歷。 所以,很明顯,你需要先深入一個技術方向,而不是追求飄渺的所謂全棧,希望能幫助到你!
技術上可以追求全棧,職位上這是不合理的
全棧是一種追求,需要熱情與清晰的目標。
(背景:本人互聯網行業)
清晰的目標要有多清晰,就是價值。都是打工的,產品沒人用,只能發發朋友圈,然後用能學到東西安慰安慰自己肯定是不行的。
可能有人不愛聽,換種方式講就是自己寫的代碼(也可能有其他形式,邏輯,思想等等)要有用,要把注意力集中要業務上去,要快交付,要好用,要美觀,要加快試錯的過程,省出來的時間學習(注意這裡的學習是有價值的),產品性能有問題,直接拉公司的大牛過來解,交互差?拉前端過來幫忙,沒給你配前端?直接擼起袖子自己干(省出來的交流成本也是價值),說了這麼多關鍵點在哪,就是沒什麼能擋住你創造價值的腳步,全棧工程師的核心價值就在這裡,所以你猜為什麼現在互聯網公司喜歡僱傭類似全棧工程師?
你可以在滿足業務需求的基礎上,隨意嘗試新東西,或者繼續追求交互的提升,架構的優化,將注意力集中到業務上,談何容易,不過不要過早的優化是最簡單有效的
當然講話都是要有上下文的,試錯成本過高的產品就不是全棧工程師能參與的了,當然在全棧工程師看來也比較無趣,個人見解,不喜忽略
推薦閱讀:
※大公司或專業團隊目前流行的前端工具有什麼?
※如何考察候選人 Vue 技術水平?
※作為一個小白如何讀vue的源碼?
※Vue2用什麼UI 框架呢bootstrap 好像不好用了
TAG:IT工程師 | 程序員 | 前端工程師 | Android | Android工程師 |