从严谨的角度触发,应该基本按照同样的标准实现项目和产品。

很可惜,在实际工作中,这基本上是不太可能的,除非项目比较大,客户要求比较严格。

 

本文主要谈以下几点:

1、需求差异

2、实现差异

本文的读者主要面向程序员和项目经理。内容属于一家之言。

本文目的绝不是鼓励工程师糊弄设计,糊弄自己。

我们应该尽量认真地对待自己饭碗,认真对待技术,客户,自我。毕竟软件工程始终是一门严谨的工程,当你总想着糊弄别人,那么很可能也会糊弄自己。

一、概念

1.1项目

大体可以理解为遭遇战,是突发的事件。

这个时候项目在老板和项目经理眼里就意味着:一次性、较短的时间、较为一般的质量、少支出多赚钱。

必须强调:项目至少应该呈现的质量必须达到客户要求,无论功能、性能、ui,文档、维护

1.2产品

一个可以重复销售的系统代码,一个只需要经过较少定制化或者不定制化就可以使用的系统代码。

产品意味着:多次,持久,高质量

二、需求差异

注:下表的差异描述只是针对一般情况而言,不排除有部分项目是严格完成的。

 

 分类

个性化

生命周期

 扩展性

乙方可维护性

 项目

通常相当一部分个性化很强

不具有可复制性

这是大部分软件公司存在的基础

通常3~5年

 对扩展性要求不高

这种维护性对乙方

不是非常友好

 产品

一般不提供个性化。主要通过设计

来满足可扩展,但也只是有限地支持。

可能10几年,甚至

是几十年...

在一个中长期内要

支持较大的扩展

对乙方(软件工程师)

友好

 

 

 

 

 

 

 

 

三、实现差异

首先有个前提,通常项目经理管理工程师,或者说控制项目工期和交付质量等。

3.1工程师

项目:设计不会花费那么多时间,因为不太需要考虑扩展,可维护性;规范执行可能不会那么严格

特殊情况下,工程师自己也是糊弄(不过基本属于菜鸟和没有职业道德的那一伙),逼不得已也有的。

 

产品:花费很多的时间设计产品,必须仔细考虑扩展,性能,可维护性等问题;编码的时候严格遵守规范

 

3.2项目经理

产品:基本同工程师

项目:抓需求,比较不关心设计,如果能抓,也主要是ui等直接可视部分;抓工期,比较不关心质量

 

项目经理需要懂得技术,最好是技术出生的项目经理,在保证设计和质量的前提下控制进度和成本等等。

有一小部分项目属于糊弄的,项目经理根本就不过问技术。至于为什么糊弄,大家都懂的。

如果项目经理不会技术,那么基本上怎么糊弄也为不过,首先就会被手下工程师糊弄。

所以公司招聘项目经理的时候,最好是技术出身,或者是给项目经理配备可信的技术负责人。

 

3.3 好产品的例子

糟糕的项目大部分人都有体会,本人觉得没有什么必要写出来,毕竟做得很好的项目反而是少数。

但优秀的产品倒是很常见,因为不优秀,那么就不会和我们大部分人见面。

以下几个产品都是个人认为比较优秀的:

  • oracle --功能强大,且延续性强(设计+产品)
  • eclipse/idea -- 插件(设计)
  • windows -- 向下兼容,用户友好,即插即用(设计+产品)
  • QQ -- 对办公的支持,大并发(产品+部分技术)

优秀的太多,就列这么几个。

 

四、项目之间的差异

虽然项目的设计相对较差,但是不同的项目之间差异相当大。

按照工程师对待项目的态度和项目的结果,可以分为6级别:

 

1级-非常糟糕:通常属于政绩项目,大家都懂的,除了有样子,其他都是糊弄的。钱一般也能收到一些,甚至是全部。生命周期通常是1~2年,或者是验收就结束。

这种项目没有人关心设计-它存在的主要目的是为了花钱。但也有好处,某些时候让某些苦命的乙方得以喘息。

老板喜欢这种,但工程师内心一般不太喜欢。

2级-设计和需求不对等:很容易烂尾,一般属于政府项目或者是一些财力有限的甲方。

这些项目设计它的设计和需求就不是对等的。可能要求很好的设计,但需求实现上确不允许,典型地想占乙方的便宜。

老板和工程师最烦这种项目。这个主要是乙方市场部的问题。

3级-打折的设计:设计上各种打折,但也能将就这用。一旦甲方要求变更,那么就要钱,这基本属于糊弄不懂行情的有钱甲方。

4级-维护性不友好的设计:设计上大体算是尽心尽力,项目也基本完成了,不过对于扩展性和可维护性没有什么考虑,规范性执行一般

5级-大体上没有什么问题,算是良心项目,对甲乙双方都好

6级-优秀的设计,甲乙双方都可以通过项目获得较大的利益,和同类相比也比较出众。

本人做了不少项目,达到6的寥寥无几,倒是相当一部分属于1,2。

 

大部分工程师内心都希望设计完美的产品。

但很多时候,都不得不妥协,混口饭吃,胳膊拧不过大腿,主意太多反而让项目经理不喜欢-耽误了进度,浪费了成本。

 

工程师眼中理想的项目通常应该具备以下条件:

1.理性的甲方

2.合适的预算和时间

3.负责任的老板和项目经理

这种项目能够产生良性循环,构建一个良好的业态。

 

五、程序员和项目经理应该怎么做

提升自己,找个更好的公司,或者更好的环境。

如果无法更换环境/公司,那么应该:

1.尽力做好设计和编码,遵循规范-尽自己的一片职业良心

2.根据老板/项目经理的要求,该舍弃的还是要舍弃。不要浪费太多的精力和情感,不值得,也没有必要对着干

 

六、小结

1.项目设计总不如产品来得那么认真,完美

2.工程师要尽自己的一片职业良心

3.该舍弃还是要舍弃,胳膊拧不过大腿

4.不要和没有什么职业道德的人混,不要自甘下流,久了就变成下九流