我的程序员经历让我明白了一些关于软件开发的事情。下面是一些在编程中可能会让人感到诧异的事情:
一个程序员用了大约只用了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地在思考他们的工作,他们一般都在在洗澡和梦中编写软件中最重要的代码。因为最重要的工作只能在键盘之外完成,软件项目不可能因为加班或是加人来加快进度。
分享到:
相关推荐
Prolog是逻辑编程的代表,它通过查询数据库式的事实和规则来求解问题。 这门课程可能还会涉及泛型编程、元编程、并发编程等进阶主题。泛型编程允许编写可重用的代码,不依赖特定的数据类型,如C++的模板和Java的...
掌握Prolog需要理解规则推理、逆向链式搜索以及事实和规则库的构建。它的核心在于通过查询和证明来解决问题。 4. **Ruby** - Ruby是一种面向对象的脚本语言,强调简洁和生产力。学习Ruby时,你需要了解其强大的面向...
RS-232的连结线中除去用来传入传出数据的电线,还有一些用来提供时序、状态和握手的电线。DB-25针脚定义中,包括了Earth Ground、TXD、RXD、RTS、CTS、DSR、DCD等针脚。DB-9针脚名称全名中,包括了TD、RD、RTS、CTS...
在北美州立大学计算机科学系的研究者Patrick Morrison和Emerson Murphy-Hill所进行的探索性研究中,他们通过对Stack Overflow数据的分析,试图给出一个基于数据和事实的客观答案。Stack Overflow是一个著名的程序员...
它是由 Microsoft 等公司共同制定的 Windows 下的网络编程接口,主要是增添了一些异步函数,并增添了符合 Windows 消息驱动特性的网络事件异步选择机制。 WinSock 模型提供了 TCP/IP 传输层的接口,包括传输层应用...
- 注释应简洁、准确,描述代码功能而非显而易见的事实。 - 避免过度注释,代码应自解释。 **错误处理** - 使用 try-catch-finally 语句来处理异常,确保资源的正确释放。 - 不应简单地忽略异常,除非有充分的理由...
以下是对CLIPS专家系统编程的一些关键知识点的详细说明: 1. **CLIPS基本结构**:CLIPS由两部分组成——事实数据库和规则引擎。事实数据库存储了系统中当前存在的数据,而规则引擎则负责根据预定义的规则对这些事实...
例如,如果我们要探讨“哲学家是否是人类”,我们可以首先定义一条规则:“所有哲学家都是人类”,接着提供一些事实:“苏格拉底是哲学家,亚里士多德是哲学家,柏拉图是哲学家”。通过这个逻辑表达,当询问“谁是...
TCP/IP协议是互联网事实上的工业标准,一共有四层:网络接口层、网际层、传输层、应用层。TCP/IP协议族是由几个不同的协议组成的,这些协议在不同层面上提供不同的应用和服务。 TCP/IP协议 TCP/IP协议是传输控制/...
Visual Prolog编程语言的特点在于其逻辑编程的基础,它使用谓词和事实来表达问题和解决方案。这种编程方式特别适合处理推理、搜索和规则引擎等领域的任务。由于其可视化特性,Visual Prolog使得学习和使用Prolog语言...
- **广泛的支持**:MPI已经成为并行编程的事实标准,几乎所有的高性能计算系统都支持MPI。 - **丰富的功能集**:除了基本的消息传递功能外,MPI还提供了高级功能如动态进程管理、并行I/O等,以满足更复杂的应用...
在解决圆形布局问题时,初学者需要掌握一些空间想象力。例如,题目中提到的数字9和4是圆上的对面位置,我们可以通过简单的数学运算得出对面数字。 逻辑判断问题考察了命题之间的关系。有时候两个命题可以同时为真,...
Prolog,全称为Programming in LOGic,是一种基于逻辑的编程语言。它的设计目的是为了处理复杂的逻辑问题,尤其适合于自然语言处理、人工智能和知识表示等领域。与其他编程语言不同,Prolog采用逻辑推理的方式来解决...
文档的最新版本于2018年9月发布,修订了之前版本中的错误,并且作者还增加了一系列练习题,包括一些较为复杂的题目,可以通过扩展它们来完成小型的编程项目。 在内容上,文档分为以下几个部分: 1. Prolog基础...
- **量化成果**:尽可能用数字和事实来展示项目成果,如提高代码效率的百分比、用户增长速度等。 - **关键词优化**:根据招聘广告中的关键词进行优化,以通过自动筛选系统。 在压缩包中的9个简历模板,可能会涵盖...
OSS 是一个事实标准,支持 OSS 的应用程序能够在绝大多数声卡上工作良好。ALSA 是另一个可供选择的声卡驱动程序,它提供了一组内核驱动程序模块和相应的函数库,简化了应用程序的编写。 Linux音频编程指南涵盖了...
结合以上内容,我们可以得出一些有关可微分编程的知识点: 1. 可微分编程是深度学习中的一个重要概念,它将传统编程逻辑通过可微分数学模型表达,通过梯度下降等方法进行学习和优化。 2. Yann LeCun是深度学习领域...
但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序,同时还给出了一些常用的音频编程框架。