文章目录

  • 编程≠软件工程
  • 软件工程的3个特性
  • 时间与变化
    • 海勒姆定律(Hyrum’s Law)
    • 目标不是“没有变化”
  • 规模和效率
    • 左移思维
  • 权衡和成本
  • 最后

已剪辑自: https://mp.weixin.qq.com/s/GhYfH3ndRsOWHFyAnFVvPQ

没有什么东西是建在石头上的,一切都是建在沙子上的,但我们必须把沙子当做石头来建筑。— Jorge Luis Borges

编程≠软件工程

编程:编程是生产代码的直接行为。

软件工程:软件工程是一组必要的原则、实践方法和工具,使得代码在跨团队协作和使用时能更加的有效。

编程和软件工程的三个关键差异点:时间,规模和权衡。

  • • 首先,对于一个软件工程,工程师需要更多的关注时间的流逝和可能的需求变更。
  • • 其次,软件工程需要更多的关注团队规模和集体效率,无论是其使用软件的组织,还是生产软件的组织。
  • • 第三,软件工程师,需要做出更多复杂且高风险的决策,通常是基于对时间和增长的不精确的预估。

软件工程的3个特性

软件工程不是编程,软件工程是随着时间而不断集成的编程工作。

软件工程在时间、规模和权衡3个维度上的表现特性分别为:

软件工程的可持续性:在软件的预期生命周期内,在业务和技术的双重发展中,都需要有能力做出对有价值的变化的有效反应,这就是软件的可持续性。

软件工程的规模性:软件工程师一项团队工作,团队的协作,包裹更多人的参与,甚至多个团队的协作,都会到来新的问题。在规模增加时,如何能够更好的交付有价值的系统。

软件工程的复杂性:随着组织的成长和项目功能的扩展,软件系统的生产是否能够变的更加高效,持续交付的成本是否可控。

时间与变化

在软件的预期生命周期上,在低点和高点之间显示某个地方出现了一个转变:某个项目必须开始对不断变化的外界做出反应。

对于任何一个一开始就没有计划升级的项目,这种变化可能是非常痛苦的,原因主要有三点:

  1. \1. 正在做的一项任务,还没有完成,但已经有更多的隐含的假设被注入程序之中。
  2. \2. 尝试进行升级的工程师机会不太可能有此类任务的相关经验。
  3. \3. 升级的规模往往比平时要大,一次进行累计了几年的大升级,而不是渐进式升级。

一个系统,不但要完成第一次大的升级,且要达到能够可靠地一直保持这种持续的最新状态,才是其长期可持续性的根本。

可持续性要求对所需变更的影响进行持续的规划和管理。

海勒姆定律(Hyrum’s Law)

海勒姆定律:

当一个API有足够多的用户时,在约定中你所承诺的已不再重要:所有在你系统里被观察道德行为,都会被一些用户所依赖。

这是软件系统的熵增:随着时间的推移,对变化和维护的讨论,必须要意识到海勒姆定律。

根据热力学第二定律,熵永不减少,但并不意味着我们不应该去尝试提高功效。

在软件工程中,我们不能完全的避免海勒姆定律,但我们可以去减轻它。

目标不是“没有变化”

对于大多数系统,在足够长的时间内,系统的所有内容都可能会发生变化。

规模和效率

左移思维

一个事实:在开发工作流程中,越是在早期阶段发现问题,越是能降低成本。

譬如,在一个功能的开发作业流程的从左到右的时间线上,从概念和设计开始,到代码实现、评审、测试、提交、金丝雀部署和最终的生产部署等。在这个时间线上,将问题的发现移动到更早的左边,会比等到更晚阶段在发现,成本要低很多。

安全性检测不能推迟到开发过程结束才开始,这被称为安全左移。道理很简单,如果产品的安全性问题在产品发布之后才被发现,那这个问题带来的损失可能会更大更多。

没有一个流程或工具是完美的,我们只有假设一个纵深的防御方法,来尽可能早的发现更多的问题。

权衡和成本

成本不仅仅是资金上的,成本更多是为软件成功所做的努力,可能涉及的主要因素有:

  • • 财务成本(金钱)
  • • 资源成本(CPU时间)
  • • 人员成本(工程工作的人员投入)
  • • 交易成本(采取行动的成本是多少?)
  • • 机会成本(不采取行动的成本是多少?)
  • • 社会成本(这种选择对)

所有的成本总结为:一个组织的健康,不仅仅是看账户里面有多少钱,还要看组织成员是否感到有价值和富有成效。

对于像软件工程类似的,高创意、高收益的领域,“人”才是限制性的因素。让工程师(创意型人才)保持快乐、专注和投入所带来的效率很容易影响其他的因素。

最后

3个起发点:

  • • 编程不等于软件工程。软件工程是在时间、规模和权衡决策上的系统性工程;
  • • 软件工程的三个特性:可持续性、规模性和复杂性;
  • • 软件工程中的2个法则:海勒姆定律左移策略

Google软件工程:什么是软件工程相关推荐

  1. 北京大学 软件工程1 软件 软件工程 软件开发 软件工程框架

    软件的定义 重新定义软件 新一代信息技术 区块链 创造性思维 软件的特点 软件的种类 支撑软件:VC++,PyCharm等 应用软件:QQ,微信 软件工程的起源 软件开发的三个阶段 软件工程概念的提出 ...

  2. 浙江大学计算机学院的软件工程和软件学院的软件工程哪个好,软件工程专业最强十校,浙大第二、清华第五,这所师范类院校很意外...

    软件工程专业是2002年国家教育部新增专业,主要随着我国互联网行业的快速发展,以及社会的经济建设的需求,这个专业也是成为一大热门,许多知名院校都相继开设了此专业,作为一大热门工科专业,毕业出来的薪资都 ...

  3. 女孩学计算机软件工程,女生学软件工程好吗 就业方向有哪些

    软件工程是一个很热门的专业,男生学该专业的人数比较多,但是不少女生听说软件工程好就业也心动了,那么女生报考软件工程好不好呢,毕业后能做什么工作呢? 女生适合学软件工程专业吗 软件工程专业之所以适合男生 ...

  4. 现代软件工程讲义 1 软件工程概论

    现代软件工程讲义 1 软件工程概论 几乎所有程序员都知道 "数据结构+算法 = 程序 " 这句名言.但是在实际的学习和工作中,也有不少人产生了疑问. 例如: 1.       我写 ...

  5. 从《构建之法:现代软件工程》走进软件工程的学习

    什么是软件工程 什么是软件工程?它跟一般的计算机学科有什么不同?BarryBoehm的定义是:运用现代科学技术知识来设计并构造计算机程序及为开发.运行和维护这些程序所必需的相关文件资料.可见软件工程更 ...

  6. 软件工程学习笔记——软件工程基本原理

    美国著名的软件工程专家B.W.Boehm于1983年提出了软件工程的7条基本原理: 用分阶段的生命周期计划严格管理 这条基本原理意味着:应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划 ...

  7. 【细说软件工程】《软件工程》Software Engineering

    <软件工程>60' 一..软件过程 1.软件过程的概念 答: 1)**软件过程描述为为了开发出客户需要的软件,什么人.在什么时候.做什么事以及怎么做这些事以实现某一种的具体目标.**ISO ...

  8. 『软件工程12』软件工程实践方法——软件测试

    软件工程实践方法-- 软件测试 一.软件测试概述 1.软件测试的目的 (1)从用户和开发者角度 (2)Myers软件测试目的 2.软件测试的原则 3.软件测试的对象 4.测试信息流 5.测试与软件开发 ...

  9. 计算机软件工程专业,计算机软件工程专业

    下面是由普林斯顿评论发布的2011年美国大学研究生计算机软件工程Computer Software Engineering专业排名的信息,这是隶属于工程及应用科学Engineering and App ...

  10. 四川大学计算机学院软件工程期末,四川大学软件工程期末复习ppt

    PPT内容 这是一个关于四川大学软件工程期末复习ppt,主要介绍Multiple choices (only one is correct) 20*1'.Fillment 25 (8Item).Exp ...

最新文章

  1. 大赛归来的你们,仍是那个少年--少了游移、多了自信,少了软弱、多了坚强...
  2. HTML之垂直居中问题
  3. 徐波 博士 计算机,徐波教授:医工联合促进智能肿瘤学发展——探秘肿瘤精准治疗中的AI技术...
  4. hdu1213 How Many Tables-并查集
  5. java第一阶段知识_第一阶段 Java语言(下)
  6. python中的with open读取表格文件_python 使用 with open() as 读写文件
  7. java倒计时跳出窗口_java倒计时弹出框
  8. jQuery学习-显示与隐藏
  9. 解决Mysql数据库提示innodb表不存在的问题
  10. Cent OS 6/7 中通过yum安装软件时提示cannot find a valid baseurl...的解决方法
  11. 斐讯K1、K2、K2P 刷机、刷入Breed@重庆网吧电竞酒店维护小哥
  12. 制作一个简单HTML个人网页网页(HTML+CSS)web前端大作业
  13. synaptics触摸板_使用Dell Synaptics触摸板修复Firefox滚动问题
  14. C++for循环经典九九乘法表打印
  15. 魔兽世界阿拉索人数最多服务器,魔兽世界8月国服人口普查 2019wow各服务器阵容比例汇总...
  16. 突发奇想!自动化测试在测试过程中该怎样提升效率?
  17. linux中括号 美元符号怎么打,键盘输入美元符号
  18. AD参数微分非线性(DNL)与积分非线性(INL)
  19. DotNet 资源大全(转)
  20. 2019依图科技笔试题

热门文章

  1. vue3 移动端裁切图片后上传
  2. 拉姆.查兰管理实践奖2018:新经济的“瞻前顾后”
  3. 《老滚5 》买房、立室详尽办法
  4. 为什么要学习Python爬虫与数据可视化?
  5. 怎么快速修改图片的尺寸大小?怎么修改图片分辨率?
  6. 【那些年,我们一起追的女孩】第四章
  7. “肉瘾”女孩从软件测试工程师到主管的成长感悟
  8. Android实现Excel表格样式
  9. 华为p30怎样找回计算机,在华为p30中进行连接电脑的详细步骤
  10. python打靶问题,递归算法