国内外软件开发上的差距与分析

摘要:
--愿与勇于正视现实的人共勉在开始任何其他文字之前,首先有必要正视一个根本现实:国内外软件开发的水平是有差距的。单以单兵能力来看,国内外的程序员群体未必就有很大的差距。国内外差距的一个间接证据是国内软件开发的工程化的程度过于薄弱。先不论CMMI这种大型方法论,就说最简单的软件工程数据收集。这样的话对软件开发个体而言,负面影响可能并不直观,但从整体来看却也是一种切切实实的差距。

--愿与勇于正视现实的人共勉

在开始任何其他文字之前,首先有必要正视一个根本现实:国内外软件开发的水平是有差距的。

这一结论的最直接证据是每一轮新技术的发起者基本上都是国外的人或公司:

从方法论(CMMI,敏捷等)到各种框架(近来很热的Hadoop等)再到新的编程语言都是如此。

总的来看这类差距似乎可以概括为“原创的缺失”,大多时候,我们只是处在一种“跟随者”的角色上。

RUP出来后我们跟谁RUP,敏捷出来我们跟谁敏捷,云计算出来后我们跟随云计算,大致如此。

年纪小的时候,会单纯的以为造成这种局面的主要原因是个人技术能力不足或努力不够。

但现在想来,这反倒是次要原因。

单以单兵能力来看,国内外的程序员群体未必就有很大的差距。

这点可以反过来看,那么多开源的库,看过代码后,那个是国内程序员看不懂并完全写不出来的?

如果说既能看懂,有足够的时间也可以自己写出来,那么大致上就不是个人技术能力的问题。

这样事情就变的有些微妙,我们也就需要在更高的视点上审视一下促成一件事情的因子。

一件事情的成败大致可以用四个维度去考量:

  • 有没有意识去做-->创新
  • 有没有能力去做
  • 有没有时间去做-->环境
  • 有没有动力持续去做-->意愿和环境

排除第二点能力之外,其余三点可以大致概括为:勇为天下先的意识(创新)和创新得以生长的泥土(意愿和环境)。

这几者彼此影响,不可分割。

一提创新,很多人可能会想到其瓶颈是没有想法,进而认为差距的主要原因是意识问题。

但这很可能是错的,就我自身的观感,程序员这个群体里,现实的情形应该是想法很多,但受种种制约,实践下来的不多。

现实的需要激发了创新,也提供了实践创新的场所和养分,脱离实际需要的创新是走不远的。

这似乎只能寄希望于本土软件企业的崛起,为程序员提供相应的环境(时间+实践创新的场所),

接下来如果程序员这个群体再有实践自身追求的意愿,那么事情将会改观。

国内外差距的一个间接证据是国内软件开发的工程化的程度过于薄弱。

软件这东西过度工程化是不行的,但不工程化也一定是不行的。

先不论CMMI这种大型方法论,就说最简单的软件工程数据收集。

在这点上国外比较容易找到各种数据,比如下面这样的表格:

代码行/天最低值-最高值(典型值)

软件类型

10,000代码行的项目

100,000代码行的项目

250,000代码行的项目

航空电子

15-150(30)

3-45(7)

3-30(6)

应用系统

120-2,700(450)

30-1050(90)

15-750(75)

命令与控制

30-450(75)

7-90(15)

6-75(12)

嵌入式系统

15-300(45)

4.5-75(11)

3-60(9)

公众因特网

系统

90-1500(225)

15-300(45)

15-225(30)

内部内联网

系统

225-2700(600)

45-1050(120)

30-750(90)

微代码

15-120(30)

3-30(6)

3-15(4)

过程控制

75-750(150)

15-150(45)

13-130(30)

实时系统

15-225(30)

3-45(7)

3-45(6)

科学系统/

工程研究

75-1125(150)

15-225(45)

12-150(30)

套装软件

60-750(150)

15-150(30)

10-120(30)

系统软件/

驱动程序

30-750(90)

7-150(15)

6-120(13)

电信软件

30-450(90)

7-90(15)

6-75(7)

即使是在日本,也有一个叫IPA这样的机构在定义各种指标,并持续收集数据。而国内似乎还没人做这类事情。

这样的话对软件开发个体而言,负面影响可能并不直观,但从整体来看却也是一种切切实实的差距。

这点上很难靠个人来推进和改善,需要有一种组织(软件协会?)来持续推进才有可能改观。

--------------------------------------------------------------

理想流 + 软件 =《完美软件开发:方法与逻辑》
理想流 + 人生 = ??
理想流 + 管理 = ??
理想流 = 以概念和逻辑推演本质,追求真理。

免责声明:文章转载自《国内外软件开发上的差距与分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux之sshkey密钥认证实战主线程中同步的 XMLHttpRequest 已不推荐使用,因其对终端用户的用户体验存在负面影响。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[WCF安全系列]实例演示:TLS/SSL在WCF中的应用[SSL over TCP]

在接下来的系列文章中我们正是讨论关于身份认证的主题。在前面我们已经谈到了,WCF中的认证属于“双向认证”,既包括服务对客户端的认证(以下简称客户端认证),也包括客户端对服务的认证(以下简称服务认证)。客户端认证和服务认证从本质上并没有什么不同,无非都是被认证一方提供相应的用户凭证供对方对自己的身份进行验证。我们先来讨论服务认证,客户端认证放在后续的文章中。...

Windows的应用管理工具 PortableApps,Chocolatey和Ninite

以前为了让我的firefox变成portable的,我使用了PortableApps,它不只是做软件的绿色版,而且也是一个软件的管理平台,可以通过它来管理软件的更新,挺方便的。 前段时间试用ScriptCS(参见我的博客把C#当作脚本语言来用),又使用了Chocolatey,它是一个类似NuGet的包管理工具,可以理解NuGet管理你的项目级别的包,但是C...

SQL Server与Oracle有什么区别?

1.可操作平台上: Oracle可在所有主流平台上运行,Oracle数据库采用开放的策略目标,它使得客户可以选择一种最适合他们特定需要的解决方案。客户可以利用很多种第三方应用程序、工具。而SQL Server却只能在Windows上运行了。 但SQL Sever在Window平台上的表现,和Windows操作系统的整体结合程度,使用方便性,和Microso...

SpringBoot项目添加webapp目录

一、文章简述 使用IDEA工具创建的SpringBoot项目本身是没有webapp目录的。如果我们想要添加webapp目录的话,可以手动添加。 二、操作步骤 1)点击IDEA右上角的Project Structure 2)先点击下图中的+号,再点击Web 3)修改Web模板的位置 ①web模板未修改前的位置如下: ②先修改Path路径(点击上图中pa...

Linux上运行安卓应用:安装使用Anbox

文章目录 #0x0 简介 #0x1 安装教程 #0x11 第一步,安装需要的内核模块 #0x12 安装Anbox #0x2 使用Anbox #0x21 一些简单的设置 #0x22 安装APK #0x3 卸载Anbox #0x0 简介 使用Linux运行安卓软件,类似于虚拟机,这种软件有不少 比如Genymotion,Andy OS,An...

adb 安装与使用(一)

一、ADB简介 1. 什么是adb?   adb(Android Debug Bridage)是Android sdk的一个工具;   adb 是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系,才能让用户在电脑上对手机进行全面的操作。   Android 的初衷是用adb这样的一个工具来协助开发人员在开发和拷贝Android 应用的过程中更好...