写点什么

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

  • 2010-11-30
  • 本文字数:5283 字

    阅读完需:约 17 分钟

杨钢是金山 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:003893
用户头像

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

关注

评论 2 条评论

发布
用户头像
云文档、多人协作、团队知识库、文档即服务,可以看得见的未来
2021-04-17 20:31
回复
团队协同
2021-04-17 20:31
回复
没有更多了
发现更多内容

容器 & 服务:Kubernetes API Server访问问题

程序员架构进阶

架构 Kubernetes 容器 Helm Charts 10月月更

半年时间,拍摄8省市10个案例,我们见到了这样的智能中国

脑极体

SpringBoot 实战:优雅的使用枚举参数(原理篇)

看山

Java Spring Boot Effective Spring 10月月更

别被vector最后一个元素erase错误

良知犹存

c++

stm32-HAL使用stop模式后DMA初始化的问题

良知犹存

stm32

敬畏用户

FunTester

软件测试 测试 用户 FunTester 用户思维

技术公众号小白互助网络

Felix

GitHub 微信公众号 自媒体

模块九毕业设计

以吻封笺

stm32-HAL使用usart发送中断判断发送标志库问题

良知犹存

stm32

业务中台数据一致性方案

慕枫技术笔记

后端 引航计划

马拉车算法,其实并不难!!!

秦怀杂货店

数据结构 算法 LeetCode

MacBook的隐藏功能

IT蜗壳-Tango

10月月更

微博评论高性能高可用计算架构

白开水又一杯

#架构实战营

风雨兼程,零代码训练营第四期顺利结业

明道云

大神Jeff Dean相关的一些项目

春秋易简

模块9

Geek_ywh40v

k8s replicaset controller源码分析(1)-初始化与启动分析

良凯尔

Kubernetes 源码分析 Kubernetes源码 #Kubernetes#

产品经理职业发展框架

俞凡

产品经理 产品管理 认知

Linux开发coredump文件分析实战分享

良知犹存

Linux

模块九作业:设计电商秒杀系统

Felix

10. python入门速通教程之类、继承类、类中的特殊方法

梦想橡皮擦

10月月更

iOS开发独家秘籍-代码块Code Snippets

iOSer

ios 代码 ios开发

012云原生之微服务

穿过生命散发芬芳

云原生 10月月更

一文带你盘点“微服务”中的技术点

Simon郎

微服务 Spring Cloud spring cloud alibaba java

数据库优化之explain 的使用和常用的SQL优化或索引优化

Regan Yue

数据库 数据库优化 Regan Yue 10月月更

如何进行用户故事估算——Ethan分享观后感

Bruce Talk

敏捷 随笔 Agile User Story Product Owner

小程序中如何显示Markdown文本

Changing Lin

10月月更

在开源项目或工作项目中使用git建立fork仓库

良知犹存

git

【SpringCloud技术专题】「Hystrix源码」分析故障切换的运作流程

洛神灬殇

源码分析 SpringCloud Hystrix 熔断器 10月月更

5款良心工具,专治各种流氓顽固软件!

Jackpop

设计千万级学生管理系统的考试试卷存储方案

Rabbit

WPS技术总监杨钢谈WPS和技术团队_QCon_晁晓娟_InfoQ精选文章