软件工程之美
宝玉
Groupon 资深工程师,微软最有价值专家
44272 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
软件工程之美
15
15
1.0x
00:00/14:21
登录|注册

开篇词 | 你为什么应该学好软件工程?

讲述:宝玉大小:13.15M时长:14:21
监控报警
看板
持续集成
源代码管理
软件工程的基本功
软件工程的战略
软件工程的思维方式
软件工程的实用性
软件工程的重要性
即学即用
带着问题学习
项目实践经验
从传统瀑布模型到最新的敏捷开发
从个人小项目到几千万用户的大项目
从国内公司到美国公司
从几个人小团队到几千人的大厂
从程序员到技术总监
从技术开发到项目管理
从自学编程到软件工程专业科班毕业
经典的软件工程案例
软件工程的思想在实际项目中的应用
大公司的软件工程应用
工具应用
解决常见问题
运行维护阶段
测试阶段
编码阶段
设计阶段
需求分析阶段
规划阶段
软件生命周期
工程化的思维模式
主流的软件过程方法论
软件工程的基础概念
软件工程的知识结构
工具应用
价值
学习方法
作者经历
案例分析
项目过程
基础理论
专栏内容
作者:宝玉
软件工程学习之旅

该思维导图由 AI 生成,仅供参考

你好,我是宝玉,欢迎加入我的专栏,和我一起开始软件工程的学习之旅。
和很多人一样,我的职业生涯是从一个自学编程的“野路子”程序员开始的。1999 年,我考入西北工业大学工程力学专业,但是却对编程很感兴趣。大一的时候自学网页编程,大二开始去学校网络中心兼职,同时在外面接了很多做网站的私活。
那时,虽然我的编程水平提升特别快,但是因为完全是自学,跟其他计算机科班的程序员一比,多少有点自卑感,觉得好像差点啥!在实际工作中,遇到具体的问题,我只能见招拆招,一个一个地解决。
当然,因为一开始我无法从系统层面整体看事情,所以虽然问题解决了,但也总有一种疲于奔命的感觉。我曾经遇到的问题,你肯定也不陌生,比如:
开发时没有分析没有设计,上手就写,后期难维护,加班熬夜去填“坑”;
缺少理论指导,遇到新项目不能举一反三,工作很平庸;
遇到需求变更这种事,除了抱怨两句客户,只能闷头做,无力反抗;
做项目没计划性,想到哪做到哪,总是延期,比其他同事做的慢;
不知道如何与团队协作,职业发展遇到瓶颈,无法得到晋升。
那时候我不知道啥是正规做法,主要靠自己摸索。也特别困惑:科班出身的程序员是否与我有同样问题?像微软、阿里等这些大厂的程序员,他们又是怎样协调完成好那么庞大的项目?我这个“野路子”程序员面临的问题,他们又是怎么分工协作解决的?
2002 年初,我有幸转了专业,成为了中国第一批软件工程专业的学生,有机会系统地学习软件工程的理论知识,这解开了我的很多困惑。
软件工程学让我知道,软件项目的开发其实是一个工程,整个开发过程是可以有效组织起来的;对于开发过程的各个阶段,已经有很多解决问题的最佳实践,有很多方法来帮助我们高效完成任务;我们还可以借助工具来协助管理,提升开发效率。
如果说以前自学编程时,我还是停留在学习各种编程方法(术)上面,那软件工程开始让我主动去思考这些“术”后面的“道”,去思考软件项目中各种问题背后的原因,以及各种方法后面的理论指导。
这种对“道”的思考,逐步影响了我思维方式,让我从单一的程序思维上升到系统的工程思维去看日常的问题;同时让我形成了一套自己对于软件开发和项目管理的方法论,能举一反三,指导我去灵活运用各种方法,或者根据项目特点创造合适的解决方法。
当然,软件工程学的价值不仅于此。有人说程序员是吃青春饭的,因为计算机技术更新太快,年纪大了学习能力下降,就很难跟得上了。于是就有人很焦虑,会关心未来技术发展趋势如何?我怎么才能跟得上这些技术变化?
亚马逊的创始人杰夫·贝索斯(Jeff Bezos)曾经在一次演讲中说:“人们经常问我,未来 10 年什么会被改变?我觉得这个问题很有意思,但也很普通。从来没有人问我,未来 10 年,什么不会变?”
这个回答同样适用于软件开发领域。在软件开发领域,有哪些知识十年前很重要,现在仍然重要,未来可能同样重要?
其实仔细分析,这些知识不外乎:数据结构、算法、面向对象思想、设计模式、软件工程。如果范围不局限于程序开发,还要算上测试、产品设计、项目管理、运维这些岗位。
你会发现,无论你是什么岗位,只要你从事软件开发相关领域,都绕不开“软件工程”,因为现代软件项目开发,多多少少都离不开软件工程知识的应用。
想象下在日常工作中,不管你用什么开发语言,不管是前端和后端:
你接到一个开发任务,如果想开发出客户想要的功能,你是不是先要做需求分析;
你接手一个复杂的、大的功能模块,是不是先要做设计,才能把复杂的拆成简单的,才能让大家一起分工去开发;
你完成一个功能模块,如果要保证质量,是不是需要写一些测试代码,还要做一些功能测试;
还有日常用的那些工具,像源代码管理、Bug 跟踪。
而这些内容,都是软件工程相关的知识,和你用什么语言无关。十几年前我开始工作时就在用这些知识,现在还是在用这些知识,未来这些知识还不会过时。
换言之,这就是经典的价值,为什么说我们要学经典,因为经典就是这个行业最为本质的东西。你顺着这个逻辑想,就知道为什么大学的计算机专业要设计数据结构、算法、操作系统、软件工程这样的课程了。
技术更新迭代速度确实很快,难以把握,更难以预测,但是软件开发背后的逻辑却万变不离其宗。
你只有掌握了这些逻辑,才能步步为营,不被快速发展的软件开发行业所淘汰。因为你脑袋里装有软件开发的战略,相对于赤手空拳、盲打莽撞的人来说,你更能在未来获得先机。
我经常会跟身边的朋友“安利”软件工程的重要性,但是往往都没有下文。究其原因,主要是传统的软件工程教学方法出了问题,各个知识点过于偏理论,难以和实际项目的应用联系起来,理解起来生涩乏味。导致有人误以为软件工程是枯燥、无用的。
回想当初我在学习软件工程课程时,并没有觉得特别枯燥,主要归功于三点:
我学习前已经有项目实践经验,所以学习时,很容易能将理论和项目经历串起来;
我在以前项目中有很多困惑,带着问题再去学习,这样效率更高;
即学即用,获得正反馈。我不仅会把软件工程的知识应用在工作中,还会把日常生活中的问题当成一个项目去思考,不停练习和获得正反馈。
我一直在思索,怎么让软件工程的学习,既不那么枯燥无味,同时,也具有实用性,即学即用,可以用来指引帮助我们来解决问题。
这样一直到 2015 年,我到美国攻读计算机的硕士学位,发现美国的计算机教育确实有可取之处,例如学校会聘请企业的专家作为兼职讲师,让学生有机会了解业界最前沿的技术趋势。
这些有丰富项目经验的企业专家讲师在讲课时,总能把一些知识点和鲜活的案例结合起来,和学生一起探讨这些知识点背后的历史和逻辑,让软件工程学变得易学、实用。
在美国读书的经历给了我很大启发,软件工程的学习,也可以不那么枯燥。恰好我的经历也比较特殊:
从自学编程的程序员到软件工程专业科班毕业;从技术开发到在微软飞信做项目管理;从程序员到技术总监;从几个人小团队到几千人的大厂;从国内公司到美国公司;从个人小项目到几千万用户的大项目;从传统瀑布模型到最新的敏捷开发。
这些丰富的经历,帮助我更好地理解了软件工程的知识,也知道如何应用它,可以发挥最大的效用。
因此,在这个专栏中,我会结合自身在软件开发中的经历,将软件工程中的知识点和我所看到的国内外前沿的、典型的项目案例结合起来讲解,也会和你一起分享我对这些知识背后的思考。和你一起去软件工程学中,寻找软件项目中问题的答案。
我希望最终,你能把软件工程知识和项目经验有机地结合起来,转换成你自身能力的一部分。
另外,在实际软件项目开发中,离不开各种工具的使用,像源代码管理、持续集成、看板、监控报警等,帮助我们更好地协作、规范项目流程、上线维护。
在本专栏,我也会在穿插着介绍各种工具的用法,有哪些价值,让你在了解后能很快应用到项目中,达到即学即用的效果,提高项目开发效率、规范项目流程。
我们的专栏会从“道、术、器”三个维度来讲解软件工程的知识内容。
“器”就是软件工程中的各种工具。
“术”就是软件工程中的各种方法。例如如何做需求分析?如何对需求变更做变更管理?
“道”就是软件工程知识的核心思想、本质规律。例如为什么要有需求分析?需求变更产生的深层次原因是什么?项目中决策的依据是什么?
在专栏的模块设置上,我将它分成了三大部分。

1. 基础理论

从宏观的角度建立起软件工程的知识结构,展现软件工程学的全景图,让你掌握从软件工程的基础概念到主流的软件过程方法论。我会帮你开始思维上的转变,去尝试用工程化的思维模式,去分析和解决工作和生活中的问题。

2. 项目过程

我会按照软件生命周期,把知识点拆成:规划、需求分析、设计、编码、测试、运行维护这六个阶段,然后带着你一起去了解每个阶段要侧重做哪些事;分析每个阶段常见的问题,找到解决方法;了解各个阶段有哪些工具可以对项目有帮助,从而学会应用它们。

3. 案例分析

在这个模块中,我会带你一起去看看这些大公司是怎么应用软件工程的。之前你可能会有疑惑,认为软件工程学很虚,我们小公司用不着,或者不知道怎么在实际项目中应用软件工程。
其实软件工程的思想是润物细无声,包括微软、谷歌、华为、阿里巴巴这样的大公司早已经深得其精髓,把它用得炉火纯青了。
你的公司,你遇到的大部分项目问题,都可以回到软件工程的逻辑里来解决。我会给你分享我看到的经典的软件工程案例,让你能够通过综合案例,把前面的知识融会贯通,并逐步内化为自己的基础能力。
简单来说,我希望通过这个专栏,你可以从知到行,打好基本功,掌握软件工程学中涉及的方法和工具,学会举一反三,在软件项目的开发和管理过程中,能运用自如;也希望软件工程的思维,可以让你脱离技术的拘泥,有更高的格局和视角去看待工作和生活中的问题。
最后,也希望软件工程学这门基础学科,真正成为武装你职业上升的盔甲。无论你想走技术路线,还是转向做管理,都能从赤身肉搏、苦钻技术却不得法的“野路子”,变得行有章法,在未来软件的快速革新稳步前行。
如果你在专栏的学习过程中,遇到任何问题,或者有什么想法,欢迎留言与我交流。相信这段学习之旅,你我都将收获满满。
好,那就让我们开始吧!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文是一篇关于软件工程的专栏,旨在帮助读者系统地学习软件工程知识,并将其应用于实际项目中。作者从“道、术、器”三个维度来讲解软件工程的知识内容,涵盖软件工程中的各种工具、方法和核心思想。通过介绍基础理论、项目过程和案例分析,读者可以掌握软件工程的基础概念、软件生命周期各阶段的重点工作和工具应用,以及大公司在实际项目中应用软件工程的案例。通过学习本专栏,读者可以从知识到行动,掌握软件工程学中的方法和工具,运用自如地参与软件项目的开发和管理过程。整体而言,本文将为读者提供全面的软件工程知识,帮助他们更好地协作、规范项目流程、上线维护,从而在软件开发行业中立于不败之地。

2019-02-1855人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件工程之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(64)

  • 最新
  • 精选
  • wusiration
    有什么推荐的软件工程书籍吗?一边学课程一边看

    作者回复: 下一篇就会讲,你可以先买一本《构建之法》,这是本专栏最佳搭配的书籍。

    2019-02-18
    26
  • ailei
    请教老师,除了《人月神话》、《人件》,还有哪些偏管理的软件工程的书?不算敏捷开发那几本

    作者回复: 有几本项目管理的书可以看看: 《项目管理修炼之道》 《项目管理-计划、进度和控制的系统方法》 《软件项目成功之道》 《做项目,就得这么干!》

    2019-04-01
    15
  • 未设置
    终于等来了软件工程的课,太赞了。跟老师最初的感觉一样,我就是半路出家的程序员,希望软件工程的课能让我突破现在工作遇到的瓶颈。

    作者回复: 我也希望这门课能真真正正的帮助到你。另外你可以把一些具体的问题提出来,这样说不定我可以针对性的帮助你提一些建议。

    2019-02-18
    12
  • tangxinzhuan
    "那时候我不知道啥是正规做法,主要靠自己摸索。也特别困惑:科班出身的程序员是否与我有同样问题?像微软、阿里等这些大厂的程序员,他们又是怎样协调完成好那么庞大的项目?我这个“野路子”程序员面临的问题,他们又是怎么分工协作解决的?" 当我看到老师的这句话,我要哭了。我是野路子程序员,这也是我这几年的困惑,希望跟随老师学完这门课程后,找回属于我的自信!

    作者回复: 作为一个过来人,说点野路子程序员如何找到自信的感悟:自信这事,靠的是你正儿八经做成了一件事,哪怕是一件小事,一点一点的成绩积累,你就不会再觉得自信是个问题了。 希望你学了后,把知识应用在你的工作中,帮助你把一件事情做成做好。如果有具体问题困难,也欢迎留言,我很乐意提供建议。

    2019-02-27
    9
  • 江志明
    技术就像是工具,学习的快,也更新的快。软件工程就像是内功,知识内容很广泛,不是很好吃透。但是没软件工程的话,技术再高超,对于结果而言,也是白费的。这课不错。

    作者回复: 是的,再好的技术,也需要在项目中应用才能体现价值,而要保障项目成功 ,软件工程必不可少。

    2019-02-18
    9
  • 常平
    看到用 “道 术 器”来解读软件工程真的很赞,同道中人啊。正如科学理论抽象到最后是数学,认知抽象到最后一定是哲学。

    作者回复: 谢谢支持。 在后面的知识点介绍,也是力求把“道”总结出来,懂了道自然就可以去用“术”和“器”,甚至创造自己的术和器

    2019-02-18
    8
  • humor
    老师觉得程序员会有中年危机吗?有点话,中年的程序员比年轻的程序员差在哪儿呢?现在有点恐慌干了几年程序员之后会失业…

    作者回复: 我觉得中年危机和是不是程序员并不是太大关系。 对于企业来说,关键还是性价比,比如中年程序员,如果薪水拿的是年轻程序员两倍,产出如果超出两倍,那么就是有价值的;否则价钱高两倍而产出不到两倍,企业就会考虑更多雇佣年轻的程序员。 会不会失业在于你是不是能继续创造价值,一个有经验的程序员是可以帮助团队少走很多弯路的,所以把手头事情做做好,然后保持学习,让你的经验为团队创造价值,这样应该不用担心失业问题。 像软件工程这种知识,对于你想转型管理或者提升个人能力,都是很有帮助的。

    2019-02-19
    7
  • Noya
    老师, 这个课程适合大二学生学习吗

    作者回复: 如果已经有软件开发的经验,会更容易理解和吸收软件工程的各项知识,如果才上大学没有项目经验,会相对难理解一些,但是毋庸置疑,无论是早学还是晚学,软件工程的知识内容对于你将来从事软件项目开发是肯定大有裨益的。 我是在大三时开始系统学习软件工程的,当时很多知识并不能理解,但是把软工的知识记了下来,埋下了一些种子,在毕业工作后,再回顾当初学过的知识,就很容易理解它背后的逻辑了,并且在尝试应用这些软件工程的知识后,就能发现这些知识很有价值。 比如说我在开始一个开发任务之前,会先去确认清楚需求,再去做设计,找人评审我的设计,需求分析和设计完了才开始编码,编码完了先自己测试一遍再提交。对于没有学过软件工程中瀑布模型的开发人员来说可能很难想到要这么去做,而对于学过软件工程的来说是很自然的一件事。 回头最初的问题,我的建议是软件工程课程大二学习没有问题,在学的时候有困难也不要放弃,先把基本的知识点记住,在课余去尝试做一些小软件项目,可以自己做,也可以找同学朋友一起做,做的过程中再去反复印证软件工程的知识。有条件的话,寒暑假可以去找个实习,去公司体验真正的软件项目,做中学!

    2020-03-16
    6
  • 风起云涌
    宝玉老师,这门课程对于硬件编程,比如单片机开发,是否也同样适用呢?

    作者回复: 其实瀑布模型就是从建筑行业和电子行业学习借鉴的,还是有些相通的地方。但也有很多地方不一样,比如说硬件编程你照搬敏捷这一套迭代快速发布的方式恐怕不太可行,但其中一些好的实践也许可以借鉴。 我对硬件编程不了解,建议你还是咨询你们行业的一些资深人士看看。

    2019-03-27
    6
  • 杨良博
    计算机专业学生路过 大二上的这门课 当时java,数据库,软件工程是同一个老师上教的,开始就让我们自己看视频学java,数据库和软件工程的课也被用来看java视频,软件工程学期快结束了才讲讲,数据库也是发的视频自己看。。。。。。 现在来这里好好学学软件工程(苦笑)

    作者回复: 已经过去的事情只能是让它翻篇了,现在学也不晚。 有时候学校老师或者公司领导不那么靠谱的时候,就得靠自己加倍努力了,加油⛽️!

    2019-03-02
    2
    6
收起评论
大纲
固定大纲
1. 基础理论
2. 项目过程
3. 案例分析
显示
设置
留言
64
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部