在不确定中生长


过去的半年会成为历史上很特别的一个时间段,被认为是“黑天鹅”的一系列事情在这段时间内出现了。这些事件将深度影响历史的走向,从全球,到国家、企业和个人都是如此。

不确定性永远存在。在面对不确定性时,人往往会本能地感到恐惧。但人类的强大在于,勇气和理性会帮助人类战胜本能。我们需要建立更强的认知能力,使得我们能做出更好的预测和判断,从容面对不确定性。

总结现在,是为了更好地面向未来,尤其是不确定的未来。

遗留系统架构演进

对于一个大型遗留系统,如果在产品的交付中保持架构的持续演进,是提升产品竞争力的重要保证。
最近一段时间有机会在以下几件事情上做了一些尝试。虽然从目前的情况来看远非成熟,却也不失为一个建立系统全局思维的好机会。

  • 测试驱动设计
    在开发过程中,测试驱动开发(TDD)是一种行之有效的设计方法,它通过测试用例的设计来驱动功能代码的设计。对于架构层面的演进和设计而言,同样可以采用类似的测试驱动的方法。
    在一个典型的层次架构中,我们为某个层所提供的功能进行梳理,建立符合业务逻辑的抽象接口,并进而针对这些接口编写测试用例。
    对于上下两个层次而言,接口是功能抽象的规范,而测试用例则是这个规范的具体实现。所有后续功能的开发都必须基于上述的规范进行,各个层次基于此规范可以独立地开发、测试、演进和交付。

  • Product by Specification
    在从简单开始,通过组合构建复杂的系统一文中,提到了通过简单的原子和组合的设计思想,可以使得:

    • 不同层次、模块、组件的过程在实现上相互独立;
    • 系统在其中某一个部分的实现被替换的情况下,不需要修改设计仍然能正常工作;
    • 通过组合的方式,构建出功能更加强大和复杂的系统。

    基于同样的思路,可以使用一种更灵活的方式,来实现同一系列产品下不同软件版本的构建。
    首先,识别出产品构建中的原子组件,然后,设计出一套表示这些组件之间依赖关系的表示语言,基于此语言进行软件依赖关系的配置,进而灵活地完成不同产品的构建;实现类似于pip、npm等包管理机制的版本构建方式。

    正如同乐高,使用一个个简单的颗粒,我们却可以拼出千变万化的作品。

    原子与组合
  • 客户思维
    软件的价值在于解决用户的痛点,我们存在的价值就在于为客户提供有用的产品和服务。
    因此,站在客户的立场思考问题,往往能帮助我们做出更好的决策。
    首先,当提供服务给客户时,我们需要考虑到接口的友好性,它的使用方式是否给客户增加了太多的认知负担。这就要求接口要简单、合理、便于理解。客户对接口背后的细节知道的越少越好,就像iPhone手机,几岁的小朋友几乎不用学习就会使用。
    其次,在软件演进的过程中保持接口的稳定性。如果在增加新功能的过程中,我们经常变更接口,客户是无法忍受的。这就要求我们的设计具有足够的弹性,为自己保留足够的战略纵深。

追求软件匠艺

  • 从编译原理到DSL
    提起编译原理,很多同学在开始学习时往往会望而生畏,但是它却是深入学习软件设计的“内功心法”。相比较起《Compilers : Principles, Techniques, and Tools》这本被称为“龙书”的经典, 《Language Implementation Patterns》这本书则通俗、实用得多。
    image.png

    从Lexer、Parser、AST,到Interpreter等概念,都通过一个个具体的案例进行讲解,并配有详细的代码示例;是学习编译原理的基础知识,学会打造自己DSL的绝佳书籍。
  • DDD
    模型驱动设计。


    image.png

通过模型,剥离与业务问题的核心无关的细节,抽取出问题的关键特征;模型是业务知识学习和消化的结晶,是描述你我眼中“世界”的“地图”。


认识“世界”的“地图”

领域模型是解决业务问题时,连接问题域与实现域的桥梁,是团队间沟通和交流的共同语言。


连接业务与实现的桥梁

以人为本,更有效地学习

  • 教育的规律
    所有为人父母的都会在孩子的教育上付出很大的心血。但是,自身相关知识的缺失、舆论的引导,都会使得父母在孩子的教育上莫衷一是,犹豫不决。很可能一篇文章或者一件发生在别人家孩子身上的事情,都可能让我们或焦虑,或盲从,或马上改变方向。
    《为什么学生不喜欢上学?》是一本严肃的关于教育问题的书,看完之后有一种相见恨晚的感觉。本书深入浅出地解释了几个司空见惯,却很少有人能说得清楚的问题。比如:

    • 人类思考与记忆的机制是什么,它们之间的关系是什么?
    • 背诵和记忆事实性知识重要吗?
    • 为什么孩子能记住电视里的所有细节,缺却记不住我们告诉他的知识?
    • 如何理解抽象概念?
    • 题海战术有用吗?
    • 如何有效练习?一万小时定律靠谱吗?
    • “聪明”是与生俱来的,还是可以改变的?
    • 对于教师来说,如何因材施教?

    这些关于认知方面的观点不仅仅适用于孩子的教育,对于成人的学习同样具有指导意义。同时,作者在认知心理学和教育心理学方面的背景,使得书中关于孩子教育问题的观点比一些“鸡汤文”更加靠谱。

    孩子的教育和成人的学习,都需要以人为本,顺应人的固有特性,而非违背“人性”。在以“人”为本,加速个人和团队的成长一文中,讲述了通过认识“人”,来更好地促进个人、团队的成长。

  • 认识人的大脑
    人的大脑是千百年来进化的产物,它是如何帮助人认识世界的呢?《心智的构建》一书对此做了很专业、有趣的解释。
    它提出一个观点:所谓的“”,是由大脑构建出来的产物,是大脑使得“”与身边的人分享“我”的精神世界。对于帮助我们了解大脑、心智、行为以及与外部世界的交互机理,提供了一个系统的解释。

培养跨学科思维

每年伯克希尔-哈撒韦的股东大会,是许多投资界人士的朝圣之旅,大家想从巴菲特的投资智慧中取到真经。很多人知道巴菲特,却不一定认识坐在他旁边的查理·芒格。芒格奉富兰克林为自己的精神导师,而现在很多人则视芒格为精神导师。

在《穷查理宝典》一书中,芒格分享了他关于个人成长、投资、财富、经济、法律、行为心理学等方面的洞见,通过这本书可以一窥芒格的人生智慧。

书中涉及的题材很广泛,展示了芒格的博学,以及活到老学到老的终身学习态度。印象最为深刻的是芒格一直在强调的多元思维模型

你们需要的是在头脑里形成一个由各种思维模型构成的框架,然后将你们的实际经验和间接经验悬挂在这个强大的思维框架上。使用这种方法可以让你们将各种知识融会贯通,加深对现实的认知。

后记

面对不确定,个人和组织都要思考如何避免脆弱性,如何加速成长。
首先,远离脆弱性发生的环境,减少暴露在致命风险中的概率。
其次,承认意外发生的必然性,通过反脆弱性来避免和对冲损失,甚至从中获益。

敢问路在何方,路在脚下!

图片发自App

附录[上半年学习与分享统计]:

阅读书籍:
  • 聊聊架构

  • Functional Programming in Java

  • Language Implementation Patterns

  • 领域驱动设计 : 软件核心复杂性应对之道

  • 为什么学生不喜欢上学?

  • 心智的构建

  • 穷查理宝典

  • 富兰克林自传

  • 把时间当作朋友 : 运用心智获得解放

  • 领导力 : 曼联功勋教练弗格森38年管理心得

  • 人·地·城

  • 黑白镜头里的世界史(1850~1979)

输出文章:
  • 抽象的意义

  • Functional Programming in Python: High-order function

  • 以“人”为本,加速个人和团队的成长

  • C/C++中宏定义的那些事儿

  • 使用Python轻松写出漂亮的命令行程序

技术分享:
  • NJSD
  • TiD 2018

你可能感兴趣的:(在不确定中生长)