apache 程序员 Firefox nginx Python centos Windows wordpress mysql 云计算 linux shell php Ubuntu 编程 java Android 开源 google 微软

程序員:如何成為一個全棧的工程師?

全棧工程師,英文 Full Stack developer,是指那些掌握多種技能,並能利用多種技能獨立完成產品的人。當然,現在「全棧工程師」很吃香,非常吃香!這是因為在移動互聯網時代,IT 系統變得愈加復雜,需要擁有全局思維的工程師來搞定各種「疑難雜癥」。不僅要玩得轉前端,還要搞得定後端,總之各種技術都懂,所以其重要性可見一斑。

近日,移動開發精英俱樂部圍繞「如何成為一個全棧的工程師?」進行了討論,主持人是優才學院的創始人伍星老師,讓我們一起看看大神們的精彩言論吧!(本文系國內 ITOM 管理領軍企業OneAPM 工程師整理)

程序員眼中的「全棧」

伍星-優才創始人:全棧,最早來自於 Facebook 的「我們只招全棧工程師」,從表面看是指技術棧,是完成一套產品所面要的全部技術和技能。谷歌在它的書中也提出,它們只招創意型人才,其實這是一致的、相通的!

饒培澤:全棧,在我看來是一種態度,無路遇到何種問題都能積極的去解決。全棧,也不是說會什麽,而是因為有好奇心與驅動力,所以什麽都想搞明白,學習起來自然能快速上手。

iOS小碼哥:全棧,也可以說「我是一塊磚,哪兒需要我,我就往哪兒填。」代表著快速學習的能力和超強的適應能力。

夢航:全棧,在一定程度上能更好的做出架構,減少維護成本。

卓競勁:我支持思想和知識層面的「全棧」,而非刻意技能上的全棧。

饒培澤:其實,能從前端寫到後端的人不少,但是能專職來做嗎?這麽說吧,很多公司的後端都能寫前端,但可不敢讓他們寫產品級別的代碼。如果後端人才如果能去了解前端的知識點,合理去進行整合互補,這樣是我們所鼓勵的。

藥交匯:全棧圍繞產品服務,重點是考慮問題的角度、廣度。個人理解也可以看成責任感的一種體現,前端、後端都可以也不代表全棧。只不過是圍繞著問題的解決方案,其根本還是本著對一件事情負責的態度,展開全方面的跟蹤。

伍星-優才創始人:從谷歌對創意型人才的描述可以看出,這更多體現在能夠主動地承擔工作和解決問題。比如谷歌講過一個例子,Adwords 是幾個非相關工程師主動解決了小問題帶來大收益的。

Facebook 的人才培養一開始是不分工的,「新兵營」之後才分工,並且輪崗很多,這中間暗含了:學習能力要相當強,我想學什麽,都能學什麽,需要我做什麽,都能勝任。

所以我們對全棧提出如下見解。首先要技術全面,作為全棧工程師,其技術當然要比較全面。從前端到後端、從運維到優化、從 PC 到移動都難不倒。 但又有自己比較精通的一方面。也就是說,作為全棧工程師既要有「專深」,同樣也要有「廣博」,這樣才能在解決問題時不受局限,才能融會貫通。

第二就是思維和心態。全棧工程師以積極主動的姿態來面對和解決工作中的問題。以全局的觀點來看待自己所從事的項目, 而不只是自己負責的一小部分。以做成產品、做成一件事的觀點來看待整個開發流程,而不僅僅是技術實現。 因為只能這樣的心態和觀點,他才會積極主動地去學習其他技術,用其他技術解決問題

第三是上升能力,全棧工程師並不意味著全能,什麽都會。但是全棧工程師有良好的基礎技能。 這個技能,既包括計算機科學的基礎,也包括英語基礎,有了這個基礎, 加上積極的態度,開放的心胸,就能快速地學習所需要的技術,比如像 Swift 語言,那都不是事兒。 並應用在所需要的開發工作中。

第四就是職業價值,像 Facebook 說,他們只喜歡全棧工程師,創業公司也會說,我們需要全棧工程師。無論是在大公司,還是創業公司, 全棧工程師都將成為搶手人才!那是因為,全棧工程師不但技能全面,而且心態積極,學習能力強!

伍星-優才創始人:所以全棧不是一種技能,而是一種能力。學習能力,開放心態是優先的!

李睿君:其實後面有段時間覺得全棧需要一方面熟悉自己本身專業的領域,另一方面需要關註另一段的技術,這樣在需要另一端技術,或是溝通時都能有幫助

著建彬:對感興趣的東西不要當成「工作」來做,其實興趣才是最大的動力。我覺得全棧應該是由「興趣」驅動的。

伍星-優才創始人:即使是領域專家,他對別的也會有了解和研究的。優秀的技術人員,對所有的技術應該有一種天然的好奇心和折騰勁

藥交匯:我前端和後端都經歷過,其實,在前期人員不全的情況下,結合業務並外出調研梳理了產品線框圖、PRD、流程圖,到制定了設計規範,到協調資源,然後制定研發周期,最後到輸出...... 曾一度以為這就是全棧,但是後來思考,這些只不過是本著對事情負責的態度,才驅動做了很多研發之外的事。就算一個人的技術全棧精通也要服務於根本產品。

伍星-優才創始人:項目進度和管理,比全棧本身要難。因為技術還是死的,人是活的,而且多種多樣的。就像業務架構師,本身曾經技術應該不錯,即使學新技術,應該也是有特殊長處和見解的,不過不學不寫罷了。這種人是標準的技術 leader ,技術能力並不一定是以某特定語言的寫碼能力而界定。

一般而言,全棧工程師在產品和溝通這塊都有優勢,由於技術全面,他能和各方溝通的比較愉快 。甚至和產品經理也溝通好。我也算是一個全棧,此前和各個產品經理溝通都很愉快。因為他不理解的地方,我會和他講清楚,分析清楚,為什麽這個不能做,為什麽那樣做不好,那樣做更好,有理有據,其實,產品經理也是講道理的,不像我們在網絡上經常「吐槽」的那樣。如果再加上本身的技術聲望和良好溝通的方式,程序員和產品經理相處其實會很和諧的。

如果成為一個全棧工程師?

王威:我的理解是,不僅自己領域的精通,然後其他部分也應該快速學習。在我看來,如果想成為全棧的話,還得靠上項目了。在普通公司的話,一般每個人只關註自己的領域,對跨領域的項目一般不會碰,可以自己利用業余時間來寫,比如原本做APP的,有空可以寫一下後端的東西,其實開始那一步比較困難。

張洋:全棧不只是技術,還需要心態、責任等方方面面。

江月:我覺得 facebook 要求全棧,並不是希望程序員技術全面但不精通。而是至少有一個領域精通,而且可以快速研究另外一個領域的技術點。

伍星-優才創始人:能成為全棧,意味著技術能達到一定高度,而高度,肯定是以長處見知的。我個人更傾向於認為,一專多能。

王威:成為全棧的話,還得靠上項目了。。。在普通公司的話,一般每個人只關註自己的領域,對跨領域的項目一般不會碰,自己私下來寫,比如原本做 APP 的,自己私下寫後端的東西,其實開始那一步比較困難。

藥交匯:關鍵是責任感的轉變,由「被動」到「主動」,才能實現自我超越。

拯救與逍遙:我個人看法,不是先有了「我要成為全棧」的目標,而是對技術的好奇和追求,以及積極應對當前業務發展的不斷挑戰,最終才能鍛煉出了全棧。

薄建業:我覺得,最好的方法就是項目驅動;從另一方面也說明,說為全棧,在一定程度上,也是被逼出來的。

王威:我比較贊成項目驅動型。比如 APP 端的,例如做個類似於雲筆記的軟件,那麽後端數據該怎麽保存,接口該怎麽定,該用哪種語言來實現後端,在分析你想要的目標的時候就能找到該用哪種技術該學哪種技術。比如後端用 PHP 寫,這時候就會推動自己去學 php,比如自己是做安卓,那麽語言銜接上,有可能選擇 JAVA 做後端,這時候就學 J2EE 的東西,圍繞這個需求來實現,然後學數據庫......其實說到底還是得有」目標項目」來進行推動。

林曦:後端概念太泛了,不同業務需求和規模需要的技術支撐完全不同。

王威:比如做高並發,可以 NodeJs 、 Golang 、 Erlang ,或者幹脆用 Java、PHP 等等。其實做項目的第一步,後端寫出業務服務接口,在業務量上來之後考慮比如性能優化,比如負載均衡,或者再比如後端架構分層等等。

文彥峰:其實,接入也有很多要做的,一般要和終端一起做,路由、負載、流量控制、安全、監控、旁路、優化 TCP 協議棧、內核參數再到硬件的支持等等。做業務,比如網關、鑒權、微服務框架、服務治理、緩存、消息中間件;存儲,單機房如何保證數據不丟,多機房是單向同步,雙向同步,出了異常怎麽通過日誌恢復,數據的檢查,靜態檢查點的選擇。怎麽做分片,怎麽擴容不影響原來的分片?

王威:所以說到底還是得有這個項目需求,圍繞著需求來分析需要的技術,然後再研究技術了。感覺純按照興趣來學新的技術,作為對這一個技術有個優缺點簡要了解,在需要的時候能快速學習。我個人還是覺得,想成為一個「全棧」,就找一個想法並實現它。

周淵:比如,你覺得 NBA 好看,想要做一個 APP 能提醒比賽,那麽每天下班後,沒事寫幾個小時代碼,三個月後,你就會發現做成了。

林曦:我覺得做個「入門型」的全棧比較容易,真正能做到都有一定深入的了解很難,融會貫通更難。

拯救與逍遙:先自學基礎入門,進階的話,可以隨公司項目,初期不能直接參與,但是我們可以主動思考技術方案,然後參照其他同事最後落地的方案,對比總結。能力慢慢提升,真正上手的機會總會有的!

周淵:最重要就是,Just Do It !

林曦:不過大公司相對有一個好處,就是能遇到「牛人」的概率也比較高,所以開發過程中,某一個部分遇到瓶頸的時候想要找人討論或者請教,找他們也是比較好找的。

周淵:高人點撥,確實重要,但是建立在你入門的基礎上。

拯救與逍遙:很多時候,我們不能做最想做的事情,而且要停下來推動一下,阻礙我們繼續前行的事情。但是,有些坑,有些歷練是必須的,別人說一萬遍,我們還是得自己歷練。而且很多技術選型,都是在真正落地之後,才暴露出問題。

王威:采坑是必然的!運氣好的話,采坑的代價低,運氣不好的話,采坑代價可能毀掉整個項目。不過有些坑,有可能是在技術選型的時候就會暗含的,這個時候確實不好找。

王威:我們業務在往圖數據遷移的時候也踩了很多坑,因為我們是社交軟件,所以很多需求是基於用戶關系的,比如喜歡、不喜歡、好友等等。。。最開始覺得 neo4j 挺方便的,導入數據的時候發現,免費版就是個坑爹的玩具。。。收費版貌似5千刀一個月還說多少,巨貴。。。

王威:創業有這個好處就是人少,一個人當多個人用,這個時候就有很多機會去摸新的東西,不過缺點就是沒人帶,自己摸石頭采坑。。。

王威:不過對於我來說收益大於采坑風險。。。所以還是得圍繞這個需求,一圈一圈的挖掘更好的解決方式,這個是一種學習的過程。尤其是在風險可控範圍內,絕對鼓勵大家嘗試新的東西。

到最後你的選擇很多時候依賴你團隊的水平,怎麽把這些人水平帶起來,你這些才能做細

最好的成長就是在業務中成長

林曦:架構也是活的,需要不斷生長,不斷修改。不過,前期埋的坑也只有後期加班吞了,沒有一勞永逸的架構!

董飛:我覺得重要的還是分享,別人幫你填了坑,你也可以幫別人填坑。而媒介就是博客,大家可以互幫互助。

王威:說到寫博客,我覺得可以把思維給規範化,把想法記錄下來的同時還能註意到以前沒註意到得細節,絕對是學習新姿勢最必要的補充。

伍星-優才創始人:曾經,我就主動地提出來幫公司承擔一些的運維方面的事情。然後就自己學習,請教,後來很自然地就成為全棧了。當然,全棧並不意味著上班學別的,我們上班時間把公司的事情做好,這才是成為全棧的前提。

伍星-優才創始人:還有一點,就是我們在寫代碼的過程中,要考慮怎麽優化,怎麽寫得更快更好,而不是像「搬磚」似的,簡單的重復。「搬磚」工作很快就會被淘汰掉,積累核心競爭力才是發展的根本 。

王威:比如做APP,在寫從服務端拉取數據的時候,就可以考慮一下他們為什麽要提供這樣的數據結構?這樣的接口如何進行實現的?有這些疑問的時候,就會促進自己去看看去了解一下相關的知識,這樣才能不斷通向全棧之路。

當然,完成是一碼事兒,完成好是另一碼事兒。全棧的意義不是全都泛泛地去做,而是在做深自己的領域同時,也能借鑒其他的技術,至少在團隊開發時候溝通成本會減少很多。

趙建彬:其實,產品並不會關心你代碼怎麽寫,關鍵自己要寫出讓自己覺得滿意的、高質量的代碼。

薄建業:全站人才可以站在更高的視角,提供「一攬子」的解決方案,避免踩深坑!

文彥峰:熱衷於技術,成全棧是早晚的事兒,技術全面某方面又比較深入,自然能解決別人解決不了的問題,能做別人做不了的事情,團隊中的影響力,行業中的影響力,也自然就有了,形成正向循環,還是挺不錯的!

伍星-優才創始人:就像羅輯思維跨年公開課說的那樣,核心競爭力,就是你的不可替代性。我們不能單純地說「全棧」好,很多初學者會被誤導,是因為他們不了解什麽是全棧,怎麽才能成為全棧。就像武功也有練「走火入魔」的。

其實,加入一個快速成長的團隊創業。是成為全棧的最快捷途徑。這個團隊,也可能是大公司內部創業團隊。也可能是大家都把工作當作創業的團隊。而沒有好奇心,沒有折騰勁,沒有學習能力,沒有開放心態,是不可能成為全棧的!

延伸阅读

    评论