谈软件协作:君子和而不同,小人同而不和


image我们知道现在的软件开发最大的问题就是变化,其实这也不是软件本身的问题,我更觉得是软件的特点。因为他不像建筑,画个建筑图,一般不会偏到哪里去。然而很多需要软件的人,他可能希望软件能达到什么目的,至于具体是什么样子,他自己也不知道。大部分都是看到一部分想起一部分,自己也不断的修正。这也是为什么最近敏捷大行其道。

我甚至服务过一个客户,做一个公园系统,为的是送一张免费的VIP卡给业主,最终目的是卖房子。

既然软件的需求是不固定,也就是不断变化,所以我们签合同的时候往往有两种方式:

1.固定价格

这种就是一开始让客户必须把需求定下来,然后估计时间,然后就是报价,我一直不懂这个价格是如何报的,很多就是先去客户那里调研一下,其实就是看一下这个客户好不好蒙,能蒙多少。然后就近可能的往高的报。然后整一份需求说明书,让客户签字,如果客户改需求,加钱加时间。要不就目前的功能你做了也没用,鸡肋,大部分客户咬着牙,加吧,谁让我们给他们分期付款,还付了定金呢,最终不欢而散,两败俱伤。

2. 按时间付价格

这种大部分出现在外包的项目中,就是客户找自己需要的工程师,按月付费,一般采用迭代式开发,增量式开发,客户考察的主要是质量和效率,如果达不到客户的要求,客户立即停止。这样看起来很美,但是效率却是一个不好衡量的东西,尤其是时间短的项目,很难看到效率,举个例子,同样是盖楼,一个打10米的地基,迅速盖到了三楼,可是另一个打了30米的地基,为的是盖30层的高楼,很显然,10米地基的楼房很快就出现人的眼前。这说明效率有时候有点“乱花渐欲迷人眼”。但这种方式,我们很多人5小时能干完的,非要8小时干完,为什么呢,因为5小时干完,客户也不一定提高报价。客户很难知道什么是真正的效率,从某种意义上说,抹杀了整个生产力。

两种方式,看似都有问题,但第二种比第一种对双方风险稍小。但第二种会抹杀整个行业的创新和积极性。

最近,看《论语》“君子和而不同,小人同而不和”就是说,君子内心所见略同,但其外在表现未必都一样,比如都为天下谋,有些人出仕做官,有些人则教书育人,这种“不同”可以致“和”;小人虽然嗜好相同,但因为各争私利,必然互起冲突,这种“同”反而导致了“不和”。

这突然让我想起软件项目的合作有何尝不是如此,很多时候,我们以为有了一份合同就可以,其实合同就是一份摆设。如果都按孔子的这个思想,软件合同其实就是要完成一件事情,具体要做成什么样,价格是否会变化,应该是在过程中不断协商,不断合作。如果一开始都说好不变,其实我们自己都知道,一定有一方会吃亏。就像有人说“中国人太多,炸死一半就好了”(此话出自在电梯偶遇某一个看似有文化的中年妇女),我就想难道那一半就一定不包括你?

所以,我们在软件写作过程,最好就是想尽一切办法,让自己和客户的合作更紧密一些,合同内容尽量少一些。

胡乱瞎写,愿各位斧正。

注:不希望看到评论只说别人文笔太差,而自己又不愿贡献文章的人。比如,很多项目经理老说别人不行,如果别人都行了,那你就是最不行的,你有别人没有的东西,这才是你存在的理由。

 本文转自博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2008/12/31/1366292.html如需转载请自行联系原作者


王德水

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值