让你提前认识软件开发(41):编程时首先达到正确性,其次考虑效率

第3部分 软件研发工作总结

编程时首先达到正确性,其次考虑效率

 

        在实际的软件开发项目中,经常会遇到产品开发周期很短的问题。也就是说,开发人员需要在“质量”和“速度”之间做出权衡。具体到程序代码,就存在到底是先考虑实现功能(即保证程序的正确性),还是要一步到位把事情做好(即保证程序的正确性的同时,兼顾其效率)?

        在网上,有关这方面的讨论也非常的多。微软亚洲研究院研究员刘未鹏老师写过一篇文章《编程的首要原则》(http://mindhacks.cn/2009/03/09/first-principles-of-programming/),在这篇文章中,作者就“你们认为编程的首要原则是什么?”与网友展开了讨论,共给出了5种答案,包括:获得最多认同的答案,获得第二认同的答案,一些众所不一定周知的答案,一些众所很可能周知的答案和最幽默的答案。其中,“KISS”挺有意思的,它要求程序要尽量简单,越简单越好

        在有关程序设计语言(像《C程序设计》)和算法(像《算法设计与分析》)这类书上,前辈们总结了好的算法或程序需要具备的几个特性,包括:正确性简明性效率最优性,而正确性是排在最前面的。因此,不管怎样,“编程的首要原则”是要确保程序的正确性,非简单性。

        对于大部分软件开发工程师来说,编程时首先达到正确性,其次考虑效率。这也是软件开发的基本原则

        在实际的软件开发项目中,有如下因素要求开发人员首先保证程序的正确性,其次考虑效率。

        第一,市场形势千变万化,产品开发周期很短。正所谓“天下武功,唯快不破”,对于飞速发展的IT行业来说,要想不被淘汰,就必须要先于别人推出产品。公司有生存的压力,就会逐级传递到员工的身上。在产品立项的时候,产品经理会确定一个产品的交付日期。到了研发经理这一级,为了防止产品出现返工的情况,就会在之前确定的日期上面压缩掉一些。最后分到每个开发人员身上的时候,开发时间已经很短了。要想在这么短的时间里将程序写完,已经是相当的不容易了,就不可能进一步考虑程序的效率、简单性等。因此,很多时候,公司的大环境不允许开发人员写出很完美的代码。

        第二,对于开发人员本人来说,除了编写代码实现产品需求,还要做很多其它的事情,包括:解决现场程序问题,参加项目会议,写开发文档,对程序进行单元测试和集成测试等。除开这些时间,仅仅用于编写代码的时间就更少了。要想在极短的时间里编写出很完美的代码,几乎是不可能的,所以才会出现一个产品有好几个版本(如1.0版本、2.0版本等),这其实就是在逐个版本地修正之前版本程序中的错误或考虑不完全的地方。因此,编程时要以正确性为首要目的。

        第三,公司做任何产品,都是要考虑成本的。如果产品的基本功能已经实现了,并且客户已经验收了,那么几乎没有必要再让开发人员对程序反复修改,以达到高效率和尽可能的简单。如果要这么做,需要投入相当的物力、财力和人力,而其效果也不是那么的明显。因此,大部分产品的程序都仅仅是正确而已,离最优还有很大的差距。对于那些追求完美的毕业生来说,如果刚看到程序代码,可能会觉得很失望。但一旦在公司待久了,就会明白其中的道理。

       “质量”和“速度”之间如何权衡?想必你已经知道答案了。

 

 

 

 

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

时间: 2024-09-11 12:25:51

让你提前认识软件开发(41):编程时首先达到正确性,其次考虑效率的相关文章

提前认识软件开发(1) 序言

序言 正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程. 1.为什么要写作本系列? 在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要. 在学校里面,我们欠缺的教育主要包括以下方面: 第一,对编码规范的要求.计算机编程课上,老师只要求学生能够编写程序实现既定的功能即可,几乎不会对编码规范提出要求,

让你提前认识软件开发(1):序言

序言           正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程.          1.为什么要写作本系列?        在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要.        在学校里面,我们欠缺的教育主要包括以下方面:        第一,对编码规范的要求.计算机编程

提前认识软件开发(33) 数据操纵语言(DML)

数据操纵语言(Data Manipulation Language,DML)包括insert.delete和update语句,用于增.删.改数据. 本文用以下的表tb_employeeinfo作为例子加以说明: create table tb_employeeinfo ( employeeno varchar(20) not null, -- 员工工号 employeename varchar(20) not null, -- 员工姓名 employeeage int null -- 员工年龄

提前认识软件开发(29) 数据库脚本文件的布局

"没有规矩,不成方圆",规范数据库脚本文件的代码布局具有以下重要意义: (1) 可表现出代码良好的逻辑结构,提高代码的准确性.连续性.可读性及可维护性. (2) 有利于提高产品的开发质量和效率,并降低开发成本. (3) 对于开发人员来说,养成良好的脚本编写习惯有助于提高个人的数据库脚本编程水平,进而提高脚本编程效率. 可见,统一的.良好的脚本代码布局和风格不仅仅是个人主观美学或形式上的问题,而且影响到产品的质量,并涉及到自身脚本编程能力的提高. 1. 脚本布局顺序概述 在实际的软件开发

提前认识软件开发(25) 数据库简介

数据库是个通用化的综合性的数据集合,它可以供各种用户共享且具有最小的冗余度和较高的数据与程序的独立性.目前,国际上主导的大型数据库管理系统有ORACLE.SQL SERVER.SYBASE.INFORMIX和INGRES等. 数据库中常用的编程语言是SQL语言,按其功能可分为四大部分: 开发(25) 数据库简介-tcga数据库简介"> (1) 数据定义语言(Data Definition Language,DDL),用于定义.撤销和修改数据模式. (2) 数据查询语言(Data Query

提前认识软件开发(16) 如何对程序进行优化

对程序进行优化,是软件开发工程师必然会涉及到的问题.那么为什么要对程序进行优化呢?原因有以下几个: 第一,在原程序基础之上新增.删除或修改了功能,需要改变原程序流程.客户需求随时可能会变化,今天已经实现的功能,说不定明天就要修改或去掉.落实到程序上面,就需要我们随时准备对写好的代码进行修改,而不要奢望写好之后就永远不要动了. 第二,原程序有bug.这类情况出现得非常的频繁,很多软件有1.0.2.0.3.0等版本,部分原因就是前面版本中程序有问题,在修改程序的过程中使得软件版本不断升级. 第三,原

提前认识软件开发(14):程序中的算法

算法(Algorithm),是程序的灵魂.著名计算机科学家.图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序.可见,算法在程序中占有非常重要的地位. 在实际的软件开发项目中,不管是有意设计或是无意为之,我们几乎随时在和算法打交道.小到定义一个变量,大到编写一个函数,这些都是算法的实现过程. 本文以作者实际项目工作为背景,介绍算法在C程序中的应用. 1.算法概述 什么是算法呢?先来看一看一些计算机书籍中的定义. 经典书籍<算法导论>(Cormen等著,机械工业出版社)中,作者认为算法是一系

提前认识软件开发(12) 配置文件读取及文件操作

在通信领域的软件开发项目中,C语言是主流的编程语言,而文件操作在其中又占有很重要的地位.此外,为了体现产品的灵活性,可添加配置文件对某些重要的参数进行按需配置.这就要求程序能够准确读取到各个配置项的值. 本文以一个实际的小软件为例,介绍了C语言中配置文件的读取方法和重要的文件操作函数的使用方法,为相关软件开发项目提供了有益的参考. 1.前言 在一般的软件项目中,常常需要用C语言对文件进行操作.在诸如对账之类的程序中,尤其如此.而C语言中有关文件操作的函数多达数十种,熟悉常用函数(如fopen.f

提前认识软件开发(4) 破除几个有关软件开发的错误观念

我们做事情的能力能够有所提升,观念的转变是关键. 从学生转变为职业人的过程是很艰难的,因为我们要与自己积累了多年的"老毛病"作斗争,这些"老毛病"包括:做事拖拉.不守时.不遵守规则.怕吃苦等.就像发射火箭卫星一样,摆脱重力的束缚所花费的燃料是最多的,一旦成功,那么以后的流程就会比较轻松了.所谓"万事开头难",也就是这个道理. 那么,要想掌握工作中C语言的基本技能,我们需要破除哪些错误观念呢? 开发(4) 破除几个有关软件开发的错误观念-在破除旧观