当用户说要有增删改功能(前提是表结构已经设计好了)。
几乎所有的程序员都明白了这个需求的全部含义。然后埋头干活去了。往往开发的代码数量远远大于3行。可能做了30天。
为什么需求描述和实现的工作量如此不对称呢?
仔细分析之后,发现问题在于:需求里的词汇非常抽象,属于专业词汇。而开发平台是非常通用的,2者不在一个抽象层次。
假设存在一个相应的开发平台,那么,开发也就非常简单,简单到在增删改3个复选框上打勾而已。
用户的需求可能是任意的。这里的任意指抽象层次。比如在那个3字需求之上,又要求字体用宋体。或者又要求在内存256的机器上运行。……
显然,上述要求,或者说约束是属于不同抽象级别的。我们假想的开发平台是不可能无限满足用户的。即不可能在每一个抽象级别上都允许定制。打个比方,我们不生产任意直径的螺丝,我们只生产直径位为1,3,5厘米的螺丝。
所以,若要把成本控制住,用户就只能选择现有可选项,而不能任意提需求。
比如,选os就选Windows,Linux而不是Symbian
选语言就选Java,C#而不是erlang,
用户选常见标准实现的代价小很多。
开发平台提供了常见抽象层次上的定制。
再举一个生活一点的例子:
你说吃饭去。
这吃饭2字,看似简单,其实实现起来要做很多事情,比如订位子,打车,喝茶,点菜,更加细节一点,运动你的牙床肌肉进行咀嚼,以及如何运动舌头,分泌唾液,。。。无穷无尽。
对应的举一个软件的例子:
做一个界面输入一个数字。
具体实现起来,如果是web界面,要有html页面,里头包含各种tag,css,javascript,还有浏览器,web服务器,http协议取得参数,甚至更细节一点jsp,servlet,把字符串转换到整数,没提到structs的mvc框架呢。
为什么一个简单的词汇,具体实现起来那么麻烦呢?在vb里,我们创建一个form,拖拽一个文本框和一个按钮,然后双击按钮写事件处理的代码。似乎比jsp,css,html,javascript这种开发要简单多了。
这里问题的本质是,你在哪个抽象层次上思考问题。越细节的层次上,越复杂。
理想的软件开发,就应该在合理的抽象层次上开发。尽量让开发的抽象层次和需求的层次在一个级别上。
比如吃饭,那么就应该存在一个默认的吃饭实现类,包含了默认的订位子,打车,喝茶等流程。
比如一个文本框,就应该存在一个默认的样式的文本框,无需我每次去采用html,css,javascript去设计一个文本框。开发的时候,也只要说“new 文本框()”几个字就可以了。
回到开头,当用户简单的说“增删改”的时候,有一个默认的操作类实现了默认的增删改功能,开发人员也一样写下简单几句代码就完成了整个后台维护程序的开发。
//set tables
app.setTables("table1","table2","table2");
//set operations
app.enableOperations(OperationType.Create,OperationType.Delete,OperationType.Update);
//run program
app.run();
分享到:
相关推荐
同样用大O记法表示,例如O(1)表示固定空间,O(n)表示与输入大小成正比的空间需求。 2. **加密算法分类**: - **对称加密**:使用相同的密钥进行加密和解密,如DES(数据加密标准)、AES(高级加密标准)。 - **非...
这种算法通常基于用户信道质量的倒数进行资源分配,使得每个用户获得的比特率与其信道条件成正比。 低复杂度是资源分配算法设计的重要考虑因素,特别是在大规模网络中。为了降低计算复杂性,可以采用各种近似方法和...
例如,线性时间复杂度(O(n))表示算法执行时间与输入大小成正比,而二次时间复杂度(O(n^2))则意味着随着输入增加,执行时间将以平方速度增长。 3. **空间复杂度**:空间复杂度关注的是算法运行过程中所需存储...
管控的成本与研发的复杂度是成正比的,越复杂的设计就需要付出越多的管控成本。同理,低复杂度的研发设计,可以适当降低管控成本。 二、编写设计开发文件的目的 * 明确产品设计需求信息,从根本上确保产品设计的...
2. **线性时间复杂度(O(n)**:算法执行时间与输入数据规模成正比。例如,遍历数组或链表。 3. **对数时间复杂度(O(log n)**:常见于二分查找或平衡树操作,每次操作将问题规模减半。 4. **线性对数时间复杂度(O...
常见的表示形式是大O符号,如T(n)=O(f(n)),表示算法的时间复杂度与f(n)成正比。 举例来说,有一个三层嵌套循环的例子,其时间复杂度为O(n^3),因为每个循环都从1到n,总共执行n*n*n次基本操作。相反,如果只有一层...
如果一个算法的时间复杂度是O(n),这意味着算法的执行时间与输入数据的数量n成正比。更具体地说,O(n)代表线性时间复杂度,意味着当输入数据翻倍时,执行时间也会大致翻倍。 以下是一些常见的Big-O复杂度及其含义:...
O(logn)代表算法执行时间与输入大小的对数成正比,如二分查找;而O(n)则表示算法执行时间与输入大小成正比,例如遍历数组求和。 本教材对于理解数据结构和算法的重要性、如何分析和评估算法效率具有极大的帮助。...
例如,如果一个算法的运行时间与输入数据规模n成正比,我们说它的时间复杂度是O(n)。这表示随着输入规模的增长,算法的运行时间线性增加。更高效的算法可能具有更低的时间复杂度,如O(log n)(对数时间)或O(1)...
时间复杂度表示算法执行所需的工作量,与问题规模成正比,而空间复杂度则衡量了执行算法所需的内存空间。 数据结构则是组织和管理数据的方式,是数据元素相互关联的集合。它包括逻辑结构、存储结构和运算三个方面。...
产品规模风险与项目规模成正比,大项目往往面临更多问题。需求风险源于需求的不确定性,若不妥善处理,可能导致产品偏离预期。相关性风险涉及项目与外部环境的关联,如供应商、合作方和人员流动性。技术风险则与团队...
- **居住区密度**:居住区的人口密度与停车需求成正比。特别是夜间和周末,居民区的停车位更容易出现紧张状况。 **2.3 区域经济发展** - **经济发展水平**:经济发达地区的居民拥有更多私家车,从而产生更大的停车...
- **O(n²)**:表示算法的时间复杂度与输入参数n的平方成正比,常见于双重循环的排序算法,如冒泡排序、插入排序。 - **O(log₂n)**:表示算法的时间复杂度与输入参数n的对数成正比,常见于分治策略的算法,如二分...
- 时间复杂度:表示算法运行所需基本操作的次数,通常用大O记法表示,例如O(n),表示算法的运行时间与输入数据的大小成正比。 - 空间复杂度:指算法执行过程中临时占用存储空间大小,反映的是算法在内存中的占用...
同样,空间复杂度也可以用大O符号来表示,如O(1)表示固定空间,O(n)表示与数据规模成正比的空间需求。 **二、线性结构与非线性结构** 1. **线性结构**:是最基础的数据结构类型,包括数组、链表、栈和队列等。线性...
- **正比关系:** 处理数组的时间复杂度通常与数组长度成正比,即O(n),n为数组长度。 - **优化算法:** 通过引入更高效的算法(如二分查找、分治法等)可以在一定程度上降低时间复杂度,从而提高程序效率。 - **...
例如,在文件中提到的T(n)=cnlgn+n,这是一种常见的大O表示,cnlgn表示算法的增长率是与输入规模n的对数成正比,加上n则意味着还有一部分时间复杂度与n成线性关系。 第2章和第3章通常讨论的是分治算法及其应用,...
由于软件项目的复杂性,通常会产生大量的文档,其数量、规模和结构往往与软件的复杂度成正比。文档的编制和准备占据了相当一部分的开发成本。 项目文档的作用不可忽视。它们作为开发团队成员间沟通的桥梁,为维护...