系统随想

来源:互联网 发布:兄弟连php课程价格 编辑:程序博客网 时间:2024/04/29 09:00

    宇宙是什么?宇宙是万物的总和,宇宙既是实体,又是概念。宇宙是一个庞大的系统,所以宇宙有其自身的规律。这个规律的本质特点就是运动,任何系统的规律都是运动的规律,也就是说只有运动的系统才是有意义的系统,研究一个系统就是研究它是怎么运动的。宇宙包括了从无穷大到无穷小的所以物体,每一级都有其运动规律。从天体的运动到电子的运动,都是宇宙运动的一部分。

    研究各种运动是人类的使命,为什么呢?只有掌握了运动规律,才能利用这些规律,利用了这些运动规律,才能产生能量。人的发展自然要靠能量。比如:掌握了空气的运动规律,才能产生风能;掌握了水的流动规律,才能产生水能。懂得去利用煤的燃烧,才能产生火能。最终,以上的能量都可能转化成电能。

    世界上的规律可以分成两大类,一类是自然的固有的规律,比如地球绕着太阳转,比如牛顿定律等;还有一类是人类自己去制造的,比如电子计算机的运动规律,锅炉的原理等。研究前者的人可以成为自然科学家,比如爱因斯坦,研究后者的人,可以成为工程师,比如比尔盖茨。我们每个人穷其一生的精力,不过能对某一个或某一类系统有所研究,而这个系统可能很小,也可能比较大,看个人能力而定。比如一个建筑师,能力强的可以建筑复杂的帝国大厦,能力差点的可以建筑一个茅草屋。比如软件设计师,能力强的可以设计操作系统、登月软件,能力差的只能构造一个桌面计算器。

   我们选择的是计算机科学里的软件科学,而且只是软件开发,可能还是集中在c++,而且系统可能还是在手机上,并非全部的手机,可能只是诺基亚手机的symbian系统,而且不是手机的各种软件,可能只是手机浏览器这块。如果细分下去,我们每个人的经历真的很有限,领域真的的很窄。回到上面说的,运动是系统的本质,那么我们软件工程师其实就是研究的是软件系统的运动规律。并且可以去利用这些规律制造出一个新的系统来,最终是为人类服务。

   工具是手段,重要的是思想。什么算法,什么模式,都是前人对问题的解决方法,我们去学习它,运用它,发扬它,然后去解决新的问题。

   软件系统的运动是逻辑上的运动,从最底层来讲,软件的逻辑运动是靠电子运动来表示的,在高级一点,就是CPU的指令运动......一直到我们研究的软件层,可以转换成函数之间的调用、数据的处理;对象之间的交互等等。

   最初写到这里是2010年,转眼已经2014年中了。这几年自己也经历了很多,对系统的理解也进了一步,但是也只是在某些领域的深度上有所投入。软件在发展,但是无论怎么发展,都是为了让人类更加容易去构建它,所以无论是哪种开发方式,都是这个目的。人类和机器的区别是人类的理解力短时内只能集中在比较小的一块,无法把一个非常复杂的原理一次性放到大脑里,而机器可以。所以人必须在大脑力不断的进行“视图”切换,这个视图就是人所能理解的比较合适的对系统的描述。

   说到这里还是很模糊,视图到底是什么,其实每个人的定义都不同,实际上也没法统一。因为你用不同的方式去看问题,就有不同的视图概念。比如从全局到局部的理解方式,视图就是一个从总体架构到局部设计到最小模块的不断缩小的图层。你如果自底向上的看问题,那视图又是个从低级到高级不断抽象的图层。对应到我们软件架构上来说,可能会有概念视图,物理视图,逻辑视图,运行视图等等。

  概念视图就是描述整个系统大概都有哪些模块,但是并不定义这么模块间的接口,我们通过这个只能大致了解整个系统的组成。比如一个操作系统,我们可以描述它的概念视图就是由进程管理,io管理,内存管理,文件管理等子系统构成的一个计算机管理系统。

 物理视图呢,就是描述整个系统在真实的物理环境上怎么分布部署的。比如分布式系统在idc上的部署。

 逻辑视图呢,就是从模块的角度来描述软件系统,包括模块间的接口,有了这个就可以把软件划分成不同的任务交给不同人去开发了。

 运行视图呢,就是从动态的角度看系统运行起来各个模块的交互流程,以及多进程,多线程等的交互方式。

 通过这些我们可能对系统有了个初步的概念性的理解,但是这远远不够的。如果我们要做一个程序员,那必须深入到某一个模块里去,要能用代码来实现它。这里面的学问可能穷其一生都搞不完。路漫漫。。。