极客时间已完结课程限时免费阅读

02 | 工程思维:把每件事都当作一个项目来推进

02 | 工程思维:把每件事都当作一个项目来推进-极客时间

02 | 工程思维:把每件事都当作一个项目来推进

讲述:宝玉

时长12:50大小11.77M

你好,我是宝玉。我今天分享的主题是:掌握工程思维,把每件事都当作一个工程项目来推进。
我大学学的是软件工程专业,毕业十多年后再回顾当年学的专业课,好多专业概念已经记忆模糊,唯有对一位老师的教诲记忆深刻,对我毕业后的职业生涯影响深远:
软件工程是一门用工程化方法解决软件项目问题的学科,其本质也是一门工程学科,这门课的知识在学完后,不仅可以应用在软件项目中,还可以应用于日常生活中遇到的一些问题,Everything is a project。
这句话对我影响很大。我真的开始在日常生活中尝试应用“Everything is a project”的概念,小到做作业,大到完成工作中的复杂项目。
解决这些问题的方式,就是参考软件生命周期和瀑布模型,把一件事情分成几个阶段:分析、设计、实施、测试、完成,然后制定相应的计划。这种方法不仅非常有效,让我的做事效率大幅提高,而且让我在看待事情上,能够更全面地、站在更高的角度去思考。
2010 年在上海的时候,我机缘巧合参加了一个关于产品设计与用户体验的线下活动,我可能是与会人员中,为数不多的非专业产品设计的同学。
在活动中组织者安排了一个游戏环节,每 5 个或 6 个人分成一个小组,来设计一个给老年人使用的手机,限时 30 分钟。完成后,每组选一个人上台花 5 分钟展示作品,最后投票选出做得最好的一组。
我的第一反应就是把它当作一个项目,于是快速地拟定了如下计划。
0~10 分钟(分析):头脑风暴,收集想法。
11~15 分钟(设计):根据头脑风暴结果,确定最终设计。
16~25 分钟(开发):将想法画在纸上。
26~30 分钟(发布):完善结果,准备展示。
这个计划小组成员都很认可,于是我们严格按照这个计划进行手机的设计。同时我观察了一下其他组的情况,大家都在热火朝天地讨论各种想法,似乎没有意识到时间其实是有限的。
轮到演示的时候,我们组毫无争议地拿到了第一,因为我们不仅准备充分,而且设计的手机功能完整,而其他很多组甚至还没来得及把想法完整地画下来。

什么是工程方法?

后来我才了解到,这种有目的、有计划、有步骤地解决问题的方法就是工程方法。工程方法不是软件工程独有的,几乎所有工程类别都可能会应用,例如建筑工程、电子工程等,只不过步骤可能略有不同。
图片参考:Engineering Method
工程方法通常会分成六个阶段:想法、概念、计划、设计、开发和发布。
想法:想法阶段通常是想要解决问题。最开始问题通常是模糊的,所以需要清晰地定义好问题,研究其可行性,检查是否有可行的解决方案。
概念:概念阶段就是用图纸、草图、模型等方式,提出一些概念性的解决方案。这些方案可能有多个,最终会确定一个解决方案。
计划:计划阶段是关于如何实施的计划,通常会包含人员、任务、任务持续时间、任务的依赖关系,以及完成项目所需要的预算。
设计:设计阶段就是要针对产品需求,将解决方案进一步细化,设计整体架构和划分功能模块,作为分工合作和开发实施的一个依据和参考。
开发:开发阶段就是根据设计方案,将解决方案构建实施。开发阶段通常是一个迭代的过程,这个阶段通常会有构建、测试、调试和重新设计的迭代。
发布:将最终结果包括文档发布。
如果你用这六个或者其中几个阶段对照日常工作和生活中遇到的问题,会发现绝大部分问题都可以看成一个项目,并且拆分成几个阶段,按照计划一步步完成。

站在整体而非局部去看问题

可能会有人说:“我不用这种工程方法去做事,一样可以做成呀,并没有什么区别。”确实,做一件事有很多种方式,但用工程方法去处理事情,有两点好处:
有一个被有效论证过的方法论指导你,可以帮助你提高成功概率,也可以提高效率。
当你用工程方法去思考的时候,你会更多的站在整体而非局部去思考,更有大局观。
前面提到的“设计一个老年机”的游戏就是个很好的例子,后来我在不同场合、不同人群中都组织过这个游戏,无论我如何强调时间限制(30 分钟)和产出(必须要演示结果),绝大部分人还是会把时间和注意力放在各种稀奇古怪的想法上,并沉浸其中。等到时间快到了,他们才发现还来不及把方案画到纸上,甚至还没确定该选哪个方案。
这种现象其实很常见,我们在日常处理事务时,天然地会选择自己感兴趣的、擅长的那部分,而容易无视整体和其他部分。
所以问题的核心并不在于是不是用工程方法,而是有没有把这件事当作一个项目,是不是能看到这件事的全貌,而不是只看到局部。
在工作分工越来越细致的今天,一个项目里面有产品设计、开发、测试、运维等诸多岗位,每个岗位都有自己的价值追求,测试人员关注找出更多 Bug、开发人员关注技术和高效开发功能、运维关心系统稳定。
分工带来的好处,就是复杂的任务可以分给不同的人来做,这也有助于技能的专业化,提高工作效率。但如果只站在自己的立场去考虑问题,没有人关注整体价值,就容易相互误解,产生矛盾、增加成本。
以下这些工作场景,估计你不会陌生。
产品经理提出一些天马行空、不切实际的需求,而技术上不可行或者实现成本很高,导致最后返工,造成资源浪费和进度延迟;
架构师为了满足开发上的成就感,更愿意自己“造轮子”,而不愿意采用现有开源程序或者购买合适的组件;
开发工程师喜欢在代码中使用各种设计模式或者最新技术,导致项目进度延迟,代码难以维护;
测试工程师不愿意学习自动化测试技术,导致测试周期较长,且容易出现疏漏;
除非产品经理特别注明,开发工程师和测试工程师不会注意用户体验上的细节。
这样的场景问题还有很多,为什么会出现这种情况呢?事实上,这在很大程度上都归因于大家只是站在自己岗位的角度来看问题,没有站在项目的整体角度来看。
如果能站在项目整体来看问题,你就会去关注项目的质量、项目的进度、项目的成本、项目的最终用户,那么上面这些场景将变成:
为了项目整体的效率和避免返工浪费,产品经理会及早和开发人员确认技术可行性,并对产品设计先行验证;
为了节约项目开发成本,提高开发效率,架构师选择成熟的架构,合理购买商业组件和使用开源程序;
为了提升开发效率,不影响项目开发进度,开发工程师尽可能采用成熟的技术,高效简洁地落实项目;
为了项目质量和效率,测试工程师学习自动化测试技术,将大部分测试变成自动化运行,极大地提高了测试效率和质量;
为了让用户有好的体验,不仅产品经理,每个人都会仔细体验用户界面,对于不合理的地方提出改进意见。
看起来很理想化对不对?但如果大家真能从自己做起,这样的结果并不是太难达到。
肯定有人会想,我又不是项目经理,干嘛要操这心呀?在这个问题上,我的看法是:每个项目成员,如果能多站在项目的角度去考虑,那么这样不仅对项目有利,更对自己有好处。
项目做成了,大家脸上都有光,也得到了更多的锻炼;项目没做成,不仅脸上无光,甚至可能面临丢工作的危险。很多人都有技术升管理的理想,能多站在项目整体角度去考虑的人,在日常工作中,也一定会有更多的锻炼机会,自然会多一些提升的空间。
我把这种思维方式称为“工程思维”。如果给一个定义的话,工程思维,本质上是一种思考问题的方式,在解决日常遇到的问题时,尝试从一个项目的角度去看待问题、尝试用工程方法去解决问题、站在一个整体而不是局部的角度去看问题。
在我的职业生涯中,一直习惯于用“工程思维”去思考问题,遇到问题,会尽可能把它当成一个项目,用工程方法有计划、有步骤地去解决它,这让我积累了不少的工程方法实践经验。
同时,我也更多站在整体的角度思考,这让我在项目中能更好地和其他同事合作,有更多的晋升机会。我还记得,我第一次开始管项目的时候,并没有慌张,而是把项目任务按阶段一拆分,然后按阶段制定好计划,再按照计划一点点执行、调整,很快就上手了项目管理的工作。

总结

改变,最有效的是方式是改变思想,这往往也是最难的部分。
当你开始学习这个软件工程专栏,我希望你不仅仅学到软件工程的理论知识,更希望你能用“工程思维”来思考你遇到的各类问题。
你不需要现在是一个项目经理或者管理者,也一样可以在日常生活中应用“工程思维”。比如学习这个专栏,你会制定一个什么样的计划?每个阶段达到一个什么样的成果?比如你今年有没有去旅行的计划?你会怎么制定你的旅行计划?
如果有兴趣的话,你还可以看看我以前写过的一篇文章“记录下两个孩子在 MineCraft 里面还原公寓的经历”。
这也是一个很有意思的工程思维实践,帮助孩子们在游戏里面还原公寓。这本质上也是一个项目,需要制定计划,需要设计、实现。我希望他们从小就有工程思维,能在未来有目的、有计划、有步骤地去解决日常生活的问题。

课后思考

最后,我希望你思考一下,你在日常生活中,会不会习惯上把一些事情看作项目?或者你看完这篇文章后,有没有觉得有一些事情可以看作项目?你会怎么应用工程方法来实践?
此外,在你参与的项目里面,你会站在项目整体的角度来考虑一些问题吗?你觉得如果站在项目整体的角度看,是不是可以对你的工作方式有所调整?欢迎你在留言区分享讨论。
感谢阅读,如果你觉得这篇文章对你有一些启发,欢迎把它分享给你的朋友。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 18

提建议

上一篇
01 | 到底应该怎样理解软件工程?
下一篇
03 | 瀑布模型:像工厂流水线一样把软件开发分层化
 写留言

精选留言(75)

  • javaadu
    2019-02-26
    1.做任何事情都要按照一定的理论指导来,例如,依靠系统化、结构化的“工程思维”,将生活和工作中的每个事情都看做一个项目,可以提高做事的成功率和效率,虽然不用这些理论指导也能做成事情,但是相对来说是偶然性的,不是常规性的。这就是常说的认知(意识)先行,持有高级的认知去跟低认知的人竞争,是一种降维打击。 2.工程思维的核心有两点:系统化,也就是全局观,要从站在整个项目的高度去看问题,不能做井底之蛙;结构化,也就是有步骤、有节奏得做事情的意识。 3.《软件工程之美》这个专栏,我给自己定了一个小目标:全部跟完,并且坚持留言跟老师交流想法。我制定了简单的阅读步骤:(1)文章至少阅读两次,第一次通读,第二次做笔记摘抄、整理文章的思维导图、提出自己的想法;(2)整理自己的学习心得,形成阅读笔记发到自己的博客(公众号)上 4.课后思考:我今年年初开始运营自己的公众号,我把它当做一个项目,就从下面几个方面进行了思考:我要提供的内容和定位是什么样的、我的用户是谁、我应该如何去运营;这些东西想好后,我就将要做的事情拆分为:公众号设置、文章内容输出、运营推广三块,然后按照一定的步骤去执行,现在公众号的设置已经基本完成,整个项目进入内容输出和运营推广的循环中了。站在项目的角度去看这个问题,可以让我在动手执行的时候更有方向感和节奏感,也会对自己清楚自己某个小的点做的改动会对全局产生什么影响;在没有使用这个角度去看问题之前,我只是简单得主张内容才是核心,但是不懂运营和推广,没什么章法。
    展开

    作者回复: 目前为止,你是留言最积极的一个,而且总结的都很有深度 👍 相信你一定能学有所成! 如果有具体问题,也欢迎留言分享。

    70
  • 西西弗与卡夫卡
    2019-02-26
    结合隔壁郑晔老师的《10×程序员工作法》中提及的“以终为始”、“任务分解”,工程思想真是无处不在

    作者回复: 很多道理都是相通的👍

    共 2 条评论
    23
  • 拉欧
    2019-02-26
    感觉工程思维是我现在欠缺的部分,做IT时间越久,越发现成事的可能存在于编码之外

    作者回复: 这是个很正常的现象,也是我这些年做IT感触特别深的一件事情。包括我自己也需要经常提醒自己不要太过技术思维。

    13
  • 起而行
    2019-03-01
    比如留学申请。项目思维的两个关键在于 1.主意局部任务与总体时间的关系 2.用熟悉的办法解决问题 1.在距离留学申请还有两年的时间,可以先做不确定性强,见效慢的事情,不是不重要,而且短时间内会来不及。比如未来职业规划,兴趣的培养,长期的科研与项目。 等到了申请还有半年的时候 要注意局部的任务与总体时间的关系。那么确定性不强的任务效果将不会特别好,而刷语言考试的成绩,这种确定性强,时间可控,反馈见效相对快的事情就要提上日程。 2.用熟悉的办法解决问题。在留学,这种高度信息不对称的领域,可以自己试着了解前人经验,但我认为,专业的事情给专业的人去做,那么找中介辅助申请就是个好的主意
    展开

    作者回复: 👍 你这对工程思维的应用已经超出本文的范围,达到更高的高度了! 向你学习

    11
  • Being
    2019-02-27
    应对即将面临的考试,工程思维会帮大忙啦。先分析考试大纲,明白考的范围,定位重难点,设计一套一个半月的复习方案,适应自己的作息安排,接下来就是按计划复习,最后面对考试,就是交付知识的时候了。

    作者回复: 你这个策略不错的,肯定能考个好成绩 👍

    9
  • 女巫在寒江
    2019-03-02
    我现在就是按老师提的做法去做的,把家庭、工作还有自我提升的事都当作项目来做后,感觉生活有掌控感多了 每个项目我会先做一个分解,大概需要哪些阶段,流程是什么,需要准备什么,需要谁协助,然后再继续分解成多个可以执行的步骤,定好时间点去跟踪,同时自己定期去监视各个项目的进度,这里我用的是甘特图查看,如果发现有些超前了,该项目就可以暂缓,把精力放到其他延迟的项目中去
    展开

    作者回复: 你这个专业的,甘特图都用上了👍 另外你说的同一时间专注于一个项目的思路也很好

    6
  • Felix
    2019-02-28
    机会都是留给有准备的人的,晋升管理的机会就是留给有工程思维的人的,好的技术管理一定是掌控全局的人

    作者回复: 是的,机会都是留给有准备的人,好的技术管理一定是全局思考的人。 如果有兴趣技术转管理,可以期待一下《09 | 如果你想技术转管理,先来试试管好一个项目》这一篇内容:)

    6
  • 蜗牛
    2019-02-27
    感觉自己之前做任何事情都没有章法,觉得只要做了就可以。通篇学完之后,知道自己哪里欠缺,应该怎样去学习及工作。谢谢宝玉老师!

    作者回复: 谋定而后动 还有一点经验就是:如果你想更有章法,更有大局观,做一件事情前先做个计划,可以帮助你更好的思考,也更容易执行。

    5
  • 花灰
    2019-09-09
    最近在准备换工作,借学习分析一下 分析:用一周时间,结合自己目前状况和找朋友了解,分析自己擅长什么、那些地方做的好那些不好… 设计:1天,划定自己的求职目标和方向 实施:3天,准备简历 测试:1个月、面试-复盘-修改简历-面试 完成:入职,每半年更新一次简历
    展开

    作者回复: 👍 职业目标和方向是其中最重要的事情,多花一点时间思考,经常的反复思考! 另外,我们日常在做设计时,会有设计的讨论和评审,你也可以找身边的资深的同事、朋友多请教,咨询他们的意见,这样可以帮助你作出更好的判断。 最后祝工作顺利!

    4
  • Sudouble
    2019-03-02
    结合以前看的关于批判性思维的内容和今天的内容,意识到思考的重要性,是时候对思维方式进行一个重要的关注了。everything is a project!

    作者回复: 其实理论知识很多的,重要的还是能实践起来,能化为己用,能真正的帮到你提升效率,这才是真正有效的。

    3
  • Noah●^●
    2020-03-19
    要培养工程思维, 考虑问题多用工程的角度看问题

    作者回复: 我建议不只是从工程的角度看问题,还需要去应用,比如说遇到“项目”时,无论大小,都养成好习惯: 在实施前:分析需求、设计规划 在实施后:测试验收,反思总结 这样才能更好的发挥其效用

    共 2 条评论
    2
  • hyeebeen
    2019-03-14
    非常赞同“一切即项目”的思考模式,作者经历的培训活动我也经历过,确实在时间意识上会比没受过工程训练的人强一些,并注意过程控制。 ps:学习自动化测试其实不等于一定能缩短测试周期,“测试周期”的定义如果是测试独占的项目时间段的话,可以通过测试前移,加强自测,契约优先的接口自动化测试等来缩短独占时间。没有系统或者不够工程化的自动化测试脚本,反而会增加测试时间。

    作者回复: 👍谢谢补充,没有用好确实有可能会更慢,用好了的话才可以提升效率。

    2
  • 梅同学
    2019-03-09
    问题: 1. 如何指定有效可行的项目计划 2. 如何把项目计划有效的传递给开发人员,包括:开发思路,开发进度 3. 有哪些有效的辅助工具 方法: 带着问题看每一篇文章,总结收获 验收: 回答上述问题
    展开

    作者回复: 相信在专栏里,这些问题你都能逐渐找到答案。 如果学习完相关内容,还不清楚,也欢迎就具体问题留言。

    2
  • 雷霹雳的爸爸
    2019-03-08
    纯感谢

    作者回复: 🤝

    2
  • alva_xu
    2019-03-02
    工程方法就是有目的、有计划、有步骤地解决问题的方法,而工程思维就是用工程方法解决问题的思维模式。这种思维模式,首先要求有全局观。而事实上,由于工程中的不同职责分工,导致各个角色有可能只从自己的分工角度去考虑问题,这实际上是软件工程中最大的障碍,也是传统的CMMI(过程域的规范化)、现在的DevOps和敏捷方法想要去解决的问题。正如《凤凰项目》中的观点,既要有自左向右的工作流,又要有自右向左的反馈流。通过人员和组织(自组织)的调整、工具和技术(CICD工具)的使用以及流程(Scrum等敏捷工作流程)的推广,确保整个工程项目不会被不同角色割裂开来,从而确保工程的实现。
    展开

    作者回复: 💯 很棒的总结!

    2
  • 修远
    2019-03-01
    比如说,我正在筹备研究生毕业论文工作,首先是开题确认毕业论文要写的大方向这是分析和需求;然后再用visio画一个章节图示,每一个大章下面应该写哪些小章节,这就是设计;现在开始正式进行项目的研究这就个过程就是开发;弄好之后梳理要点写入论文中这就是实施?或者这其实也可以算开发的一个过程;最后让老师审阅,学校预审,省教育平台盲审这些就是测试?只不过这测试只有一次机会.....

    作者回复: 👍赞,你这个应用的非常好。 最后那个我觉得更像是瀑布模型里面的“上线部署”,而之前你自己的检查算是测试:)

    2
  • 一路向北
    2019-02-27
    把每件事情当做一个项目来推进,在此之前我也有听过,也是觉得挺有道理,但是确实没有去按照这种方式去执行。但是在和软件工程一对应之后,觉得这条该如何执行的路很清晰。 当做项目来执行,项目需要达到的目标很重要,但是有时候对目标不够明确,或者说对一件事情的目的还比较模糊的时候,该如何入手呢?
    展开

    作者回复: 是的,很多时候目标是模糊的,但是大方向是可以确定的。确定方向后,先实现一个小目标。

    2
  • beiler
    2019-02-27
    感觉大学都白学了…早听这个课就好了,去年产品,计划四月份发一个版本…今年现在都没发出来,各种需求天马行空…人员配置参差不齐,关键人员还特别少,之前感觉有问题,但是没说,现在有了理论基础了,可不能让他们如此胡来了

    作者回复: 大学的课程还是很有用的,只是当时没意识到罢了,现在学也不迟。 你说的这种现象很常见的,可以考虑采用快速迭代的方式先让项目运转起来,先把能确定的核心需求先做起来,做的过程中再去逐步确认需求。 关于快速迭代和敏捷开发,这周和下周的课程会介绍

    2
  • 李冬杰
    2019-02-26
    我想到了《流浪地球》中,行星发动机都是是中国建造的,因为50年后中国是超大型项目落地经验最强的国家,从我们开始做起。

    作者回复: 哈哈,加油,我也期待这一天早日到来

    2
  • 老张
    2021-02-18
    也许,这门课程最大的收获在于,知道“工程思维”并且可能导致学习的每个人去在工作生活中实践运用这种方式。很多事情,有时候在开始的那一刻,未来的方向就改变了。
    1