代码改变世界

开发语言的选择

2010-08-19 00:26  韩龙  阅读(2976)  评论(3编辑  收藏  举报

关于Java.Net孰优孰劣,LinuxWindows哪个更好的等等的争论由来已久,而且在我们的有生之年,还会时不时看到的这种争论。本篇文章不想在这种争论上增加一把干柴,只是希望从开发语言的选择角度上,提供一些个人看法。

 公司、个人选择一种语言或者环境时,理由有很多,大体上可分为两种:语言本身,公司层面。本文将会语言层面,公司层面进行简单的论述。

 语言层面上:

 首先考虑的是其功能和主要应用范围。现在各种语言不断涌现,可以说简直是“乱花渐欲迷人眼”。但其应用范围(或者说定位)似乎在语言创立之初,似乎就已经定性。比如Web开发无非是asp/asp.netphpjava。最近几年涌现了如rubypython。嵌入式当属C和汇编。手机平台上自然是j2meandroidobjective-cwindows mobile。页面脚本则javascript是当之无愧的老大。。。。可以说语言排行榜的百十种语言都有自己的一片地盘。

 其次会考虑语言成熟程度/配套环境。成熟度如何考量?个人认为大致在可以从以下几个方面着手:语言发展时间长短,背后支持的公司,技术支持力度(手册,SDK,社区),成型应用。

语言发展时间长短比较能说明问题。一种语言的推出,会面临很多考验,其经历的时间越长,越能说明其经历的考验越多,也越能说明其健壮性。这就是CPerl经久不衰的原因。当然后推出的语言在某种程度上可以吸收前者的经验,比如C#借鉴了Java的很多特性。但是试想一下,如果没有微软的支持,C#的命运可能就比较曲折。

还有些语言推出时间不长,但是一经推出,似乎就广受关注,例如go语言。大公司自有大公司之间的博弈,其所支持的语言似乎也随着大公司的命运起伏。Delphi的地位逐年下降,而Go这个新生儿,一下子就窜到20名的位置,如日中天。

语言如果没有好的手册,没有充实的SDK,恐怕即使是最聪明的人学起来也会望而生畏。而良好的社区环境,优秀的案例代码更能让人事半功倍。当然如果有比较成型的应用,最好不过。有人走在前面,替你尝了螃蟹。不管他有没有将他的经验进行分享,起码证明一点,这门语言是可以做到这种程度

其次是开发效率和维护效率。当几种语言在实现功能成熟度上差异不大时,开发效率就会成为首选。C语言也能开发Web程序,但是其开发效率和可维护性是很低的。因此没有多少人使用C来进行网站的开发。    

再次是性能。性能问题在语言的选择上其实是比较靠后,除非对性能要求相当严格的程序。而且程序的性能和开发语言的关系其实并不大。当然其他配套环境也会影响到语言的选择,比如IDE,数据库,操作系统等。

以上说的是语言层面,可以说是从纯粹技术的角度来进行的考虑。

 当具体到某个公司或者某个项目时,还有其他的各种各样的考虑。

首先是公司的业务定位。公司做什么业务,是专为iPhone手机开发程序,还是Android的服务提供商。公司的目标客户都是在什么环境下开发和运行?

其次是客户要求。在这个有钱就是大爷,给钱就是甲方的世界里,总有客户规定:嗯,我们要用XXXXXXXX。也许客户只是听了销售人员的忽悠,也许客户就仅仅知道的几个名词和一知半解的技术,或者,此时客户的选择就是你的选择, 当然你可以选择不选择。

其次是时间和成本。时间对公司来说就是金钱,都是公司运营的成本。实现的相同功能,在薪资水平相同的情况下,哪种语言的开发能力更高,并且开发完成项目可维护性强?IDE,操作系统需不需要付费?不付费的情况下,是不是会造成开发时间的延长?基于中国目前盗版横行的现状,对相关软件的付费有时只是象征性的。而国外由于版权保护比较严格,所以造成了PHP流行(当然不仅仅是这一种原因)。

其次现有开发人员的能力。如果能满足公司业务定位,并且时间和成本不成为问题的话,现有开发人员的能力将成为技术选型的首要考虑。在某种程度上,开发语言没有好坏之分,当使用一种语言的时间越长,对这种语言的理解的也就越深入,从而在很大程度上也会依赖于这种语言。    

其次是发展惯性。很多公司不是从头开发一款产品,或者新产品需要和原来的技术环境整合。公司在技术发展层面要延续以前的技术环境,或者有个缓冲期,这就是所谓的技术惯性。这样的情景是恐怕是最多的,必须小心翼翼。

 当从一种选择跳转到另一种选择时,这时就面临风险。风险大概在以下几方面

首先需要缓冲期:当面对整个开发环境的转变的时候,需要缓冲期来缓和这种改变,一方面是业务线、产品的开发/更改需要时间,另一方面开发人员的素质转变需要时间。还有就是旧的环境,数据等向新环境的逐步迁移。    

其次是时间与机遇。当开发转换时间过长时,产品和业务发展的机遇会不会丧失?会不会被竞争对手赶上并被超越?是加紧开发新功能还是为了转型后那个比较飘渺的目标?

其次是对风险的容忍。既然风险是不可避免的,并且在转换过程中,不可避免的发生各种各样的问题,那么你所有面对的各种人员对这种失误的有多高的容忍度。你的用户或者客户面临着一再的当机,服务不可用,会容忍你么?公司的销售人员会容忍产品转换所带来的销售额下降吗?客服面临着接二连三的投诉,会不会发脾气?管理者在面对众多的压力时,会不会再继续支持?开发人员会不会怀疑这种转换是不是值得,进而人心涣散?

其次是人力成本。简而言之就是转换的开发人员哪里来。是对现有人员进行培训和学习?还是对新招人员?如果采用现有员工,现有员工愿不愿意学习?学习的时间曲线怎样?当面对指责时,会不会一直坚持下去?如果采用新员工,原来的员工怎么办?对业务的理解需要多长时间?对现有产品和业务线的结构的梳理又需要多长时间。

总而言之,就跟找老婆一样,没有孰好孰坏,只有合适不合适。当面临各种各样的情景时,梳理头绪,分析问题,找出适合自己的才是正道。