软件工程之美 / 重新理解软件工程
宝玉
Groupon资深工程师,微软最有价值专家
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 你为什么应该学好软件工程?

    无论你是什么岗位,什么职位,只要你从事软件开发相关领域,都绕不开“软件工程”,因为现代软件项目开发,多多少少都离不开软件工程知识的应用。

  • 特别放送 | 从软件工程的角度解读任正非的新年公开信

    有人一提到软件工程,就马上说软件工程不是银弹。软件工程从来不说自己是银弹,就像现代医学,也不会号称自己包治百病,它只会不断改进,对症下药。

  • 学习攻略 | 怎样学好软件工程?

    你要先知道,软件工程学科的“知识树”结构是什么样的,才能更好地理解每个知识点和彼此间的联系。

  • 01 | 到底应该怎样理解软件工程?

    开发软件本质上也是像盖房子一样,是从无到有创造的过程。工程化的方式,就是你分步骤(过程),采用科学的方法,借助工具来做产品。

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

    工程思维,本质上是一种思考问题的方式。你要尝试从一个项目的角度去看待问题、尝试用工程方法去解决问题、站在整体而非局部的角度去看问题。

  • 03 | 瀑布模型:像工厂流水线一样把软件开发分层化

    瀑布模型算是现代软件工程的起源,软件工程的发展,很大部分都是构建于瀑布模型的基础之上的。

  • 04 | 瀑布模型之外,还有哪些开发模型?

    根据项目特点,选择好合适的开发模型,可以让你事半功倍,降低项目风险,提高项目开发效率,控制项目成本。

  • 05 | 敏捷开发到底是想解决什么问题?

    当你开发做决策的时候,遵守了敏捷开发的价值观和原则,不管你是不是用Scrum或者极限编程,那么都可以算是敏捷开发。

  • 06 | 大厂都在用哪些敏捷方法?(上)

    大厂做项目采用常见的“分而治之”的策略:大项目拆成小项目,大服务拆成小服务,大团队拆成小团队。

  • 07 | 大厂都在用哪些敏捷方法?(下)

    没有万能的开发模式,只有适合项目的开发模式,最重要的还是要摸索出一套适合你自己项目特色的开发模式。

  • 08 | 怎样平衡软件质量与时间成本范围的关系?

    要平衡好软件质量与时间成本范围的关系并不难,你只需要记住,最重要的是根据“金三角”的三条边,找出来固定的一条或两条边,然后去调整剩下的边,达到平衡。

  • 09 | 可行性研究: 一个从一开始就注定失败的跨平台项目

    可行性研究是项目启动前很关键的一步,可能最早帮你发现风险,甚至避免损失,千万要重视起来。

  • “一问一答”第1期 | 30个软件开发常见问题解决策略

    软件开发中的很多问题,都是可以通过软件工程的知识来解决的。

  • 10 | 如果你想技术转管理,先来试试管好一个项目

    管好人、管好事,你就能管好软件项目。

  • 11 | 项目计划:代码未动,计划先行

    项目计划是保障软件项目成功非常重要的手段,制定计划的过程,可以让你对项目有全面的了解,跟踪计划让你知道项目进展情况,出现问题也可以及时调整。

  • 12 | 流程和规范:红绿灯不是约束,而是用来提高效率

    从个体来看,因为流程规范的存在,确实可能存在效率降低的情况,但从团队的角度来看,好的流程规范反而是提升效率的。

  • 13 | 白天开会,加班写代码的节奏怎么破?

    开会是有价值的,开会是有成本,会议是不是高效,就看它创造的价值是不是高于其成本。

  • 14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决

    每一次工具的升级,都是对项目管理工作的一次简化。合理的使用项目管理工具,可以帮你极大提高管理效率,起到事半功倍的效果。

  • 15 | 风险管理:不能盲目乐观,凡事都应该有B计划

    项目中的任务,不能盲目乐观,都思考一下它最坏的结果是什么,如果最坏的结果不能接受,就说明要有个B计划,考虑风险管理了。

  • 16 | 为什么你不爱写项目文档?

    对于文档的撰写,要作为一个正规的项目任务进行,安排人、安排时间,放到项目计划中去。

  • 17 | 需求分析到底要分析什么?怎么分析?

    要做好用户需求的分析,需要找出来隐藏在用户需求背后的真实需求,还要针对用户的真实需求提出解决方案,最终验证方案是不是能满足好用户需求。

  • 18 | 原型设计:如何用最小的代价完成产品特性?

    原型开发,从一个软件开发模型,逐步演变成了一个需求设计工具,让产品经理不用依赖程序员就可以作出逼真的产品原型,也大大降低了项目成员了解需求的难度。

  • 19 | 作为程序员,你应该有产品意识

    当你慢慢培养了产品意识,不仅可以通过技术来打造更高价值的产品,也可以让你在技术之外有一技之长。

  • 20 | 如何应对让人头疼的需求变更问题?

    在需求变更这个事情上,没有赢家,每个人都是受害者。

  • “一问一答”第2期 | 30个软件开发常见问题解决策略

    项目管理贯穿项目始终,需求是项目的源头。希望通过对这两个模块的学习,能加深你对项目管理和需求分析知识的理解,灵活应用其中一些方法。

  • 21 | 架构设计:普通程序员也能实现复杂系统?

    架构设计,通过组织人员和技术,低成本满足需求以及需求的变化,保障软件稳定高效运行。

  • 22 | 如何为项目做好技术选型?

    技术选型,本质上是项目决策的一种,要受制于范围、时间和成本的约束,要分析可行性和风险,要考虑利益相关人。

  • 23 | 架构师:不想当架构师的程序员不是好程序员

    没有架构师的头衔,也一样可以做架构设计,只要你有架构师的能力就可以了。

  • 24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?

    技术债务也并不都是坏事,如果合理利用,就可以在短期内缩短时间。但后期如果不偿还技术债务,也会对项目及个人造成不好的后果。

  • 25 | 有哪些方法可以提高开发效率?

    如果你已经学习了很多类似的原则或者方法,而觉得没什么效果,那也许只是因为没有尝试把它们变成习惯。

  • 26 | 持续交付:如何做到随时发布新版本到生产环境?

    持续交付如果细分,其实可以分成持续集成、持续交付和持续部署三个概念,这三个概念很相近,但又有所不同。

  • 27 | 软件工程师的核心竞争力是什么?(上)

    软件工程师的核心竞争力,不是单一能力的体现,而是几种能力和价值的合集。

  • 28 | 软件工程师的核心竞争力是什么?(下)

    要提升自己的影响力,可以在一个领域深入打造自己独特的有价值的能力,让自己做事情能超出别人的预期,同时乐于分享和帮助他人。

  • 29 | 自动化测试:如何把Bug杀死在摇篮里?

    自动化测试,就是用程序脚本来完成的,本质上还是要输入和操作,要检查输出是不是和期望值一致。

  • 30 | 用好源代码管理工具,让你的协作更高效

    用好源代码管理工具,设计好开发流程,保证好代码质量,你的协作才能更高效。

  • “一问一答”第3期 | 18个软件开发常见问题解决策略

    通过对开发模块的学习,可以帮助你在项目中搭建持续集成环境,推行自动化测试,改进基于源代码管理工具的开发流程。

  • 31 | 软件测试要为产品质量负责吗?

    软件质量体现在功能质量、代码质量和过程质量这三个方面,对产品质量负责,也意味着要对这三方面共同负责。

  • 32 | 软件测试:什么样的公司需要专职测试?

    Facebook号称自己没有专职测试工程师,Google和Amazon虽然有专职的测试工程师,但都是开发人员对质量负责。

  • 33 | 测试工具:为什么不应该通过QQ/微信/邮件报Bug?

    软件测试,主要工作就是发现Bug、报告Bug和跟踪Bug。软件测试工具,也是围绕这三方面来帮助我们提高效率的。

  • 34 | 账号密码泄漏成灾,应该怎样预防?

    我们不能假设数据存储是安全的,而是要考虑到数据是有泄漏的可能,提前做好预防措施,对敏感数据进行加密。

  • 35 | 版本发布:软件上线只是新的开始

    做好版本发布,关键在于版本发布前做好版本发布的规划,以及采用一个科学的发布流程。

  • 36 | DevOps工程师到底要做什么事情?

    DevOps可以理解为一种开发和运维一起紧密协作的工作方式,从而可以更快更可靠地构建、测试和发布软件。

  • 37 | 遇到线上故障,你和高手的差距在哪里?

    对于线上故障的处理,基本原则就是要先尽快恢复生产减少损失,然后再去查找原因,最后不要忘记总结复盘。

  • 38 | 日志管理:如何借助工具快速发现和定位产品问题 ?

    通过日志管理工具,可以集中管理所有系统的日志,方便对日志进行检索,图形化的展示结果,还可以做到根据设置规则进行自动报警。

  • 39 | 项目总结:做好项目复盘,把经验变成能力

    为什么在同样的时间内,有的人成长比较快,其实他们就像优秀的棋手,通过不断对做过的事情进行总结复盘,来快速提升自己的能力。

  • “一问一答”第4期 | 14个软件开发常见问题解决策略

    软件测试是保障软件质量的重要一环,但也不能过于依赖软件测试。

  • 40 | 最佳实践:小团队如何应用软件工程?

    小团队在软件项目开发上的主要问题是:对成本敏感、人少活多和缺少流程规范。可以从团队建设和流程建设入手,去解决这些问题。

  • 41 | 为什么程序员的业余项目大多都死了?

    大部分业余项目,都是怀着美好的期望开始,结果做到一半就无疾而终,就算少数坚持到了上线发布,最终还是因为少人问津而放弃。

  • 42 | 反面案例:盘点那些失败的软件项目

    软件项目失败并不可怕,最重要的还是在失败后,总结原因,吸取教训。

  • 43 | 以VS Code为例,看大型开源项目是如何应用软件工程的?

    通过研究一些开源项目的开发,你能从中学习到一个优秀项目对软件工程的应用,加深对软件工程知识的理解,进而应用到项目实践中。

  • 44 | 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?

    每个公司,都有自己的历史和文化,他们的文化又影响了各自的软件开发模式。

  • 45 | 从软件工程的角度看微服务、云计算、人工智能这些新技术

    技术服务于架构设计,架构设计服务于业务,业务服务于商业。

  • “一问一答”第5期(内含彩蛋) | 22个软件开发常见问题解决策略

    “经典案例解析”主题下的内容就是帮助你结合日常生活中一些常见的现象,去站在软件工程的角度思考和分析。

  • 结束语 | 万事皆项目,软件工程无处不在

    你对软件工程知识实践的越多,对它的理解也会越深刻,当你在做软件项目时,就能更好地应用这些知识,帮助你高质量地完成项目。

特别放送:《大学时候学的软件工程有用吗?》

《软件工程学习路线图》

软件工程是一门用工程化方法解决软件项目问题的学科。无论什么岗位,什么职责,只要你从事软件开发相关的工作,都绕不开软件工程,因为不管是工作方法论、团队协同亦或者流程,万变不离其宗,核心都是软件工程。

想象下在日常工作中,不管你用什么开发语言,不管你是前端还是后端,其实,软件工程的知识一直都在潜移默化地发挥着作用。比如:

  • 你接到一个开发任务,如果想开发出客户想要的功能,你是不是先要做需求分析;
  • 你接手一个复杂的、庞大的功能模块,是不是先要做设计,才能把复杂的拆成简单的,才能让大家一起分工去开发;
  • 你完成一个功能模块,如果要保证质量,是不是需要写一些测试代码,还要做一些功能测试;
  • 还有日常用的那些工具,像源代码管理、Bug跟踪。

软件工程是一门偏实践的学科,而大学课程却更侧重理论,缺少问题导向意识,这样你理解起来自然就是枯燥乏味,很难学以致用。因此很多人错误地认为软件工程学科很“虚”,没有干货。

但是事实并非这样,很多人毕业之后,参加完工作,看到了诸多团队协同、项目管理中的“花样”之后,才恍然大悟,这不就是软件工程吗?

所以,在这个时间点,我们特意邀请了宝玉,希望能带你重新理解软件工程。他将结合自身丰富的软件开发实践经历,带你从软件工程的视角,去分析和解决你工作中遇到的问题,生动、系统地给你讲解软件工程的核心知识,从“器”(工具)、“术”(方法)、“道”(战略思维)入手,让软件工程可以切实地解决你所遇到的工作难题。

宝玉,硕士毕业于美国德保罗大学,团购鼻祖网站Groupon资深开发工程师,前上海众游技术总监,曾参加中国移动飞信项目的核心开发,微软最有价值技术专家。

专栏模块

专栏共45讲,分为3大模块,8大章节。

1. 理解软件工程

从宏观的角度建立起软件工程的知识结构,展现软件工程学的全景图,让你掌握从软件工程的基础概念到主流的软件过程方法论。带你了解工程思维,希望你可以学会用工程化的思考模式,来解决工作和生活中所遇到的问题。

2. 项目全过程知识树

完整的软件生命周期包含规划、需求分析、设计、编码、测试、运行维护这六个阶段,带你了解每个阶段要侧重做哪些事;分析每个阶段常见的问题,找到解决方法;了解各个阶段有哪些工具可以对项目有帮助,从而学会应用它们。

3. 软件工程经典案例解析

带你分析像微软、谷歌、华为、阿里巴巴这样的大公司,是怎样把软件工程用得炉火纯青。另外,解析国内外经典的软件工程案例,让你能够从正面、反面的综合案例中,把前面的知识融会贯通,并逐步内化为自己的基础能力。

限时福利

你觉得怎么样?期待您评价: