zoukankan      html  css  js  c++  java
  • 软开心法十五||软件内功

         什么是内功?内功和招式有什么区别?我觉得这个区别我不用多说了,估计没有人不知道武功的内功和具体招式之间的差距,哪个是需要终极修炼的一目了然。

    软件的内功又是什么东西呢?那么招式又是什么东西呢?一句话:具体的实现技术是招式,心中的实现思想是内功。最明显的招式属于各种语言,内功属于使用语言实现的想法和步骤。

    那么在软件开发行业,到底都有些什么内功呢?经过这么多年前辈的总结和发展,并没有固定的方法,但是有一条宗旨就是“高质量”,高质量表现为健壮性好,扩展性好。而软件工程中所有的东西都是为这两个服务的,包括什么设计原则,什么设计模型等等。业界已经被广泛认可的有软件思想(面向对象,面向过程等),软件设计模式,代码模式,重构方法,架构模式,数据模式。我之所以列这些的原因就是这些方法都属于语言不相关的,任何一种计算机语言中,这些思想和方法都可以应用并且能够提供高质量的软件。

    软件设计方法学中,对于健壮性很容易理解,很多工程师也都多少会重视,因为这个指标容易量化,测试就可以量化。但是表现软件质量的另一方面——扩展性——往往被忽视。在软件开发中,不论是设计还是代码粒度,做了扩展性良好工作的工程师并不能得到好的回报,而领导或者其他人都反而都觉得他们多此一举,浪费时间。是的,好的扩展性的程序是要浪费时间去思考、去实现的,但是扩展性好的程序在响应变更和程序维护中节省下来的成本却常常被忽视。也就是,说程序不好、难以修改扩展,会被认为是开发人员的能力不行或者用户太刁钻;程序好了,能够快速响应变更,容易扩展的时候,开发人员又没有得认可,反而领导可能觉得是用户对变化的要求少,或者修改维护的人员水平高。正如诺曼在《设计心理学》中所说的,人们往往把错误归咎于环境而把成功归与自己优良的品质。都属于没有看清问题的本质。

           我对于软件内容特别强调的地方在于,在开发中,一定要有易扩展修改的思想,因为程序是用来修改的(不要觉得你写的程序是用来运行的) 。在这样一个思想的指导下,在写任何一行代码的时候,都要对变化考虑清楚,而对于变化的考虑我总结了如下两条:

    1、对内设计的时候尽可能考虑变化

    2、对外提供的时候尽可能限制变化

    我使用一个开发的API来说明这两点,当你要做一个API的时候,你就是开发者,而使用API的开发人员就是用户(参见前面1.1节对于用户的论述)。“对内设计的时候尽可能考虑变化”意味着你在写这个API的时候,尽可能的考虑所有的可能性,这样才会使得你的API更加通用,维护更容易。但是你在对外提供的时候,你的API的参数尽可能的限制,这就是第二点“对外提供的时候尽可能的限制变化”。这是什么意思,比如你提供了一个函数作为API让其他人调用,这时候函数有一个参数作为类型传入,你的函数会根据传入的类型来做一些操作。在你的函数处理中,你就需要考虑更多的情况,存在的类型和不存在的类型都需要考虑到。但是在你提供的时候,尽可能限制参数,比如方法的参数使用枚举类型来限制API调用者的参数传入。方面内的各种情况的处理属于“对内尽可能考虑变化”,方法的提供时候的枚举参数类型属于“对外提供的时候尽可能限制”。这样做的好处就在于内部能优雅的处理,外部调用能够正确且容易的调用。也许你觉得这样做限制的太死了,不灵活,我要借用《编写全的代码》(参考文献[20])中的一个思想:能确定的是正确的(放在if里面),其他的都是不正确的(放在else里面),这属于一种悲观的处理方式(白名单方式,即名单上的合法,其他都非法,与黑名单方式相反,黑名单方式时名单上的非法,其他都合法)。但是这样带来的好处是非常多的。

    这里所提出来的只不过是软件设计内功中的冰山一角,内功方法很多,并且不断的被总结和开发出来。但是所有的方法都有一个宗旨,那就是能够更轻松,更方便,更快速,更低成本,更高质量的实现目的。

     

    原文永久地址: http://blog.sina.com.cn/s/blog_4a2100f801013qkb.html 

  • 相关阅读:
    滑块破解
    数据结构与算法
    图形验证码 tesserocr pillow
    drf版本控制 和django缓存,跨域问题,
    Django-DRF-图书增删改查 !!!
    Django 序列化-token
    Python- redis缓存 可达到瞬间并发量10W+
    GIT 版本管理-github&码云
    Python 三种过滤去重方法
    LINUX-MYSQL
  • 原文地址:https://www.cnblogs.com/chengn/p/2701445.html
Copyright © 2011-2022 走看看