我在華為是這樣“偷懶”的
“懶”是進(jìn)步的第一生產(chǎn)力
華為 付宇琦
我是一個(gè)愛(ài)偷懶的人,不管是什么事,只要重復(fù)做三到五次,就會(huì)覺(jué)得反反復(fù)復(fù)挺沒(méi)意思,總想“偷懶”走捷徑。
學(xué)生時(shí)期,我會(huì)經(jīng)常碰到一些雜亂的文件需要逐個(gè)修改文件名的麻煩事,這讓我的“偷懶DNA”瞬間大動(dòng),于是我花了半天時(shí)間,用自己熟悉的Java語(yǔ)言實(shí)現(xiàn)了批量重命名的功能。這個(gè)小程序做好并通過(guò)驗(yàn)證后,我將其上傳到Github(開(kāi)源代碼庫(kù)以及版本控制系統(tǒng)),沒(méi)想到還意外獲得了四顆星。這個(gè)經(jīng)歷也在我心里埋下一顆種子,每當(dāng)我遇到一些機(jī)械化的工作,就開(kāi)始思考如何去“偷懶”解決。
01一顆“偷懶”的種子萌芽了
2019年入職華為時(shí),我所在的研發(fā)團(tuán)隊(duì)有自己的新員工培訓(xùn)流程,其中有個(gè)給新員工的重要任務(wù)——MiniTask(開(kāi)發(fā)者測(cè)試),這個(gè)任務(wù)是要編寫(xiě)一個(gè)新的組件模塊,在平臺(tái)系統(tǒng)中運(yùn)行。這是一個(gè)運(yùn)行在Linux系統(tǒng)中的仿真環(huán)境,而調(diào)試程序需要反復(fù)啟停并更換系統(tǒng)軟件版本,這個(gè)操作只是一些簡(jiǎn)單的操作命令,但驗(yàn)證過(guò)程需要我們反復(fù)去執(zhí)行。
“為什么不能一步到位呢?”我思考著。于是我寫(xiě)了一個(gè)快速替換腳本,就像我們?cè)陔娔X上升級(jí)軟件一樣,先卸載老版本的軟件,再安裝新版本。完成這個(gè)腳本后,我的驗(yàn)證效率有了明顯提升,可以更加聚焦任務(wù)實(shí)現(xiàn)。這是我入職后寫(xiě)的第一個(gè)工具腳本,以往也沒(méi)有經(jīng)驗(yàn),只能從解決實(shí)際問(wèn)題出發(fā),現(xiàn)學(xué)現(xiàn)用。雖然最后實(shí)現(xiàn)的功能單一,但這個(gè)“偷懶”的習(xí)慣卻一直在影響我。
新員工轉(zhuǎn)正后,我到了數(shù)通維護(hù)部,工作性質(zhì)也發(fā)生了變化,日常工作就是問(wèn)題定位和補(bǔ)丁開(kāi)發(fā)。我接觸到的第一個(gè)業(yè)務(wù)是NTP,一種網(wǎng)絡(luò)時(shí)間同步的協(xié)議,用于不同終端之間的時(shí)間同步,就像我們使用的手機(jī)、手環(huán)等,只要連接到互聯(lián)網(wǎng),就能自動(dòng)同步成統(tǒng)一時(shí)間,這些都是NTP協(xié)議在起作用。協(xié)議類的補(bǔ)丁開(kāi)發(fā),常常需要組網(wǎng),讓設(shè)備之間互相發(fā)送報(bào)文,這樣才能驗(yàn)證功能的正確性。但有一些簡(jiǎn)單的驗(yàn)證場(chǎng)景,通過(guò)設(shè)備配置觸發(fā)不夠靈活,可能需要同時(shí)配置多臺(tái)設(shè)備,或者報(bào)文發(fā)送要等待更長(zhǎng)的時(shí)間,補(bǔ)丁驗(yàn)證效率就會(huì)受到影響。因此,我開(kāi)始嘗試通過(guò)工具腳本構(gòu)造并發(fā)送報(bào)文,提高補(bǔ)丁的驗(yàn)證效率。
經(jīng)過(guò)一番摸索,我找到了方法——一個(gè)Python語(yǔ)言的開(kāi)源工具包。但是當(dāng)時(shí)的我并不會(huì)Python,為了方便驗(yàn)證和開(kāi)發(fā)補(bǔ)丁,新學(xué)一門(mén)語(yǔ)言也是必要的,為了達(dá)成目的,我開(kāi)始了Python之旅。
在不斷的學(xué)習(xí)和摸索中,我對(duì)NTP的實(shí)現(xiàn)和原理加深了認(rèn)識(shí)。需要構(gòu)造報(bào)文,就需要了解報(bào)文的結(jié)構(gòu)和每一個(gè)屬性的意義和功能。在實(shí)現(xiàn)腳本過(guò)程中,我碰到了一些不符合預(yù)期的問(wèn)題,由于欠缺認(rèn)證和加密算法等方面相關(guān)知識(shí),認(rèn)證報(bào)文的交互實(shí)現(xiàn)簡(jiǎn)直是漏洞百出,求助周邊的同事無(wú)果后,我只能重頭梳理。
結(jié)合平臺(tái)代碼、開(kāi)源代碼的學(xué)習(xí),并不斷研究協(xié)議,我了解到了NTP認(rèn)證方式的特殊性,與開(kāi)源的差異性、友商的差異性等,之前的問(wèn)題終于迎刃而解,并且在這個(gè)過(guò)程中,我閱讀英文文檔的能力也有了小小提升。腳本的開(kāi)發(fā)過(guò)程可謂“一石三鳥(niǎo)”,既完成了腳本開(kāi)發(fā),達(dá)成了偷懶的目的,能快速驗(yàn)證補(bǔ)丁,還學(xué)會(huì)了Python語(yǔ)言快速開(kāi)發(fā)簡(jiǎn)單腳本工具,同時(shí)我也更加深刻地理解了NTP的報(bào)文處理流程和實(shí)現(xiàn)原理。
NTP作為廣泛使用的協(xié)議,平常我們也常常遇到相關(guān)的咨詢問(wèn)題:認(rèn)證功能怎么配置?時(shí)間參數(shù)怎么計(jì)算?算法實(shí)現(xiàn)邏輯等。我為了偷懶不做反復(fù)解釋,便將自己的總結(jié)整理成文檔,給有需要的小伙伴。為了便于搜索,我梳理了以往被問(wèn)到的問(wèn)題并標(biāo)注關(guān)鍵詞,比如離差、同步距離、層級(jí)等分門(mén)別類。在做這項(xiàng)工作時(shí),我又萌生了一個(gè)想法:“為什么不實(shí)現(xiàn)一個(gè)標(biāo)簽檢索功能呢?”為了更高效,我開(kāi)始尋找現(xiàn)成的工具,很快發(fā)現(xiàn)了一個(gè)名為“filterizr”的前端插件。但我對(duì)前端不太熟悉,只好邊學(xué)邊摸索,花了一段時(shí)間才實(shí)現(xiàn)了標(biāo)簽檢索功能。后來(lái),看到有人通過(guò)這個(gè)檢索工具咨詢問(wèn)題時(shí),我心里有一種強(qiáng)烈的自豪感。
借著這個(gè)契機(jī),我還將自己學(xué)到NTP相關(guān)的知識(shí)總結(jié)成一個(gè)匯總帖,做了總綱式梳理,無(wú)論什么角色都能從中獲益。這個(gè)帖子獲得了三千多的訪問(wèn)量,偶爾還會(huì)有些海外小伙伴給我留言咨詢,我也因此獲得了一個(gè)知識(shí)管理的榮譽(yù)——“月度知識(shí)之星”。就像游戲中刷了一個(gè)獎(jiǎng)勵(lì)頗豐的副本支線一樣,我的成就感滿滿的。
在此之后,工作中每遇到一些機(jī)械操作,我便會(huì)寫(xiě)一個(gè)簡(jiǎn)單的腳本,每新寫(xiě)完一個(gè)腳本,我便會(huì)分享給周邊的小伙伴使用。久而久之,我的小腳本也越來(lái)越多,其中也不乏其他語(yǔ)言的工具和腳本。受這些腳本的積極影響,我電腦的文件目錄也產(chǎn)生了一些適應(yīng)性的變化,所有的目錄都不再有中文名稱、空格等一些特殊字符,極大地避免了腳本讀取這些文件時(shí)帶來(lái)的奇奇怪怪的問(wèn)題,這也間接地為我的日常工作帶來(lái)了便利。
在后續(xù)的工作中,補(bǔ)丁的開(kāi)發(fā)工作也越來(lái)越多,其中也包括一些重復(fù)的補(bǔ)丁開(kāi)發(fā)工作,凡是涉及機(jī)械的流程,我都會(huì)“偷懶”把它們實(shí)現(xiàn)。在實(shí)現(xiàn)這些腳本的同時(shí),我對(duì)業(yè)務(wù)流程也有了更深刻的認(rèn)識(shí),對(duì)現(xiàn)有流程的弊端有了“動(dòng)刀”的想法。補(bǔ)丁交付過(guò)程中的很多流程和環(huán)節(jié),都有著機(jī)械化的痛點(diǎn)問(wèn)題,可以工具化,甚至是智能化。我想要實(shí)現(xiàn)一個(gè)覆蓋整個(gè)補(bǔ)丁交付全流程的工具,端到端提升開(kāi)發(fā)效率。
02編寫(xiě)自己的工具
在一次茶余飯后的閑聊中,有個(gè)小伙伴不經(jīng)意問(wèn)道:“你的腳本都只能本地運(yùn)行嗎?能不能匯總成一個(gè)操作界面,用起來(lái)更方便?”這個(gè)建議確實(shí)是一語(yǔ)中的,瞬間激發(fā)了我的靈感。腳本再多,也只是開(kāi)發(fā)者能熟練掌握,對(duì)于不熟悉實(shí)現(xiàn)原理的人來(lái)說(shuō),學(xué)習(xí)成本很高,如果可以匯總成一個(gè)易于使用的工具集,形成一個(gè)黑箱。使用這個(gè)黑箱,僅需要了解輸入輸出即可,也更容易推廣給其他人使用。獨(dú)樂(lè)樂(lè)不如眾樂(lè)樂(lè),于是,我便開(kāi)始著手落實(shí)這個(gè)想法。
但是如何匯總所有的功能呢?之前也沒(méi)寫(xiě)過(guò)這樣的工具,本著不會(huì)就現(xiàn)學(xué)的原則,我繼續(xù)查閱資料。由于之前多數(shù)腳本都是Python實(shí)現(xiàn)的,我依舊優(yōu)選Python的開(kāi)發(fā)方案,后來(lái)找到了一款名為QT的工具包,它是一個(gè)開(kāi)發(fā)框架,能快速開(kāi)發(fā)圖形化的操作界面。
很快,我的工具就有了初步的模型。起初只是使用一些簡(jiǎn)單的控件和簡(jiǎn)單的交互,但隨著學(xué)習(xí)的深入,了解的知識(shí)也越來(lái)越多,迭代幾個(gè)版本后,它實(shí)現(xiàn)了一些特定的功能,多線程、網(wǎng)絡(luò)通信、定時(shí)任務(wù)等。而與此同時(shí),由于功能復(fù)雜度的增加,我分享給組內(nèi)同事的工具包經(jīng)常出現(xiàn)一些Bug,為了快速分析故障,我需要收集一些日志,為此我使用開(kāi)源工具搭建了一個(gè)日志平臺(tái),可以自動(dòng)捕獲異常上傳到日志平臺(tái)上。這樣我可以快速分析并及時(shí)修復(fù),發(fā)布新的版本。
經(jīng)過(guò)數(shù)個(gè)版本的迭代,我的小工具已經(jīng)是一個(gè)麻雀雖小五臟俱全的工具集了。由于它絕大多數(shù)的功能都和補(bǔ)丁開(kāi)發(fā)相關(guān),我為它取了一個(gè)樸素的名字“補(bǔ)丁助手”,但配上了一個(gè)霸氣的圖標(biāo)——一臺(tái)挖掘機(jī),隱含“高效工作”的寓意。
新的工具集作為一個(gè)可以獨(dú)立運(yùn)行的小程序,很快得到了周邊小伙伴的認(rèn)可。一天下午,南京團(tuán)隊(duì)的PL(項(xiàng)目負(fù)責(zé)人)趙強(qiáng)找到我,想要了解工具的基本功能和使用方式。我驚訝之余更是倍感榮幸,如數(shù)家珍地介紹起來(lái)。隨后他發(fā)了一個(gè)現(xiàn)有工具的匯總帖到公司內(nèi)部3MS社區(qū),間接為我的工具做了推廣。每當(dāng)有人咨詢到工具使用問(wèn)題的時(shí)候,我都會(huì)耐心講解并為此感到開(kāi)心。
03改變交付流程的點(diǎn)子
不過(guò),此刻的我也逐步意識(shí)到,這個(gè)工具集易用性依然不足,新手不容易上手。
此時(shí),主管趙強(qiáng)也提出了一個(gè)建設(shè)性的意見(jiàn):“客戶端的方式有一定的局限性,使用不便,也不利于升級(jí),能否服務(wù)化?”這個(gè)提議讓我的工具有了新的迭代方向——將工具做成網(wǎng)頁(yè)版。不過(guò),腳本實(shí)現(xiàn)的功能有局限,我只能將一部分功能移動(dòng)到web端,由于功能比較單一,加上并沒(méi)有得到有效的推廣,web版沒(méi)有受到太多關(guān)注。而且,大家日常有自己習(xí)慣的工作方式,每個(gè)人的習(xí)慣和偏好都很難統(tǒng)一,很難發(fā)生改變。
就在我一籌莫展之時(shí),部門(mén)重組為這件事帶來(lái)了新的轉(zhuǎn)機(jī)。
在一次維護(hù)部的座談會(huì)上,部長(zhǎng)李峰和大家交流,希望了解團(tuán)隊(duì)成員的想法和訴求?!熬S護(hù)兄弟開(kāi)發(fā)補(bǔ)丁需要從機(jī)械化的流程中解放出來(lái),應(yīng)該是聚焦方案設(shè)計(jì)和編碼驗(yàn)證的工作重心,從而完成補(bǔ)丁的快速交付,我們?cè)谶@個(gè)方面是否有所投入和優(yōu)化?” 暢所欲言之間,我提到了當(dāng)前在補(bǔ)丁開(kāi)發(fā)過(guò)程中的一些痛點(diǎn)。
“聚焦工作重心,這才是最理想的補(bǔ)丁開(kāi)發(fā)狀況?!彼?dāng)即肯定了這個(gè)想法,并補(bǔ)充了一些自己的見(jiàn)解。他認(rèn)為,如果要將現(xiàn)有的流程串聯(lián)起來(lái),可以獨(dú)立開(kāi)發(fā)一個(gè)工具軟件,提供一個(gè)平臺(tái),幫助補(bǔ)丁開(kāi)發(fā)人員快速開(kāi)發(fā)補(bǔ)丁,聚焦核心設(shè)計(jì)與編碼,并為工具假設(shè)性地取了一個(gè)名字——WePatch。
我很憧憬座談會(huì)上那所描繪的工作流程,開(kāi)發(fā)人員能快速高效的完成補(bǔ)丁開(kāi)發(fā)驗(yàn)證。如果全員推廣,必定對(duì)整個(gè)團(tuán)隊(duì)的開(kāi)發(fā)大有裨益。
會(huì)后,項(xiàng)目主管趙強(qiáng)從我工位走過(guò),輕拍我的肩膀,笑道:“小伙子,你火了,峰總記住你了!”一番閑聊后,我才知道,會(huì)上說(shuō)的工具開(kāi)發(fā)已經(jīng)被圈定為部門(mén)年度重點(diǎn)工作,我的工具有望從“雜牌軍”蛻變成“正規(guī)軍”。我不免心中竊喜起來(lái)。
自那以后,部門(mén)組織了多名專家進(jìn)行多次研討,一起分析了當(dāng)前補(bǔ)丁開(kāi)發(fā)人員常遇到的老大難問(wèn)題,比如,補(bǔ)丁制作沒(méi)有統(tǒng)一入口、代碼提交機(jī)械化且容易出錯(cuò)、補(bǔ)丁審核效率低下等,再根據(jù)這些問(wèn)題討論可行性的方案。
在這期間,我們還獲得了外援。網(wǎng)絡(luò)研發(fā)工具部的專家劉明浩來(lái)南京出差宣講WeCode——公司自研的一款針對(duì)C/C++語(yǔ)言的一站式集成開(kāi)發(fā)環(huán)境。得知消息后,項(xiàng)目組PL陶海躋約了數(shù)通軟件教練馮行宇交流,提到了工具未來(lái)可行的實(shí)現(xiàn)方案:能不能借助工具部WeCode生態(tài),以插件的形式開(kāi)發(fā)?編碼和實(shí)現(xiàn)都在現(xiàn)有的IDE(集成開(kāi)發(fā)環(huán)境)上,可以解決補(bǔ)丁開(kāi)發(fā)過(guò)程中在多個(gè)平臺(tái)中反復(fù)切換、效率低下的痛點(diǎn),還可以復(fù)用IDE提供的一些編碼檢查的能力,實(shí)現(xiàn)起來(lái)相對(duì)容易些。
經(jīng)過(guò)后續(xù)的研討,方案很快被敲定下來(lái)。為了更詳細(xì)地向工具部的同事講解維護(hù)補(bǔ)丁的開(kāi)發(fā)流程,我也開(kāi)始結(jié)合官方案例學(xué)習(xí)插件開(kāi)發(fā),并花了一周的時(shí)間完成基本的交互功能。這些插件的特性與之前的工具有一定的互補(bǔ)之處,應(yīng)用之后,工具的易用性有了較大的提升。交于工具部繼續(xù)開(kāi)發(fā)后,我們之前設(shè)想的功能點(diǎn)都逐步實(shí)現(xiàn)了。經(jīng)過(guò)半年多的打磨,WePatch1.0在2021年年底如期完成發(fā)布,并在云shan維護(hù)部?jī)?nèi)部推廣試用。
不過(guò),云shan內(nèi)部的前期推廣并不順利。大家的使用習(xí)慣并不容易改變,我們項(xiàng)目團(tuán)隊(duì)也缺乏有效的推廣運(yùn)營(yíng)經(jīng)驗(yàn)。直到WePatch2.0開(kāi)發(fā)完成,并借助部門(mén)各層面的推廣,這一僵局才被打破了。隨著用戶數(shù)量增多,更多的優(yōu)化建議不斷涌現(xiàn),迭代演進(jìn)的過(guò)程就像滾雪球一樣,更多改進(jìn)點(diǎn)的加入讓補(bǔ)丁交付效率有了大幅度的提升。
目前,我們的插件也已經(jīng)推廣到各產(chǎn)業(yè)團(tuán)隊(duì),得到了周邊各領(lǐng)域的認(rèn)可,并融入維護(hù)團(tuán)隊(duì)的補(bǔ)丁交付流程中。
云shan維護(hù)2組紫金山團(tuán)建
這一路,“偷懶”逐漸成了我的一種習(xí)慣。它就像一顆埋在我心底的種子,讓我費(fèi)盡心思去思考如何能做得更好,積極努力尋找最優(yōu)解,在需要的時(shí)候破土而出、不斷生長(zhǎng)。在我看來(lái),偷懶并不是什么都不做,而是一種幫助我去提升效率的意識(shí),讓我在工作中主動(dòng)去探索和嘗試更高效的方式和更快速的捷徑。
這個(gè)過(guò)程中,無(wú)論是未達(dá)預(yù)期的不甘,還是意料之外的驚喜、不虛此行的酣暢,最終都化作了源源不斷的養(yǎng)分,激勵(lì)著我在一次次思考創(chuàng)新、實(shí)踐驗(yàn)證、推陳出新中越戰(zhàn)越勇,助力業(yè)務(wù)成功!
來(lái)源/《華為人》
轉(zhuǎn)載請(qǐng)注明作者和出處
轉(zhuǎn)載請(qǐng)?jiān)谖恼麻_(kāi)頭和結(jié)尾顯眼處標(biāo)注:作者、出處和鏈接。不按規(guī)范轉(zhuǎn)載侵權(quán)必究。
未經(jīng)授權(quán)嚴(yán)禁轉(zhuǎn)載,授權(quán)事宜請(qǐng)聯(lián)系作者本人,侵權(quán)必究。
本文禁止轉(zhuǎn)載,侵權(quán)必究。
授權(quán)事宜請(qǐng)至數(shù)英微信公眾號(hào)(ID: digitaling) 后臺(tái)授權(quán),侵權(quán)必究。
評(píng)論
評(píng)論
推薦評(píng)論
暫無(wú)評(píng)論哦,快來(lái)評(píng)論一下吧!
全部評(píng)論(0條)