• Google软件工程:什么是软件工程


    剪辑自: 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个法则:海勒姆定律左移策略
  • 相关阅读:
    浅刷牛客链表题,逐步深入链表,理解链表
    CentOS7和CentOS8 Asterisk 20.0.0 简单图形化界面5--libss7驱动7号信令
    milvus 迅速搭建
    FALSK+vue高校学生宿舍管理系统python-django
    postman导入请求到jmeter进行简单压测,开发同学一学就会
    未来SEO的发展方向是如何
    代码随想录52——动态规划:300最长递增子序列、674最长连续递增序列、 718最长重复子数组
    异星工场入门笔记-02-一个重要地学习方法
    国科大-计算机算法设计与分析-卜东波作业3
    HTML拆分与共享方式——多HTML组合技术
  • 原文地址:https://blog.csdn.net/qq_41854911/article/details/127962417