每一个ThoughtWorker都知道TW的三个柱子,江湖人称三个P(屁)。第一个P聚焦客户是我们生存的根本,第三个P社会公正是我们超越生存层面的精神追求。而第二个P追求技术卓越,我想那首《我们不一样》特别能够表达很多人的内心世界。但是最近在项目中和其它工作中遇到了一些事情让我开始有了一个疑问:我们追求的P2究竟是什么,技术卓越中的技术究竟是什么,什么可以称为技术,什么又不是技术,所谓卓越又是什么含义,怎样做才算做到了卓越,卓越的对立面又是什么?
先说两个真实的故事:
第一个故事是在一次交付项目的Review中,有一位项目成员A的buddy提出了来自A的反馈,A说目前这个项目和他原本想的不太一样,项目中的大部分工作都是适用DDD(领域驱动设计)来把客户的需求建模并实现了,而A心中觉得这种东西没有什么技术价值,他觉得如果项目中有高并发处理,大数据,人工智能算法什么的才算有技术含量,而现做的这些更多偏向业务。
第二个故事是我在一次和同事B沟通微服务和DDD(领域驱动设计)相关建模实践的时候,同事B提到感觉我们公司现在做的很多事情都是更偏向业务的,而关于微服务设计和DDD建模这些技术问题才是更有意思的,这种基于技术的讨论比业务更有意义。
1.什么是技术
这两个故事让我觉得很有必要弄清楚一下什么是技术,为什么大家很容易把技术和业务对立的来看,这两者真的就是水火不融吗?
这让我想起了2017年读过的一本让我印象非常深刻的书,Brian Arthur的《技术的本质》,虽然我在2017年一共读完了60本各种类型的书,但是这本书是可以在在60本书中排到前三名的。
Brian Arthur在这本书中通过严谨的逻辑论述了:技术是什么,以及是如何进化的。在这本书的‘第三章现象’中,作者给出了他对技术本质的定义:
相对于只将技术看作实现目的的手段,我们现在有了更直接的描述:技术是被捕捉到并被使用的现象,或者更准确的说,技术是哪些被捕捉并加以利用的现象的集合。或者说,技术是对现象有目的编程。
我知道这个定义可能太过于抽象了,让我们用例子来对这个定义解释一下:
- 比如汽车燃油发动机这种技术,就是捕捉到能源燃烧会导致空气膨胀现象,通过力学现象可以把前后推拉力转换成旋转力,还有利用高温融化金属现象而发展出的冶炼铸造,等等很多种对各种现象有目的利用并组合在一起才有了发动机技术
- 再比如我们公司最熟悉的微服务技术,就是捕捉到了基于http协议的API通信越来越成熟,网络通信速度越来越快,云服务开始商业化,通过开源方式可以让全球聪明人一起来进行贡献,大型单体应用不好进行扩展和维护,还有使用了SOA的企业遭遇的各种问题等等现象,然后针对这些现象进行有目的的编程,就形成了今天不论是在微服务理论,还是微服务工具层面能够全面支撑的微服务全家桶。
如果基于这个广义的技术定义,我们会发现不论是人文领域的小说写作技术,经济分析技术,心理分析技术;还是自然领域的核能技术,飞机发动机技术;或者是在计算机领域的各种大数据技术,人工智能技术,DDD(领域驱动设计)技术都能够使用这个定义来进行解释了。
2.技术职业玩家
再回到开头的两个故事,对于第一个故事,当我们使用DDD分析客户的业务的时候,其实就是对软件工程领域需求和开发有Gap的现象,通过利用领域语言达到减少Gap,并且还能够根据模型的逻辑严谨性反过来推动业务。这个过程和我们根据神经网络现象来编写人工智能算法,根据排队现象来实现高并发处理本质上来说都是一样的技术。
我们作为技术领域的职业玩家,技术不仅仅是DEV的玩具,不论角色是Sales,PM,QA,还是BA都应该明白自己每一天的日常工作都是和技术相关的,
- Sales对博弈现象进行利用来获得合同是技术,
- PM对项目工作之间有依赖关系的现象加以利用得出更有效的项目计划是技术
- QA对测试工作经常重复的现象加以利用编写自动化测试脚本是技术,
- BA对开发很难理解业务的现象加以利用把业务变成领域通用语言也是技术
对于第二个故事,很多年前在IBM时中国区的首席架构师一个埃及人给我讲过,所有的软件架构必须要根据业务来进行设计,脱离于业务的软件架构是脆弱的。我认为这句话不仅仅适用于软件架构设计技术,所有的技术都是从业务土壤上生长出来的。因为按照前面技术的定义,现象是从具体的业务中来的。
我们在日常工作中也很容易发现一个问题,当脱离一个业务案例讨论一个技术的时候,很容易出现双方谁也说服不了谁的争论,但是当引入了一个具体的业务以后,大家就很容易在技术观点上达成一致了。所以以后当我们在工作中讨论技术问题的时候,应该有人提出这个问题:“能不能用一个业务例子来解释一下?” 我相信这个问题能够帮助大幅提高会议效率。
3.如何技术卓越
前面已经明确了技术的定义,那么怎样做才能让我们进行编程的过程能够卓越呢?对于这个问题我想使用一个对专业技术人士的专业评价体系,这个体系是前苏联物理学家朗道发明的,他一生有三个重要贡献,第一个是朗道变换,他也因此获得了1962年的诺贝尔物理学奖;第二个是朗道壁垒,这是一系列越来越难的理论物理练习题,通过这套练习题,物理学学生可以知道自己的水平;第三个他提出了按照水平和贡献来评价物理学家的方法。
仿照朗道的方法,吴军在“硅谷来信”中也把工程师分成了五个级别,而工程师正是发明和应用技术的人,所以我认为这个工程师的五个等级划分,可以帮助给出技术卓越的方向。下图就是这个五级金字塔,从第五级到第一级越来越难。
- 第五级要求能够熟练的获取和应用工作所需的技术来解决问题,并独自完成工作。举例来说,项目中需要能够分析用户行为数据,那么他需要知道数据在哪,如何获取。也知道根据不同的数据量级,如何进行分析。还有根据业务对数据的实效性要求,知道应该采用什么技术来计算数据,如果计算有性能问题应该如何处理,怎么在开发阶段验证这些问题。最终的数据应该采用各种方式进行展现,如何根据业务的变化进行调整等等。如果做不到这一点,就算不上合格的五级工程师。
- 第四级要求有领导能力和在工程上把大问题化解成小问题的能力,能够寻找出实现比较大目标的道路。如果第五级强调的是个人完成独立的分析用户行为数据的任务,那么第四级则是能够带领一个团队在资源限制条件下完成一个运营分析系统。能否成为合格的第四级工程师,要看能否最好地解决了一个有规模的实际问题。
- 第三级要求能够独立的带领团队做出一个为公司挣得利润的产品了。除了上面两级的能力外,还需要有市场的判断和营销能力。接着上面用户分析的例子,第三级是能够根据运营分析系统来创造一个可以复用的数字化运营解决方案,或者直接可以做出一个能够满足很多客户的运营分析产品。这一级的工程师,是需要有良好工程素养的人,能够心胸开阔愿意接受各种意见和建议。
- 第二级要求能够做出先前没有人做出的东西,世界因为他们多少有点不同。比如创造了微信的张小龙,创造很多软件思想我司的老马,Google云计算的发明人迪恩。能够看到相比于前面三级,这一级的难度是很大的,大部分的工程师都走不到这一级别。
- 第一级要求能够开创一个产业,比如爱迪生开创电灯产业,福特开创汽车流水线产业,贝尔开创电话产业,乔布斯开创智能手机产业。能够做到这一级的人基本是可以名留史册了。
根据这个工程师五级金字塔,可以比较清楚的知道自己处在哪个级别,如何努力才能满足这个级别的要求,来达到技术卓越。
最后思辨
这片文章起名叫技术的迷失,先抛出了技术是什么这个问题,然后通过Brian Arthur对技术的定义来扩大了技术这个概念的范围,然后用这个定义论证了日常工作和技术的相关性,最后使用朗道的专业技术人员评价体系寻找如何才能技术卓越的路线。整篇文章看似逻辑严谨,但是也存在着瑕疵的。
一个是关于技术的定义由于过于抽象,所以解释性很强,会让人觉得这个定义是万金油,什么都能用。好吧,我承认使用这个定义是故意的,我希望通过这种方式能够让大家对与技术的认知能够更open一点,扩大边界,这也可以让日常的所有工作都可以用来去达成技术卓越。
另外一个是最后把技术卓越这个命题,通过工程师是创造和使用技术的主体,换成了工程师卓越。之所以这样转换一个是因为有朗道这种大师的逻辑支撑,这个五级体系从逻辑上是严谨的,另外一个我自己的私心是希望大家能够明白除了编写各种电脑里跑的程序是技术,领导团队,分解任务,市场判断,营销运营也都是技术,我们不是象牙塔里的科学家,我们通过工程来让这些技术落地并给这个世界创造价值。