之前在朋友圈发了关于变与不变的一点思考,现在关于此话题想再补充两点:编程的变与不变与人的变与不变,第二点分为成长与初心两点展开说明。
易变与不易变的形状
曾经有人问我,什么是强依赖,什么是弱依赖呢?
我回答:比如A与B,如下图,类似观察者模式(目标事件改变后,直接作出响应)改变A,B跟着改变;改变B,A立即改变。那么我们可以说A和B是强依赖关系的。
如果,在A和B中间引入C,C起到管控或调度的作用,我们可以说C将A和B进行了隔离,A和B之间的依赖变弱了。
我们继续更深一步,如下图拓扑结构:
其中,网状的拓扑结构(5),几个节点之间依赖是最强的,有没有觉得很像曾经接触过的shit山代码,牵一发何止动全身。如过度封装的组件,hooks,层峦叠嶂的类继承,他们这样子不仅无法应对需求变更,反而造成了代码和数据的深度耦合——面对多变的需求,这种蠢透了的东西不仅不能灵活应变、反而通过额外的、“继承的拓扑结构”这层维度,把自己绑的更死了。这种形状是不易变,强依赖的形状。
而其他形状(1,2,3,4,6)方便插拔,有较整齐的设计感,是易于变化的,弱依赖的形状。
实际上,我们可以只写固定不变的东西;经常会变的东西,我们只写hold住它变化的那一点精华,所有可能变化的东西都应该隔离到数据中去。
复用的诀窍
复用的诀窍——只做一件事,把一件事做好。
我们玩乐高,哪种积木用的最多?摆任何造型都能用上?
方块,对吧。
为什么方块最容易复用?
因为它最简单。
程序越简洁,就越是可以随意的拼起来。
你往里面添加了越多的“高级功能”“自动化机制”,它就越发的只能为它的设计目标服务了——稍微改一点?重写吧。
反之,你把功能简化到简无可简、不让它保存什么在状态,而是用户给什么数据它提供什么服务……那么,很自然的,用户拿它来做什么都可以。
这实际上也是我前面说过的:把可变的东西隔离到数据中,程序只提供一组元规则!
把具体事务相关的东西隔离出去、只写程序处理“共性”……越是这样,你的程序越简洁。
程序越简洁,就越是可以随意的拼起来、拼出千变万化五彩缤纷的大千世界。
于是,我习惯在做业务之前进行设计,重视模块化和抽象,在模块划分合理、抽象合理的程序里,我可以简单的把一个个功能抽象为一个简单的黑盒,我不需要知道他们内部发生了什么复杂的反应,我只需要知道他们对什么样的输入会做出什么样的输出。这种抽象极大的减轻了大脑的负担,让我可以把精力更多的投入到真正需要考虑的地方。
另外,还有同学抽象过度,用激进的新技术,写出难扩展和维护的代码。关于新技术,再多说一点,新技术大多是不够成熟的,我们需要了解新技术,但是只用足够稳定的东西。最后,技术无所谓先进落后,能最简单平易解决问题的,就是最好的技术(详情可以看图灵机之雕虫小技中的计算等价性)。
我们总在谈一个观点,那就是人要不断成长,不断提升自己的能力,顺应时代改变不同的方式。
这令人很迷茫,难道我要一直学习到老死?我一个人的力量又不可能赶得上世界整体的发展,我该怎么做?
因此我们在寻找,对于一个人来讲,有没有什么是不用变的呢。
这就要提到一个概念:可迁移能力。
可迁移能力,是指不管从哪个岗位转到哪个岗位,从哪个行业跨到哪个行业,那些依然能被不断重复使用、能无障碍迁移的能力。它包括三个层次:
底层可迁移能力:思考能力(包括逻辑思维、本质思考力、升维思考力、结构化思考力、系统思考力、批判性思维、元认知等)。
中层可迁移能力:其它非技能能力(学习力、理解力、沟通力、领导力等)。
上层可迁移能力:技能(写作技能、外语听说读写技能、数据分析技能、计算机使用技能等)。
当今社会不存在“铁饭碗”,而我们可以培养铁一般的可迁移能力,让它成为你的“金饭碗”。
掌握了可迁移能力,才能让你真正拥有了一些“不变”的东西,也就拥有了足够多、足够广泛的职业选择。
也许大家注意到了,我没有提到“人脉”。
所谓人脉,有时候脆弱的很,古语“人以类聚,物以群分”,当你自身能力不足时,你结交的人脉也必定能力平平。
所以你需要的,并不是人脉,并不是平台,而是随时随地能帮你长出人脉的能力。这种追随你能力而来的人脉必定也是与你相配的人脉,是能给予你辅助的人脉。
如果你想获得想要的东西,那就得让自己配得上它。 ——查理芒格
时光荏苒,春秋更易。
然而在这不可阻挡的变中,我们偶尔又能体会到许多不变。
多年未见的朋友,变的是人情世故,不变的是亲近的情感和回忆;技术和商业,变的是内容和手段,不变的是服务大众的精神和发展生活的动力;社会现象、变的是大众舆论,不变的是以解决问题为目的,让社会变得更好的善意。
由此,我们有时候会忽然意识到,自己最初的想法到底是什么呢?是喜欢一件物品?拥有一个梦想?爱上一个人?
面对这些问题,我们何尝不会萌生出在这个身不由己的社会中做回自己的冲动呢?
这种冲动让我们的心灵在这俗世中不断受到一种拉扯——对未来的希望和对过去的惋惜这二者的不断拉扯。
要从这种痛苦中解脱出来,我们需要四个字:勿忘初心。
勿忘初心,并不是一个虚幻的概念,而是一个原则。
是一个能使人不被大众世俗的三观所绑架,从而摒弃利益的诱惑,踏下心来追求自己原初梦想的原则。
有了这个不变的原则,我们才能在心境的变化过程中一直坚守自己,只有有了坚守自己的前提,才有余闲让自己不出格地寻找发展和进步。
一位前辈曾经告诫我,人总是要回到自己第一次萌发出“想做某事”的初心上去。
为什么你总是会自主学习?为什么会走上程序员这条路?为什么喜欢写东西?
勿忘初心,做你自己。
做你自己这件事,没有人能比你做的更好。