句句属实,90%的人都被需求整“哭”过!
業(yè)務(wù)需求永遠(yuǎn)第一
沒有和 PM 吵過架的 RD 不是好 RD,那沒有被需求整哭過的人生不是完整的人生。
一直以來,PM 和 RD 就是一對(duì)歡喜冤家。
“這個(gè)需求很簡(jiǎn)單,就是加個(gè)按鈕”
“你能不能想清楚再提。這個(gè)需求能帶來多大收益?”
“小哥哥,我要改個(gè)顏色,馬上上線,急”
“能不能晚點(diǎn)和其他需求一起上線?”
...
現(xiàn)實(shí)中,PM 的需求有時(shí)候就是合理的;現(xiàn)實(shí)中,有些 RD 的疲于應(yīng)付就是架構(gòu)設(shè)計(jì)不到位;現(xiàn)實(shí)中,有時(shí)候哭過的 RD 才能成長(zhǎng)得更好。
下面我們就來看下這個(gè)場(chǎng)景。
典型場(chǎng)景?
相信在很多業(yè)務(wù)下我們需要定義一些規(guī)則,比如滿足規(guī)則 A,則 xx1,滿足規(guī)則 B 則 xx2。用一個(gè)“高端”一點(diǎn)的表達(dá)就是一棵決策樹,很簡(jiǎn)單的需求。
圖一:規(guī)則的決策樹表示
基于這種思維方式,在一次活動(dòng)期間,我們需要對(duì)參與活動(dòng)的人進(jìn)行風(fēng)險(xiǎn)控制。PM 的需求很簡(jiǎn)單:兩個(gè)人是好友,則 3 天內(nèi)只能使用 1 個(gè)優(yōu)惠,兩個(gè)人不是好友,則 3 天可以使用 2 個(gè)優(yōu)惠。
用決策樹表示則為:
圖二:需求Demo
? 程序員成長(zhǎng)之路?
01?/? 程序員1.0
無知者無畏
涉世未深的程序員,看到這個(gè)需求后,心里暗暗的覺得“so easy”,不就是 if/else 輕松解決么。
有經(jīng)驗(yàn)一點(diǎn)的程序員,心里盤算,PM 是易變的生物,這些“幾天幾個(gè)”肯定要變來變?nèi)?#xff0c;得配置化。
因此針對(duì)這個(gè)需求的 1.0 版本:
圖三:基于純業(yè)務(wù)開發(fā)的系統(tǒng)
看似完美的解決方法,上線后,等待程序員的苦日子就來了。
我需要把某棵樹的 A 節(jié)點(diǎn)和 C 節(jié)點(diǎn)重新組織,形成一條行的規(guī)則。
我需要修改閾值,修改時(shí)間范圍。
我需要根據(jù)不同的規(guī)則,觸發(fā)不同的響應(yīng)。
????。。。
擁抱變化,程序員 1.0 開始忙于改配置、測(cè)試、上線。隨著策略變復(fù)雜,需求變化更快,上線出問題也越來越多。程序員 1.0 開始應(yīng)接不暇了,開始頻繁的出錯(cuò),決策樹代碼復(fù)雜而不可維護(hù)了。
我明明很努力,怎么結(jié)果就這么不好呢。凌晨下班的1.0,落下了“不甘心的淚”。
02?/? 程序員2.0
迭代是互聯(lián)網(wǎng)的利刃,也是我們程序員持續(xù)成長(zhǎng)的法寶。
2.0 版本的程序員,吸收了前面的經(jīng)驗(yàn)教訓(xùn),在決策樹的原理上,復(fù)用最大化。我們將決策樹的每個(gè)節(jié)點(diǎn)都按照最小化規(guī)則來組織,抽象最小規(guī)則元素。
圖四:最小規(guī)則抽象
特征:按照一定業(yè)務(wù)邏輯實(shí)現(xiàn)的類型。比如是否好友、3天使用優(yōu)惠數(shù)量等等
閾值:配置的觸發(fā)規(guī)則的值
邏輯判斷:用于比較特征和閾值之間關(guān)系的實(shí)現(xiàn)。
對(duì)于決策樹的分叉,在邏輯上可以抽取成獨(dú)立的鏈?zhǔn)疥P(guān)系。即對(duì)于圖一,我們可以抽象出 ABB1/ABB2/AC 三條規(guī)則鏈,且三條規(guī)則鏈相互獨(dú)立。
圖五:鏈?zhǔn)揭?guī)則
對(duì)這個(gè)鏈?zhǔn)降囊?guī)則結(jié)果進(jìn)行統(tǒng)計(jì),將得到和決策樹一致的結(jié)論,但是節(jié)點(diǎn)的存儲(chǔ)和組織更加的冗余了。
基于這個(gè)認(rèn)知,我們做了一個(gè)規(guī)則引擎:
圖六:基于最小節(jié)點(diǎn)的規(guī)則引擎設(shè)計(jì)
所有的節(jié)點(diǎn)都格式化成:特征、閾值、邏輯判斷 三要素
所有的決策樹打散成獨(dú)立的鏈?zhǔn)焦?jié)點(diǎn)
標(biāo)準(zhǔn)化,表示我們可以搭建一套很完整的產(chǎn)品管理后臺(tái),徹底釋放RD的生產(chǎn)力。
程序員2.0 松了一口氣,總算熬出頭了。
03?/? 程序員3.0
追求更高、更快、更強(qiáng)。
自研的規(guī)則引擎就完事了嗎?顯然不是,程序員成神的道路沒這么簡(jiǎn)單。
相同的需求,隔壁公司會(huì)怎么做?比如美團(tuán)Maze框架?
基于鏈?zhǔn)揭?guī)則不夠精簡(jiǎn),是否用DAG(有向無環(huán)圖)方案更科學(xué)?
開源的Drools 有什么優(yōu)缺點(diǎn)?
實(shí)現(xiàn)功能的方案有很多,NX的架構(gòu)師,不會(huì)唯技術(shù)論,也不會(huì)讓自己跟著需求追。
這個(gè)時(shí)候有一句名言“任何脫離業(yè)務(wù)場(chǎng)景談架構(gòu),都是耍流氓。”(沒錯(cuò),就是我說的。)
在成大神的道路上,必定充滿坎坷。有些人需要3年,有些人需要5年,但人生有多少個(gè)5年。我創(chuàng)業(yè)做IT教育培訓(xùn),就是希望能夠幫助技術(shù)人,做好指路人,用我的經(jīng)驗(yàn),將場(chǎng)景與技術(shù)結(jié)合,讓技術(shù)人具備更高的架構(gòu)設(shè)計(jì)能力,節(jié)省最寶貴的時(shí)間成本。
?-END-?
好看就點(diǎn)在看!
總結(jié)
以上是生活随笔為你收集整理的句句属实,90%的人都被需求整“哭”过!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CS231n:卷积神经网络
- 下一篇: 猪八戒玉华王:老码农的7项灵魂思考