zoukankan      html  css  js  c++  java
  • 从程序制作到构架制作《程序员成长路线图:从入门到优秀》优秀篇(节选5)

    《程序员成长路线图:从入门到优秀》优秀篇(节选5)

    从程序制作到构架制作

        从技术层面上来看,优秀程序员和一般的程序员相比,其中一个重要区别就是重心从程序制作转变到构架制作。绝大部分程序员关心的是如何将各种各样的需求通过计算机语言进行编程实现。因此他们有三个方面的重点:需求、编程、需求到编程那个过程。所以他们的主要精力在用于需求是什么?需求怎么变成功能设计?如何实现功能的程序编写?他们的出发点是需求,终点是程序。

    随着我们编写程序的数量增多,我们慢慢地会发现有两条主线同时在运动,一条是用户需求,一条是程序编写。就用户需求而言,我们就会发现不同用户的项目之间的需求比较类似,做的越多我们看到相同的需求或类似的需求就越多。在程序编写方面,我们面对相同需求或类似需求的时候,就会自然用原来的程序或用原来的程序进行修改来完成了。同理,程序编写的越多,我们用到的原来的程序的次数就越高。这种现象是和需求趋同的规律是一致的。在项目开发过程中,我们就会自然而然地将相同的需求用相同的程序来完成。于是,我们就会产生了需求和程序之间的对应关系。例如,我们想要在A项目中检查一下用户的权限,我们自然就会想起以前在B项目编写过的check_usr_right这个函数。于是我们就会把这个函数拷贝过来用在A项目之中。虽然,拷过来的函数并不能完全满足项目A检查用户的权限要求,我们可以对check_usr_right函数进行改造,这样就成了新的check_usr_right函数了。如此一来,我们就会积累出很多相同的程序,这些相同的程序表现为公用函数、控件、类库等。这种编程方法和最初一心实现需求、采用原始的连续性编程方式相比,开始考虑了软件构架问题了。

    那么什么是软件构架?软件构架就是站在软件自身角度上(而不是站在需求角度上)编制软件的技术方法。通俗地说是软件之上的软件。如果我们一个窗户看作一个项目,那么窗框就可以看作成构架,而窗框里的小框和玻璃以及玻璃上的贴花和贴膜,则可以看作小构架和构架下的各种功能。我们可以看到,窗户的形状(方形,长方形、半圆形、异形等)是由窗框决定的,而窗框中的小框和玻璃等是在窗框范围之内的。因此,我们可以这样认为,软件构架决定了这个软件的大范围和构架,而其中的功能软件则是在这个构架之下的功能实现。

    既然我们知道软件构架是软件之上的软件,那么软件构架和我们一般程序有什么不同呢?我认为其不同之处在以下几个方面。

    1、 抽象和具体之间的差别

    一般程序主要是解决具体的需求,形成一个具体的功能。比如,要计算1+2等于几,非常之具体,程序员容易理解。而软件构架并不针对一个具体的需求,比如,要进行算术表达式处理。当然这个算术表达式的处理,也可以处理1+2等于几的需求,但是,这个算术表达式是抽象的,并没有具体的需求,但是能处理具体需求。

    2、 大和小之间的差别

    一般程序主要是解决具体的需求,程序很小,功能点也比较直接,并不复杂。而软件构架则是软件之上的软件,考虑问题比较多。例如,它要考虑软件的整体的一个构架,构架中的各种模块的功能,构架中的模块之间的关系和接口,构架怎么与具体程序相联系等各种问题。因此,构架程序量是很大的,功能也相对复杂。

    3、 高和低之间的差别

    一般程序在解决需求时并不会去给软件分层,最多是按B/SC/S,或者是按表示层、逻辑层、数据层三层构架来进行程序分层。另外,一般程序只要能满足具体需求就OK了,其技术上的并没有硬性的要求。但是,软件构架就不同了,它是将软件进行了分层处理,最上面是构架,最下面才是具体功能。因此,软件构架对技术要求相对是比较高的,比如程序的结构,程序的效率,程序的通用性和扩展性,程序的并发处理、程序的例外处理等等。这样有了软件构架概念之后,软件就分为构架软件和具体软件两个部分了。构架软件处于上层,可以应用于各个项目,而具体软件或称具体程序则处于下层,这个具体程序和我们现在所说的一般程序很接近,这两者结合形成了具体的项目或系统。

    4、 全面和局部之间的差别

    一般程序主要是解决一个项目的某个具体需求,因此,它体现出程序的局部性,所以一个项目可以给不同的程序员去完成。软件构架在设计时或者在制作时,则是站在全局的高度来审视整个抽象的项目,一方面要考虑构架本身的功能,另一方面要考虑到如何向具体程序提供合适的接口。这两个方面都需要对项目或软件有一个整体认知,而不仅仅限于某个局部。

    当然以上的差别是非常宏观的,并不很具体。但是,有一点是可以肯定的,那就是软件构架制作是和一般程序编写不同的。这一点需要程序员去细心地体会的。如果一个程序员没有软件构架的意识,只是满足于停留在一般程序编写的优劣之中,那是很难进入优秀程序员行列之中的。那么什么是软件构架的主要内容呢,程序员应该关注那些问题呢?

    1、 构架意识

    意识,我仍然在强调意识的重要性。没有对某个事物重要性的意识,就不会关注和研究这个事物,就不会去主动掌握这个事物,就不会利用这个事物去创造更大的价值。同理,如果我们的程序员没有构架意识,就会在普通程序员中求得那种优越感,时间一长就感到自己在软件中没有可以发展地方。而有了构架意识,我们的程序员就可以在原有的编程基础上,向更高层面发展,那里有更大的空间需要我们去学习和展示自己的才华,可以说构架领域中的学识和技术是没有止境的。

    2、构架制作

    光有构架意识还不够,还要让构架从设计走向程序,这就需要进行构架制作,也就是说我们要编制构架程序。而编制构架程序,就涉及到具体的程序设计语言,涉及到具体程序语言的特性、涉及到具体程序设计语言的编程技术和技巧。这些编程需要程序员要有很扎实的编程基本功,很高的程序设计的技巧,以及程序编制的丰富经验。构架制作绝大部分都是面向对象、面向抽象功能、面向通用、面向参数化的编程。

    3、 构架应用

    我们不能为构架而构架,我们编制构架的其中目的,就是可以更快、更好、更节约地开发出我们的应用系统。如果我们编制的构架不能运用到具体项目开发中,或者编制的构架反而比普通的编程效率更差,质量更差,达不到我们预期的目标,那么我们的构架只能是失败的构架,失败的构架比没有构架更加糟糕。因此,我们要编制那些有用的构架,并且通过具体项目的开发来验证构架的正确性和有效性。可以这样说,开发的项目越多,构架的积累也就越多。只有这样我们才能让我们的构架更加具有实用性和实用价值,在开发和运用中发挥越来越大的作用。

    4、 构架研究

    构架一方面是一个实用的程序,另一方面也是一门学问,它需要理论和实践的不断地结合和完善来体现其价值。例如,我们如何划分构架程序与具体程序之间的界限;我们面对各种应用系统是采用统一构架方式,还是采用多构架方式来完成项目的开发;我们在应用构架时如何设计和应用参数,并使得参数运用更加简便合理;我们在采用不同程序语言在制作构架时应该注意什么问题;我们如何处理构架与具体需求之间的关系;我们怎么利用具体程序与构架之间的接口实现动态程序的挂接等等话题都是我们可能要面对和解决的。因此,我们要静下心来,要学习构架各种知识,要大量积累项目开发经验,区分那些是属于构架方面的功能,那些是属于具体程序方面的功能,研究采用什么样的编程技术才能达到构架的最佳效果。理论和实践的结合才会让我们长成腾飞的翅膀。

    采用构架的方法开发程序可以让你的程序技术上个档次,让你的项目结构更加清晰,让你的项目开发更快更好,让你的项目更具有可维护性和具备可扩展性。

    没有构架的约束,我们可能更加自由,但是,有了构架的约束,我们可以让自由更加有价值。追求价值才是我们最终的目标。

     

       互动网:http://product.china-pub.com/197989

       当当网:http://product.dangdang.com/product.aspx?product_id=21065274

       卓越网:http://www.amazon.cn/dp/B004X3Z3FC/

       豆瓣网:http://book.douban.com/subject/6075127/

       官方微博:http://t.sina.com.cn/2108296203

     

     

     

     

  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/n216/p/2054012.html
Copyright © 2011-2022 走看看