编程语言大比拼——谁的效率高

摘要:C、C++、Java这几个屹立不倒的开发语言,如果以功能点作为单位的话,谁的效率最高呢?如果在项目初期就能确定功能点数量,那么就可以很好的预测项目完成时间。这一点是不是对你很有帮助呢?

一份6000个项目的比较结果表明:编程语言的选择对项目进度有重大的影响。

我最近在开发者论坛上看到一个讨论有关JVM语言生产力(编程效率)方面的问题,如果那些高效率的开发人员一旦离开了Java(无需处理语言的冗长),他们的编程效率会怎样?会找到其他JVM语言来代替Java吗?说实话,这完全是一个似是而非的要求,把简洁转化成生产力。简洁和底层技术使人们有可能相信其他的技术成本——可读性。另一个贡献者——动态类型可以允许在运行时报错并且会被静态类型捕获。一个给定语言的生产力(编程效率)是有许多因素决定的,冗长仅仅是其中之一,至于这是否是最大因素,目前还不确定。

语言生产力(编程效率)的衡量常常被视为一种艺术而不是科学工作。或许因此有人认为,它违背了精确测量这一标准并且有了失真方面的嫌疑。但是本文的作者Peter Hill带领了一组研究人员在软件工程上就硬件数据这一主题进行了研究。以功能点做为核心衡量单位,在项目的需求阶段就开始测量功能点的数量,它对许多组件进行了测量,比如逻辑文件数量、接口文件、外部输入、外部输出和外部查询。它是一种可以给35年以上软件提供统一测量的一种方法。从本质上来讲,它是基于可衡量的工件来估算功能总额的。一旦项目的功能点数量被确定,你就可以进行其他方面的衡量并且还可以与其他大致相同数量的项目进行比较。

Peter小组,ISBSG,一个非营利性的软件研究小组,已经聚集了6000个项目,把功能点衡量的主要数据。从这些数据可以知道完成一个项目需要多少小时,然后在映射到项目所用语言上。下图显示了他们研究结果:

Language

Hours Per Function Point

ASP*

           0.61

Visual Basic

           0.85

Java

           10.6

SQL

           10.8

C++

           12.4

C

           13.0

C#

           15.5

PL/1

           14.2

COBOL

           16.8

ABAP

           19.9

*表示经典的ASP.用于进行比较(由ISBSG提供)

这个数字是无可争议的。在表1上也似乎表明,高级语言比低层次语言是更有生产力的。然而,这一趋势又自相矛盾的,语言设计主要是用于商业用途- COBOLABAP – 与通用编程语言相比,反而会降低(效率)生产力。Hill指出,语言并不是影响这些数字的唯一因素。项目类型(你肯定不希望同一项目里面掺杂多种语言,比如C和ASP)、团队的规模与性质也会对上面的数字起着一定的作用。

尽管我希望C++C更具生产力并且希望Java也超过CC++,但是C#排在这几个语言的最后仍让我非常吃惊,我觉得它应该更接近Java,特别是它们可以被使用在相类似的项目中。但是它排在VB的下面似乎是理所当然的。

 

Hill是一个非常谨慎的家伙,他不会提供语言上统计数据,除非他有个可借鉴的大项目。所以我猜测在我们知道如何提升脚本语言或者Java替代方案出来之前,还需等一段时间。与此同时,如果你能准确评估项目功能点,那么你就可以参照上面这张表来预测项目完成时间啦!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop之Flume详解

1、日志采集框架Flume   1.1 Flume介绍     Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。     Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、     kafka等众多…

搞懂Java的反射机制

搞懂Java的反射机制 1.什么是反射? java的反射机制是指可以在运行状态下获取类和对象的所有属性和方法。 2.反射的作用? 1、在运行时获取一个类/对象的成员变量和方法 2、在运行时创建一个类的对象 3、在运行时判断一个对象是否属于一个类 3.反射有哪些…

表单oninput和onchange事件区别

oninput事件是元素value发生变化是立刻触发,而onchange是元素发生变化并且失去焦点时才会触发。 转载于:https://www.cnblogs.com/ykli/p/9565601.html

Struts2中<s:iterator>基本用法及示例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Struts2中<s:iterator>基本用法及示例 Iterator用于遍历集合&#xff08;java.util.Collection&#xff09;或枚举值&#xff08;j…

如何使用postman做接口测试

1、get请求传参 只要是get请求都可以在浏览器中直接发&#xff1a; 在访问地址后面拼 ?keyvalue&keyvalue 例如&#xff1a;在浏览器中直接输入访问地址&#xff0c;后面直接拼需要传给服务器的参数http://api.nnzhp.cn/api/user/stu_info?stu_name小黑2、post请求&…

【狂神说】分析前后端分离开源项目?

文章目录1.如何分析开源项目项目简介项目源码2.观察开源项目3.开源项目下载4.跑起来是第一步5.前后端分离项目固定套路6.如何找到一个开源项目1.如何分析开源项目 学习的方式&#xff1a; 不知道这个代码怎么来的这个代码跑不起来这个项目对我们有什么帮助&#xff0c;不会模…

设计公共API的六个注意事项

摘要&#xff1a;俗话说&#xff1a;“好东西就要贡献出来和大家一起分享”&#xff0c;尤其是在互联网业务高度发达的今天&#xff0c;如果你的创业公司提供了一项很酷的技术或者服务&#xff0c;并且其他用户也非常喜欢该产品&#xff0c;在这种情况下&#xff0c;最好的解决…

go 交叉编译

golang中windows交叉编译 env GOOSlinux GOARCHamd64 go build .打包镜像 FROM alpineMAINTAINER "congge"ADD ./casino_niuniu /usr/local/casino_niuniu/bin/casino_niuniu ADD ./templates /usr/loca/lcasino_niuniu/bin/templates ADD ./public /usr/local/casin…

IntelliJ Idea 2017 免费激活方法

见&#xff1a;https://www.cnblogs.com/suiyueqiannian/p/6754091.html 1. 到网站 http://idea.lanyus.com/ 获取注册码。 2.填入下面的license server: http://intellij.mandroid.cn/   http://idea.imsxm.com/   http://idea.iteblog.com/key.php 以上方法验证均可以

P3193 [HNOI2008]GT考试

传送门 容易看出是道DP 考虑一位一位填数字 设 f [ i ] [ j ] 表示填到第 i 位&#xff0c;在不吉利串上匹配到第 j 位时不出现不吉利数字的方案数 设 g [ i ] [ j ] 表示不吉利串匹配到第 i 位&#xff0c;再添加一个数字&#xff0c;使串匹配到第 j 位的方案数 那么方程显然为…

LeetCode刷题攻略

目录 一、LeetCode简介 二、刷leetcode的主要目的 三、常用的数据结构 四、常用的算法思想 五、选择算法题 1、刷题选择 2、刷题方法 方法一&#xff1a;顺序法 方法二&#xff1a;标签法 方法三&#xff1a;随机法 方法四&#xff1a;必杀法 六、刷题攻略 TIP 1&…

SQLserver数据库反编译生成Hibernate实体类和映射文件

一、建立项目和sqlserver数据库 eclipse&#xff0c;我使用的版本是neon3 二、Data Source Explorer 选择OK 在data source Explorer的Database Connections 选择New 填写好General的连接信息 新建New Driver Definition 填写完选择OK 选择刚才的Drivers Test Connetion测试 N…

最受欢迎的5大Linux发行版

摘要&#xff1a;要统计有多少人在使用那款Linux发行版几乎是不可能的事情&#xff0c;但我们可以使用一些在线分析工具来大概地看看哪些Linux发行版更受欢迎。 Google Trends的数据显示&#xff0c;Ubuntu用户正在流向Mint&#xff0c;但依然在各方面都比其它Linux发行版更有优…

C#动态操作DataTable(新增行、列、查询行、列等)

public void CreateTable(){//创建表DataTable dt new DataTable();//1、添加列dt.Columns.Add("Name", typeof(string)); //数据类型为 文本//2、通过列架构添加列DataColumn age new DataColumn("Age", typeof(Int32)); //数据类型为 整形DataColumn…

使用IntelliJ IDEA 配置Maven(入门)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 下载Maven 官方地址&#xff1a;http://maven.apache.org/download.cgi 解压并新建一个本地仓库文件夹 2.配置本地仓库路径 3.配…

[算法]不使用*、/、+、-、%操作符求一个数的1/3

摘要&#xff1a;算法一直是程序员进阶的一道龙门&#xff0c;通常算法都是为了更高效地解决问题而创造的&#xff0c;但也有的只是出于学术性&#xff0c;并不在意其实际意义。这是近日在国外技术问答网站stackoverflow的一个热门问题&#xff0c;不知道你能给出几种解决方法&…

2022届互联网秋招备战

文章目录1、何为秋招&#xff1f;1.1应届生身份1.2秋招、春招、校招1.3、社招、海投2.秋招信息如何获取&#xff1f;3、如何备战秋招&#xff1f;3.1、简历&#xff08;ps做简历&#xff09;3.2、笔试准备3.3、面试准备4、日常实习和暑假实习&#xff1f;1、春招≠暑期实习2、什…

php 两变量值互换 方法

//方法一&#xff1a;$a "abc";$b"def";$a $a^$b;$b $b^$a;$a $a^$b;//方法二&#xff1a;list($a, $b) array($b, $a);//方法三&#xff1a;$a $a . $b;$b strlen( $b );$b substr( $a,0,(strlen($a)- $b ));$a substr( $a, strlen($b));//方法四&…

MySQL5.7 group by新特性,报错1055

项目中本来使用的是mysql5.6进行开发&#xff0c;切换到5.7之后&#xff0c;突然发现原来的一些sql运行都报错&#xff0c;错误编码1055&#xff0c;错误信息和sql_mode中的“only_full_group_by“关&#xff0c;到网上看了原因&#xff0c;说是mysql5.7中only_full_group_by这…

IDEA中多行注释及取消注释快捷键

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、一次性添加多行注释的快捷键 首先选中要注释区域&#xff0c;然后 ctrl/ 这个是多行代码分行注释&#xff0c;每行一个注释…