工程思维:把每件事都当作一个项目来推进
软件工程是一门用工程化方法解决软件项目问题的学科,其本质也是一门工程学科,这门课的知识在学完后,不仅可以应用在软件项目中,还可以应用于日常生活中遇到的一些问题,Everything is a project
解决问题的方式,就是参考软件生命周期和瀑布模型,把一件事情分成几个阶段: 分析、设计、实施、测试、完成,然后制定相应的计划。这种方法不仅非常有效,让我的做事效率大幅提高,而且让我在看待事情上,能够更全面地、站在更高的角度去思考
工程方法
有目的、有计划、有步骤地解决问题的方法就是工程方法。 工程方法不是软件工程独有的,几乎所有工程类别都可能会应用,例如建筑工程、电子工程等,只不过步骤可能略有不同

工程方法通常会分成六个阶段:想法、概念、计划、设计、开发和发布。
- 想法: 想法阶段通常是想要解决问题。最开始问题通常是模糊的,需要清晰地定义好问题,研究其可行性,检查是否有可行的解决方案
- 概念: 概念阶段就是用图纸、草图、模型等方式,提出一些概念性的解决方案。这些方案可能有多个,最终会确定一个解决方案
- 计划: 计划阶段是关于如何实施的计划,通常会包含人员、任务、任务持续时间、任务的依赖关系,以及完成项目所需要的预算
- 设计: 设计阶段就是要针对产品需求,将解决方案进一步细化,设计整体架构和划分功能模块,作为分工合作和开发实施的一个依据和参考
- 开发: 开发阶段就是根据设计方案,将解决方案构建实施。开发阶段通常是一个迭代的过程,这个阶段通常会有构建、测试、调试和重新设计的迭代
- 发布: 将最终结果包括文档发布
立足整体
在日常处理事务时,天然地会选择自己感兴趣的、擅长的那部分,而容易无视整体和其他部分。
问题的核心并不在于是不是用工程方法,而是有没有把这件事当作一个项目,是不是能看到这件事的全貌,而不是只看到局部。
在工作分工越来越细致的今天,项目里面有产品设计、开发、测试、运维等诸多岗位,每个岗位都有自己的价值追求,。分工带来的好处,就是复杂的任务可以分给不同的人来做,这也有助于技能的专业化,提高工作效率。但如果只站在自己的立场去考虑问题,没有人关注整体价值,就容易相互误解,产生矛盾、增加成本
以下这些工作场景,估计你不会陌生。
- 产品经理提出一些天马行空、不切实际的需求,而技术上不可行或者实现成本很高,导致最后返工,造成资源浪费和进度延迟
- 架构师为了满足开发上的成就感,更愿意自己“造轮子”,而不愿意采用现有开源程序或者购买合适的组件
- 开发工程师喜欢在代码中使用各种设计模式或者最新技术,导致项目进度延迟,代码难以维护
- 测试工程师不愿意学习自动化测试技术,导致测试周期较长,且容易出现疏漏
- 除非产品经理特别注明,开发工程师和测试工程师不会注意用户体验上的细节
在很大程度上都归因于大家只是站在自己岗位的角度来看问题,没有站在项目的整体角度来看。
如果能站在项目整体来看问题,就会去关注 项目的质量、项目的进度、项目的成本、项目的最终用户,那么上面这些场景将变成:
- 为了项目整体的效率和避免返工浪费,产品经理会及早和开发人员确认技术可行性,并对产品设计先行验证
- 为了节约项目开发成本,提高开发效率,架构师选择成熟的架构,合理购买商业组件和使用开源程序
- 为了提升开发效率,不影响项目开发进度,开发工程师尽可能采用成熟的技术,高效简洁地落实项目
- 为了项目质量和效率,测试工程师学习自动化测试技术,将大部分测试变成自动化运行,极大地提高了测试效率和质量
- 为了让用户有好的体验,不仅产品经理,每个人都会仔细体验用户界面,对于不合理的地方提出改进意见
每个项目成员,如果能多站在项目的角度去考虑,那么这样不仅对项目有利,更对自己有好处
很多人都有技术升管理的理想,能多站在项目整体角度去考虑的人,在日常工作中,也一定会有更多的锻炼机会,自然会多一些提升的空间。
把这种思维方式称为“工程思维”。 工程思维,本质上是一种思考问题的方式,在解决日常遇到的问题时,尝试从一个项目的角度去看待问题、尝试用工程方法去解决问题、站在一个整体而不是局部的角度去看问题