• 公号-云原生程序员
    2018-05-01
    2018年5月1日心得

    在古代的狼人传说中,只有用银质子弹(银弹)才能制服这些异常凶残的怪兽。在软件开发活动中,“银弹”特指人们渴望找到用于制服软件项目这头难缠的“怪兽”的“万能钥匙”。

    软件开发过程包括了分析、设计、实现、测试、验证、部署、运维等多个环节。从IT技术的发展历程来看,先辈们在上述不同的环节中提出过很多在当时看来很先进的方法与理念。但是,这些方法、理念在摩尔定律、业务创新、技术发展面前都被一一验证了以下观点:我们可以通过诸多方式去接近“银弹”,但很遗憾,软件活动中没有“银弹”。

    布鲁克斯发表《人月神话》三十年后,又写了《设计原本》。他认为一个成功的软件项目的最重要因素就是设计,架构师、设计师需要在业务需求和IT技术中寻找到一个平衡点。个人觉得,对这个平衡点的把握,就是架构设计中的取舍问题。而这种决策大部分是靠技术,但是一定程度上也依赖于架构师的“艺术”,技术可以依靠新工具、方法论、管理模式去提升,但是“艺术”无法量化 ,是一种权衡。

    软件设计过程中,模块、对象、组件本质上是对一定规模软件在不同粒度和层次上的“拆分”方法论,软件架构是一种对软件的“组织”方法论。一分一合,其目的是为了软件研发过程中的成本、进度、质量得到有效控制。但是,一个成功的软件设计是要适应并满足业务需求,同时不断“演化”的。设计需要根据业务的变化、技术的发展不断进行“演进”,这就决定了这是一个动态活动,出现新问题,解决新问题,没有所谓的“一招鲜”。

    以上只是针对设计领域的银弹讨论,放眼到软件全生命周期,银弹问题会更加突出。

    小到一个软件开发团队,大到一个行业,没有银弹,但是“行业最佳实践”可以作为指路明灯,这个可以有。
    展开

    作者回复: 赞,666,你已经提前帮我做了后面相关内容的预热了👍👍

     2
     439
  • narry
    2018-05-02
    软件开发最本质的挑战有两个:复杂和变更,而软件的价值是保证业务的响应力,而与之相对的是开发资源的有限,而各种的软件开发方法论,也都是在研究有限的资源下,如何应对着两个挑战,寻找平衡点,实现业务目标,因为是在寻找平衡点,就说明是有取舍的,所以就没有所谓的银弹的存在

    作者回复: 回答的很好,作者也受到了启发,谢谢👍👍

    
     120
  • cruise
    2018-05-01
    从哲学角度来说,是不存在银弹的。任何技术或方法都不是独立来看的,要综合其它各种相关因素来考虑的。因此对别人来说可能是银弹的,对你来说可能是个炸弹了。架构设计也是一样的,不能脱离业务、公司实际情况、人员配置、经费预算、时间投入等等与技术本身无关的因素,但却又是影响,甚至决定架构设计方向的因素。因此说没有最好,只有更合适。
    
     76
  • felix
    2018-05-02
    变化才是唯一的不变,所以银弹不会存在

    作者回复: 言简意赅,抓住了核心本质,“银弹”产生于一定的历史背景和大环境,而历史和环境总是会变化的

    
     39
  • 合民
    2018-05-01
    作者这个问题是否在考验,读者认真看了这篇文章没有?我认为文章的软件发展历史正是答案,软件工程归根结底是为各行各业的需求服务的,而随着需求的复杂度越来越高,用户的要求越来越高,软件也越复杂,形态也在不断变化,所以没有一种方法论能称得上是银弹,只能说某一种方法论适合某一种需求。这也正是架构师存在的意义,去选择合适的技术,如果有银弹,还要架构师干嘛!以上只是个人见解!

    作者回复: 你已经看穿一切👍👍
    确实是想通过介绍历史来启发大家思考

    
     35
  • 李志博
    2018-05-01
    软件开发的结果在于人,而不在于方法论,面向对象,设计模式,架构,这些概念的推出距离现在,好几十年了吧,可真正理解透彻的能有多少呢,就算有像作者这样理解透彻的,还在一线开发的能有多少……阿里的p9难道还在一线写代码嘛……最终写代码的人还是理解不到位的我们,技术强的,写的项目能多撑两年,但是复杂到一定程度,没有良好关系架构指导,都是坑

    作者回复: 其实不一定要P9才要理解到位呢,我2014年就写了《面向对象葵花宝典》,那时我还在写代码的哦,其实我现在也写代码,不写代码很多技术没法确切理解,我现在写demo代码比较多,例如用golang写个简单的区块链,用java写个reactor等

    
     21
  • Alspadger
    2018-05-01
    因为设计者都是站在当时的业务瓶颈下考虑问题的,因为你不可预测当业务发展的一定程度后,又会遇到怎么样的技术瓶颈。也就是所谓的技术支撑业务发展,业务推动技术发展。
    
     17
  • xuan
    2018-05-02
    “No Silver Bullet”的原文是:“没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。”之所以这样说,是因为软件的根本困难(Essence,包括复杂度、一致性、可变性、不可见性)
    复杂度:规模上, 软件实体可能比任何由人类创造的其他实体更复杂, 因为没有任何两个软 件部分是相同的
    一致性:软件的变化必须遵循一系列接口标准规范,有些情况下它的变化就是要兼容;
    可变性:一般有如下几种情况:
      1.当客户喜欢用某个功能或者某个功能能解决他的某些问题时,他会针对这方面提出很多优化该功能的需求点
      2.硬件或者其他配件的升级变化 必须升级现有软件平台
    不可见性:软件不存在一种空间形态 可以通过一张图
    或者其他载体来可视化展示 ,不能通过地图 电路设计图等来全面展示.
    由于这几个点的变化,导致系统越来越臃肿,从而导致管理成本上升,沟通困难,可靠性逐年下降等等;而结构化 面向对象等主要是来提高生产率 可靠性和简洁性
    展开

    作者回复: 没有看过《人月神话》的程序员不能成为好的架构师😃😃👍👍

    
     15
  • Mark Yao
    2018-05-02
    软件本身的复杂度难以度量,随时间和规模发展,原有的解决方案很快难适应,人们就不断总结经验模式和设计解决新困难的办法,但是不管什么样的架构设计都是在尽量满足适应我们可能遇到的问题的解决方案,不是解决问题方案。生活中我们的应用从单体到主备再到集群、分布式、微服务最后到最新的Service Mesh,这些其实都是解决和改善、完善、优化我们在软件开发遇到的问题。There is no silver bullet.

    作者回复: 回答正确👍

    
     13
  • crazyone
    2018-05-06
    感觉像是看大佬们在华山论剑般,评论相当精彩
    
     10
  • 淡云天
    2018-05-02
    解空间是建立在问题空间之上的,问题空间的扩展速度远超解空间时,就会架空解空间。而这时就需要新的、适应问题空间扩展速度的解空间来担当这个阶段的银弹。这一点类似于宏观物理学和量子物理学,只不过物理学几百年的进化之路,计算机只用了二十年就走完了。。。
    
     10
  • yoummg
    2018-07-08
    作者的用心令人敬佩。
    为什么现在我们在谈“架构”,他不是平白无故产生的,他是在一定的背景下产生的。更好地理解他产生的原因,会在具体解决问题的时候做到有的放矢。
    直到现在才看明白,what,why,how。这真是一个认清事物最本质的三步。👍👍👍

    作者回复: 你已经洞悉天机👍👍😄整个专栏思路就是这样的

    
     8
  • 带刺的温柔
    2018-05-01
    软件架构是为了解决大规模开发时遇到的效率、复杂及扩展性问题。听老师所说让我对架构认知又更加清晰落地。但是对拆分粒度越来越粗,层次越来越高理解的还是不够,其实与我的一些开发习惯是相悖的,一般我会尽可能拆分细来保证后期的扩展性。不知道老师我是哪里理解偏差了
    
     7
  • 阿罗
    2018-05-01
    超赞👍🏻,
    饱含认识论和系统论的理论知识与软件实践知识。太难得了,非大集成者无以为之。我买过最值的课程!
    
     6
  • 候鸟归来的季节
    2018-05-01
    技术在不断发展,新的业务需求催生新的技术,没有银弹
    
     6
  • KingPoker
    2018-05-01
    推荐一本书「伟大的计算原理」,把计算机的本质问题描述的很透彻,也给我有一些全新的认知。
    
     5
  • 闭嘴
    2018-05-02
    感觉作者对整个软件行业有比较深入的了解。就是内容太少。还没看就没了。希望后面的文章多来一点干货。让我这种小白能够学习到一点实质的东西。能够解决项目问题的一些东西。希望大神能够把自己的功力展现60%就行。

    作者回复: 这是提炼出来的,为了写这一篇,我写了2~3周,如果觉得意犹未尽,可以在这个基础上继续去探索

    
     4
  • 老甘
    2018-05-01
    所有的解决方案都是为了解决某一类问题,既然是某一类问题势必是术业有专攻,从辩证的角度也很好理解,事物都有两面性,不存在某种方案可以解决所有问题而没有任何弊端,有弊端自然会出现针对某个场景更好的解决方案。而且,世界在变化,针对现实世界解决问题的软件业务逻辑也势必不断变化,所以只有针对多数场景暂时的银弹,而没有永久的。未来还有更好的
    
     4
  • Welton
    2018-05-01
    技术在不断发展和更新,没有一劳永逸的事物能够代替不断变化的大千世界需求!
    
     4
  • 强
    2018-05-02
    关于银弹,我想从另外一个角度聊聊。上学时候,老师(c++标准编写者)跟我们分享的一思考题: 软件究竟属于工程行业还是偏艺术(或工艺)行业。前几十年,软件从业者基本是努力将其往工程化发展,像硬件制造一样可控,高度复用,流水生产。经过这些年的发展,工程化基本未实现(否则码农就和生产线工人一样,工资不会越来越高),现在越来越多人思考,也行软件更多是艺术行业。既然是艺术类,自然就无银弹的说法
    
     3
我们在线,来聊聊吧