当前位置: 首页 > news >正文

一些鲜为人知的编程事实之感想

投递人 itwriter 发布于 2010-09-03 11:28 评论(2) 有481人阅读  原文链接  [收藏]

英文原文:Some lesser-known truths about programming

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

  • 一个程序员用了大约只用了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地在思考他们的工作,他们一般都在在洗澡和梦中编写软件中最重要的代码。因为最重要的工作只能在键盘之外完成,软件项目不可能因为加班或是加人来加快进度。

评论:

这是Heero发给我看的,我不知道什么时候爱上编程,然后喜欢上思考,唐师傅曾经说过,如果你的思路模糊了,不要写代码先,好好思考一下,把思路、流程写在纸上,搞清楚了,再动手也不迟,这样,不至于在迷茫的代码中挣扎,徘徊地在十字路口做出选择。

 

“编程是一个辛苦的工作,是一个剧烈的脑力劳动。好的程序员24×7地在思考他们的工作,他们一般都在在洗澡和梦中编写软件中最重要的代码。”

我认同,08年做一个项目的时候,一个关键性的代码怎么都想不出来,那天,洗澡的时候,突然想到,我赶紧喊老婆拿纸和笔,帮我记住,想必大家想问,这个时候她是不是应该问我:“是不是有毛病呀”,呵呵。

这种事情不知道发生过多少次,有时候是在公司的WC里面,洗手的时候也会灵机一动,而至于梦中写代码,那是09年,睡醒之后,感觉有点累。

代码,不是简单的敲打,它是有思想的流程体现,好的代码,如同文笔好的文章,有意境在;

但,要做到这种境界,可不是简单的思考和敲打,还需要一种环境、氛围!

 

古人写文章讲究“起,承,转,合”,意境***在其间。

李白喜欢喝酒写诗,而酒对人的神经有兴奋作用,喝酒后,人就处于一个非常兴奋地状态,思维就比较活跃,灵感就容易光顾,因此李白就能写出好的诗歌。

这也是李白的个性,不喝酒,或许写不出好诗,每个人需要根据自身特点,配合环境来发挥自己,也不能完全是人云亦云!

相关文章:

  • GreenDao3.0新特性解析(配置、注解、加密)
  • oracle与mysql的between and
  • 自定义圆角头像图片
  • nbu6.5 for Solaris安装及备份手册
  • 正式英语和非正式英语
  • spring 使用注解注入 list 或 map
  • 使用ADO.NET2.0提升数据交互性能 DataSet 数据表
  • 99%运维人都需要的Linux命令大全
  • 群发邮件功能的完善
  • VHDL——4层电梯系统设计
  • sql注入——避开过滤
  • oracle 截取字符串
  • C# 延时函数
  • MongoDB 学习笔记之 $or与索引关系
  • AS3 角度算法与实现
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【React系列】如何构建React应用程序
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【刷算法】求1+2+3+...+n
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CODING 缺陷管理功能正式开始公测
  • Flex布局到底解决了什么问题
  • Go 语言编译器的 //go: 详解
  • iOS 系统授权开发
  • JavaScript对象详解
  • SpringCloud集成分布式事务LCN (一)
  • 百度小程序遇到的问题
  • 彻底搞懂浏览器Event-loop
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 使用docker-compose进行多节点部署
  • 使用Swoole加速Laravel(正式环境中)
  • 手写一个CommonJS打包工具(一)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 无服务器化是企业 IT 架构的未来吗?
  • 找一份好的前端工作,起点很重要
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $GOPATH/go.mod exists but should not goland
  • (1)(1.13) SiK无线电高级配置(六)
  • (5)STL算法之复制
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (图)IntelliTrace Tools 跟踪云端程序
  • (学习日记)2024.01.19
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 物件導向與老子思想 (OO)
  • (转载)Linux 多线程条件变量同步
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载