软件工程之美
宝玉
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讲)
结束语 | 万事皆项目,软件工程无处不在
软件工程之美
登录|注册

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

宝玉 2019-02-18
你好,我是宝玉。
2019 年 1 月,任正非的那封《全面提升软件工程能力与实践,打造可信的高质量产品》公开信在朋友圈刷屏了。作为软件工程专业出身的程序员,这封公开信自然是引起了我的好奇,仔细阅读之下,确实让我大吃一惊。
于是,我从软件工程的角度对这封公开信进行了解读。在我们专栏内容正式更新前,我将它作为特别放送分享给你,希望可以帮助你更好地理解软件工程。
这封信看似像八股文一般,但细看之下,可以发现作者对于软件工程的理解确实非常深刻,各种专业术语信手拈来,比喻恰到好处。
我对华为的研发其实一直挺好奇的,从传统的硬件公司,到现在软硬件齐头并进,华为手机销量都已经超过了苹果,可见华为的软硬件研发实力早已处于全球领先水平。信中提到:
二十年前的 IPD 变革,重构了我们的研发模式,实现了从依赖个人、偶然性推出成功产品,到制度化、持续地推出高质量产品的转变。
这一句话,也揭示了华为的软件研发能做到全球领先水平的原因。
华为是在 1999 年开始从 IBM 引进 IPD 的,到今年 2019 年正好 20 年,在过去的 20 年里,IPD 帮助华为从游击队变成了正规军,研发队伍从几千人到几万人,软件产品也覆盖到手机操作系统、应用、云服务。
我对 IPD 是不甚了解的,只知道 IPD(Integrated Product Development,集成产品开发)是一种产品开发方法,但如果说软件产品的开发方法,我是比较熟悉的,那就是软件工程。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件工程之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(30)

  • 还有我
    视高质量代码为尊严和个人声誉。这句话说的好,工作中遇到过很多项目开发人员不喜欢写注释的情况。要想写高质量的的代码,需要有扎实的基本功,要对数据结构、算法、设计模式及业务理解能力有一定的要求,另外还需要有一个良好的的编码习惯,至少可以避免出现go to fail 这种问题。华为这种大厂都如此要求,我司肯定会跟风…

    作者回复: 是呀,代码就像一个人的名片,写得不好真不好意思跟人打招呼。

    这其实也是为什么很多大厂要把自己的项目开源出去的一个原因,倒逼着开发人员重视自己代码质量,重视荣誉。

    2019-02-18
    21
  • Dr.Murphy
    视高质量代码为尊严和个人声誉。
    作为一个工作了两年的刚入门的程序猿来说,这番话仿佛震耳欲聋。几乎泪流满面。

    作者回复: 希望你能一直记得这句话 :)

    2019-02-19
    10
  • 点号
    我也是自学编程的“野路子”程序员,业余写的代码现在维护明显觉得很困难,希望通过学习这门课程,提升自己!

    作者回复: 希望这门课程能真正帮到你,如果有什么具体问题和困难,也欢迎留言提问

    2019-02-19
    6
  • 常平
    华为那篇八股文其实漏了一个非常重要的前置条件:capacity,capacity是企业文化是企业精神 企业基因,要在盐碱地里种出菊花茶是为“不易”。

    作者回复: 至少对软件工程的论述还是挺到位的呢,毕竟不管企业什么基因,只要是做软件开发的,都离不开软件工程的应用。

    2019-02-18
    1
    6
  • 舒偌一
    理解软件工程是把人治变成法治

    作者回复: 软件工程还是离不开人的,“人治变成法治”我觉得可以指项目流程、规范这些

    2019-02-18
    5
  • gfkdcadet
    碎片化的学习编程和开发可能是我们开发软件的大敌。长久以来,我们被各种绚烂的技术吸引眼球,却没有一棵知识大树去承载这些不断更迭的技术。这也许是现在急功近利的环境所致吧。
    希望宝玉老师讲授的知识树,纵向脉络突出,横向动态清晰,既能讲出从来没有变的过程,方法,又能捋一捋不断变化的工具。借宝玉老师慧眼,洞察一下现在五光十色的软件开发。辛苦老师了!

    作者回复: 谢谢。

    专栏的知识点已经都整理在目录了,你可以先大致看看,如果有什么没有讲到而你觉得和软件工程相关的内容也可以通过留言反馈。

    2019-03-02
    4
  • tt716
    其实我现在最大的问题是如何让不懂软件工程的老板去了解软件工程,去尊重软件工程的客观规律

    作者回复: 你可以先学习,然后在和老板沟通的时候,利用你学到的软件工程知识去有理有据的说服,这样成功概率会高一些,也会潜移默化影响到你的老板。

    比如我以前老板也喜欢改需求,我就需要跟他讲需求变更,讲版本规划(下个版本再改),他慢慢就也接受了一些。

    2019-02-26
    4
  • 韩宜衡
    老师设计课程之初应该想不到会有销售来买这个课吧😂 但是看了介绍这门课真的非常适合我 毫不犹豫就下单了 我们是做软件研发领域的项目管理工具的 刚开始觉得很心虚 因为觉得卖的对象是比你更懂的专业人士,他们知道自己要什么,我作为销售并不能说服他们。后来发现其实敏捷 DevOps这一方面 虽然有些公司也用,但是真正懂的人并不多,销售还是回到了【提供解决方案】上,真正有需求的公司比销售还急,他们更着急找到一个能够帮他们规范流程,提高效率的解决方案,那我的问题就来了,我要想提供解决方案,就必须了解研发场景的痛点,我要想了解痛点,难道还得开始从头学写代码,然后还得必须找个大厂待几年,然后再回到现在的公司继续做销售?这个方法似乎不太可行,倒不是觉得编程难,偷懒不想学,重点是即使学写了代码,似乎还是不能解决我当前的困惑,我隐约觉得我需要一个大的框架来帮助我了解整个研发过程,我得知道原理而不是操作方面的知识,但是我无法表达我的诉求,我不知道自己要学的这个知识属于什么范畴,直到看到这门课,我才知道我要了解的是软件工程!太感谢老师了!
    不知道老师有没有完整的了解过项目管理,我昨天刚考了PMP,觉得软件工程算是整个项目管理体系下的一个分支,华为这篇文章解读的非常好,关注代码质量,不能只依靠测试,这其实逃不开项目管理中质量管理知识领域,测试只是【控制质量】的过程,只对单一测试结果负责,输出测试结果其实是为了方便我们【管理质量】,回溯我们组织的质量文化,以及整个流程有没有优化改进的地方,只有这样,才能从根本上提高质量,所以这也是出了质量问题,管理者为什么要负高达85%的责任而直接导致事故发生的操作人员只需要负15%的责任的原因,学习一门学科要学习他的底层逻辑,软件工程就是撸代码的底层逻辑,【你所谓的顿悟不过是别人的基本功】,不要再自己造轮子,前人早已给你总结好了方法论。

    作者回复: 哈哈,谢谢支持!

    我们有一篇就是专门介绍项目管理工具的呢。

    2019-03-31
    3
  • hua168
    老师,我想问下:
    1. 30多岁现在学编程不迟吧?做linux运维,会写shell、python(django)、java基础(看培训视频自学到spring Boot基础),没实践编写过项目

    2.在有1的基础上怎么提升?即我学完了编程基础之后还要学那些东西,才能成为一名合格的开发?

    作者回复: 学习什么时候都不晚,尤其你已经有了一定的脚本语言基础。我在30多岁的时候才学的前端开发,现在已经非常熟了。

    编程一定要实践,工作中没机会的话,回家也要自己给自己创造实践机会,光看书看视频是远远不够的。尽可能在工作中创造实践的机会,参与到项目的编码开发中去。

    要明白编程是为了项目服务的,一个合格的开发的前提是要能为项目创造价值,做出高质量的产品。

    你可以先给自己设置个小目标,参与或者完成一个小项目,然后更大一点的项目,一点一点的实现更大的目标。

    2019-02-19
    1
    3
  • 廖师虎
    可信是不是要做到可溯源,可审计?按这样理解,基于CRUD风格或模式是不是就不可信了

    作者回复: CRUD是指数据库的增删改查?

    可信是目标,如果能实现这个目标,是不是CRUD有什么关系?

    2019-04-13
    2
  • 冰依
    非开发人员,目前在公司负责需求分析,整个端到端的过程都需要参与,老师觉得学习您这个适合不?

    作者回复: 我只能说这个专栏更侧重整个项目过程的各个方面,没有什么太
    技术(写代码)的内容,学习后对你了解和参与整个项目肯定是有帮助的。

    至于合不合适建议你先看看试读的文章。

    2019-02-28
    2
  • 小P
    作为一个不成功的程序员,不专业的运维,不合格的DBA,软件工程很有必要好好学一下。

    作者回复: 没有谁一开始就是成功的,认真学肯定有收获。

    另外建议一开始可以专注一些,要么程序、要么运维、要么DBA,先一个领域深入,后面在横向综合扩展,会更容易学成一些。

    2019-02-27
    2
  • 卡布达进化
    在其它网站看到这篇文章,触动良多,原来是老师写的,缘分啊,果断支持,如此系统化的认识正是我这种刚工作一两年的入门者所需要的,哈哈,我已经在眺望今后工作更轻松的样子了。

    作者回复: 谢谢支持。

    能力越大责任越大!等你学到的东西越多,要承担的责任就更大,不见得会更轻松哦:)

    2019-02-24
    2
  • 林云
    那些惊艳的软件,都是使用类似的方法,大量的人员投入,基于已有技术,可控的开发出来的。而软件工程魅力在于使用不变的方法持续产生优秀的软件

    作者回复: 👍优秀的软件,一定是应用好软件工程而产生的,这就是软件工程之美。

    软件工程也不是“不变的”,还是一直在更新迭代的。

    2019-02-23
    2
  • beiler
    老师,您让我问我可就问了,我很好奇老外在写代码之前模块是如何划分的,包是如何划分的?层与层是如何划分的,我看了很多,但是找不到我想要的银弹,写着写着我就不知道这个模块该划分到哪了,我用的是python,这块有什么好的参考吗?还有几层架构,几层架构的模块该如何划分,包如何分,代码该如何思考?大学学的都还老师了……让我写我都能写,但是让我按规矩写就很难了…我经常分着分着就乱了…求讲一讲这块!

    作者回复: 架构设计也没有银弹的!
    不需要太过于纠结模块怎么分,一开始不要分太多模块,简单满足需求就好,与其追求复杂的架构,不如先让代码简洁高效。

    推荐看看这篇文章《架构设计三原则》https://time.geekbang.org/column/article/7071

    另外可以多到github看看一些优秀的开源项目,看看高手们怎么设计架构的,可以多模仿。

    2019-02-21
    2
  • beiler
    希望老师讲课也是体系化,千万别碎片化,否则串不起来…到时候用的时候也是一瓶不满半瓶晃

    作者回复: 如果你仔细看目录,应该可以发现内容上不仅涵盖了大学里面软件工程会讲的内容,同时还会有业界最新的像敏捷开发实践、持续集成等内容。

    当然如果你觉得有欠缺的软件工程相关的内容也欢迎提出,我也会考虑补充进去

    2019-02-21
    2
  • hua168
    忘记问一个很重要的问题,学这个专栏需要哪些基础为前提的~~
    顺序问一下开发都要学哪些基础东西:
    1. 学一门编程语言及框架
    2.数据库的CURD
    3.软件工程?
    其它还要吗?

    作者回复: 学习这个专栏,不需要你有特别的基础,当然有一些项目经验可以帮助你更好的理解。

    至于要学什么基础的东西,其实你可以从另一个角度思考一下:开发的价值是体现在哪的?

    开发的价值是通过在项目中创造价值体现的,所以你要考虑学什么能帮助到你更好的在项目中创造价值。

    比如说除了具体的编程技能外,还可以从这些方面思考:
    1. 提升对需求分析和理解的能力,这样你知道要做的是什么,减少返工
    2. 提升架构和抽象的能力,能把需求抽象成架构设计,能把复杂的问题通过架构分解成简单的问题
    3. 高效率的编码,完成需求
    等等其他

    2019-02-20
    2
  • 阳阳
    老师,我想问下,软件工程在游戏项目上,是不是也一样呢?我觉得万变不离其宗,但是我的领导一直告诉我,游戏行业是个完全不同的领域,我有点疑惑,求解答

    作者回复: 是的,万变不离其宗。

    游戏项目一样离不开软件工程,游戏开发本身也是软件开发,只是有些名字换了,比如产品经理变成了游戏策划,产品设计变成了游戏策划案。

    游戏开发一样要有需求分析、架构设计、编码、测试等关键活动。

    2019-02-20
    2
  • One day
    高屋建瓴,统筹全局,而且把个个部分又讲得清晰明了,让我对软件工程有更加深入看法,可否增加一下案例分析,这样更具代表和启发性

    作者回复: 会有一定量的案例,比如说瀑布模型,会有瀑布模型应用案例;敏捷开发,有大厂敏捷开发实践;需求变更,有几个典型的针对需求变更的案例分析。

    2019-02-20
    2
  • 阿银
    有一点期待,希望老师能够更多的基于实际场景讲解因地制宜的软件工程实践。拘泥于形式的软件工程反而是负担,根据实际情况灵活运用才能真正的构建可靠的软件

    作者回复: 你说的这个观点我非常赞同,软件工程的核心不是在理论知识,而是“因地制宜”应用这些知识。

    我在写其中一些知识点时,也会和你一起去分析一些问题背后产生的原因,找到其根源(道),后面希望你能做到根据“道”去选择方法(术)或者创造“术”。

    2019-02-20
    2
收起评论
30
返回
顶部