一個程序員老兵的思考
工作走的累了,不妨停下來,思考一下這一路走來的艱辛。 算一算,我也是工作時間不短的人了。 但是總是感覺工作中思路、方法或多或少有問題。 前幾日和朋友幾杯酒下肚,倒是聊出了一些故事,說說自己的感受,也就成了此文。
目標&手段——引子
先來說個場景,關(guān)于電商的秒殺。
“大秒活動基本都是在整點進行的,整點活動的詳情頁流量會非常高,為了保證這么大的流量不沖垮機器,業(yè)內(nèi)大致的做法如下:
從詳情頁開始就做了多層過濾。首先是垃圾請求,普通的電商商品是可以通過拼http/https下單請求參數(shù)直接下單的,然而對大秒來說,如果選擇了答題,題目參數(shù)用戶是無法推斷的,detail會做一層簡單的過濾,將這部分垃圾請求直接攔截掉;接著,由于人的操作速度限制,一秒幾十次的請求會被系統(tǒng)直接關(guān)進小黑屋,進行若干時間的屏蔽;如果流量依然很大,采取了柵欄方式進行限流(此限流方式有運氣成分,平時不會開啟,只有在大促限流時偶爾開啟),在系統(tǒng)約定的允許請求通過時間點起,會進行一個隨機的時間偏移,每個請求的偏移時間不同,如果請求在偏移時間之內(nèi),不好意思,運氣不好,需要再重試一次”。
在這個故事中,合適的做法,應(yīng)該先關(guān)注“如何從技術(shù)角度保證秒殺可以進行”,而不是“怎么讓后端服務(wù)器同時頂住巨大的流量”。兩者的區(qū)別,是目標和手段的區(qū)別。如果一開始就考慮怎么頂住流量,很有可能就會因為選擇了錯誤的方案,走進死胡同(比如有可能加數(shù)倍的機器以及讓開發(fā)同學(xué)被迫去壓榨已經(jīng)接近極限的性能)。
在工作中也一樣,首先需要圍繞目標思考“ 要拿到什么結(jié)果 ”,再考慮“ 如何拿到這個結(jié)果 ”。這個概念極為重要,再怎么重視都不為過。
方向&方案
方向是確定的目標,方案是自由的手段 。
城市環(huán)衛(wèi),目標是保持干凈的市容市貌,而不是雇傭和管理成千上萬的清潔工,后者只是一種實現(xiàn)目標的方案。
日本采取了另一種方案,就是做好垃圾分類,做好衛(wèi)生教育,結(jié)果卻比絕大部分國內(nèi)城市做得好。對于清潔工個體,也一樣:可以選擇早出晚歸勤掃不輟,也可以選擇多搞幾個垃圾桶,放 在垃圾源邊上。
“不管黑貓白貓,能抓老鼠的貓就是好貓”,是關(guān)于“方向&方案”的最好辯證。在這里,“抓老鼠”是目標,是好貓的標準,而不是長得萌或其他;在這個標準下,黑貓白貓都可以是好貓。
無論是公司CEO,還是清潔工,在目標確定的情況下,手段的選擇是自由的。清楚這個概念,工作思路可以開闊很多??梢詥柪习逡较颍灰獑柪习逡桨?。方案是自己弄出來的,能想到leader想不到的方案并做出來,就是我們牛逼,才能體現(xiàn)自己的價值。更進一步,理解目標更能幫你站在leader的角度看問題,才能及時補位,超出預(yù)期。
結(jié)果&過程
結(jié)果是衡量工作好壞的唯一標準,而過程不能完全拿來衡量工作好壞 。
在業(yè)務(wù)上,說“用戶是上帝”,說“用戶永遠是對的”,因為“用戶感知是檢驗工作好壞的唯一標準”。一個事情做得好不好,不是由你的出發(fā)點、動機和付出多少努力所決定的,而是你的用戶的感知所決定的。之前在前一家公司負責(zé)過公司內(nèi)部系統(tǒng)流程的移動審批接入。上線之后接到不少同事的反饋說體驗不好, 手機打開審批流程慢。老板找我聊,我也解釋了不少,說作為審批網(wǎng)關(guān)性能實際上和內(nèi)外任務(wù)中心以及下游業(yè)務(wù)方數(shù)據(jù)實時獲取都有關(guān),但老板的意思很明確, “對于用戶而言,主觀即客觀”,用戶主觀覺得這個產(chǎn)品不好,那就是不好,沒什么可說的。去想辦法改進才是正道。另一個角度來看,只有用戶可感知的,才是有意義的。這個話我說的稍微有些極端,但是并非沒有依據(jù)。我們很多人平時都是很忙。早上PRD, 下午技術(shù)方案評審,明天kickoff。但是這些只會產(chǎn)生結(jié)論,并沒有產(chǎn)生結(jié)果。這些“結(jié)論”,用戶都是沒有感知的,并不能讓我們的產(chǎn)品和服務(wù)讓更多人知道,讓更多人喜歡。在這些“結(jié)論”產(chǎn)生結(jié)果之前,所有的開會、討論、分析,都是無用功。極端一點講,都是成本,而不是成果。沒有借口,說到做到
說到做到,是最大的靠譜 。
我遇到過很多這樣的場景。身邊的很多同事,包括我自己。總是喜歡為自己找借口。我們總是會說,項目晚上線, 是因為臨時出了bug,是因為臨時有新項目插進來了,是因為對方聯(lián)調(diào)的同事請假了,然后會把話題轉(zhuǎn)移到自己有多么多么辛苦。
岔開說個小事。我自己很多時候?qū)τ跁r間很偏執(zhí)。有朋友說過,“所有關(guān)于遲到的理由都是不成立的”。所以我總是很在意時間的規(guī)劃。比如我去每次去機場都會詳細的規(guī)劃好時間。比如晚上九點半的飛機。那我估計多長時間候機?以往在路上大概多久(比如一路暢通從武林門機場大巴站到蕭山機場需要27分鐘)? 如果晚高峰預(yù)留多少時間合適?我需要多長時間能打到車?等等。
總有人說,哎呀,路上太堵,運氣不好連續(xù)碰到紅燈,所以遲到了——你總是掐點出門,當(dāng)然會遲到,不是今天遲到就是明天遲到。你怎么不提前半小時出門呢?你不能默認一路通暢啊,你應(yīng)該默認路上會堵啊——做項目,你應(yīng)該默認有困難啊,怎么可能預(yù)設(shè)沒意外呢?怎么不預(yù)備好解決突發(fā)問題的資源呢?
困難及不確定性,是需要我們克服的東西,不是在開始之前,就預(yù)設(shè)為事后“完不成的理由”。一旦有這種預(yù)設(shè),就完了,就從一個“行動者”變成“解釋者”了,精氣神就沒了。的確,是有所謂的不可抗力,但99%被稱為不可抗力的東西,都不是不可抗力。之前有句流行的話,“以大多數(shù)人努力的程度,根本還沒到拼智商的地步”。一樣的,大多數(shù)人面對的困難和不確定性,還遠不到不可抗力的程度——還沒“盡人事”呢,就“聽天命”了。
在上一節(jié)說過, “ 只有用戶可感知的,才是有意義的 ” 。所做的努力和投入,如果沒有最終實現(xiàn)并傳遞到用戶身上,就是成本。沒有完成目標,就是沒有完成目標,沒什么可多說的。結(jié)果導(dǎo)向的意識形態(tài),就是“ 沒有借口 ”。
從終點出發(fā)
小孩子剛學(xué)寫文章,總是想到哪里寫到哪里;高手寫文章,都是先列提綱再動筆的。
我們在用手機地圖導(dǎo)航的時候,第一步都是先輸入目的地。然后地圖會給你幾條路線的選擇,再看是打車還是公交車。這里面隱藏著一個道理,就是“倒著做事情”。所謂“倒著做事情”,就是在設(shè)置行動路徑的時候,從你想要達到的結(jié)果進行倒推,而不是根據(jù)眼下的情況決定行動方案。上一節(jié)說到,為了避免遲到,就要從上班的時間倒算,來定出門的時間、起床的時間;而不是先看幾點鐘起床,再看什么時候能到公司。
拿我們程序猿來說,我們經(jīng)常犯的錯誤,就是接到一個需求,心里感嘆一句臥槽這很簡單。一個早上的時間便已經(jīng)寫完調(diào)試然后發(fā)布了。結(jié)果發(fā)生需求變更說要加一個信息自己就懵了, 告訴PD說這個改動很難可能要改動整體的架構(gòu)。或是當(dāng)生產(chǎn)環(huán)境發(fā)生了異常我們沒有做好足夠的容災(zāi)結(jié)果眼睜睜的看著一個小問題變成了一個故障。這里其實是一個基于問題的假設(shè)。分析能力的提升,不是學(xué)會多少分析的方法,而是掌握正確的分析思路。
跨團隊合作中,結(jié)果倒推尤其重要。主導(dǎo)一次合作,不是等對方完成一個項目,再看下一步,而是應(yīng)該直接約定好項目節(jié)點,推進事情。不是“等你做好這個,我們再約個會討論那個”,而應(yīng)該是“下周三我們一起開會討論結(jié)果吧”。這里有一個好處,就是利用好“ 來自目的地的張力 ”,以此倒逼自己和團隊,提升效率。
以對方為準
"溝通最大的問題,在于以為溝通已經(jīng)發(fā)生" 。這是我現(xiàn)階段遇到的一個很大的問題。
常常聽到團隊關(guān)于溝通的抱怨,“我跟A說過這個事情的,但是A太不靠譜了,到現(xiàn)在都沒有做好”。出現(xiàn)這種情況,通常不是A不靠譜,而是在跟A的溝通中出現(xiàn)了問題。溝通容易犯的錯誤,就是從自己(溝通的發(fā)起方)的動作出發(fā),而不是從對方(溝通的結(jié)果方)的接收以及接受出發(fā)。
舉個栗子。
有次項目, 我在發(fā)布前給項目組發(fā)了郵件。郵件中指明了某同學(xué)在發(fā)布前需要將本次涉及到的sql初始化腳本在準備預(yù)發(fā)時提供給我。結(jié)果當(dāng)天我去要的時候得到的回復(fù)是:“我不知道啊?你跟我講過了?”,我頓時火了:"你特么不看郵件的?"
類似的還有。打車的時候,司機電話說“我在馬路右邊”,我就會非常惱火,你說東南西北還可以,我又不知道你的朝向,鬼知道你說的右邊是哪邊啊?發(fā)一個通知,說“這個我已經(jīng)發(fā)過群里講過了”,這只是“講過了”,卻沒有保證對方已經(jīng)了解情況,萬一對方電腦壞了呢?“這個模塊的接入我們已經(jīng)討論過了,但是沒法統(tǒng)一結(jié)論”,討論是討論了,但是雙方數(shù)據(jù)口徑的定義是一致么?
另外需要注意的是,要資源、要指導(dǎo)、同步信息,不同的目的需要不同的溝通方式。對誰講、講什么、怎么講?對方了解背景知識嗎?對方有什么樣的立場?對方可能會有怎樣的質(zhì)疑?我說的對方聽得懂嗎?是直接了當(dāng)講,還是旁敲側(cè)擊講?是用郵件正式溝通,還是電話溝通?是群會溝通,還是1對1溝通?這些都是溝通之前需要自己問自己的問題,并從對方的角度來獲得答案,而不是無差別 的 從自己已經(jīng)習(xí)慣的溝通方式和風(fēng)格來推進。
溝通最大的美妙之處,在于達成共識;而我們常常獲得的,是已經(jīng)達成共識的幻覺。正確的溝通,是拓展影響力的最佳方法。溝通中,要確保信息對方已經(jīng)接收了,在達成共識的過程中,要確保對方已經(jīng)接受了——而不能止步于,“反正我已經(jīng)說過了啊”。
擱置&反饋黑洞
最后來說說我認為工作中兩件最忌諱的事情。
擱置
遇到問題就擱置,職場第一大忌諱。 某件事情被分配到了你的頭上,你就要把它解決,躲是沒有用的,想方法!哪怕你再討厭,再反感。
反饋黑洞
積極溝通是第一要務(wù)。
這件事情我有深刻的感知。程序猿相對來說是一個比較沉默孤僻的群體。我們大部分人其實不善于溝通。但是我認為溝通恰恰是工作中的第一要素。不溝通,不主動坦露自己的信息,不管本身實力有多強,在團隊中總是會遇到各種問題。說的狠一點,溝通能力就像木桶原理中那塊最短的板子,嚴重制約著我們的發(fā)展。
結(jié)語
結(jié)果導(dǎo)向思維,其實是“反人性”的。人條件反射的就會從“臨近的”、“熟悉的”、“具體的”起點的角度來思考和做事,而不會從“遙遠的”、“對立的”、“抽象的”結(jié)果來進行規(guī)劃和執(zhí)行。
在日常工作中,更好的落實以結(jié)果為導(dǎo)向,就必須事前清晰到極致的明確結(jié)果定義,將責(zé)任落實到一對一,這樣在過程中才不會倦怠和推諉,同時也就能更清晰的對目標和責(zé)任的實踐情況進行準確判定。做出結(jié)果,做出事前定義的結(jié)果才能不懼質(zhì)詢,才能做出成就、實現(xiàn)價值。
嘗試改變,發(fā)現(xiàn)不一樣的自己。