出品 | 程序员大本营
潘爱民博士生于 70 年代,起于 BASIC 编程,师从汉字激光照排系统之父王选院士,从北大计算机研究所、微软亚洲研究院到任职盛大创新院专家顾问,又先后任阿里 YunOS、阿里安全、飞猪、阿里业务平台首席架构师,进入物联网时代创立指令集深耕并亲自主导物联网操作系统研发,历经中国互联网行业从星火到移动、AI、大数据、IoT 等各种燎原,几乎可以算作是中国互联网发展的一大缩影。
我第一次写程序人生是2000年,当时有很多编程实践,刚刚开始有系统性的思考;第二次是2010年写了我的成长故事(发表在《程序员》杂志上),当时即将从微软亚洲研究院毕业,准备进入国内工业界。到2020年,又10年过去了。回顾这10年,我一直在工业界努力,经历了三家公司:盛大、阿里巴巴和杭州指令集,亲历了移动互联网的发展,以及物联网时代的兴起。
职业经历
对于程序员来说,盛大创新院是一个理想的创新机构,有老板的大力支持,有大量互联网人才,正赶上移动互联网蓬勃发展的大好时机。有一批优秀的项目脱颖而出,涉及到语音、短视频、云计算、云笔记、LBS、智能手机等很多领域,其中有不少项目在盛大创新院解散以后还在延续并且做成功了。
如果把微软亚洲研究院看作企业象牙塔的话,那么在盛大创新院则感受到了国内工业界的创新活跃氛围。在盛大做终端操作系统,游戏作为应用生态中的一个重要组成部分,是独特的优势。
这是我第一次组建并带领一个操作系统研发团队,自己做架构师,从Linux操作系统到应用层技术栈,再到云端服务,都涉及到了。
我从一开始就没考虑跟Android兼容,而是走自建生态的道路。VisionOS从立项到决定解散,差不多两年时间,对我来说,就像一次创业经历,做出了一个原型系统,但未能实现商业化。
2010年潘爱民在盛大创新院
阿里巴巴
当时阿里云OS是阿里云下属的一个部门,所以,确切来说,我加入了阿里云。杭州是我家乡的省城,一向以风景优美著称,当时还算不上互联网技术人才聚集地,但我时有耳闻,很多前端工程师经常在杭州聚会,技术的氛围正在浓厚起来。
作为云OS首席架构师,最大的挑战是确定新的架构,并且推动各个开发组接受新的架构。我同时也带领了核心系统模块的研发组。基于盛大VisionOS的研发经验和教训,我在设计新架构以及核心模块的技术选型方面,有足够的把握让新的云OS符合未来发展。
当时正赶上阿里的电商业务全面从PC互联网转向移动互联网,安全能力也势必要跟着升级。我一方面支持阿里业务的移动安全,另一方面带领一个架构师团队来梳理和重构阿里巴巴的安全体系。经过两年的安全领域实践以后,我希望能到业务部门学习和锻炼,于是选择了阿里飞猪。我认为这是一个小而美的业务部门,既有平台属性,也有行业属性。虽然飞猪的业务体量相对淘宝和天猫的总量小得多,但旅游是一个发展中的行业,业务空间大,创新的机会也多。
在杭州,从阿里巴巴出来创业的前员工是一个广泛的群体,并且不乏成功者。我估计杭州一半以上的科技创业公司的合伙团队中都有前阿里员工的身影。在这样的群体氛围中,我选择出来创业,也就丝毫不奇怪了。
一、物联网是后移动互联网时代能看得到的一个大趋势,而这个产业还处于零散发展的阶段,除了一些嵌入式操作系统演变为物联网设备的操作系统以外,还缺乏基础性的系统软件,所以我认为有机会做物联网场景的系统软件(解决一些共性的基础功能需求)。
我坚信物联网时代需要这样的系统软件。经过一年的研发和运营,指令集公司于2019年6月发布了商业智能操作系统1.0版本,可用于楼宇、园区等商业场景。通过跟大量的目标客户和合作伙伴交流,确实看到了广泛的市场前景。更进一步,在跟伙伴交流的过程中,我也看到了在工业制造场景下更加需要这样的物联网操作系统软件,因此指令集公司也把工业智能操作系统作为第二个重要的发展方向。
技术成长
一、移动系统技术
2010年,我在盛大创新院有机会设计一个新的移动操作系统VisionOS。基本的思路是,在移动设备上,用Linux加一个Web渲染引擎来支撑一个Web运行环境(Web Runtime),既可以运行本地的Web应用,也可以运行在线应用,并且通过插件的形式运行Flash控件。我调研了Linux平台上可使用的各种图形软件,最终决定自行开发一套适合于移动设备的图形库,与WebKit高效对接。Linux社区有许多开源的图形库,也有像Qt这类比较成熟的跨平台图形窗口系统,但它们首先为了兼容性的目的牺牲了效率,其次为了提升效率又做了很多优化,从而软件变得很复杂。在移动设备上不需要复杂的图形功能和窗口管理能力,我当时的想法是,借鉴Windows图形窗口系统的思想,简化到极致,只需要基本的图形能力和简单窗口管理,就可以支撑VisionOS的底层图形需求。移动应用内部的控件管理由WebKit自身来完成即可。
跨进程通信是一个操作系统非常重要的能力,它让应用与应用之间、应用与系统之间便捷、高效地相互调用功能。系统底层往往有很多琐碎的细节要处理,包括应用数据到底层二进制数据的转换、共享缓冲区的管理等。作为一个面向终端用户的操作系统,必须要提供一套便于开发者使用的跨进程通信机制。VisionOS选择了自研方案,在Linux提供的跨进程通信基础上包装了一套可解析应用语义的系统机制。(Android对应有一套binder机制,用于应用与系统、应用与应用之间进行通信。)
我做移动操作系统将近五年时间,先是做了VisionOS,后来两年又做了云OS,在技术发挥上可谓淋漓尽致,但遗憾的是,因为种种原因没有真正意义上建立起一个移动操作系统的生态。而随着Android系统越来越先进,其生态粘性越来越强,再要建立一个对标的移动操作系统,可能性微乎其微了,除非某种特定的产业结构需求出现。
最近这10年,我的技术角色定为架构师可能是最合适的,虽然我自己最喜欢的称呼是系统程序员。架构师是一个泛称,在具体场景中,往往对应了一个规模或大或小的系统,可以是软件系统,也可以是软硬件结合的系统。比如一个应用软件,需要有一个架构师;一个操作系统,对应有一个架构师;一个业务模块,可能也有一个架构师。
软件基本架构首先要合理,所谓合理,指采用当时相对成熟的软件技术来实现系统功能。
对软件,特别是系统软件的性能,有充分的理解。性能包含多方面的指标,有关于资源使用方面的,譬如存储使用、网络带宽使用等,也包括异常情况下的表现、对大并发量的容忍、延迟等。在设计阶段有针对性能的预估,在系统上线后有对性能的监控,确保软件系统健康运行。
成本控制和预测。高性能和稳定可靠(以及安全性)都是以成本为基础的。在技术选型、性能和稳定性保障方面所做的决策,都需要考虑到成本因素。成本是一个综合考虑,涉及到业务需求、商业价值、技术方案等多方面因素。
系统程序员在这方面有天然的优势,因为系统程序员往往精通底层工作原理,所以在系统性能、稳定性、安全性等方面能直接看到问题的本质。但是从系统程序员到架构师有一道坎,须放下对底层技术的执念,接受上层应用或中间件的各种妥协,包括一些不优雅或不精巧的习惯做法。
2016年潘爱民在莫干山
在移动操作系统方向上,我核心工作在架构设计上,带领一些核心模块的开发小组。
在互联网业务安全方向上,依托阿里巴巴集团的业务背景,我有机会全面地梳理和构建企业服务安全体系:从系统攻防,到业务平台的安全,再到情报收集,到研发流程中植入安全要求等。
在阿里业务线做架构。电商是典型的互联网业务,从PC互联网到移动互联网,既有技术挑战(比如支撑频繁的促销活动),又有大量的数据和服务需要拓展(比如旅行服务)。
在物联网方向,我从产业现状出发,看到一个潜在的系统需求:能够将一个物联网场景中的各种IoT设备连接起来并协同发挥作用的系统或平台。我将这样的系统软件称为物联网操作系统,而对应的运行在设备上的系统软件称为IoT设备操作系统。
架构师解决的最核心问题是软件的复杂性。首先要对软件复杂性有深刻的认识,否则容易出现“过于畏惧系统而不敢下手”或者“对系统不敬畏而导致犯不该犯的错误”的情形;其次,要有足够的经验来应对软件中的复杂性。
三、思考成为一种习惯
内存跨机调度。
快速反汇编。
一切计算均用查表来解决。
一个安全问题的解决办法。
红绿灯配时优化问题。
计算使这个世界的运行变得更加高效,我们的生活也为之发生变化。电脑的计算只是低级(机械)的计算,人脑的才是最聪明的计算;把平时的闲暇时刻用来做一些发散性的思考,说不定会有意外的收获。曾经有一位我很尊敬的老师说过,脑子越用越灵光,对此我深信不疑。程序员受编程思想的影响,平时的思考往往是程序化的,我也逃不脱这种思维的禁锢。
在10年以前,我还是纯粹的技术人,以深入钻研技术为乐趣。最近这10年,我的职业生涯发生了很大变化。其中最重要的是,开始接触业务,贴近业务,并且也开始思考产业,最终走向了技术创业。
我的经历是一段极其缓慢地从纯技术岗位走向业务的过程。先是在学校里工作,我职业初期做过一个地图编辑产品,并进一步搭建地理信息系统,但很快就走上了教学科研岗位,脱离了业务需求。接着在微软亚洲研究院工作,比在学校里还纯粹钻研技术。这是一段非常幸福的时光,大部分时间可以海阔天空地思考技术,做实验。能做成原型就不错了。
我在阿里后期阶段的工作跟业务(旅行电商)结合越来越紧密,也参与一些业务发展会议。除了做一些技术决策以外,还需要在业务需求基础上平衡和分配技术资源。如果有人问我,在阿里最值得学习的是什么,我的答案是阿里做业务的方法,包括如何制定目标、拆解目标,以及如何运营一个业务(特别是利用数据来运营业务,这是阿里的优势)。虽然很多书或者文章也会讲这些方法,但再多书面的学习都抵不上亲身参与一个业务周期更为有效。
能将自己的工作融入到一个产业中,这是扩大视野最好的做法。有些技术或产品天然要从产业的角度来看待,操作系统就是这样的典型产品。做移动操作系统要结合移动互联网产业的发展来思考,上游有芯片厂商,下游有手机厂商和移动服务商,可能中间还有设计公司或系统服务商。
我花了五年时间想做成一个移动操作系统,有这样的机会是非常幸运的,但最终没有做成却是遗憾的。我个人获得了成长,这是一个额外的收获。
基于对众多设备连接网络的技术路径和整体软件结构的分析,我认为除了设备上的操作系统,还需要一个针对物联网场景的系统软件,它解决该场景中的设备连接和数据共享的需求,让这些设备形成一个整体来协同工作。
跟上一个产业的发展,比跟踪一项技术的发展,要困难得多。这需要不断学习,不断思考。产业中的很多知识和经验并没有那么高科技,它们来源于实践者的日常活动中,包括失败的和成功的各种尝试。这10年间,我接触到了一些引领产业发展的人物,从他们身上学到了很多,也开始从产业发展的角度来思考问题。
从2018年我选择了加入创业大军,最深刻的体会是:离开大平台了,你就什么都不是了。经历了两年不到的创业历程,说几点感悟:
这一步是把创业的“故事”变成看得见、感受得到的场景,产品可以不完善,但要体现出核心理念。此步骤既可以验证可行性,也会接收到试用客户的初期反馈。创业前期是个不断试错的过程,每走好一步都可以增强支持者(包括股东、投资者,或合作伙伴等)的信心,也让团队更有信心。为了减小试错的代价,快是最有效的手段。
用技术来赚钱有各种途径,越贴近用户需求的技术或产品,相对而言变现容易得多。底层技术和产品要获得市场认可的周期则长得多。
时刻保持危机感。
信任团队。
写在最后
感谢这些架构师对我的贴心,确实软硬件技术发展都很快,编程的理念也有不小的变化。用10年的跨度来看技术进步,老程序员的知识结构是需要升级的。在国内IT企业市场,程序员35岁是一个职业坎,45岁很多程序员就屈服于现实了,55岁绝大多数就得退群了。
最近这10年,我还培养了一个辅助习惯 —— 跑步,跑的距离从5公里开始,到10公里,再到半程马拉松(约21公里),然后到全程马拉松(约42公里)。跑得不快,但能坚持下来。我希望自己的程序人生还能有至少两次续篇,写代码不一定多,但仍然保持跟代码的接触。
我的程序感悟 | 2002
我的程序人生之第三个 10 年 |2020
