人月神话1

       在众多软件项目中,缺乏合理的时间进度是造成项目滞后的最主要原因,它比其他所有因素加起来的影响还大。首先,对于估算技术缺乏有效的研究,这种对于未知或不清楚的技术的估算有很大的差别。第二,将进度与工作量混淆。第三,没有信心,估算有很多风险。第四,缺少跟踪和监督。第五,当意识到进度的偏移时,下意识(以及传统)的反应是增加人力。这就像使用汽油灭火一样,只会使事情更糟。越来越大的火势需要更多的汽油,从而进入了一场注定会导致灾难的循环。
Mills 建议大型项目的每一个部分由一个团队解决,但是该队伍以类似外科手术的方式组建,而并非一拥而上。
外科医生:首席程序员。他亲自定义功能和性能技术说明书,设计程序,编制源代码,测试以及书写技术文档。首席程序员需要极高的天分、十年的经验和应用数学、业务数据处理或其他方面的大量系统和应用知识。
副手:他是外科医生的后备,能完成任何一部分工作,但是相对具有较少的经验。他的主要作用是作为设计的思考者、讨论者和评估人员。他需要详细了解所有的代码,研究设计策略的备选方案。
管理员:外科医生是老板,他必须在人员、加薪等方面具有决定权,但他决不能在这些事务上浪费任何时间。
编辑:外科医生负责产生文档——出于最大清晰度的考虑,他必须书写文档。对内部描述和外部描述都是如此。
两个秘书:管理员和编辑每个人需要一个秘书。管理员的秘书负责项目的协作一致和非产品文件。
程序职员:他负责维护编程产品库中所有团队的技术记录。该职员接受秘书性质的培训,承担机器码文件和可读文件的相关管理责任。
工具维护人员:他的工作是检查他的外科医生所需要的工具。工具维护人员常常要开发一些实用程序、编制具有目录的过程库以及宏库。
测试人员:外科医生需要大量合适的测试用例,用来对他所编写的工作片段,以及对整个工作进行测试。因此,测试人员既是为他的各个功能设计系统测试用例的对头,同时也是为他的日常调试设计测试数据的助手。他还负责计划测试的步骤和为测试搭建测试平台。
语言专家。随着 Algol 语言的出现,人们开始认识到大多数计算机项目中,总有一两个乐于掌握复杂编程语言的人。这些专家非常有帮助,很快大家会向他咨询。这些天才不同
于外科医生,外科医生主要是系统设计者以及考虑系统的整体表现。而语言专家则寻找一种简洁、有效的使用语言的方法来解决复杂、晦涩或者棘手的问题。他通常需要对技术进行一些研究(两到三天)。通常一个语言专家可以为两个到三个外科医生服务。

 

个人感受:如果我们想解决问题,就必须试图先去理解它。之前不论是C、C++还是java,都只是机械的学习,尤其java,老师完全独特的授课风格给人一种他啥都没教的错觉,但是又会发现自己在不知不觉中学会了一些,但是由于一直以来习惯的问题导致效率低下。现在我明白了,只是探索的道路从来都是以解决自己不理解不清楚的困难为目的,在面对新的问题时,首先要去尽可能的理解他,深入探索问题,主动去做,而不是等待。

posted @ 2024-01-25 19:41  不会JAVA的小袁  阅读(12)  评论(0编辑  收藏  举报