01 故事總有個(gè)開始
周五晚七點(diǎn)啡省,王老板走進(jìn)坐滿猿類的辦公室丐枉,磁性的嗓音響徹在空氣中「明天周六全體加個(gè)班哆键,公司來了位新技術(shù)總監(jiān),明兒大家給他接個(gè)風(fēng)」瘦锹。
底下議論紛紛籍嘹,但并沒有反對(duì)的聲音,畢竟大家還有一個(gè)半月的工資扣在老板手里弯院。
老板走后辱士,不知誰吱了個(gè)聲「噯,聽說新技術(shù)總監(jiān)是老板遠(yuǎn)房親戚听绳,東北搞房地產(chǎn)崩盤跑路到公司避風(fēng)頭」颂碘。
我嘴角微微揚(yáng)起繼續(xù)埋頭鍵盤,公司的風(fēng)言風(fēng)語由來已久椅挣,也算不錯(cuò)的茶飯談資头岔。保潔大叔收走桌上喝完的Coco奶茶杯,我才發(fā)現(xiàn)今兒的保潔阿姨換了人鼠证。
「我她老伴兒」峡竣。大叔從我眼神里看出了端倪,慌忙解釋量九。
「32行少個(gè)縮進(jìn)」他語出驚人适掰,收走我垃圾的手指停留在我15寸的mac大屏上,我目瞪荠列。
「唉~我兒子跟你同行类浪,天天就拉著我看他這玩意,看著看著就熟了」肌似。他好似發(fā)現(xiàn)氣氛有些不對(duì)勁费就,撓撓頭踟躕踱出辦公室,臉上掛著一抹歉意的笑锈嫩。
02 技術(shù)總監(jiān)
周六一點(diǎn)半受楼,全員到位,畢竟大家都惦記著老板手里拖欠已久的銅板呼寸。
「我先自我介紹下吧」兩點(diǎn)鐘老板沒出現(xiàn),保潔大叔出現(xiàn)在會(huì)議室猴贰。劇情跌宕对雪,機(jī)智如我已然感覺事情好像有些稍稍不妙。
「如你們說米绕,年輕時(shí)的確做了九年工頭」說這話時(shí)瑟捣,保潔大叔意味深長的看向躲在角落的小李馋艺,眼神帶著點(diǎn)王之蔑視÷跆祝「你們的事捐祠,老王和我說了,你們的情況我也了解了桑李,今兒兩個(gè)事」
「互相認(rèn)識(shí)下踱蛀,順便說幾個(gè)故事」「再就是老王他不好意思說出口的事,我給大家交個(gè)底」他輕描淡寫贵白,大家心里一緊率拒,老王請(qǐng)個(gè)包工頭過來果然目的不單純。
「大家可以叫我老周禁荒,周扒皮的周猬膨。這樣,今兒不說技術(shù)呛伴,我說幾個(gè)故事」他說完勃痴,大家基本已經(jīng)對(duì)工資不指望了
03 編碼規(guī)范
「以前我工程隊(duì)上,有個(gè)小伙叫二狗热康,做起工來又快又穩(wěn)沛申,農(nóng)村蓋房主結(jié)構(gòu)他一個(gè)人完成簡直就小兒科。技巧嫻熟褐隆,甚至可以不看工程圖污它,這樣的小伙子慢慢成了我的得力干將∈」他停頓半拍衫贬,有些惋惜的氣息圍著他轉(zhuǎn)了轉(zhuǎn)。
「工程隊(duì)越做越大歇攻,慢慢我們做到了城里固惯,拿下一政府大工程。本來是件大喜事缴守,地標(biāo)剪彩那天副市長都到了葬毫。那時(shí)候的自己,感覺所有的光環(huán)加身也不過如此」有些同事有些聽不下去屡穗,開始埋頭敲著代碼贴捡。
「承重梁倒塌,死了兩個(gè)人村砂,承重梁半塊磚的誤差烂斋,二狗建它的時(shí)候沒看工程圖。我蹲了兩年,狗子在隔壁牢里一年半汛骂。刑滿釋放的時(shí)候狗子哭得稀里嘩啦跪在我門前罕模,額頭扣在地上咣咣響。我不怪他帘瞭,我整整想了兩年淑掌,這是我人生的轉(zhuǎn)折〉睿」敲代碼的那幾個(gè)同事這時(shí)已經(jīng)抬起頭抛腕,感同身受。老周說完祸轮,會(huì)議室爆發(fā)出熱烈的鼓勵(lì)性質(zhì)的掌聲兽埃。
「所以,我昨兒看到你們适袜,就想起這些事柄错,規(guī)矩太重要!」程序員們已經(jīng)完全被他感染了苦酱,紛紛點(diǎn)頭默認(rèn)售貌。
「IF單行邏輯不加大括號(hào)」
「文件流不關(guān)閉,沒有finally處理」
「一大段邏輯幾千個(gè)字符寫到一行里疫萤?」
「取個(gè)方法名叫earthFlatLine颂跨,地平線?取個(gè)out2Empty外太空好不好?」
「一個(gè)工程里面又是GBK扯饶,又是UTF-8恒削,GB2312還來打打醬油」
「幾萬行的工具類,全是首列對(duì)齊」
「你們的POJO類啊尾序,屬性全都是public钓丰?別人問你借你對(duì)象去春個(gè)游行不行?」
「數(shù)據(jù)庫操作我看你們?cè)摷邮聞?wù)的不加事務(wù)每币,又沒有手動(dòng)異承。回退處理」
… ...
「看到你們,我就想起那根承重梁兰怠!」老周一口氣說出了幾十條梦鉴,面紅耳赤,最后用他包工頭的口吻總結(jié)陳詞揭保。大家仿佛在看一個(gè)天外來物肥橙,我們這個(gè)半吊子創(chuàng)業(yè)公司,之前的CTO從來沒和我們說過這些秸侣。我偷偷的環(huán)顧四周快骗,程序員那種特有的技術(shù)宅氣質(zhì)在這一瞬間仿佛在這一個(gè)小會(huì)議室里爆棚娜庇。
我看著這個(gè)工程隊(duì)出身的保潔大叔塔次,我也不那么確定以后是該叫他聲老周還是周總方篮。
04 設(shè)計(jì)模式
「接下來,我跟你們談?wù)勎覀兡菚r(shí)建樓房的故事哈励负!」一場說下來藕溅,會(huì)議室的氣氛已經(jīng)完全是一種斗志昂揚(yáng)的感覺,老周悲傷的情緒轉(zhuǎn)換相當(dāng)迅速继榆,現(xiàn)在他的狀態(tài)是亢奮的巾表。
「就說說設(shè)計(jì)模式吧!」
「以前的工程略吨,開發(fā)商一個(gè)樓盤十幾個(gè)區(qū)域集币,承包給不同的工頭,工頭間吵得死去活來的情況比比皆是翠忠,主要還是資源競爭太大鞠苟,資源共享不及時(shí)」
「想想看我玩兒程序也就是從那時(shí)開始,找了幾個(gè)大學(xué)生秽之,弄了個(gè)簡單版的資源管理系統(tǒng)当娱,完美解決了開發(fā)商和包工頭之間的資源共享和調(diào)度問題。你們說這么個(gè)任務(wù)管理系統(tǒng)考榨,就好像是我們這些個(gè)工頭唯一的老大跨细,是不是就是你們所說的“單例”?」他說這些的時(shí)候似乎有些得意河质,特意頓了頓冀惭。「其實(shí)掀鹅,當(dāng)時(shí)我們留了點(diǎn)后門散休,掌握了很多一手的資料」
是呀,老周的這個(gè)房產(chǎn)任務(wù)管理系統(tǒng)淫半,可不就是為了解決資源和性能的損耗溃槐,也方便各個(gè)資源間通訊的單例雛形么?我不得不佩服他的眼光科吭,也著實(shí)為他來源于生活的比喻暗暗叫好昏滴。
「還是說說二狗!那小子真的太靈光了对人。隨著我們接的活越來越多谣殊,有一天二狗跑來和我匯報(bào)“周哥,你有沒有發(fā)現(xiàn)牺弄,咱接的這些個(gè)活兒呀姻几,多數(shù)浴室和廚房組織結(jié)構(gòu)都差不多?”」
「他這一句話,點(diǎn)醒夢(mèng)中人蛇捌。那天開始抚恒,我讓狗兒把所有的廚房浴室臥室陽臺(tái)等結(jié)構(gòu)分類匯總,咱們做了個(gè)樣式庫络拌,狗兒直接根據(jù)這些個(gè)分類造了多個(gè)模具俭驮,原本很復(fù)雜的工程,通過模具快速成型生產(chǎn)春贸』炻埽客戶需要什么類型,咱們就拿出對(duì)應(yīng)的模具萍恕,直接生產(chǎn)逸嘀。生產(chǎn)完了之后再把他們組合形成不同風(fēng)格的廚房浴室。就這樣允粤,那段時(shí)間我們的工程隊(duì)崭倘,效率和質(zhì)量都足足甩下其他人一大截∥」他娓娓道來绳姨,一口氣祭出好幾個(gè)大招。
復(fù)雜的工程用模具的形式呈現(xiàn)阔挠,這不正是Property原型模式的完美應(yīng)用?
廚房浴室臥室陽臺(tái)這些個(gè)用程序語言來說都屬于不同的接口飘庄,他們對(duì)外的服務(wù)模式就好比是一個(gè)大型的抽象工廠,對(duì)他們來說雖然只是幾個(gè)造廚房购撼、造浴室跪削、造臥室、造陽臺(tái)的動(dòng)作(方法)迂求,卻因?yàn)楣穬赫淼娜糠诸悈R總碾盐,成了一個(gè)個(gè)具體的工廠方法組成。廚房揩局、浴室毫玖、所有的這些部分都是一個(gè)個(gè)獨(dú)立的工廠,但都在他們的服務(wù)模式里向外提供凌盯。
然后再到具體工廠方法的實(shí)現(xiàn)付枫,他們根據(jù)客戶不同的需要,進(jìn)行不同模具的組合拼裝驰怎,然后形成各個(gè)區(qū)域獨(dú)立的風(fēng)格阐滩,這不正體現(xiàn)著組合模式么?
「這些弄完后县忌,事實(shí)卻沒有按照我們發(fā)展的軌跡走掂榔。我們提供出去的詳細(xì)分類的方案圖继效,偏向于工程制圖,客戶看不懂装获,并不買賬瑞信。這不我找了當(dāng)時(shí)中央美院的表哥,把我們的工程方案分類圖白描成室內(nèi)設(shè)計(jì)圖給客戶饱溢,這才把我們推向了神壇喧伞。」
因?yàn)楣┬璧牟黄胶饧ɡ桑现茉谒氖┕り?duì)還用上了適配器模式,臺(tái)下的小弟們也只能用眼神表露出大大的服翁逞。
老周越講越來了興致肋杖,看著他在臺(tái)上的樣子,我突然覺得保潔大叔和包工頭都是他的偽裝挖函,技術(shù)大拿這次用在他身上并不為過状植。
05 重構(gòu)
「其實(shí),我們最巔峰的時(shí)候怨喘,是在2000年前后津畸。那時(shí)我們是國內(nèi)首個(gè)技術(shù)外包的團(tuán)隊(duì)。我們的業(yè)務(wù)越做越大必怜,但核心的團(tuán)隊(duì)實(shí)際并沒有擴(kuò)張肉拓,這個(gè)時(shí)候你們老板老王給了我很大的幫助。他剛剛留學(xué)歸來梳庆,看到我們的情況暖途,當(dāng)即建議我們把非核心業(yè)務(wù)外放「嘀矗」
「要知道當(dāng)時(shí)房地產(chǎn)的各個(gè)環(huán)節(jié)驻售,那都是滿滿的暴力,讓我們割肉出去更米,我當(dāng)時(shí)的想法就是瘋了欺栗。那之后,老王給我們劃出一個(gè)模型征峦,把我們的業(yè)務(wù)拆分成數(shù)個(gè)大的環(huán)節(jié):競標(biāo)迟几、采購、設(shè)計(jì)眶痰、施工瘤旨、檢測、交付竖伯,他的建議是所有的環(huán)節(jié)都外放存哲,我們只需要打造品牌因宇,也就是你們所說的模板!這個(gè)風(fēng)險(xiǎn)很大祟偷,相當(dāng)于把我們之前的團(tuán)隊(duì)結(jié)構(gòu)完全重構(gòu)掉察滑,但他是我多年的朋友,在這一點(diǎn)上修肠,我無償?shù)南嘈潘顾碱^舒展贺辰,仿佛在說一個(gè)愛情故事。
「我們?cè)敿?xì)的制定了各個(gè)環(huán)節(jié)的職能職責(zé)和計(jì)劃嵌施,將工程的各個(gè)階段劃分為一個(gè)個(gè)的職責(zé)鏈饲化,緊密的串聯(lián)在一起。同時(shí)每個(gè)職責(zé)鏈里邊吗伤,制定了多個(gè)順序化的可行方案吃靠,也就是你們所說的一個(gè)個(gè)的命令。我們團(tuán)隊(duì)的重心完全轉(zhuǎn)移足淆,只關(guān)心各個(gè)不同的招標(biāo)項(xiàng)目需要哪些職責(zé)鏈的搭配和哪些職責(zé)鏈命令的組合調(diào)度(模板模式)巢块,所有安排好了之后再到市面上二次招標(biāo),進(jìn)行具體環(huán)節(jié)執(zhí)行者的確定巧号。這樣子族奢,我們通過模板、責(zé)任鏈丹鸿、命令的方式越走,進(jìn)行原團(tuán)隊(duì)的重組,很幸運(yùn)卜高,這次之后我們的品牌一炮而紅弥姻,這都少不了老王對(duì)我們團(tuán)隊(duì)的重構(gòu)〔籼危」
的確庭敦,老周的口述,讓我看到了一大坨屎一般的邏輯經(jīng)過重構(gòu)后變得如此清晰靈活薪缆,它挽救一個(gè)臃腫的超大型項(xiàng)目秧廉。
06 演員
「所以,老王這次找我拣帽,我就來了疼电。他說讓我當(dāng)你們的技術(shù)總監(jiān),但說白了我到現(xiàn)在還是個(gè)帶著濃厚土包子氣息的包工頭减拭。至于錢嘛蔽豺,他現(xiàn)在給不出了,我也就免費(fèi)給他打工了拧粪⌒薅福」老周終于說出了他今天要表述的重點(diǎn)沧侥,我突然察覺這劇情貌似有點(diǎn)套路,可機(jī)智如我的人太少魄鸦,程序猿們情商的曲線都有點(diǎn)奇怪宴杀。
「我今天就說到這吧!明天大家正常上班吧拾因,我們要走的路還很長旺罢!」角落里那幾個(gè)頹廢的程序猿,好像瞬間打了雞血绢记,持續(xù)亢奮扁达。我看出來,這個(gè)新來的技術(shù)總監(jiān)庭惜,不簡單罩驻。
第二天,我和大家一樣护赊,連敲鍵盤的速度都超速12分。
那天砾跃,我再也沒見過那個(gè)保潔大叔骏啰。我一直想單獨(dú)問他一句「總監(jiān),這是不是你的套路抽高?」
-END-