编程语言的异同及选择
2003.9 (所有版权保留)
一、各种语言编程的共同点
1. 基本单位都是函数
绝大多数语言的基本单位都是函数。运行环境提供给我们的是函数入口,我们编程序时写的主要内容也是函数。
运行时,我们编写的程序内的函数或者直接调用操作系统的函数,或调用组件的接口内的函数,或调用虚拟机的函数,或调用运行环境的其他函数。
2. 函数内算法的实现差别不大
真正的价值是函数实现的算法(这里把功能或业务流程的实现也都算做算法)。单就一个函数内(或几个相关的函数)的算法实现的程序流程(注意不是功能业务流程)来看,各种语言间的差别不是很大。
二、各种语言的不同点
1. 运行环境的函数接口不同
这一点不用多说了。词法、语法的差别也不用说了。
2. 函数的组织方法不同
在传统的汇编、C、Basic、Pascal、Script等等语言中,函数是独立的,可以以代码文件或模块文件进行组织管理。
在OOP的C++、Java、C#等等语言中,函数组织成类或组件,以类或组件的形式进行组织管理。
3. 函数的规划设计方法不同
非OOP的项目中函数的规划设计完全没有统一模式,根据实际情况变化非常大。
OOP的项目中的函数规划设计以类为基本设计单位,确定了类之后再确定函数。现在已经有很多理论与工具来支持以类为基本单位的设计。
4. 函数的积累沉淀与重复利用
程序员、开发团队、软件公司在运行多年后,非OOP的函数积累成函数库,OOP的函数积累成类库或组件库。
非OOP的函数库内的函数可能部分依赖于OOP的函数库,反之亦然。
5. 函数的实现的编码、测试工作量
不管用那种语言,如果没有特别的运行环境函数支持或类库支持或组件支持的话,每个函数的编码与测试工作量没太大差别——前提是针对熟手,例如写一个特定的排序函数,汇编与 VB 的工作量差别不大。
但实际上针对不同的语言,运行环境提供的支持是不同的。
三、选择编程语言时的考虑
1. 操作系统或虚拟机的选择
操作系统或虚拟机的 API(包括越来越多的组件)非常重要的,这是基础,选择时最重要的考虑因素。
Linux 的优势在于源码公开。Java 的跨平台是指跨操作系统,不是跨虚拟机——说实话本人不知道有多少厂家实现了多少种 Java 的虚拟机,并且它们的 API 的定义是完全相同的。
2. 编程语言的运行环境的选择
一种编程语言可能有若干种开发、运行环境支持。打个比方,Basic 语言有 QBasic、VB6、VB.Net 等。开发、运行环境的支持也是非常重要的,它很可能提供了操作系统或虚拟机之上的更多的函数(如Delphi),同时也规定了词法与语法。
编程语言的运行环境的长期生命力也是很重要的。
编程语言的跨平台只能说是在不同的操作系统的上的开发、运行环境的函数保证一样,但不能保证操作系统的API一样——除非不调用操作系统的API。
3. 文档是否详细、源代码是否丰富
没有好的文档,再好的基础 API(或类库、组件)我们都找不见。
源代码是指 API 应用的源代码。没有丰富的源代码,再好的基础 API(或类库、组件)我们都不会用。
其实某种语言发展多年之后,几乎所有的 API(或类库、组件)的应用的源代码都可以搜索到,我们抄过来改一改就是了。
抄不来的是复杂算法(包括功能或业务流程)的源代码——抄过来我们也看不懂,更不敢简单改一下就卖给客户。
4. 第三方函数库、类库或组件库是否丰富
在操作系统或虚拟机的 API 之外,在开发、运行环境的 API(包括类或组件) 之外,还有多少已经写好的函数我们可以使用。但是实际上,对第三方的 API 的学习、适应、使用的工作量很大,风险非常高,所以这一条不用太重视。
5. 语法与词法的选择
在考虑了上述的因素后,我的做法是最后考虑词法与语法。原因很简单,我懒。哪个语言的 API 多、词法及语法简单,我就用哪个——我说的是给老板给客户干活。如果是我有一段时间突然对某一个语言或技术有了兴趣而要自学一把,那另当别论。
我也见过有的人对某种语法有狂热的爱好,就像老夫子们出口必之乎者也,我觉得也挺让人佩服的。任何一种语言学精了用烂了都很了不起,贵在恒心。
6. 必须要会的语言
SQL 不用多说。在现在这个年代,Javascript + HTML 好像也必须学。