01 故事总有个开始
周五晚七点,王老板走进坐满猿类的办公室,磁性的嗓音响彻在空气中「明天周六全体加个班,公司来了位新技术总监,明儿大家给他接个风」。
底下议论纷纷,但并没有反对的声音,毕竟大家还有一个半月的工资扣在老板手里。
老板走后,不知谁吱了个声「嗳,听说新技术总监是老板远房亲戚,东北搞房地产崩盘跑路到公司避风头」。
我嘴角微微扬起继续埋头键盘,公司的风言风语由来已久,也算不错的茶饭谈资。保洁大叔收走桌上喝完的Coco奶茶杯,我才发现今儿的保洁阿姨换了人。
「我她老伴儿」。大叔从我眼神里看出了端倪,慌忙解释。
「32行少个缩进」他语出惊人,收走我垃圾的手指停留在我15寸的mac大屏上,我目瞪。
「唉~我儿子跟你同行,天天就拉着我看他这玩意,看着看着就熟了」。他好似发现气氛有些不对劲,挠挠头踟蹰踱出办公室,脸上挂着一抹歉意的笑。
02 技术总监
周六一点半,全员到位,毕竟大家都惦记着老板手里拖欠已久的铜板。
「我先自我介绍下吧」两点钟老板没出现,保洁大叔出现在会议室。剧情跌宕,机智如我已然感觉事情好像有些稍稍不妙。
「如你们说,年轻时的确做了九年工头」说这话时,保洁大叔意味深长的看向躲在角落的小李,眼神带着点王之蔑视。「你们的事,老王和我说了,你们的情况我也了解了,今儿两个事」
「互相认识下,顺便说几个故事」「再就是老王他不好意思说出口的事,我给大家交个底」他轻描淡写,大家心里一紧,老王请个包工头过来果然目的不单纯。
「大家可以叫我老周,周扒皮的周。这样,今儿不说技术,我说几个故事」他说完,大家基本已经对工资不指望了
03 编码规范
「以前我工程队上,有个小伙叫二狗,做起工来又快又稳,农村盖房主结构他一个人完成简直就小儿科。技巧娴熟,甚至可以不看工程图,这样的小伙子慢慢成了我的得力干将。」他停顿半拍,有些惋惜的气息围着他转了转。
「工程队越做越大,慢慢我们做到了城里,拿下一政府大工程。本来是件大喜事,地标剪彩那天副市长都到了。那时候的自己,感觉所有的光环加身也不过如此」有些同事有些听不下去,开始埋头敲着代码。
「承重梁倒塌,死了两个人,承重梁半块砖的误差,二狗建它的时候没看工程图。我蹲了两年,狗子在隔壁牢里一年半。刑满释放的时候狗子哭得稀里哗啦跪在我门前,额头扣在地上咣咣响。我不怪他,我整整想了两年,这是我人生的转折。」敲代码的那几个同事这时已经抬起头,感同身受。老周说完,会议室爆发出热烈的鼓励性质的掌声。
「所以,我昨儿看到你们,就想起这些事,规矩太重要!」程序员们已经完全被他感染了,纷纷点头默认。
「IF单行逻辑不加大括号」
「文件流不关闭,没有finally处理」
「一大段逻辑几千个字符写到一行里?」
「取个方法名叫earthFlatLine,地平线?取个out2Empty外太空好不好?」
「一个工程里面又是GBK,又是UTF-8,GB2312还来打打酱油」
「几万行的工具类,全是首列对齐」
「你们的POJO类啊,属性全都是public?别人问你借你对象去春个游行不行?」
「数据库操作我看你们该加事务的不加事务,又没有手动异常回退处理」
… ...
「看到你们,我就想起那根承重梁!」老周一口气说出了几十条,面红耳赤,最后用他包工头的口吻总结陈词。大家仿佛在看一个天外来物,我们这个半吊子创业公司,之前的CTO从来没和我们说过这些。我偷偷的环顾四周,程序员那种特有的技术宅气质在这一瞬间仿佛在这一个小会议室里爆棚。
我看着这个工程队出身的保洁大叔,我也不那么确定以后是该叫他声老周还是周总。
04 设计模式
「接下来,我跟你们谈谈我们那时建楼房的故事哈!」一场说下来,会议室的气氛已经完全是一种斗志昂扬的感觉,老周悲伤的情绪转换相当迅速,现在他的状态是亢奋的。
「就说说设计模式吧!」
「以前的工程,开发商一个楼盘十几个区域,承包给不同的工头,工头间吵得死去活来的情况比比皆是,主要还是资源竞争太大,资源共享不及时」
「想想看我玩儿程序也就是从那时开始,找了几个大学生,弄了个简单版的资源管理系统,完美解决了开发商和包工头之间的资源共享和调度问题。你们说这么个任务管理系统,就好像是我们这些个工头唯一的老大,是不是就是你们所说的“单例”?」他说这些的时候似乎有些得意,特意顿了顿。「其实,当时我们留了点后门,掌握了很多一手的资料」
是呀,老周的这个房产任务管理系统,可不就是为了解决资源和性能的损耗,也方便各个资源间通讯的单例雏形么?我不得不佩服他的眼光,也着实为他来源于生活的比喻暗暗叫好。
「还是说说二狗!那小子真的太灵光了。随着我们接的活越来越多,有一天二狗跑来和我汇报“周哥,你有没有发现,咱接的这些个活儿呀,多数浴室和厨房组织结构都差不多?”」
「他这一句话,点醒梦中人。那天开始,我让狗儿把所有的厨房浴室卧室阳台等结构分类汇总,咱们做了个样式库,狗儿直接根据这些个分类造了多个模具,原本很复杂的工程,通过模具快速成型生产。客户需要什么类型,咱们就拿出对应的模具,直接生产。生产完了之后再把他们组合形成不同风格的厨房浴室。就这样,那段时间我们的工程队,效率和质量都足足甩下其他人一大截。」他娓娓道来,一口气祭出好几个大招。
复杂的工程用模具的形式呈现,这不正是Property原型模式的完美应用?
厨房浴室卧室阳台这些个用程序语言来说都属于不同的接口,他们对外的服务模式就好比是一个大型的抽象工厂,对他们来说虽然只是几个造厨房、造浴室、造卧室、造阳台的动作(方法),却因为狗儿整理的全量分类汇总,成了一个个具体的工厂方法组成。厨房、浴室、所有的这些部分都是一个个独立的工厂,但都在他们的服务模式里向外提供。
然后再到具体工厂方法的实现,他们根据客户不同的需要,进行不同模具的组合拼装,然后形成各个区域独立的风格,这不正体现着组合模式么?
「这些弄完后,事实却没有按照我们发展的轨迹走。我们提供出去的详细分类的方案图,偏向于工程制图,客户看不懂,并不买账。这不我找了当时中央美院的表哥,把我们的工程方案分类图白描成室内设计图给客户,这才把我们推向了神坛。」
因为供需的不平衡,老周在他的施工队还用上了适配器模式,台下的小弟们也只能用眼神表露出大大的服。
老周越讲越来了兴致,看着他在台上的样子,我突然觉得保洁大叔和包工头都是他的伪装,技术大拿这次用在他身上并不为过。
05 重构
「其实,我们最巅峰的时候,是在2000年前后。那时我们是国内首个技术外包的团队。我们的业务越做越大,但核心的团队实际并没有扩张,这个时候你们老板老王给了我很大的帮助。他刚刚留学归来,看到我们的情况,当即建议我们把非核心业务外放。」
「要知道当时房地产的各个环节,那都是满满的暴力,让我们割肉出去,我当时的想法就是疯了。那之后,老王给我们划出一个模型,把我们的业务拆分成数个大的环节:竞标、采购、设计、施工、检测、交付,他的建议是所有的环节都外放,我们只需要打造品牌,也就是你们所说的模板!这个风险很大,相当于把我们之前的团队结构完全重构掉,但他是我多年的朋友,在这一点上,我无偿的相信他」他眉头舒展,仿佛在说一个爱情故事。
「我们详细的制定了各个环节的职能职责和计划,将工程的各个阶段划分为一个个的职责链,紧密的串联在一起。同时每个职责链里边,制定了多个顺序化的可行方案,也就是你们所说的一个个的命令。我们团队的重心完全转移,只关心各个不同的招标项目需要哪些职责链的搭配和哪些职责链命令的组合调度(模板模式),所有安排好了之后再到市面上二次招标,进行具体环节执行者的确定。这样子,我们通过模板、责任链、命令的方式,进行原团队的重组,很幸运,这次之后我们的品牌一炮而红,这都少不了老王对我们团队的重构。」
的确,老周的口述,让我看到了一大坨屎一般的逻辑经过重构后变得如此清晰灵活,它挽救一个臃肿的超大型项目。
06 演员
「所以,老王这次找我,我就来了。他说让我当你们的技术总监,但说白了我到现在还是个带着浓厚土包子气息的包工头。至于钱嘛,他现在给不出了,我也就免费给他打工了。」老周终于说出了他今天要表述的重点,我突然察觉这剧情貌似有点套路,可机智如我的人太少,程序猿们情商的曲线都有点奇怪。
「我今天就说到这吧!明天大家正常上班吧,我们要走的路还很长!」角落里那几个颓废的程序猿,好像瞬间打了鸡血,持续亢奋。我看出来,这个新来的技术总监,不简单。
第二天,我和大家一样,连敲键盘的速度都超速12分。
那天,我再也没见过那个保洁大叔。我一直想单独问他一句「总监,这是不是你的套路?」
-END-