引言
相信很多程序员在入门的时候都听过类似这样的一句忠告 “这是一个枯燥的工作,如果要做,一定要有充足的兴趣动力”。是的,在外行人甚至程序员的印象中,程序员是一批枯燥的人,编码是一个费脑的工作,他们有自己的小世界。相较于其他工作看得见摸得着。程序员的工作内容仿佛是未知的地外星系。
过年在老家时,有亲戚就问我,你的工作都是做什么,这些东西都是怎么做出来的?我拿着手机上的APP,一个页面一个页面的操作,告诉他们这些都是我们做出来的。但至于怎么做出来的,无论怎么讲他们也不是很清楚的理解。我陷入了思考,编码和其他方向互通的地方在哪?我们是与世隔绝的小世界吗?
程序与人体
今天,在公车上读刘末鹏的《暗时间》,有一段关于人体健康管理系统的描述,内容大概是这样,由于我们的免疫系统需要消耗能量来构建起防护网(制造免疫细胞等),对人的身体而言,维护一个免疫系统是一笔庞大的开销,再加上我们的祖先所生活的水深火热的环境,我们的身体总是要面对未来不可知的病毒的侵袭,所以免疫系统出动杀敌时并不会倾巢而出,而总是有所保留,至于保留多少,出动多少,是基于什么来调节这个闸门呢?心理学家汉弗莱认为多种线索会触发身体内的这个调控系统,他把这个调控系统成为健康管理系统。
书中汉弗莱所指的系统其中一个特点就是会针对人体面对的不同场景,做出不同的决策,合理的调配资源。例如在冬天时打猎采集都很困难,免疫系统会调节为低档运行,宁可让感冒细菌在体内苟延残喘也不会大举进攻。在春夏时免疫系统更换为高档运行,当然,免疫系统这样做的最终目的是为了保证我们人体这套系统的稳定性。
编码中很多优秀的设计都与健康管理系统类似,如负载均衡,它的职责像免疫系统一样,针对大流量的场景它会调配更多的资源来应对,当某一个机器出现故障时,合理的分流请求消除单点故障。以保证系统服务的稳定性。
甚至免疫系统面对未来不可知的保留也像极了我们在日常编码中强调扩展性的体验。对未来的不确定性保留我们尽可能的应对策略,使系统或者人体更加可靠、稳定。
程序与武器
熟悉军事的朋友可能听说 “模块化火力平台” 概念,它起源于美国在冷战末期研制的M8装甲火炮系统(ps:坦克),其中有一项理念是 “可成长的防护性”。包括两方面,一是M8将采用三级装甲防护的设计,可以根据任务需要和战场威胁灵活快速换装不同的装甲组件,以获得最为恰当的防护能力。另一方就是所谓的“可成长性”。这点其实非常好理解,通过随时更换最新的附加装甲,以保证防护能力获得持续提升。
编程中有一个模块化思想,和坦克的模块化异曲同工。它的目的是为了解耦,把整体(页面)拆分成多个个体(组件),分离个体的边界和职责,便于独立升级迭代。我们组在去年对内部的组件乱象发起了一次组件治理工作,这项工作的内容就是在项目中、项目之间贯彻模块化思想。把适合拆卸的组件独立封装,达到随时更换、快速接入的效果。编程模块化和武器模块化在最终目的上也一样,通过提高灵活性来增强战斗力是它们的根本目的。
程序与制度
历史上,中国存在了近千年的封建皇帝体制,它的出现有地理、民族、文化等等多维度的原因。隋朝起源的三省六部制在不断的王朝迭代中不断完善,贯穿了中国封建统治的历史周期。它是一套组织严密的中央官制。三省指中书省、门下省、尚书省,六部指尚书省下属的吏部、户部、礼部、兵部、刑部、工部。每部都有各自的专业职责,同时受尚书省的统一调配。他们最终都向皇帝负责。
前端的朋友可能听过cocos,它是一个国内的游戏引擎,主要应用于小型游戏的制作。并且它支持TS语言编写。在cocos的ts项目中,会有不同的类文件,这些类文件具备单一职责且边界清晰,例如幕布背景、引导动画、音频播放、业务动画等等,它们服务于核心文件,接受核心文件的调配并最终展示到界面上。类比三省六部制,类文件像六部接受三省的领导分配,程序员是皇帝,拥有最终的决策权和解释权。那如何写好这个游戏,很重要的原因是在职责边界的合理划分、核心文件的统一调配。
最后
分享一下个人的观点。有的人认为编码是在创造新世界。我倒认为恰恰相反,是大世界成就了编码小世界,我们在不断改变大世界并且创造价值获得收益。编码和大世界是互通有无的,优秀的系统设计、代码编写这些具备的特点在其他行业中或者自然界都有迹可循。在编码小世界和大世界之间的探索成长也是我的兴趣动力来源。