上海架构师集结!4月25-26日,全球架构师峰会首次落地上海,吴翰清、汪源、叶绍志等大咖确认出席 了解详情
写点什么

WPS 技术总监杨钢谈 WPS 和技术团队

2010 年 11 月 30 日

杨钢是金山 WPS 的技术总监,一直带领技术团队从事大型软件的架构设计。InfoQ 编辑在 QCon 全球企业开发大会(北京站)期间,就大型复杂软件的架构开发以及大型技术团队搭建和管理以及 WPS 的发展等方面采访了杨钢。

InfoQ:大家好,我是 InfoQ 中文站的编辑,今天来到我们采访室的是金山 WPS 的技术总监杨钢先生,杨钢先生刚才跟大家分享了非常精彩的演讲,现在首先让他做一个自我介绍吧。

杨钢:我是 WPS 的技术总监杨钢,我 2001 年加入 WPS,一直在 WPS 从事技术框架方面工作,我的主要工作方向是大型软件的架构设计相关的问题和大型软件的复杂度问题,我希望把大型软件开发的过程变成一个有理论支撑的可以重复的一个实践活动。

InfoQ: 如您所说 WPS 是一个非常复杂的大型软件,同时它用到了很多种语言,可不可以跟我们分享一下 WPS 在这种混合架构中遇到过的一些典型的问题,以及咱们是怎么解决的?

杨钢:这一点的话要分两部分来谈,首先是客户端的 WPS OFFICE,我们当时为了加快界面的开发速度,除了底层是全部 C++,因为可以获得更大的控制能力和更大的优化的可能性,在界面我们使用了 Delphi,因为 Delphi 是当时比较流行的构建界面的 IDE。在前期,我们很快就构建出来一个 OFFICE 的界面框架,但是随着这么多年 WPS 的不断开发和维护,我们也开始对当初的这个决定进行一些反思,因为在这种紧耦合项目中间,界面和内核之间的耦合度非常高,交互很频繁,数据结构也非常的复杂,在这种紧耦合的交互过程中,使用两种语言,遇到了很多的问题。首先是错误调试的问题,因为很多关于界面的地方,都需要在 C++ 和 Delphi 两边来回调试,目前没有一个很好的调试工具来做这种混合调试,我们也做过一些辅助开发工具,但是毕竟我们不是做开发工具的厂商,在这方面事实上能做的比较有限;第二个关于程序员能力的培养,因为 C++ 是一个非常复杂的语言,要熟练、精通 C++ 的话,可能需要很多年的时间不断的积累。Delphi 它也是不吃素的一门语言,这两个合起来,无疑给我们整个开发团队的学习负担增加了不少,这是对于客户端的 WPS 来说。对于 WPS on WEB,这个 WEB OFFICE 项目,情况又发生了变化,我们在这个阶段把整个体系,铁板一块的客户端进行了重新的分解,我们从里面找出来紧耦合和松耦合的边界,对于紧耦合的边界,我们仍然还是比较主张使用一门语言。但是对于松耦合的边界,比如说 WPS 的内核模块和 WPS 的外围模块,甚至包括 WPS 的界面模块和 WPS 的内核模块之间,因为要做服务商和客户端这种分解之后,它不得不变成松耦合。那么这种情况下用混合语言,其实也是可行的,而且对于松耦合的边界来说,对于不同的部件使用最适合的语言是一个更好的方案。

InfoQ:您刚才提到了程序员能力培养和开发的要求,请问 WPS 团队使用的开发方式是敏捷还是传统的?

杨钢:这个东西可能不太适合一概而论,说实话我们从开发效率上来说的话,应该是属于传统中的敏捷,首先我们会有一个设计过程,我们有架构师,会把软件的细节定义的相对来说较为清楚之后,就进行软件的开发,这种相对于敏捷来说,它是偏向于传统的。但是对于传统的开发模式,特别是像日本软件企业,每一个函数的输入、输出都定义的,文档化很好的这种开发模式来说,WPS 又是一个相对非常敏捷的一个项目。在我这边管理的几个项目里面,我对他们的要求是只要有类图基本上就可以开始开发,那么对于我和一些项目的架构师来说,只要给我一张类图,基本上你的思路我都已经清楚了,除非你设计的是一团糨糊。

InfoQ: 您刚才说道 WPS 团队的人数目前已经有 200 多人,那 WPS 团队怎么样逐步成长到两百多人,在这之间有没有遇到过团队成长性的一些问题?

杨钢:其实在这一点上,我们做的有一点迫不得已,因为 WPS 经过了几起几落,落的时候人就很少,起的时候人很多。在起的阶段,会遇到一个很大的问题,就是大量新人的涌入。为了处理这个问题,我们采取了各种方式,首先是在金山集团下面会有一个集团训练营,这个训练营是独立于 WPS 之外的,它是为全公司服务的。他们会对新员工做最基本的培训,这个训练营的两位掌门人,事实上都是以前 WPS 的元老级程序员,董博、沈家政,都是第二代 WPS 程序员,所以他们为 WPS 培养人的时候更得心应手,他们在这个地方起到了非常大的功劳。然后 WPS 团队里,主要就是采取这种师傅带徒弟的方式,新人在经过了训练营之后,可能就直接参与项目,在项目中演练。我们其实给新人很多犯错的机会,我们在更大的尺度上去控制他就是不会造成乱子,但是在更细的尺度上,他可以不断的去试错。在这种可以让他充分去主动体会的基础上,新人的成长一般都比较快,实际上这也是很迫不得已的,我们挺希望人员很稳定的。

InfoQ:想问一下 WPS 除了技术团队,还有其他的比如需求、产品设计的,或者是测试等相关的团队,咱们的技术团队跟这些其他团队,是怎么样一种合作模式呢?

杨钢:其实刚才给你提到的 200 多人是指的整个金山 WPS 研发部的人,包括了开发、测试和产品,目前 WPS 还是开发的人最多,但是测试和产品也是一个不断壮大的群体。因为在 WPS 里面,大家是为着一个大项目在活动,彼此间的界限很模糊。这种交互都比较顺畅,没有太多的流程,基本上都是在项目组里面互相讨论。

InfoQ:咱们推出 WPS on Web 是基于什么样的考虑呢?

首先 WPS on Web 还在开发中,因为我们的目标是除了会提供文档的那种存储、管理协作这样的功能之外,希望我们的 WEB OFFICE 能够给用户一个和客户端 OFFICE 一样的体验,可能在大家的心目中觉得 WEB OFFICE 就是一个补充品,有时候临时性的用 WEB OFFICE 应应急,但是我们觉得其实那主要是因为 WEB OFFICE 还不够成熟,但是随着 WEB OFFICE 不断的成熟,它实质上有可能会变成另外一个选择,而不是说只是一个躲在后面的一个阴影。

那么 WPS 做 WEB OFFICE,说到坦诚一点,大趋势,别人都做,咱不能落后。但因为随着互联网技术的不断发展,特别是 RIA 技术这段时间的不断成熟,使的互联网 WEB 应用技术,已经足以支撑像 OFFICE 这样复杂的应用,在这段时间有一个很大的趋势,就是各种各样的应用都逐渐的从客户端向 WEB 形态开始迁移,也包括企业里面使用的一些系统,像财务,像 ERP 之类的,现在也越来越多的向 Web 方向迁移。Web 应用有一些比较好的特点,第一个是它的易传播性;第二个是对于企业来说,那个零部署成本。这些优点使的 Web 应该会成为下一代应用程序承载的主流平台。

InfoQ:这个是不是跟咱们的 WPS 客户端形成一定的竞争呢?

杨钢:我们内部也有很多这样的争论,我们对用户提供的价值,不仅仅是在用户文档的创作和编辑这个过程,当然这个是以前的 WPS 带来的。但是随着我们将更多的互联网服务元素加入整个 WPS 大家庭里面去,我们可能会涉及到文档创作之外的关于文档其他的流程,比如现在已经做到了的文档的存储、备份、管理、归档、分享。在整个活动中,编辑虽然是其中不可缺少的一环,但是它只是整个活动的一个部分,其实 WPS、WEB OFFICE 都是整个 WPS 办公服务的一个部分,是参与到整个办公服务中,都是不可缺少一环,并不是说谁要去替代谁。

InfoQ:开发 WEB 程序都会考虑到浏览器兼容性的问题,现在 WPS 的 WEB OFFICE 对浏览器的兼性支持的如何?

杨钢:其实浏览器兼容对于 WEB OFFICE 开发是一个必须要考虑的因素,这个也直接会影响到我们对 RIA 技术的选型,在刚才讲的时候,其实就有朋友关注,为什么 WPS 不用 Ajax,而是用 FLASH,其中我提到了两个原因,第一个原因是因为 Ajax 线上开发工具还不太成熟,对于一个超大型项目来说,可能是支撑不住,比如像 WPS WEB,我们目前粗劣统计大概有八十万行代码。然后我们根据我们的生产力估计到年底可能会有两三百万行代码出现,那么这么大的代码量,目前 Ajax 的应用是支撑不住的;还有另外一个原因就是跨浏览器的一个问题,根据我们的调查验证,目前 FLASH 在跨浏览器上面的问题要比 Ajax 要少一些。然后我们也和 ADOBE 在不断沟通这方面的问题,ADOBE 也在解决它。所以从目前来看,FLASH 跨浏览器目前不是一个很大的障碍,相反的 Ajax 多浏览器调试的成本会更高。

InfoQ:现在 WPS 同时有客户端版本和 Web 版本,在代码重用上有没有什么可以跟大家分享的?

杨钢:首先比如说像我们在线的代码采取的是一个客户端服务器的模式,就是我们会有很多的计算是在服务端进行,这些在服务端进行的代码,基本上都是在原有的客户端代码分离出来,然后进行适当的改造,这是很大的一部分代码重用。然后除此之外,我们会有一些计算是由客户端做,甚至包括 UI 部分、显示部分,必须是客户端做得。这一块对我们来说,大型软件最关键的是在于它的架构是否清晰,各个元素的分解和配合是否合理,耦合度是否低,这种架构设计方面是否可以重用是跟语言是无关的,在这个方面实际上是重用了 WPS 很多这种架构资产。

InfoQ: 对于 WPS 这样的大型软件,他对架构的要求是非常高的,大家对 WPS 一直都非常关注,如果想成为 WPS 架构成员之一的话,有什么要求?

杨钢:这个问题到是比较难,实际上,我们就以 WPS 典型的一个架构师的成长过程为例,首先就是 WPS 在招人的时候,我们完全不管学历或者是其他的认证,我们的招人标准之一就是要非常喜欢程序,然后非常喜欢去琢磨技术问题,包括我自己虽然现在担任 WPS 的总架构师,但我平时的程序代码工作量比一些项目经理还要多。我觉得,成为架构师的一个充分条件,就是他一定要对程序有大量的程序做接触,对程序有很强的这种感觉。然后在这个基础之上,在 WPS 里面,我们会进行适当的培养,让他开始从小模块的设计开始做起,在成为一个 WPS 所需要的架构师的这个过程中,他需要的进行一些培训,比如说怎么样用架构语言来表达一个设计,然后包括一些就是业界上很多这种,已经广泛成熟的一些技术的掌握,比如像类图的绘制,比如像设计模式的理解和熟练应用。那么其实和程序员的成长过程一样,我们的架构师也是在实践中慢慢的锻炼出来,会有一批人成长为一个系统架构师,但是有没有一个办法能够让你一定成为一个系统架构师,我觉得这点,我可能目前还经验不足,还没有办法给出一个答案。

InfoQ:未来咱们 WPS 有什么长期的发展计划呢?

杨钢:其实 WPS 之前给别人的印象就是 OFFICE 的克隆品,反正这个我们自己也承认,你不克隆就没人用,以前的 WPS2000 很有个性的,很多老用户很喜欢,觉得我们丧失了自己的风格,但确实太小众了。我们的总经理张泉原来说过一句话,先继承后超越,我们觉得经过了前面几年的发展,我们已经过了继承这个阶段。从去年开始实际上 WPS 已经酝酿、布局、超越这么一个过程,首先我们对项目组进行了调整,把整个 WPS 原来一个客户端项目,分解成了包括客户端、办公服务、WEB OFFICE 等好几个项目群。然后我们在客户端、在网络服务上面就探索了很多跟文档相关的服务,除了刚才提到的文档的存储、分享之外,我们还有一些跟文档创作相关的,举个例子,在 WPS,打开的时候有一个首页,一个模板展示区,这个模板展示区里面有很多精美的模板,这些模板其实不是我们做的,是很多专业的设计公司,他们做了之后免费提供给 WPS 用户,我们走一个相当于是流量渠道这么一个模式,跟他们交换资源。

然后我们在 WPS 里面,提供了一种叫做扩展插件平台的机制,这样第三方的开发者可以给 WPS 开发大量的扩充功能的扩展组件,现在的组件不是太多,在 WPS 官网上应该也有,这个数目我确实不记得,但是有大量的开发者已经在做这个事情了,这些组件给 WPS 带来了很多微软 OFFICE 没有的功能, WPS 在办公创作这一块,也开始寻求在已有的成熟经验上,能够更好的让用户以更高的效率创作文档,比如表格是中国人用的很多的一种文档元素,但是微软 WORD 里面它的表格操作其实是很复杂,特别是加上了合并单元格以后, WPS 在这方面一直探索一些新的操作模式,去简化这些表格操作,有一些这种操作方式,后来微软也给学进去了,这是关于客户端。另外一条产品线是关于办公服务的,我们觉得在整个文档的过程中,文档的编辑只是其中的一小部分,因为从我们的统计来看,虽然我们 WPS 是有免费的个人版,有大量的个人用户,但是从用户的反馈,或者是一些渠道我们了解到,其实很少有用户用 WPS 去做像日记一样的纯个人需求,他们做的都还是和公司相关的事情,那么他这个文档做出来肯定是要给别人看的,肯定是有一些几个人合作写一个出来,有一些可能要有审批之类的过程,这些过程以前只有很大的公司花非常高的费用去实施一个 OA,然后才能将这些流程给电子化。

我们觉得,WPS 本身可以帮助企业在文档编辑的程度上,在这个层面上实现电子化,在文档除了编辑之外,其他的流转、共享过程中,我们也能够做让特别是没有这种很大的预算去实施 OA 的公司,也能够很方便的享受到这个服务,这个是第二个产品线,第三个产品线就是 WEB OFFICE,WEB OFFICE 的长远发展现在并不是很好精确的描述,但是我们都相信未来它是一个大趋势。

InfoQ:非常感谢杨钢先生的精彩分享。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010 年 11 月 30 日 00:002805
用户头像

发布了 42 篇内容, 共 14.1 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

2 w字长文带你深入理解线程池

Java架构师迁哥

加快脑动脉瘤检测,AI来了

华为云开发者社区

人工智能 学习 算法 华为云 医疗AI

一个技术总监的忠告:精通那么多技术,你为何还是受不到重用?

四猿外

程序人生 技术管理 加薪 职场成长 源码阅读

架构师训练营第八周

我是谁

极客大学架构师训练营

企业级软件的核心价值

Philips

敏捷开发 企业应用

轻松云上揽胜中华,靠的就是这份聪明的“地图”!

华为云开发者社区

MySQL 数据库 postgresql AI 地图

数据结构与算法系列之递归(GO)

书旅

go 数据结构与算法

高交会科技盛宴:“科技改变生活,创新驱动发展”

WX13823153201

高交会

Flutter Bloc模式

码爷

flutter ios 程序员

微信视频号强制置顶朋友圈:盈利不可牺牲用户体验

石头IT视角

Pulsar Summit Asia 2020 | 主题演讲:大咖呈现,紧扣社区

Apache Pulsar

大数据 开源

祝贺 StreamNative 团队成员 Jennifer 当选 Apache Pulsar PMC 成员

Apache Pulsar

大数据 开源 Apache Pulsar

Dubbo-go Client端调用服务过程

apache/dubbo-go

dubbo dubbo-go dubbogo

接口文档生成详细教程

测试人生路

接口文档

《精通Tomcat:Java Web应用开发、框架分析与案例实战》.pdf

田维常

tomcat

区块链有了几个新“标准”!

CECBC区块链专委会

区块链 版权保护

这份笔记我必啃完!美团T9首发内部JVM高级特性笔记,差距不止一点点

Java架构追梦

Java 源码 架构 面试 JVM

JVM真香系列:方法区、堆、栈之间到底有什么关系

田维常

Java JVM 堆栈 方法区 Java虚拟机

数字投票时代即将到来

CECBC区块链专委会

数字投票

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,双指针,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

文科妹子都会用 GitHub,你这个工科生还等什么

沉默王二

GitHub

AliP9整理出微服务笔记:Spring微服务不止架构和设计

周老师

Java 编程 程序员 架构 面试

如何应对大促流量洪峰?揭秘京东技术人的备战手册

京东科技开发者

云计算 大数据 亿级流量

如何预防工业物联网中的恶意攻击?

VoltDB

大数据 数据分析 5G 工业互联网

双11购物节国外剁手党同狂欢 阿里云视频云电商直播实时字幕

阿里云视频云

云直播 直播 直播带货 语音识别

美国区块链政策大盘点

CECBC区块链专委会

区块链 政策 货币

什么?美团T9首发内部JVM高级特性笔记,看完差距不止一点

小Q

Java 学习 程序员 架构 面试

当我们在讨论实时性的时候,我们在讨论什么?

VoltDB

数据分析 5G 工业互联网

低代码开发平台核心功能设计——组件自定义交互实现

徐小夕

前端 编辑器 H5 大屏可视化 lowcode

HTTPDNS开源 Android SDK,赋能更多开发者参与共建

应用研发平台EMAS

android 阿里云 开源 httpdns 移动研发平台

【Swift实现代码】iOS架构模式之MVP

码爷

ios swift 架构

OCR技术的未来发展与演进

OCR技术的未来发展与演进

WPS技术总监杨钢谈WPS和技术团队-InfoQ