软件工程之美
宝玉
Groupon资深工程师,微软最有价值专家
立即订阅
6741 人已学习
课程目录
已完结 54 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 你为什么应该学好软件工程?
免费
特别放送 | 从软件工程的角度解读任正非的新年公开信
学习攻略 | 怎样学好软件工程?
基础理论 (9讲)
01 | 到底应该怎样理解软件工程?
02 | 工程思维:把每件事都当作一个项目来推进
03 | 瀑布模型:像工厂流水线一样把软件开发分层化
04 | 瀑布模型之外,还有哪些开发模型?
05 | 敏捷开发到底是想解决什么问题?
06 | 大厂都在用哪些敏捷方法?(上)
07 | 大厂都在用哪些敏捷方法?(下)
08 | 怎样平衡软件质量与时间成本范围的关系?
“一问一答”第1期 | 30个软件开发常见问题解决策略
项目规划篇 (8讲)
09 | 为什么软件工程项目普遍不重视可行性分析?
10 | 如果你想技术转管理,先来试试管好一个项目
11 | 项目计划:代码未动,计划先行
12 | 流程和规范:红绿灯不是约束,而是用来提高效率
13 | 白天开会,加班写代码的节奏怎么破?
14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决
15 | 风险管理:不能盲目乐观,凡事都应该有B计划
16 | 怎样才能写好项目文档?
需求分析篇 (5讲)
17 | 需求分析到底要分析什么?怎么分析?
18 | 原型设计:如何用最小的代价完成产品特性?
19 | 作为程序员,你应该有产品意识
20 | 如何应对让人头疼的需求变更问题?
“一问一答”第2期 | 30个软件开发常见问题解决策略
系统设计篇 (4讲)
21 | 架构设计:普通程序员也能实现复杂系统?
22 | 如何为项目做好技术选型?
23 | 架构师:不想当架构师的程序员不是好程序员
24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?
开发编码篇 (7讲)
25 | 有哪些方法可以提高开发效率?
26 | 持续交付:如何做到随时发布新版本到生产环境?
27 | 软件工程师的核心竞争力是什么?(上)
28 | 软件工程师的核心竞争力是什么?(下)
29 | 自动化测试:如何把Bug杀死在摇篮里?
30 | 用好源代码管理工具,让你的协作更高效
“一问一答”第3期 | 18个软件开发常见问题解决策略
软件测试篇 (4讲)
31 | 软件测试要为产品质量负责吗?
32 | 软件测试:什么样的公司需要专职测试?
33 | 测试工具:为什么不应该通过QQ/微信/邮件报Bug?
34 | 账号密码泄漏成灾,应该怎样预防?
运行维护篇 (6讲)
35 | 版本发布:软件上线只是新的开始
36 | DevOps工程师到底要做什么事情?
37 | 遇到线上故障,你和高手的差距在哪里?
38 | 日志管理:如何借助工具快速发现和定位产品问题 ?
39 | 项目总结:做好项目复盘,把经验变成能力
“一问一答”第4期 | 14个软件开发常见问题解决策略
经典案例解析篇 (7讲)
40 | 最佳实践:小团队如何应用软件工程?
41 | 为什么程序员的业余项目大多都死了?
42 | 反面案例:盘点那些失败的软件项目
43 | 以VS Code为例,看大型开源项目是如何应用软件工程的?
44 | 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?
45 | 从软件工程的角度看微服务、云计算、人工智能这些新技术
“一问一答”第5期(内含彩蛋) | 22个软件开发常见问题解决策略
结束语 (1讲)
结束语 | 万事皆项目,软件工程无处不在
软件工程之美
登录|注册

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

宝玉 2019-02-26
你好,我是宝玉。我今天分享的主题是:掌握工程思维,把每件事都当作一个工程项目来推进。
我大学学的是软件工程专业,毕业十多年后再回顾当年学的专业课,好多专业概念已经记忆模糊,唯有对一位老师的教诲记忆深刻,对我毕业后的职业生涯影响深远:
软件工程是一门用工程化方法解决软件项目问题的学科,其本质也是一门工程学科,这门课的知识在学完后,不仅可以应用在软件项目中,还可以应用于日常生活中遇到的一些问题,Everything is a project。
这句话对我影响很大。我真的开始在日常生活中尝试应用“Everything is a project”的概念,小到做作业,大到完成工作中的复杂项目。
解决这些问题的方式,就是参考软件生命周期和瀑布模型,把一件事情分成几个阶段:分析、设计、实施、测试、完成,然后制定相应的计划。这种方法不仅非常有效,让我的做事效率大幅提高,而且让我在看待事情上,能够更全面地、站在更高的角度去思考。
2010 年在上海的时候,我机缘巧合参加了一个关于产品设计与用户体验的线下活动,我可能是与会人员中,为数不多的非专业产品设计的同学。
在活动中组织者安排了一个游戏环节,每 5 个或 6 个人分成一个小组,来设计一个给老年人使用的手机,限时 30 分钟。完成后,每组选一个人上台花 5 分钟展示作品,最后投票选出做得最好的一组。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件工程之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(52)

  • javaadu
    1.做任何事情都要按照一定的理论指导来,例如,依靠系统化、结构化的“工程思维”,将生活和工作中的每个事情都看做一个项目,可以提高做事的成功率和效率,虽然不用这些理论指导也能做成事情,但是相对来说是偶然性的,不是常规性的。这就是常说的认知(意识)先行,持有高级的认知去跟低认知的人竞争,是一种降维打击。

    2.工程思维的核心有两点:系统化,也就是全局观,要从站在整个项目的高度去看问题,不能做井底之蛙;结构化,也就是有步骤、有节奏得做事情的意识。

    3.《软件工程之美》这个专栏,我给自己定了一个小目标:全部跟完,并且坚持留言跟老师交流想法。我制定了简单的阅读步骤:(1)文章至少阅读两次,第一次通读,第二次做笔记摘抄、整理文章的思维导图、提出自己的想法;(2)整理自己的学习心得,形成阅读笔记发到自己的博客(公众号)上

    4.课后思考:我今年年初开始运营自己的公众号,我把它当做一个项目,就从下面几个方面进行了思考:我要提供的内容和定位是什么样的、我的用户是谁、我应该如何去运营;这些东西想好后,我就将要做的事情拆分为:公众号设置、文章内容输出、运营推广三块,然后按照一定的步骤去执行,现在公众号的设置已经基本完成,整个项目进入内容输出和运营推广的循环中了。站在项目的角度去看这个问题,可以让我在动手执行的时候更有方向感和节奏感,也会对自己清楚自己某个小的点做的改动会对全局产生什么影响;在没有使用这个角度去看问题之前,我只是简单得主张内容才是核心,但是不懂运营和推广,没什么章法。

    作者回复: 目前为止,你是留言最积极的一个,而且总结的都很有深度 👍
    相信你一定能学有所成!

    如果有具体问题,也欢迎留言分享。

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

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

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

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

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

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

    2019-02-26
    6
  • 起而行
    比如留学申请。项目思维的两个关键在于
    1.主意局部任务与总体时间的关系
    2.用熟悉的办法解决问题

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

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

    向你学习

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

    作者回复: 谋定而后动

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

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

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

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

    作者回复: 👍
    职业目标和方向是其中最重要的事情,多花一点时间思考,经常的反复思考!

    另外,我们日常在做设计时,会有设计的讨论和评审,你也可以找身边的资深的同事、朋友多请教,咨询他们的意见,这样可以帮助你作出更好的判断。

    最后祝工作顺利!

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

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

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

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

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

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

    2019-03-02
    2
  • TT
    我现在就是按老师提的做法去做的,把家庭、工作还有自我提升的事都当作项目来做后,感觉生活有掌控感多了

    每个项目我会先做一个分解,大概需要哪些阶段,流程是什么,需要准备什么,需要谁协助,然后再继续分解成多个可以执行的步骤,定好时间点去跟踪,同时自己定期去监视各个项目的进度,这里我用的是甘特图查看,如果发现有些超前了,该项目就可以暂缓,把精力放到其他延迟的项目中去

    作者回复: 你这个专业的,甘特图都用上了👍

    另外你说的同一时间专注于一个项目的思路也很好

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

    作者回复: 相信在专栏里,这些问题你都能逐渐找到答案。

    如果学习完相关内容,还不清楚,也欢迎就具体问题留言。

    2019-03-09
    1
  • 王子瑞Aliloke有事电联
    把每件事情当成工程来做!!!

    作者回复: 嗯,主要是意识上的转变,多全局思考多总结。

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

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

    2019-03-01
    1
  • 一路向北
    把每件事情当做一个项目来推进,在此之前我也有听过,也是觉得挺有道理,但是确实没有去按照这种方式去执行。但是在和软件工程一对应之后,觉得这条该如何执行的路很清晰。

    当做项目来执行,项目需要达到的目标很重要,但是有时候对目标不够明确,或者说对一件事情的目的还比较模糊的时候,该如何入手呢?

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

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

    作者回复: 大学的课程还是很有用的,只是当时没意识到罢了,现在学也不迟。

    你说的这种现象很常见的,可以考虑采用快速迭代的方式先让项目运转起来,先把能确定的核心需求先做起来,做的过程中再去逐步确认需求。

    关于快速迭代和敏捷开发,这周和下周的课程会介绍

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

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

    2019-02-26
    1
  • 丁丁
    Everything is a project , 工程思维很重要!

    作者回复: 是的,这种思维转变很重要的

    2019-02-26
    1
  • 白马
    和宝玉老师一样,我也是在学习了软件工程后建立了工程思维,把生活和工作中各种稍大和复杂的事情当成项目用工程方法解决。比如: 把教学工作看成项目,分成课程设计,课程准备,课程实施,课程总结反思。然后这个过程还能形成一个环。这次的项目总结为下次课程设计提供依据和思路。在课程实施时的每次课堂教学也看成一个小的工程,分为课堂教学设计,课堂教学准备,课堂教学实施及课堂教学反思总结。通过这样的工程方法和思路不断迭代改进课程,课程授课效果也越来越好。

    作者回复: 🤝
    很高兴你也是这么认为的!这也是我为什么觉得软件工程是大学最有用的一门课!

    2019-02-26
    1
收起评论
52
返回
顶部