焦油坑
开发一个可运行的系统和开发一个良好运行的系统差距是巨大的。对于软件开发中的问题都应该先试图去了解问题,影响软件开发进度和质量的往往是各种看似容易处理的小问题的综合结果。
我理解的这章主要是引导一下开发经理关注编程的各种因素,重视这些因素对软件开发的影响同时应尽可能的用经验去避免这些问题。同时了解软件开发人员的困境,做为开发经理或这开发的管理决策人员应该学会洞悉成员的心思。
编程系统产品
编程系统产品的演进
软件开发要认识编程的产物,程序本身是完整的,程序可以作为单个程序员生产率的评估标准。
程序转变成编程产品,编程产品是可以被任何人运行、测试、修复和扩展的程序,要成为通用的编程产品,程序必须按照普遍认可的风格来编写,经验表明相同功能的编程产品的成本至少是已调试的程序的3倍.
程序转变成编程系统中的一个构建单元。是在功能上能互相协作具有规范的格式可以进行交互的程序集合,并可以用来组装和搭建整个系统,要程序编程系统构建程序必须按照一定的要求编制,使输入和输出在语法和语意上与精确定义的接口一致,同时程序还需要符合预先定义的资源限制-内存、输出输出、计算时间。程序必须同其它系统构建单元一道,以任何能想象到的组合进行测试。相同功能的编程系统构建的成本至少是独立程序的3倍,如果程序有大量的组成单元成本还会更高。
编程系统产品,成本高达9倍,只有他才是真正有用的产品,是大多数系统开发的目标。
职业的乐趣
创造事物的纯粹快乐;
开发对他人有用的东西;
整个过程中体现出的一股强大魅力-将互相依赖的组件组装在一起;
持续学习的快乐;
在易于驾驭的介质上工作;
职业的苦恼
苦恼来自追求完美,学习编程最困难的部分是将做事的方式向追求完美的方向调整。
苦恼来自由他人设定目标,供给资源和提供信息,编程人员很少能控制控制工作环境和工作目标。
对他人的依赖是一件非常痛苦的事情,设计的不合理、实现拙劣、发布不完整
概念性设计是有趣的,但寻找琐碎的BUG却是一项重复性的活动,伴随创造性活动的往往是枯燥沉闷的时间和艰苦的劳动。
调试和排错往往是限行收敛的
当投入了大量幸苦的劳动,产品在即将即完成或者终于开发完成的时候,却已显得陈旧。
最后现实情况可能要好一些.
关于技术实现落后与否的判断应该根据其他已有的 系统,而不是未实现的概念,我们所面临的困难是在实际的进度和有效的资源范围内寻找解决实际问题的切实可行方案。
总结
以前对开发的理解比较单一,尽可能快的写一段程序实现一个功能就已经洋洋得意的阶段。结合目前接触的项目上述的四个维度都有一定的理解,也在心底里构思过一些相似场景下的解决方案。总之缺乏在编码之外的执行力,后续的开发任务中需要对编编码规范、开发框架、API接口尽可能的明确输出为标准化文档。
目前软件开发研发计划制定和进度把控是弱项,经验也少。以目前自己了解的决定研发计划的因素实在是太多而事实上大部分都是不可把控的。或许这需要在长期的实践中去总结在实践如此反复,我觉得这应该是在未来几年应该重点突破的壁垒。