天天看點

創業感悟:工程師的自我突破

前言

第一次寫非技術分享的話題,而促使我提筆的動力源自去巴黎參加Openstack Kilo Design Summit大會之行,因為我從外國工程師的身上深深感受到了他們對于技術的執着。在本文中,我想探讨的是如何實作工程師的自我突破,因為初入茅廬的工程師更關心的是如何從一個菜鳥成長為某個領域的專家。那麼這個關鍵的突破點在哪?

Emilien的故事

故事從一年前說起,我正在參與Puppet-Openstack社群開發和代碼審查,來了一位名叫Emilien Macchi的新面孔,他持續地向社群送出了大量高品質的patch,我開始關注他,了解到他是eNovance公司(年初被RedHat收購)的一名Openstack開發工程師。他非常積極主動,我和他在Gerrit和IRC上有過許多交流。後來他加了我的Linkedin,于是我随意瞄了一眼他的profile,第一印象是驚訝:

  1.  翔實的履歷:從他的個人經曆介紹中,任何人都可以迅速了解他從07年到14年專業上的經曆,大學上過的課程,實習經曆,工作過的公司等等所有和專業技能相關的經曆,參與過的項目,擁有的證書,以及同僚和上司對他工作上的評價一一具備;
  2.  最讓我吃驚的是,這哥們的先前工作經驗是做網絡裝置維護的,有一堆網絡相關的證書。

他是在12年底才開始接觸Openstack,13年開始專注Puppet和Openstack相關的自動化部署工作。我記得在HongKong Design Summit上,他并沒有參與太多的讨論,而在時隔一年後,在Paris的Design Summit上,他不僅主持會議的Agenda,更重要的是他在社群做出了很多重量級的貢獻,雖然他的語速很輕緩,但他的發言卻變得擲地有聲。

一個完全沒有Openstack項目經驗,一個完全沒有Python和Puppet語言基礎的網絡工程師如何在這麼短的時間内實作自我突破?

會議當天剛好是他生日,會後我送給他一個從國内帶去的小禮物,我好奇地問他:Hey, How do you make it ?

他腼腆地對我笑:I write puppet codes except eating and sleeping.

Wow.  我和邊上的人都在驚歎。

他走後,我站在法國國際會議中心的Room 101門口思考了好久。

故事到此就結束了,細節可能不止這些,但這并不是本文的重點。我想就此去談談工程師如何去擺脫固定思維的束縛,突破自我。

圖1:  Emilien Macchi在主持Puppet-Openstack Kilo Design Summit

态度決定一切

有句老話叫作:态度決定一切,你的态度如何,在一定程度上已決定你是失敗還是成功。我覺得這點在做技術時展現得淋漓盡緻,就以Openstack項目為例,在其中發現一個bug,其實不是難事。那麼在發現某個Openstack服務的bug時,不同的工程師有着不同的态度:有的人随意Google一下找到解決方法然後接着幹活,有的人嘗試閱讀源碼後去自行修複bug,有的人會把寫好的bugfix嘗試推送到社群的upstream去。我們都會以工作太忙為理由,隻以問題的解決作為目的驅動,從不去細究問題的源頭。是以,這就導緻了若幹年後,有的工程師還隻在原地踏步,有的已經不僅深入掌握源碼,還能快速地做二次開發,還有的人不僅養成了良好的代碼風格,還能積極地參與到upstream的開發中去。

記得在剛進入Sina雲計算部門的時候,團隊協作平台的副标題是28号加粗的一行文字:Develop is not easy。雖然不知道是哪位大牛寫的,直到現在我仍然記憶猶新。Develop不光狹義地指開發,而是囊括了所有的技術崗位,我們要時刻清晰地認識到把事情做好并非易事。這裡不僅指技術本身,還涉及許多相關的細節,這些細節常常被多數工程師忽略,而正是這些細節才能展現出一個工程師的閃光點。

我常使用業務素質一詞來評論工程師:這個工程師的業務素質很高,指的是他不僅在專業技能上出類拔萃,更重要的是在做事上非常認真,事無巨細,小到代碼格式,注釋,變量名稱,代碼送出資訊,文檔等每個細節都能展現出認真兩字有多麼難得可貴。凡是做過技術的朋友應該都會有所共鳴,并且從腦海中立馬浮現出那些閃閃發光的人名來。

保持努力

我不想在努力這一點上舉例來說明努力是多重要的因素,因為我們從小就開始灌輸努力的重要性。我隻想強調在正确技術突破的道路上,你必須不停地更新自己的知識和技能,才能越走越遠。

我認識的另一位朋友,社群核心開發者,我詢問他聖誕節打算去哪裡過,他給我的回答是:I'm not going anywhere, just writing codes at home. 是以,那些外國工程師之是以如此牛逼,并非他們生來如此,而是他們的不懈努力。

是以請一定要做到保持這份幹勁,并且時不時買些心靈雞湯激勵一下自己,或者按老羅所說:惡心一下自己,保持大腦亢奮。現在我腦子裡隻要一想到Emilien的那句“I write puppet codes except eating and sleeping“,就開始失眠,這雞血的劑量使得我的生物鐘又延時了一個小時。

充滿熱情

在我認識的技術人中,做得出色的人大都有一個相同特點:富有激情,他們總以一種積極主動的态度去對待生活和工作。我相信所有剛入IT行業的同學們都是滿懷對于未來的憧憬,隻是這種彌足珍貴的熱量很容易被許多外界的負面因素慢慢磨滅:工作單調乏味,生活壓力太大…但不要是以就把你的熱情埋藏起來,一旦你習慣了埋藏,你将是一個了無生氣的人。如果你失去了對于追逐技術的熱枕,那麼很難在技術的道路上有所突破。激情,在很多時候,往往能點燃我們創新的本能。有了激情就有了不竭的動力,你的内心同時也會變化,越發有信心,别人也會逐漸認識到你與衆不同的價值。

善于溝通

工程師們常常把精力放在編碼上,而很少去關注自己溝通能力的培養。我曾遇到過一些大牛,有的不屑寫文檔,有的不會用git等團隊協作工具,還有的連話都說不清。不能否認他們在自己各自的領域中耕耘得很深,但是在分工如此細化的時代,大多數項目都需要團隊協作才能完成,是以溝通是無法避免的:産品經理和設計師之間的溝通,後端組和前端組之間的溝通,研發部和運維部之間的溝通…為什麼有時候對方聽不明白我們想表達的意思,導緻跨部門的工作寸步難行。

TED上有個有趣的演講題目叫作:怎麼說話人們才聽,聲音學專家朱利安給我們上了生動的一課,列舉了為什麼沒人願意聽我們說話。是以,我們在與别人打交道的時候,我們必須明白對方在想什麼,也要讓對方明白我們想表達什麼。

除此之外,對于工程師而言,溝通能力并不局限在語言溝通上,還有在協同開發時的溝通,例如對于使用git做版本控制的項目,若是沒有掌握好git工作流,溝通将異常困難。代碼審查系統上的互動,也是溝通方式的一種,你需要了解他人給你的意見,你能夠向他人表達清楚你的意思。

了解自己,把握方向

在大學課堂裡,工作面試和入職教育訓練時常常能聽到一個詞:職業規劃,就是對職業生涯乃至人生進行持續的系統的計劃過程,它包括職業定位、目标設定、通道設計三部分内容。職業定位主要是指:一是确定你是誰,你适合做什麼工作;二是告訴别人你是誰,你擅長做什麼工作。人生是應該有一個規劃,這樣可以對于未來設立一個期望,明白前進的方向。但這類職業規範往往過猶不及,觊觎通過把自己的人生畫在紙上,然後按圖施工的想法是不切實際的。仔細想想你真的能在剛踏入社會時就能真正了解你擅長做什麼工作,适合做什麼工作?

喬幫主說過一句話:“如果你了解自己,能夠明白地做自己,職業規劃如同虛設”。是以,你隻要清楚自己想要什麼,然後朝着這個目标去做自己想做的事,就可以了,為什麼要給人生設限?何不嘗試一下跨界?

前文中我談到了一個網絡工程師的華麗轉身,接着聊一聊我們運維團隊從UnitedStack成立伊始到現在發生的故事。

從理想國際大廈走出來開始創業的第一天,一個現實擺在了我們面前:采購伺服器和交換機,選擇IDC。在新浪,伺服器選型有專門的部門做,采購硬體有專門的部門做,交換機配置有相應的部門做,伺服器上架有相應的部門去做,我們隻有基礎運維和業務運維的經驗,原先所擅長的隻是一個狹小的領域…

看來唯有自己動手,才能豐衣足食,我們着手開始調研伺服器的選型,交換機的配置,IDC的選擇。通過不斷的摸索,現在我們制定了一套成熟的機制去根據不同業務來選型伺服器,形成了一套完善的網絡拓撲去連接配接分布在全國多個機房的公有雲和托管雲叢集,也有了穩定的IDC合作夥伴。

許多朋友可能還記得UnitedStack去年釋出的UOS 1.0發行版,其後端代碼完全由運維組編寫。當時,我們轉身從運維變成研發,調研了主流的StackOps, Fuel Web,根據産品設計的需求,開發了一套由Python+Puppet編寫的後端代碼,實作了Openstack叢集的自動化部署;内部的持續內建&持續釋出系統也全由運維組負責,我們根據研發工程師的實際需求對持續內建工具鍊做了多次整合以比對整個研發體系的日常工作;14年初公司業務開始涉足公有雲和托管雲,我們和研發部門共同設計了公有雲,托管雲的整體架構。由于業務量的急劇上升,我們着手開發了資産管理,節點管理等多套運維平台。同時,和一般的運維團隊不同,我們還負責虛拟伺服器的鏡像自動化制作和維護,參與Openstack最龐大的計算項目Nova的定制開發并一直保持與社群upstream同步,參與puppet-openstack社群的開發,一直在向社群貢獻源碼。

因為我們清楚所做的一切都是為了能把“事”做成,是以做什麼并不重要。而且通過這兩年的磨練,我們在技術上最大的收獲在于大家的視野不再局限于各自的一畝三分地裡,在面對新問題時,可以站在不同的角度去思考,這種在大公司裡無法獲得的經驗就顯得彌足珍貴。是以了解你自己,明白你自己想要什麼,然後把握好方向。

全面 vs. 專精

以部署系統為例,早先的部署系統完全為公有雲打造,要求做到細粒度控制,但操作起來比較繁瑣;而現在要求同時管理公有雲和數量龐大的托管雲叢集,并且每家在架構上都會有所差異,這就要求部署邏輯解耦,靈活可變,支援不同環境,不同拓撲,不同軟體棧,還要解放實施人員,減少部署時間。

但由于每個人的精力都被分散到多個領域,是以很難集中精力把部署系統做好,于是我們開始從多面手向專一轉變。也正是因為這兩年我們什麼都做,猛然一回頭大家有些迷茫:自己什麼都懂,但又什麼都做不精。那麼問題來了,學技術到底是…到底是精通一種還是全面發展好?

Take it easy,在技術的道路上看似會有兩種截然不同的方向:橫向擴充和縱向深入。橫向的猶如瑞士軍刀,十八般武藝樣樣精通;縱向的是削鐵如泥的倚天劍,倚天不出,誰與争鋒。橫向擴充可以拓寬你的視野,讓你不再局限在某一種技術中,并也給你的未來多了一種可能;而縱向擴充,可以使用你深刻了解一項技術的細節,讓你靜下來思考問題的本質,你可能會驚訝地發現某些原理都是相通的。這兩個方向都沒有對與錯,發展到一定程度都會互相溶合,就好比中國佛家禅修的南頓北漸,其實到了最後,漸悟與頓悟是一樣的,頓由漸中來。

不過哪個在前,哪個在後,我個人認為還是先做到對某一個領域有較深的了解和掌握後,進而去學習其他方向,這個道理就如同精通一門語言的程式員再去學習其他語言時就能駕輕熟路。

關于這兩點的結合,我有很深的印象,如上面提到的情況,剛開始的時候,運維相關的事情繁雜,每個人都得是多面手,要去cover多個領域,也因為此隻能把每件事情做好而無法做精。在叢集規模不斷擴大和業務量的增長後,原先不是問題的地方開始暴露出來,這就有精通該領域的工程師來獨擋一面。這是一個自我學習,自我改變的過程,也是自我突破的關鍵。

結尾

在網際網路的浪潮下,産品在快速地推陳出新,技術在不停地推陳出新,在這種大環境下,人心趨于浮躁,往往很難靜下心專心做技術,唯有耐得住寂寞,才守得住繁華。

希望諸位在面對機遇和挑戰時,能夠發掘自身的瓶頸,實作自我的突破。

None

繼續閱讀