《大道至简》

Posted on By Vivian Sun

前言

《大道至简》 : 软件工程实践者的思想

作者:周爱民

读书笔记

  • 程序 = 算法 + 结构 + 方法
    • 算法: 程序逻辑实现的描述
    • 结构: 逻辑实现所依附的数据实体
    • 方法: 事件驱动,模型驱动 (个人感觉跟架构相关)
  • 面向过程和面向对象
    • 面向过程是对“流程”、“结构”和“编程方法”的高度概括
    • 面向对象是解决“结构”和“编程方法”的问题,没有对“流程”改造
    • 对流程进一步的概括是“事件驱动”程序模型,比如Windows的消息系统

  • 组织结构和制度
    • 没有制度:管理者的过失
    • 有制度没有惩戒:执行者和监督者的过失
    • 多次犯错而不改:员工的品性和素质问题

  • 沟通:定下一件事的起因,目标,结论和原则
  • 历史记录非常重要:维护和移交的必要资料
    • 需求阶段:与谁联系、联系方式、过程、结果以及由此引发的需求或变更
    • 设计阶段:如何进行设计、最初的架构、各个阶段的框架变化、因需求变更导致项目结构上的变化(有助于了解结构的可扩充性)
    • 开发阶段:每一种技术选型的过程,每一种开发技巧的细节和相关文档,摘引的每一段代码、算法、开发包、组件库的出处和评测,程序单元的测试框架,每一个设计和架构变更所导致的影响
    • 测试阶段:测试用例和测试报告,这是最好的History之一

  • 软件工程的瀑布模型
    • 定义: 计划,可行性分析,需求分析
    • 实现: 系统设计,程序设计,编码与模块测试,组合与系统测试
    • 维护: 运行和维护
  • 实现才是目的,正如《经营这个笔记》里面说:要以结果为导向
  • 不能“做”工程,而是要“组织”工程。项目经理的工作,就是要去组织这个工程中的各个角色,使得分工明确,步调一致,共同完成这个项目。
  • 远景更多的侧重于方向的描述,而阶段性的目标的确是必要的。这至少有三个原因
    • 明确阶段性目标以便于团队实施和检测
    • 细化的设定目标更加灵活,便于修正
    • 阶段性成功能充分激励团队的士气
  • 方向与远景不妨让大家都知道,但“保障方向”这件事,应该只交给头羊

  • 项目经理工作
    • 跟踪团队进度,确定先后缓急 (协调)
    • 关注大局,发现并督导薄弱环节 (督促)
    • 让每个人都看到希望 (激励)
    • 及时修正错误避免扩散 (监督)
    • 强调团队协作,形成团队凝聚力 (凝聚)
  • 项目经理的责任:整个团队的目标
  • “先人后己”:在开始自己的工作之前就来招呼大家了:安排每个人的工作,或者解决某些人的问题,那么这会是美好的一天。
  • 让影响到别人的事先做与团队高于个人的观念一致
  • 问题其实就是你期望的东西,和你体验的东西之间的差别。

  • 工程组织是否合理,相互的协作是否紧密,是这个项目能否成功的保障。
  • “需求”,“配置”和“文档”等不仅仅是每日一成不变的、模式化的工作步骤,而且也是解结的工具和方法,或者是实施管理思想的道具。
  • 好的项目经理并不是不犯错误的人,而是以尽可能少的失败来获得成功的那个人。
  • 工具之用,到了融通的地步,也就无所谓“选择哪个工具”
  • 融通而后融同,化而用之是对工具本质价值的尊重而非轻视。

  • 敏捷开发和传统工程类似“人治”和“法治”的区别

Reference

Gerald M. Weinberg 杰拉尔德·温伯格: 美国杰出的专业作家和思想家,主题主要集中在两个方面:人与技术的结合;人的思维模式、思维习惯以及解决问题的方法。