第二节 项目的可行性

   在同事中流行“编程”这个词。一般是其他部门的同事对工程师工作的称为。我不太中意这个词汇来描述工程师的工作。相当于不能使用“缝衣服”这个词描述服装设计师的工作。“编程”可以认为是“编写程序”的简称。既然是编写好像只限于根据逻辑进行代码的实现。没有体现工程师的思想的成果,不足于表达出工程师对整个行业的贡献。

    我一直认为“程序设计”可以描述我们的初级表面的工作。我们深层次的工作应该是项目分析与实现。这个更加需要策略和思想。程序设计应该是项目分析的结束后接下来的工作。在现实工作环境中,对于小的项目有时候项目分析与程序设计是由一个、几个完成的。所以程序设计者往往参与了项目分析。

    一个项目首先要进行可行性评估。包括:经济可行性、技术可行性、时间可行性。经济可行性是首先需要评估的,如果这个项目没有利润,那么这个项目就可以停止了。如果一个项目经过了经济可行性的评估,技术可行性和时间可行性就是主任工程师需要认真考虑的问题。凭借可以调动的人力物力能不能在客户要求的时间范围内完成该项目是对主任工程师的业务水平、专业水平、项目经验的考量。一个项目只有在经济可行性、技术可行性、时间可行性都通过了评估,该项目才是可行的。确定项目可行后接下来对项目进行分析。

   项目分析一般由主任工程师召集工程师完成。这就要求主任工程师必须要有丰富的行业经验和专业知识。对项目的功能进行进一步的明确,功能明确后就可以对项目进行拆分,将项目拆解为一个个模块。并且确定每个模块的功能。在一般小型项目中项目拆分为模块比较简单。在我工作中项目拆分一般是以电路板为单位。基本上一块电路板可以做为一个模块交给一名工程师来完成。

    主任工程师进行完项目拆解后,必须对每个模块提出明确的功能要求,根据工程师的专业水平,对功能是否能实现、实现难度、需要的时间做出客观准确的评估。对有些实现有难度的功能给出具体的方法。所以一个项目进展是否顺利,主任工程师对项目认识是否透彻,非常重要。

    主任工程师完成对项目的拆解,将拆解的任务提交给工程师,对任务做出详细的说明,提出明确技术要求。工程师基于对接受任务的理解,列出计划。确定需要的时间以及实验设备。并且对自己的任务进行进一步分析。将任务分解为n个子任务。子任务可以进一步分解为二级子任务,二级子任务可以继续分解为三级子任务,如此无穷尽。一般情况下将任务分解到可以使用一至两个虚函数来描述就可以了。到这个节点,工程师基本上对自己的接受的任务就可以做出一个客观的评估。并且对以下几点有了清晰的认识。

          第一,   任务是否可以完成?

          第二,   完成该任务大体需要多长时间?

第三,   任务难点、关键点?

第四,   需要的实验设备是否齐全?

第五,   需要哪些部门的同事配合?

第六,   项目完成执行的步骤?

如果认为自己的任务有自己不可能完成部分,第一时间与主任工程师沟通。这个时间段一定不要太长。主任工程师处理方法有以下几种:

第一,   给出解决方法。

第二,   分配其他同事帮助你。

第三,   对项目进行重新拆解。

第四,   重新评估项目的可行性。

   如果认为该项目不可行,最低在这个时间点终止项目相对来说造成的人力物力浪费稍微少点。有时候放弃一个项目也是为下一个项目赢得了时间。