前言
第一次寫非技術分享的話題,而促使我提筆的動力源自去巴黎參加Openstack Kilo Design Summit大會之行,因為我從外國工程師的身上深深感受到了他們對于技術的執著。在本文中,我想探討的是如何實現工程師的自我突破,因為初入茅廬的工程師更關心的是如何從一個菜鳥成長為某個領域的專家。那么這個關鍵的突破點在哪?
Emilien的故事
故事從一年前說起,我正在參與Puppet-Openstack社區開發和代碼審查,來了一位名叫Emilien Macchi的新面孔,他持續地向社區提交了大量高質量的patch,我開始關注他,了解到他是eNovance公司(年初被RedHat收購)的一名Openstack開發工程師。他非常積極主動,我和他在Gerrit和IRC上有過許多交流。后來他加了我的Linkedin,于是我隨意瞄了一眼他的profile,第一印象是驚訝:
翔實的簡歷:從他的個人經歷介紹中,任何人都可以迅速了解他從07年到14年專業上的經歷,大學上過的課程,實習經歷,工作過的公司等等所有和專業技能相關的經歷,參與過的項目,擁有的證書,以及同事和上司對他工作上的評價一一具備;
最讓我吃驚的是,這哥們的先前工作經驗是做網絡設備維護的,有一堆網絡相關的證書。
他是在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門口思考了好久。
故事到此就結束了,細節可能不止這些,但這并不是本文的重點。我想就此去談談工程師如何去擺脫固定思維的束縛,突破自我。
態度決定一切
有句老話叫作:態度決定一切,你的態度如何,在一定程度上已決定你是失敗還是成功。我覺得這點在做技術時體現得淋漓盡致,就以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多個領域,也因為此只能把每件事情做好而無法做精。在集群規模不斷擴大和業務量的增長后,原先不是問題的地方開始暴露出來,這就有精通該領域的工程師來獨擋一面。這是一個自我學習,自我改變的過程,也是自我突破的關鍵。
結尾
在互聯網的浪潮下,產品在快速地推陳出新,技術在不停地推陳出新,在這種大環境下,人心趨于浮躁,往往很難靜下心專心做技術,唯有耐得住寂寞,才守得住繁華。
希望諸位在面對機遇和挑戰時,能夠發掘自身的瓶頸,實現自我的突破。
-
工程師
+關注
關注
59文章
1571瀏覽量
68555
發布評論請先 登錄
相關推薦
評論