阅读更多

75顶
1踩

行业应用

转载新闻 一些鲜为人知的编程事实

2010-09-03 11:27 by 正式记者 ialy_2000 评论(50) 有17566人浏览

我的程序员经历让我明白了一些关于软件开发的事情。下面是一些在编程中可能会让人感到诧异的事情:

  • 一个程序员用了大约只用了10%-20%的时间来编码,而且大多数程序员,无论他的水平如何,其平均每天只有10-12行的代码最终会进入最终的软件产品中。这是因为,优秀的程序员会花费90%的时间来思考、调查、研究最佳的设计。而糟糕的程序员则会花费90%的时间来调试代码,并随意地改动代码并尝试让代码工作起来。

“A great lathe operator commands several times the wage of an average lathe operator, but a great writer of software code is worth 10,000 times the price of an average software writer.” –Bill Gates

“一个优秀的车工其工资是一个普通车工的好几倍,但是一个优秀程序员写出来的代码比一个普通程序员要值钱一万倍。——比尔盖茨”

  • 一个好的程序员比一个普通的程序员多十倍的生产率。而一个优秀的程序员的生产率则比普通程序员多20-100倍。这并不是夸张(自从上世纪60年代的研究一直表明这是一个事实)。一个糟糕的程序员并不只是没有产出的——他们并不仅是完成不不工作,而且还会制造出大量的让别人头痛并要去解决的麻烦。

 

  • 优秀的程序员花少量的时间写代码——那些代码都会出现在最终的产品中。那些花大量的时间写代码的程序员其实是很懒惰、很无知,或是很自大的,以至于不能使用已经存在了的解决方案来解决已有的问题。优秀的程序员精通于对通用的模式的识别和重用。好的程序员并不害怕持续地重构/重写自己的代码,直到达到最理想的方案。糟糕的程序员的代码基本上都缺少概念一致性,代码冗长,缺少层次和模式,所以,也就很难被重构。所以,重写他们的代码要比重构他们的代码要容易得多。
  • 软件和其它一切事物一样,都遵循着一致性规则。持续得更改只会让软件变成一潭烂泥,其破坏了原始设计的概念一致性。软件产品变成泥沼是不可避免的事情,但是因为程序员不考虑软件概念一致性而导致软件产品更为快速地成为泥沼,这种速度快得可能 会在软件产品还没有完成时,软件产品已经变得没有价值。设计概念一致性的失败通常都会导致软件项目的失败(而第二大导致软件项目失败的原因则是发布的软件并不是用户想要的)。软件变成烂泥的速度正在呈指数级下降,太多的项目在被完结前都面临着激增的时间和成本。
  • 一个 2004 研究报告 指出,大多数的软件项目 (51%) 都会在关键环节出问题。而15%的项目则是完全失败,当然,这比1994年有了很大的进步,当时完全失败的项目是是31%。
  • 虽然,几乎所有的软件产品都有些开发团队,但其并不是民主的。通常,只有一个人负责设计,而剩下的人去实现细节。
  • 编程是一个辛苦的工作。其是一个巨烈的脑力劳动。好的程序员24×7地在思考他们的工作,他们一般都在在洗澡和梦中编写软件中最重要的代码。因为最重要的工作只能在键盘之外完成,软件项目不可能因为加班或是加人来加快进度。

文章来源:http://dotmac.rationalmind.net/2010/08/some-lesser-known-truths-about-programming/

75
1
评论 共 50 条 请登录后发表评论
50 楼 nizhihe 2013-01-05 15:19
javaSHE 写道
xieshaohu 写道
最重要的是,公司的领导不在乎软件究竟能否复用,老板只在乎当前的项目,赚目前能够看到的钱。

不会给程序员去思考。去解决问题。碰到问题首先是绕过问题。

正解呀 一语道破

趋势,事实
49 楼 架构师 2012-12-17 11:21
鲜为人知的编程事实,应该是诸如Word中的快速保存实际上还保留了用户已经删除掉的信息,这一类的轶事,而不是本文的大话,空话
48 楼 javaSHE 2012-11-24 10:30
xieshaohu 写道
最重要的是,公司的领导不在乎软件究竟能否复用,老板只在乎当前的项目,赚目前能够看到的钱。

不会给程序员去思考。去解决问题。碰到问题首先是绕过问题。

正解呀 一语道破
47 楼 ewth126 2012-11-20 15:21
越学越心惊,的却如此,果然还是重新学习,决定回学校深造一次了。给自己一个环境来成为大师。
46 楼 nuysoft 2010-09-20 12:49
paranoid945 写道
nuysoft 写道
国内的开发以应用开发为主,应用软件开发模型和开发方法是有规律可行的,也就是开发人员以代码工人为主,行业现状导致国内出不了大师。

虽然一个好的程序员比一个普通的程序员多十倍甚至百倍的生产率,但是应用软件的开发是重复性的,可复制的,普通程序员经过几个项目的磨练也可以成长为水平一般,但是生产率不低的程序员。

好的程序员24x7在思考他们的工作,他们一般都在在洗澡和梦中编写软件中最重要的代码。没有在办公室加班,但是在办公室之外加班,这样的生活能持续几年?不要生活了么?不要朋友、家人了么?这样的生活只能带来代码上短暂的成就感,却毒害着你的生活。

文章的作者似乎有种浪漫主义情怀,切不可囫囵吞枣,需有选择性的学习,时刻保持独立思考是做人做事必须具备的特质。


呵呵,你看现在造的房子的质量,也都看得好好的嘛。不过顶多20多年30多年就危房了。当然我不是讽刺,毕竟美国的房子是房子,中国的豆腐渣也叫房子,都得住,当然质量不同。因为老百姓买房子,看到的都是房子的外表,都差不多。至于里面是钢筋还是竹签子,他们不关心也不懂。造房子和造软件都挺惨的。不过软件要好点,毕竟房子几十年后才知道是豆腐房。


豆腐渣房子和豆腐渣软件是相似的,导致豆腐渣房子的原因很少是建筑工人,同样软件质量也不应该完全归罪于程序员。
45 楼 encro 2010-09-15 23:21
这个是《代码大全》照抄的吧。
44 楼 mqlfly2008 2010-09-13 09:46
支持下,好的代码在后期的维护上来,会节约很多时间,只是只有我们自己是维护人员的时候,我们才会痛骂曾经的开发人员(也许是我们自己)。而事实上,项目的计划是影响代码质量的重要因素!你给我十天去一个功能和给我一天完成的东西,看起来肯定是不一样的
43 楼 aodi 2010-09-07 16:52
恩,楼主的说法很有道理。
42 楼 haidilee 2010-09-06 14:18
支持,哈哈
41 楼 monica617 2010-09-06 11:16
感觉文章总结的很不错!
40 楼 aninfeel 2010-09-06 10:06
wt8414 写道
风花雪月饼 写道
因为最重要的工作只能在键盘之外完成,软件项目不可能因为加班或是加人来加快进度。


国内大多数的项目经理都认为加班/加人能解决进度问题。

事实上,国内90%的程序员达不到普通程序员的标准,唯有采用以量取胜之法。

39 楼 sword721 2010-09-06 09:36
lkj107 写道
楼主醒醒,该编码了

一支队伍,主将+偏将  各种兵种

如果都是主将,看你怎么办

打了败仗,是主将的责任,而不是普通士兵的责任



那确实,不合格的经理更加可怕。
38 楼 monnsquare 2010-09-06 08:59
7*24  程序员真苦
37 楼 mblmh2008 2010-09-06 08:54
你能跟人说,我正在想怎么构造合适,还没做出来东西这样的话吗?
别站着说话不腰疼
36 楼 tamsiuloong 2010-09-06 08:48
说得有道理,啊忽然想想,我快近一个月没编码了  是不是特别优秀哦
35 楼 wt8414 2010-09-06 08:36
风花雪月饼 写道
因为最重要的工作只能在键盘之外完成,软件项目不可能因为加班或是加人来加快进度。


国内大多数的项目经理都认为加班/加人能解决进度问题。

事实上,国内90%的程序员达不到普通程序员的标准,唯有采用以量取胜之法。
34 楼 lkj107 2010-09-06 08:33
楼主醒醒,该编码了

一支队伍,主将+偏将  各种兵种

如果都是主将,看你怎么办

打了败仗,是主将的责任,而不是普通士兵的责任
33 楼 linsongbin1 2010-09-06 00:25
深有体会。
很赞同这些观点
32 楼 leegorous 2010-09-05 23:31
希望这只是针对传统项目开发模式所得到的结论
通过改进的开发模式,不知道能不能改变一些情况
31 楼 ltshark 2010-09-05 22:46
真希望某些领导能看看

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 在java中使用存储过程

    在java中使用存储过程,如何进行数据库连接,语法简析

  • java调用mysql存储过程

    在mysql上定义了存储过程,然后我想每1分钟调用一次存储过程。于是我设置了一个event,但是这个事件默认的运行周期为天,我尝试修改成minute却不生效。所以我决定通过java代码来调用存储过程。

  • Java调用存储过程小结

    Java调用存储过程小结

  • JDBC 概述(七)

    7 - CallableStatement7.1 概述CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调用是用一种换码语法来写的,有两种形式:一种形式带结果参,另一种形式不带结果参数(有关换码语法的信息,参见第 4 节“语句”)。结果参数是一种

  • java中使用存储过程

    http://jaybaijie.blog.163.com/blog/static/1563687820090308145068/ CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调用是用一种换码语法来写的,有两种形式:一

  • JDBC调用存储过程、MySQL触发器

    加载驱动Class.forName创建数据库连接conn= DriverManager.getConnection创建处理块CallableStatement cs = conn.prepareCall放入参数prepareCall.setString执行存储过程prepareCall.execute()关闭连接无参数的存储过程 JDBC编码调用 带参数的存储过程定义 调用存储过程 特殊存储过程参数inout JDBC调用 存储过程包含多个查询结果集 JDBC调用 MySQL触发器 触发器是一种数据库对象,

  • java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程

    我编写了一个我想用Java调用的存储过程。但我不认为它能够对我通过的查询做任何事情。以下是我的java代码:String QUERY_LOCATION = "select (license_plate) as test from carInst( (select category_name from reservation where rid = ?) , (select lname fr...

  • Java代码调用存储过程:简单实现与示例

    存储过程是数据库中预先编译好的一组SQL语句集合,可以通过一个单独的调用来执行多个操作。在Java中,我们可以使用JDBC(Java Database Connectivity)来调用和执行存储过程。本文将演示如何使用Java代码调用存储过程,并提供一个简单的示例。通过设置输入参数和输出参数,并执行存储过程,我们可以获取存储过程的返回结果。通过以上代码,我们成功地使用Java调用了一个简单的存储过程,并获取了其返回结果。在上述代码中,我们首先获取数据库连接,然后设置存储过程的输入参数和输出参数。

  • 数据库连接池

    目录 DAO及相关实现类 数据库连接池 Apache-DBUtils实现CRUD DAO及相关实现类 概述:Data Access Object访问数据信息的类和接口,包括了对数据的CRUD(Create、Retrival、Update、Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO。 作用:为了实现功能的模块化,更有利于代码的维护和升级。 DAO使用的体现: 层次结构 代码实现: 父类 接口 具体实现类

  • JDBC调用存储过程

    一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句。在创建时被编译成机器代码和存储在数据库中的client转让。 存储过程具有以下优势:  1.所生成的机器代码被永久存储在数据库中,client调用时不须要又一次编译,运行起来效率要高一些。  2.存储过程的网络使用效率比等效的SQL 语句要高。 (2)JDBC通过java.sql.Call...

  • 在Java中调用存储过程(详细)

    本文阐述了怎么使用DBMS存储过程。我阐述了使用存储过程的基本的和高级特性,比如返回ResultSet。本文假设你对DBMS和JDBC已经非常熟悉,也假设你能够毫无障碍地阅读其它语言写成的代码(即不是Java的语言),但是,并不要求你有任何存储过程的编程经历。  存储过程是指保存在数据库并在数据库端执行的程序。你可以使用特殊的语法在Java类中调用存储过程。在调用时,存储过程的名称及指定的参数通

  • java 如何调用存储过程_java调用存储过程

    这里是java调用存储过程。packagecom.lijianbo.procedure;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Types;/***@author*存储过程MySQL*/publicclassProc...

  • MYSQL存储过程保存数据

    存储过程保存数据 1.创建存储过程 -- 分隔标记 delimiter $$ -- 创建存储过程 create procedure testCur() BEGIN -- 声明变量 DECLARE uid varchar(40); DECLARE pid varchar(40); DECLARE pcode varchar(40); DECLARE done INT DEFAULT 0; -- 创建游标,并设置游标所指的数据(这里设置ID不为1是因为ID为1的是总的大类) DECLARE cur CUR

  • java的调用存储过程的方法_java调用存储过程方法

    简要记录存储过程语法与Java程序的调用方式一 存储过程首先,我们建立一个简单的表进行存储过程的测试createtablexuesheng(idinteger, xing_mingvarchar2(25), yu_wennumber, shu_xuenumber);insertinto xueshengvalues(1,'zhangsan',80,90)insertinto xueshengval...

  • java 调用存储过程无反应_Java调用存储过程长时间未执行完问题-解决方案

    上午在生产服务器发现一个不小的问题,就是一个程序在调用存储过程中抢到了锁,但抢到锁后调用存储过程执行出现卡死的情况,导致抢到的锁迟迟没有释放,这导致第二天程序执行时,因为无法获取到锁而无法正常执行。解决方案:引入Future类,并设定调用存储过程执行的超时时间,通过get(long timeout, TimeUnit unit),当抛出超时异常时,记录异常,往下进行其他处理逻辑,并正常释放锁。当创...

  • Java代码中执行存储过程和函数

    一:先看几个概念: 首先,自己参考了几篇文章,写的很不错,自己也借鉴一下,然后会在最后贴出自己在项目中使用到的存储过程,已经实现过程,大家可以做个对比,实现方法不同。http://www.cnblogs.com/liunanjava/p/4261242.html 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复

  • Java代码调用存储过程和存储方法

    准备一个oracle 的JDBC jar 包:ojdbc14_11g.jar 首先找到你的 oracle 安装位置,例如: 1.创建一个JDBC数据库连接工具类: package com.test.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet;

  • java多线程执行存储过程_java调用存储过程

    java作为一门很受欢迎的编程语言,已经普及到了几乎所有的程序员都在了解的程度,那么,既然是一门语言,那对数据库的操作必不可少,然而,我们接触最多的对数据库的操作通常是直接写sql,但是这样无疑在数据量很多的情况下造成速度效率问题,那么,结合plsql存储过程,java是如何调用的呢,今天就将具体案例总结在下面,供大家学习参考!原创作品,转载请注明出处:https://www.cnblogs.co...

Global site tag (gtag.js) - Google Analytics