說到業(yè)務(wù)是個(gè)讓人又愛又恨的東西,客戶、領(lǐng)導(dǎo)把它看的很重,不少“技術(shù)控”卻瞧不起它,認(rèn)為它是“低智商”的代名詞。當(dāng)然了,這些看法都很偏激。技術(shù)僅僅是一個(gè)工具,因“業(yè)務(wù)”的需求而誕生至使用,小說里常常寫到,當(dāng)一個(gè)人學(xué)會(huì)了屠龍之術(shù),卻發(fā)現(xiàn)天地之間沒有龍給他“屠”,這個(gè)是最悲慘的事情了,這里的“龍”就是業(yè)務(wù),“屠龍之術(shù)”就是技術(shù),離開了業(yè)務(wù)的技術(shù)是沒有意義的。
業(yè)務(wù)本身是個(gè)抽象的集合,真正把它搞懂了其實(shí)也能鍛煉人的抽象能力。
說來說去“業(yè)務(wù)”是個(gè)什么東西,似乎沒有明確的定義,我覺得“業(yè)務(wù)”就是個(gè)“標(biāo)準(zhǔn)”,程序員完成的系統(tǒng)必須滿足這個(gè)“標(biāo)準(zhǔn)”,不同行業(yè),不同硬件環(huán)境都會(huì)有自己的合適的標(biāo)準(zhǔn),某項(xiàng)技術(shù)都有其對(duì)應(yīng)的“標(biāo)準(zhǔn)”。
比如一直討論很久的問題,C++和Java到底誰快,為此也有衍生出了很多討論,技術(shù)控也是樂此不疲,但是或多或少都脫離具體環(huán)境。
計(jì)算機(jī)語言發(fā)展了這么多年,都會(huì)相互學(xué)習(xí)優(yōu)點(diǎn),不過總有些本質(zhì)的區(qū)別,比如C++的優(yōu)勢(shì)是和硬件結(jié)合緊密,Java的優(yōu)勢(shì)是屏蔽了硬件限制,兩者在誕生的時(shí)候發(fā)展的方向就有不同,比如通信系統(tǒng)的交換機(jī)等各類硬件的程序非C/C++莫屬,Java在這里難有使用的地方,但是在異構(gòu)硬件集群中,現(xiàn)在很火的“云”系統(tǒng),Java的優(yōu)勢(shì)就很明顯,現(xiàn)在常用的服務(wù)器系統(tǒng)大多都是Java。當(dāng)然也有人說Java免費(fèi),所以比C++更容易推廣,的確沒錯(cuò),但是這也屬于“業(yè)務(wù)”的范疇。
說完了業(yè)務(wù)的大范圍,下面說說具體行業(yè)的業(yè)務(wù)。我最熟悉的是電信的業(yè)務(wù)。相比金融、電商系統(tǒng),從網(wǎng)上的信息來看似乎電信的系統(tǒng)是最沒技術(shù)含量的,其實(shí)電信的數(shù)據(jù)量遠(yuǎn)大于金融、電商,只是大量的數(shù)據(jù)是后臺(tái)處理,可以異步展現(xiàn),所以給的要求并不高,總體來說電信系統(tǒng)是入門的技術(shù)低,做好了很不容易。
我和不少電信的程序員人聊過,他們紛紛吐槽是,工作就是配置各種業(yè)務(wù)參數(shù),體力活。但是說到具體的業(yè)務(wù)模型時(shí),卻說不清楚。
我總結(jié)的電信系統(tǒng)分2兩大部分,業(yè)務(wù)模型(CRM)和工作流(IOM)。CRM和IOM是比較老的名詞了,新的我也不太清楚。
模型如下:
主產(chǎn)品+子產(chǎn)品+產(chǎn)品規(guī)則+動(dòng)作
解釋如下:
主產(chǎn)品,和硬件掛鉤。現(xiàn)在的電信產(chǎn)品有手機(jī)(移動(dòng),聯(lián)通,電信分屬不同網(wǎng)段)、固話、ADSL、光纖、2B+D、30B+D等。
子產(chǎn)品,依賴于主產(chǎn)品。比如移動(dòng)電話的各種優(yōu)惠包,寬帶的互聯(lián)星空等。
產(chǎn)品規(guī)則,這里是最讓人抓狂的。產(chǎn)品規(guī)則分3類、
1、主產(chǎn)品規(guī)則,主產(chǎn)品之間是沒有任何關(guān)系的,比如一家人可以裝兩條寬帶,用多個(gè)手機(jī)。
2、子產(chǎn)品規(guī)則,基于不同主產(chǎn)品的子產(chǎn)品之間沒有任何關(guān)系,基于同一主產(chǎn)品的子產(chǎn)品之間有各種規(guī)則,比如手機(jī)的資費(fèi)包開通了一個(gè)就不能開通另一個(gè),這類為互斥。不同的優(yōu)惠可以共同作用,這類為疊加。由于各種子產(chǎn)品的數(shù)量繁多,所以這些規(guī)則的校驗(yàn)和實(shí)現(xiàn)是個(gè)很龐大的數(shù)字。
3、運(yùn)營(yíng)商制定的規(guī)則,比如,從硬件角度來說,裝寬帶、裝電話、開通手機(jī)是互不相干的,但是運(yùn)營(yíng)商制定了各種套餐,“強(qiáng)迫”統(tǒng)一辦理。這個(gè)無論是對(duì)程序員還是消費(fèi)者都是是很討厭的……
動(dòng)作,裝、拆,(改=裝+拆)
分析完了以后可以發(fā)現(xiàn)真正麻煩的地方是業(yè)務(wù)規(guī)則這塊,一個(gè)電信客戶系統(tǒng)的質(zhì)量高低很大程度上就由這個(gè)“業(yè)務(wù)規(guī)則引擎”決定,如果只是悶頭往這個(gè)引擎里加參數(shù)的確無聊,但是這正了解這個(gè)引擎的工作步驟還是很有趣的,個(gè)人認(rèn)為理解一個(gè)系統(tǒng)的運(yùn)行是很容易提高能力的。
下面說說“工作流”,消費(fèi)者的任何一個(gè)請(qǐng)求在電信系統(tǒng)中都會(huì)轉(zhuǎn)變一個(gè)流程,某些特殊的業(yè)務(wù)流程會(huì)很長(zhǎng),比如裝高清寬帶,需要人上門施工,并測(cè)試寬帶質(zhì)量等,這些都成功了才會(huì)觸發(fā)其它的步驟。消費(fèi)者的業(yè)務(wù)請(qǐng)求在后端實(shí)現(xiàn)往往是“事務(wù)”型的,比如原來是套餐A,改成套餐B的會(huì)有3個(gè)步驟,不熟悉電信業(yè)務(wù)的人可以想下“神州行”改“全球通”。當(dāng)步驟1和2施工成功后,步驟3發(fā)現(xiàn)現(xiàn)有條件不滿足時(shí)(這里的判斷不在當(dāng)前系統(tǒng)中,或者說當(dāng)前系統(tǒng)無法判斷,必須將數(shù)據(jù)發(fā)送到另一個(gè)平臺(tái)之后由那個(gè)平臺(tái)來判斷,這種情況在電信系統(tǒng)里很常見,比如當(dāng)前系統(tǒng)沒有客戶資料,所以無法判斷),也就意味著不能辦理套餐B,這樣得回復(fù)成套餐A,這樣需要對(duì)步驟1和2得進(jìn)行反向施工,也就是“事務(wù)回滾”。先后這就是“工作流”的任務(wù)。
工作流在電信系統(tǒng)中是很重要的角色,相比于是電商和金融系統(tǒng),電信系統(tǒng)的工作流最強(qiáng)大。
簡(jiǎn)單解釋下工作流,工作流有兩個(gè)最基本單元(節(jié)點(diǎn)),邏輯節(jié)點(diǎn)和工作節(jié)點(diǎn)(不同的系統(tǒng)中叫法也不同,但是作用都一樣)。
邏輯節(jié)點(diǎn),就是if判斷。
工作節(jié)點(diǎn),就是一個(gè)具體的施工環(huán)節(jié),一般關(guān)聯(lián)一個(gè)平臺(tái)。
一般工作流的具體配置都由這兩種節(jié)點(diǎn)組成。
工作流定義的關(guān)系有,串行和并行(電信里的叫法是同進(jìn)同退,一般直接定義成事務(wù))。
于一個(gè)系統(tǒng)來說,業(yè)務(wù)層的調(diào)優(yōu)效果優(yōu)于代碼層的調(diào)優(yōu)效果(代碼錯(cuò)誤引起的宕機(jī)問題不屬于調(diào)優(yōu)范圍)。比如,一個(gè)業(yè)務(wù)的判斷規(guī)則精簡(jiǎn)了,比你優(yōu)化幾個(gè)計(jì)算語句強(qiáng)的多。比如之前說的例子,在步驟1、2、3中,因?yàn)?出了問題,導(dǎo)致1、2得反向施工,所以實(shí)際有5步操作,1、2、3、2反向、1反向。所以如果3最容易出問題,那么應(yīng)該調(diào)整順序應(yīng)該是3、1、2,把最容易出問題的放在最開始,這樣可以避免不必要的步驟。其實(shí)在系統(tǒng)上線后運(yùn)行一段時(shí)間,就可以統(tǒng)計(jì)出那些平臺(tái)的出錯(cuò)率高,調(diào)整順序幾乎是0修改,但是帶來的效率提升是明顯的,但是沒有幾個(gè)地方有這么做的。
說了這么多,我覺得把整個(gè)系統(tǒng)的框架搞明白還是很能提高個(gè)人能力,抽象邏輯對(duì)于程序員來說必不可少。所以現(xiàn)在每次抱怨工作無聊時(shí),我都會(huì)想想,真的就不能挖出點(diǎn)東西么?