四火的嘮叨:也談談全棧工程師
縱使目標再大,人的精力有限,于我來說,早些時候遠大目標隱約是“成功的軟件工程師”這個樣子,但是目標是需要逐漸細化的。這些年我漸漸對自己的定位和未來有了一個清晰一點的認識。確實我有很強的觀點,覺得軟件工程師需要有足夠的全面性,在《我眼中的工程師文化》中我也說“工程師文化,不是只有權力的一面,它對工程師的要求,是每個人都要足夠能干,都要做許多的事”……
但是,全面性不代表沒有專精、沒有方向。深度和廣度統一的問題已經有許許多多過往的人和我說過了,不存在一個在某一領域精深的牛人但是知識卻很 窄,也不存在一個博學大師但是卻沒有一個自己擅長的領域;而方向更是不可回避的問題,以前和朋友開玩笑總結了幾類工程師的發展方向,就像打怪升級一樣,有 數據庫專精、有前端專精、有語言設計專精、有機器學習領域專精,甚至還有企業流程咨詢專精、敏捷實踐專精的……領域劃分實在是太寬闊了,就看技能點數如何 分配。
我當然也給自己尋找了方向。在這個網站的右上角我放上了三個關鍵詞,大概是對當前的我一個側面最粗略的描述:
- #Web#是我一直以來感興趣的領域,早有人說互聯網軟件的技術和發展甩傳統軟件好幾條大街,尤其在見到很多朋友、牛人投身互聯網領域,我更對它充滿憧憬;
- #JavaEE#算是我相對熟悉的領域,雖說這幾年接觸的東西稍微多一些;
- #全棧工程師#是我的方向之一,粗略地說我現在也已經符合這樣的標準,但是仁者見仁智者見智,這是以我的觀點而言的,每個人對它有不同的理解,在這里我會說說我的看法。 </ul>
其他人的理解
關于這個話題,當前頗有爭議,雖說大部分工程師表示認可。在 Google 搜索“Full Stack Developer”的第一條記錄,是 Laurence Gellert(前湯森路透的工程師)寫的一篇名為《What is a Full Stack developer》的文章,這篇文章的觀點其實還是非常切合主線的:
To me, a Full Stack Developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology.
</blockquote>并且羅列了滿足“full stack”應當掌握的各層技術,包括服務器、網絡、主機環境,數據建模,業務邏輯,API 層/Action 層/MVC,界面,用戶體驗和理解用戶、業務所需。
在國內,知乎這個帖子應該算是熱帖了,每個人都有自己的看法,比如第一條回復就提到了思維方式和學習能力,但是其中有很多觀點偏離了“全棧”這個主線,變成了“我心目中的理想工程師”這樣的討論,就不符合初衷了。
全棧工程師的發展
在系統、全面的大公司,全棧工程師并沒有一個穩定的發展職位。我無比贊同知乎那個帖子里面這樣的一句話:
一個真正的全棧工程師,目標只有一個:創業。
</blockquote>聽起來有些悲涼,但事實就是如此。任何一個方向頗具深度的工程師,都有希望為自己在那個特定的領域贏得自己的一席之地,是權威,也是技藝精深的 專家。但是對于所謂的“全棧”而言,很多情況下根本就稱不上優勢,你會寫數門程序語言,會設計 API,會寫前端代碼,會做手機 APP,甚至會切圖,會和用戶溝通,但是倘若在這些方向都難說有哪一項足夠強大,那全面性又能在大公司的晉升線路上謀得什么?
但是創業的小公司就完全不是這樣了,你不能指望有 DBA、技服、產品經理、美工、前端設計師、服務器工程師、操作系統管理員……無數角色,你只能有那么少得可憐的幾個人,每個人都必須是全才,搞得定各種 事情,經驗豐富、視野廣闊。出了問題,一個人就可以搞定,而每個人,都可以彼此備份。
這也是“學習能力”在全棧工程師中扮演無比重要角色的原因。畢竟,在全面的工程師,也不可避免地涉足自己不熟悉的領域,快速學習并且把問題搞定,在這樣的過程中體現自己的價值。
全棧工程師擁有更廣闊的視野和更廣泛的學識。全棧工程師可以從更高的角度去看待問題,這比某個領域的專家,更不容易做出錯誤的決策。
事實上,軟件工程本來就是一個復雜的事情,需要工程師掌握和學習的知識很多。在我前一家公司,有這樣一個故事,好幾年前,公司嘗試給軟件工程師 分檔,甚至依此使用不同的雇傭實體:讓來自子公司A的最優秀的工程師設計了程序,再讓來自子公司B的平庸工程師去實現。最后這個方案徹底失敗了,兩家子公 司的工程師被迫合并,這也證明了,軟件工程是一項復雜的腦力勞動,想像流水線工人那樣,把整個環境簡單地切分成若干個過程,然后通過簡單勞動完成,是不可 能的。你可以舉出很多外包、內包公司中上述的例子,但是在我看來,這只是對勞動力的壓榨而已,別指望這樣的形式能做出什么偉大的產品來。
“全棧”不等于“全面”
“Full Stack”,這個詞其實在英文中使用很普遍,可以直譯為所謂“全面的技術棧”(軟件工程中,每個領域都擁有相應的數種不同技術,這就是這個領域的技術 棧),現在人們加入了自己的理解,但無論如何,它絕不等于“comprehensive”。換言之,一個全棧工程師,絕不等于一個全面的工程師。接觸多點 領域當然有好處,但是淺嘗輒止、僅僅停留在入門級別,那這個領域內,給別人、給項目造成的危害,甚至大過那些一竅不通的人。舉例來說,你是愿意去給一坨屎 一樣的設計和代碼修修補補呢,還是愿意干脆重新弄一個呢?當然,也不要走極端,有一些領域的知識,可以透明,那就透明吧,比如,使用云服務的時候,你可以 對硬件知之甚少,這對工作并無礙。僅僅為了全棧的名號,追求這樣的知識儲備并無必要。
“全棧”不等于“全端”
全棧工程師的劃分,絕不止以“互聯網應用”的維度,更特別地,絕不止以“互聯網網站”的維度。微博上很多人說到全棧,就提“全端”,我認為,這 實在是莫大的誤解,二者是嚴重不等同的。前端+后端,這只是其中一種粗暴的劃分方式而已。就像同事中,有對操作系統熟悉的,有對機器學習熟悉的,把他們粗 暴地歸結為“后端”工程師,是毫無意義的。即便說到創業,也遠遠不止互聯網領域啊。事實上,要能比較熟悉其中幾個領域,就已經是非常難得的人才了。我想不 出還有什么其他行業,會像軟件行業這樣需要不斷地擴充自己。
最后,我想用一個無比簡單的詞來描述全棧工程師,肯定不夠準確,但也足夠直接——
視野
</blockquote> 來自: www.raychase.net本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!