来源:《程序员》杂志第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 写复杂的脚本。
从人才培养的角度看,选择这些开发语言,主要是考虑到移动互联网和互联网行业的现状。 这有利于开发人员复用以前的技术积累,也有利于开发人员长期的职业发展。 通过内部讨论,让大家意识到几种开发语言的优缺点,能在更高的视角选择合适的开发语言。
最后,适合的开发语言有利于团队的技术储备、提升工作效率和跨团队的人员调动。
相关推荐
在UC1705驱动程序中,C51编程语言是常见的选择,因为C51是针对8051微控制器系列的优化编译器,而8051家族是很多嵌入式系统的基础。C51代码具有高效性和可移植性,使得开发人员能够轻松地编写和调试与UC1705交互的...
【标题】"uc.rar"是一个压缩包文件,其中包含了关于"UC"的界面设计案例,主要关注"UC的menu",以及使用Java语言实现的"uc"界面开发。这个资源对于初学者来说是一个很好的学习材料,可以让他们了解如何构建一个类似于...
该接口为第三方应用提供了丰富的功能,以便于开发者用Java语言实现与UC平台的集成和业务开发。以下是基于标题和描述的关键知识点: 1. **eSDK UC体系结构**: - eSDK UC是华为推出的一种统一通信解决方案,它提供...
总结来说,这个压缩包提供了一个针对华视100uc开发的环境配置,包括32位DLL文件,适配Windows 11、IntelliJ IDEA IDE和32位JDK 1.8。对于需要在32位环境中开发或调试华视100uc相关项目的C#程序员来说,这是一个重要...
华视CVR-100UC是一款专业的身份证阅读器,其配套的驱动程序和SDK为开发人员提供了便捷的接口,帮助他们构建高效的身份证信息管理应用。 首先,我们要理解“华视CVR-100UC驱动程序”。驱动程序是操作系统与硬件设备...
UC1698是一款常用的液晶显示控制器,常...了解和掌握这个驱动程序,对于开发涉及UC1698的嵌入式系统项目至关重要。通过分析和使用压缩包中的文件,开发者可以更好地理解和应用这个驱动,实现自定义的图形界面和功能。
这意味着开发者可以根据自己的技术栈选择合适的接口进行调用,大大降低了开发难度和时间成本。 开发说明文档是SDK不可或缺的一部分,它详细解释了各个函数的功能、参数含义、使用示例以及常见问题解答。通过阅读这...
C语言是嵌入式开发的常用语言,因为它既高效又接近底层硬件,使得开发者可以直接控制系统的资源。 这个压缩包可能包含了以下内容: 1. **源代码**:开发者可能会提供UC/OS的核心源码,以及相关的驱动程序和应用程序...
4. **SPI或并行接口**:根据项目需求选择合适的通信方式,并实现STM32与UC1698之间的数据传输。SPI需要掌握时钟极性、时钟相位、主从模式等相关配置,而并行接口则需关注数据线的数量和同步信号。 5. **嵌入式系统...
描述中提到 "内有python源码,exe可执行文件",这意味着这个工具基于Python编程语言开发,并且已经编译成了Windows平台下的.exe可执行文件。Python是一种高级编程语言,因其简洁易读的语法和丰富的库支持而常用于...
本中文手册详细介绍了uc-GUI的安装、配置、使用方法以及其内部设计架构,是开发者进行uc-GUI开发的重要参考资料。 一、uc-GUI安装与配置 uc-GUI的安装通常涉及下载源码、编译和链接到目标系统的步骤。首先,你需要...
标题中的“uc1698.rar_160160_160160液晶_uc...通过研究这些内容,开发者不仅可以掌握如何使用UC1698驱动160x160液晶屏,还能了解到如何在类似项目中复用和改编代码,这对于嵌入式系统开发人员来说是非常宝贵的经验。
"华视100UC身份证读卡器二次开发BS端"这一主题主要涉及的是在Web应用(Browser-Server,简称BS)环境中,如何利用特定的硬件设备——华视100UC身份证读卡器,进行应用程序的扩展和定制。这个过程通常涉及到与硬件...
uc/OSII的移植工作是嵌入式开发中的一个重要环节,本文将详细介绍uc/OSII如何在lPC2000系列ARM处理器上进行移植。 首先,理解 uc/OSII 的核心架构至关重要。uc/OSII 是一个可剥夺型的多任务实时操作系统,提供任务...
IAR6.2是IAR Embedded Workbench的版本,这是一个专为嵌入式系统开发的集成开发环境(IDE),支持C/C++语言,并提供了强大的编译器、调试器和其他工具链,对于STM32这样的MCU,它是常见的开发选择。 在移植过程中,...
面对语音交互这一发展趋势,UC选择开发语音浏览器旨在抓住市场机遇,进一步巩固其在移动互联网领域的领先地位。 #### 定位与目标 UC语音浏览器的定位是为用户提供更加便捷、高效的上网体验。具体而言,该浏览器...
虽然版本相对较旧,但其简洁的设计和良好的可移植性使其成为学习和开发嵌入式GUI应用的一个不错选择。以下是对UC GUI的一些关键知识点的详细介绍: 1. **图形用户界面(GUI)**:GUI是用户与计算机系统进行交互的一...
C语言是嵌入式开发中最常用的编程语言之一,因其高效和对硬件的直接访问能力而受到青睐。 【标签】"bc3.1 uc/os-ii"进一步强调了bc3.1与UC/OS-II之间的紧密关系。bc3.1可能是一个特定版本的编译器、调试器、库函数...
标题中的"UC、MW整合所需接口 Auth_UC"指的是在整合UCenter(一款由Comsenz公司开发的统一用户中心系统)与MW(可能是Metawiki或其他以M为开头的Web应用)时,需要使用到的一套认证接口——Auth_UC。这个接口主要...
4. **多语言支持**:uc-gui内置了多国语言支持,开发者可以轻松实现界面的本地化。 5. **丰富的控件库**:uc-gui包含各种常见的GUI控件,如按钮、文本框、列表视图、进度条等,便于构建复杂的用户界面。 6. **易于...