如何进入一个新领域
周末下午,阴雨连绵,北大燕园。
自己也没想到,项目进展的如此迅猛,事情来的措手不及,伙伴们还在加班鏖战。但是,承诺的,还是要做到。更何况,这是好友海峰提前半月就约定的,最终还是参加了4.21 这次沙龙的分享,尽管心中对伙伴们很是歉然。
这一次分享的主题是——如何进入一个新的领域,按规矩从自我简介开始。
作为一个半吊子全栈工匠,一枚二十多年的老码农,有过三次世界500强的从业经历,参与过四家创业公司,几篇铅字短文,几次会议分享,在一个生态环境中投入过7年时间,杂乱的学了8种编程语言,署名九项国内外专利,《深入分布式缓存》一书的作者之一,右图就是本公众号。
主要按照 what->why->How->Do 的次序分享本次的内容。
按照我们思考的习惯,先要定义,也就是明确问题的边界。
为了简化起见,可以从业务和技术两个维度结合“新”来粗略地界定新领域。在这里,只有原技术实施于原业务没有定义为新领域。进入一个新领域包含换工作岗位,却远不局限于此。
为什么要进入新领域呢?
个人认为,主要有两个原因,第一个是“人在江湖,身不由己”。从业务上看,是组织的需要,不论业务转型还是多元化经营,都可能安排我们进入新的领域。从技术层面看,可能原有的技术满足不了技术的需求,或者对历史遗留技术债务的偿还,也可能是我们进入一个新领域。关于技术债务,可以参见一下老码农看到的技术债务。
如果说组织需要我们进入一个新领域是被动的,那么由于个人追求进入一个新领域就是主动的。主动进入一个新领域可能有三个原因:
出于乐趣和热情,对自身技术的追求和完善
出于对财富的追逐,“君子爱财,取之有道”,这也没什么不妥
出于对技术或产业趋势的自我洞见
前面,秦金卫就提到了自己对趋势的见解。自己在5年前,也将互联网的技术趋势不知深浅的分为3个: 可信的网络,安全的网络和无所不在的网络。这也是自己目前从事IoT领域研发的原因之一。
如何在一个新领域中地位自己呢?
个人觉得,大概是“知人者智,知己者明,知己知彼,百战不殆”。
对于一个新的领域或者行当,从业务上看,要了解其功能特点和业务场景,简单的说,就是认知这一领域解决了我们生产和生活中的哪些问题,这些问题的边界在哪里,这很像我们了解的《领域驱动设计》。从技术上看,要考察具体实现中的核心组件与核心技术, 进而了解实现过程中的关键路径。
认识自己不是一件容易的事情。每个人都可能高估或者低估自己,而且是高估的时候比较多。对个人而言,尺有所短,寸有所长,认识自己技术栈中的优势和劣势。更重要的是,明确自己的志趣所在,明确自己的目标和期望。
在初步了解了新领域的特点和自己的特点后, 可以分别为领域知识和个人的能力建一个知识体系树,然后做对比映射,这一会有助于在新领域中定位自己。
回归到主题,如何进入一个新领域呢?
个人觉得,以系统思维考虑问题,进而建立自己的知识体系,然后以终为始的方式去行动,可能更容易适应一个新的领域。
系统思维,精彩会被大家提及,那什么是系统呢?
这是维基百科对系统的一个描述,大意是:
一个系统是一个经常相互作用或相互依存的组成一个整体的项目。
每一个系统都被它的时空界限所划定,被它的环境所包围和影响,由它的结构和目的所描述,并在其运作中表达。
系统科学是一门学科,不是一介码农能搞清楚的。但是从相互作用和相互依存来看,是否可以理解成“面向接口的设计”呢?不论是系统的内部,还是系统与外部环境,交互表面都应该是优先思考的问题。
对系统中的一个重要描述,就是时空限定, 我把它理解为时空观。
从下向上,子系统->系统-> 超系统, 相当于空间结构,大致可以理解为组件,产品/服务,平台。
从左到右,过去-> 现在->未来,相当于时间维度,大致可以理解为系统的历史演变。
以架构的一种演变说法为例,单体->垂直->SOA-> 微服务,(前面秦金卫中的讲述), 从时间上来看, what is the next? 是 service mash 吗?还是 FaaS 的Serverless 架构呢, 这都是指的思考的问题。
举一个 用系统思维理解 AI 的例子。
详见老码农眼中的简明AI 。
构建所谓的知识体系之前,先弄清一下什么是知识体系?
这又是一个复杂的概念, 但我们可以粗浅的理解为,让每个我们所掌握的知识点联系起来,让这些知识点可以相互作用和相互依存,并用时空的方式给予表达。知识不再是孤立的点,而是线,面,体。
这是我过去对全栈技术栈的一点设想,尽管全栈泛滥,且充满争议。
左侧是从空间构成上的理解,右面是时间和效率方面的理解。具体可以参见我的两篇旧文全栈的技术栈设想 和 再谈<全栈架构师> 一文 。
另一个例子是缓存。
缓存是拿空间换时间的艺术。传闻,互联网有两大神器,一个是缓存,另一个就是消息队列。关于缓存知识体系的构建,我负责任地推荐我们合著的一本书——《深入分布式缓存:从原理到实践》。
最后,举一个嵌入式领域的例子, 对于便携式设备而言,大家经常会讨论的一个问题——功耗。
金字塔是一种很有用的建模方式,或者说系统思维的方法,对于非技术领域也是如此,比如,马斯洛需求层次理论中的金字塔。关于功耗的详细描述,我准备单独立文描述,这里不再赘述。
最后,谈谈以终为始。
架构的原则有很多,个人觉得,以终为始是非常重要的一条。要知道系统的目标是什么,要理解理想状态是什么,并按照目标去预测和实践。
图中的九个方面来自于《创新算法》一书, 在10年前读此书时被深深震撼。关于这九个方面的详细描述,可以参见面向全栈的技术管理 一文,那是过去的一次分享的内容。
在问答过程中,出现了一些有趣的环节,例如,答非所问,还有人再次问到我在初入职场时的经历, 我又讲了那个故事,即三本书影响一个人。
附:这是饿了么与北大开源协会(组织者是邬老师的学生)举办的技术沙龙,有视频回放:http://www.itdks.com/eventlist/detail/2072