一、编程工作的焦油坑The Tar Pit
程序:由作者在平台上运行,可以作为单个程序员生产率的评估标准。
变成产品:可以被任何人运行、测试、修复和扩展的程序,有测试用例库和详尽的文档,至少是已调试的程序的成本的3倍。
编程系统:在功能上能相互协作、具有规范的格式、可以尽享交互的程序集合,至少是独立程序的3倍。
编程系统产品:大多数开发目标,成本至少是简单程序的9倍。
编程的快乐:创造事物、开发对他人有用的东西、持续学习、在易于驾驭的介质(代码)上工作
编程的苦恼:追求完美、由他人设定目标和提供资源、寻找bug、开发完成后却不能使用
二、时间安排:人月神话The Mythical Man-Month
所有人过于乐观的第一个假设:每一项任务仅花费它“应该”花费的时间
所有人过于乐观的第二个假设:进度安排中用“人月”估计工作量,因为这种估计默认程序员在工作中不需要交流
建议进度安排:1/3计划,1/6编码。1/4软件测试和早期系统测试,1/4构件完成并系统测试
Brooks法则:向进度落后的项目中增加人手,只会使进度更加落后。(比如1个人做30天的事无法让20个人在一天内做完)
三、团队组建:外科手术队伍The Surgical Team
需要协作沟通的人员数量影响开发成本,成本的主要组成是相互的沟通和交流,以及更正沟通不当所引起的不良结果(系统调试)
大型项目以类似外科手术的方式组建,由一个人完成问题分解,剩余人给予支持(以下为10人编程团队的分工)
1、外科医生(首席程序员):定义功能说明书、设计程序、编制源代码、测试以及书写技术文档
2、副手:能完成部分外科医生的工作,代表本小组与其他团队讨论,设计的思考者和评估人,但不承担开发职责
3、管理员:外科医生的老板,在人员、薪酬等方面有决定权
4、编辑: 对文档进行维护,并监督文档的生成
5、两个文秘:管理员和编辑各一个
6、程序职员:维护编程产品库中所有团队的技术记录
7、工具维护人员:保证所有基本服务的可靠性
8、测试人员:编写测试用例
9、语言专家:对专业的技术进行研究,一个语言专家可以为2-3个外科医生服务
四、概念完整的重要性:贵族专制、民主政治和系统设计(Aristocracy,Democracy,and System Design)
系统设计中,概念晚自习是最重要的考虑因素,这需要每个人的自我约束,牺牲一些创意保证纯粹的设计
目标易用性,则功能与概念的复杂程度比值才是系统设计的最终测试标准;单是功能本身或者简介都无法成为标准
易用性需要设计的一致性和概念上的完整性
创造性活动的包括:体系结构阶段(相对清晰的构思和适当的目标)、设计实现阶段、物理实现阶段。这些阶段往往可以并行。
以上内容为《人月神话》(作者:[美]小弗雷德里克·布鲁克斯)的第1-4章读书笔记及部分摘要,本人加入一定量自己的理解;因水平有限,欢迎大家交流指正,谢谢~
网友评论