来源:《程序员》杂志第11期
链接:http://www.programmer.com.cn/14092/
有人把开发语言比喻成武侠中的门派:少林、武当、峨眉、崆峒等,每个门派武功的招式、修炼方法和宗旨都不相同,因此新人投奔某个门派后再改投新门派的门槛很高,而各个门派之间也是三六九等。也有人把开发语言比喻成各种工具:锤子、钳子、螺丝刀、小刀、大棒等,各个工具没有强弱之分。
对于一般程序员来说,切换语言的门槛是存在的,因为开发语言不仅包括语法,还包括开发语言和框架等整套技术堆栈。从公司角度来看,确定公司内部的主流开发语言也有利于人才培养和招聘,能够促进企业的健康发展。
本文将分享一下 UC 在选择开发语言方面的一些经验和思考。
UC的业务定位
选择开发语言时首先要考虑的就是它要和整个公司的业务定位相契合。
UC 是做浏览器起家的,浏览器就是所有研发的核心。
同时我们也会围绕浏览器拓展一些附属业务,如资讯频道、软件下载频道、游戏下载频道等。
2004 年我们刚开始创业时,使用了服务器客户端混合运算架构去解决使用手机浏览器浏览 Web 网页的问题。
这种架构将大部分复杂的运算工作放在服务器上完成。
用户在使用 UC 浏览器浏览 Web 网页时,“服务器”会先将页面内容进行预处理。
例如,当页面出现 JavaScript、CSS 等手机端无法很好处理的元素时,服务器会采用高容错策略进行自动过滤。
当页面需要显示图片时,服务器会根据终端返回的屏幕参数对图片进行匹配压缩。
考虑到上网浏览页面的特性,所有服务器处理工作基本都是实时进行的。
而随着终端性能的提升、网络环境变好,我们发现,客户端支持的事情变得更多了。
于是我们从 2008 年起组织了一个单独的团队,开始打造新一代的手机浏览器内核。
U3 内核将原先主要放在“云”的页面解析功能,向本地客户端做了相应的迁移。
现在,U3 内核已经可以很好地符合 HTML5 的相关标准。
而浏览器内核对跨平台、性能要求都是很高的。
UC 的客户端开发语言
2004 年刚开始做 UC 浏览器时,用户手机基本都只能支持 Java,于是 UC 的客户端开发语言就选择了 Java。
2007 年前后,我们看到基于 Symbian 60 的智能机开始兴起,操作系统也开始支持性能更好的 C/C++,因此,我们开始跟进使用 C/C++ 进行 Symbian 客户端的改造和开发。
我们应该是最早一批进行原生开发的手机软件研发团队,UC 在 Symbian 上占有很高的市场份额也正是得益于此。
2010 年之后,iOS 和 Android 等智能平台开始出现,UC 也快速跟进,开发了原生产品。
目前,UC 已经覆盖了国内所有主流手机平台,下面是开发语言的的列表。
值得一提的是,我们的 U3 内核主要采用 C/C++ 进行开发,这样做的好处是,可以做到很好的跨平台。
目前U3内核已经在 Android 和 iPad 上上线。
我们计划用一年时间使之支持 iPhone、Android 平板还有 Windows Phone。
此外,由于 MTK 的平台也是可以使用 C/C++ 开发的,所以,未来我们也希望 U3 内核可以登陆诸如 MTK 这样的平台,服务更广大的用户群。
UC 的服务器端开发语言
服务器端开发一直是 UC 业务的核心之一。
在初创阶段,UC 的服务器端只是 UC 浏览器的云端,仅仅是为了实现网页压缩和加速,提高渲染的效果。
服务器端开发团队的开发语言采用的是 C/C++(核心模块)和 Python(业务逻辑),比较统一。
2007 年左右,我们开始围绕浏览器发展了很多周边业务,算上后台的统计分析等项目,可以说是五花八门。
当时,各个项目分属不同团队,一般来讲,团队 Leader 熟悉什么语言,团队就使用什么开发语言,涉及 PHP、C/C++、C#、Boo、Python、Java 等。
同种开发语言中使用的框架、库也都各自为政,由各团队自己克服困难和积累技术。
在 2011 年底到 2012 年第一季度,我们在公司范围内进行了一次集中讨论,最终确定以 PHP、C/C++、Java 作为 UC 服务器端的主流语言。
-
在以下场景建议使用 PHP:
“页面展示”:带有 Web 页面的产品和项目,用PHP方便结合前台其他开发技术,如 HTML/XHTML、CSS、JavaScript、JSON 等,不需编译,可快速调整页面;
“模块粘合”:将一个大项目分解出多个逻辑相对固定且独立的模块,采用 C/C++、PHP 等做成独立模块提供服务,用 PHP 调用这类服务后,结合其他灵活多变的业务逻辑组装起来。
-
在以下场景建议使用 C/C++:
“高性能、大并发、高实时”:性能高是 C/C++ 的优点,相对于 PHP 或 Java,用户量大、并发访问的程序使用 C/C++ 能节省大量机器;
“耗 CPU、管理大量内存、高磁盘 I/O 或者网络 I/O”:对物理资源的管理以及灵活方便的操作是 C/C++ 的天生优势,但缺点要求开发人员有着丰富的开发经验。
-
在以下场景建议使用 Java:
“兼顾业务灵活性、规范性、性能和安全”:Java 类被组织成等级层次,纯粹面向对象、规范、类库多、业务抽象较好、跨平台、业务逻辑变更方便,而且性能相对较高;
很多银行系统、银行网站、制造企业的系统都是基于 Java 平台,因此,互联网企业跟其他企业有交互接口的项目常用 Java。
要求掌握 2 种开发语言
UC 现在要求每个开发人员应该熟练使用至少 2 种开发语言。
一种是目前工作时主要使用的“母语”,另一种是根据兴趣或工作需要选择的“外语”。
在学习“外语”时,一般是要求快速掌握其语法,然后了解相关函数列表和库,知道用的时候在哪儿查,了解项目文件如何组装以及开发框架、开发规范。
从公司的角度看,因为互联网企业节奏快,我们经常从各个团队抽调人员快速组建新的团队,所以开发人员熟悉2种语言可以让公司的运转更为流畅,我们在人员调动时也会征询各自的意愿和了解其对语言的掌握情况。
从团队内看,需要有一部分人可以工作在几个领域,例如使用 PHP 的人中有一部分还需要会用 C/C++ 写 PHP 扩展;或者在用 Java 为主的团队里,需要有一部分人能用 C/C++ 开发底层服务。
另外,部分项目还需一些辅助的后台脚本,我们要求开发者会用 Linux Shell 写简单脚本,部分开发还会用 Python 写复杂的脚本。
从人才培养的角度看,选择这些开发语言,主要是考虑到移动互联网和互联网行业的现状。
这有利于开发人员复用以前的技术积累,也有利于开发人员长期的职业发展。
通过内部讨论,让大家意识到几种开发语言的优缺点,能在更高的视角选择合适的开发语言。
最后,适合的开发语言有利于团队的技术储备、提升工作效率和跨团队的人员调动。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。