动态性的哲学——我对编程的一点点思考
时代在进步,但不见得程序员的平均水平比以往更高,因为总是有大量像我这样的菜鸟走进这扇门。但不可否认,现代程序的总体质量比10年前强大很多,不论是用户体验,还是功能,鲁棒性都是如此。自然这拜于当前越来越高级的语言和设计模式。我非软件专业,但我愿意就软件的“动态性”做一些有必要的讨论。
我认为,编程在满足基本要求的基础上,要实现所谓的“动态性”。而程序员水平的发展,从一个角度上看,也是动态性观念的提高。
超级菜鸟阶段:
第一阶段:HELLOWORLD,非常胆战心惊的打开VC6.0,一步一步的按照书中的操作新建工程,一个标点和空格的都不敢出错的敲下了HELLOWORLD,编译,运行,在那黑色的窗口上出现了那段你期待已久的字符!这个阶段,你甚至不敢为程序付出一点点的动态性。
面向过程阶段:
第二阶段:你学会了写函数,void task1(),void task2(),在一个switch语句中,你可以让用户自行选择,哇!我实现计算器功能了!
第三阶段:大量的常数让你在修改程序时候变得狼狈,于是你学会了预编译和常量,通过#ifdef 方法来设计自己的程序走向,当修改功能时仅仅需要改几个参数了。自身的动态性进一步提升。
面向对象阶段:
第四阶段:你开始学会写类了,总算可以实现基本的代码重用了。但为别人编了一个小型程序,赚到了一顿饭钱。可是,这个哥们的要求变化多端,让你不得不更改每个类的功能来符合要求,于是你思考着,如何设计每个类,才能更好地响应这种变化?哦,我听说,让一个类实现其尽可能少的功能,将类和类的耦合度尽可能降低!
第五阶段:你的团队耗时三个月,完成了一个公司的项目。公司将其使用了将近半年,但突然由于业务变化,要求增加新的功能,但不能改变原来的功能甚至配置。甚至,要求你的程序在不停止的情形下完成升级! 这下难倒了你。于是,你在思考,设计一些接口(interface),实现基本的框架,而需要增加新功能时,为其提供满足这些接口的插件即可。而且你的程序可以自动识别加入的插件,在运行时添加功能!你在加入新功能时,都不需要对原来的代码做任何的修改!你觉得,动态性真是太重要了!
第六阶段:你觉得以上的方法还不过瘾,添加和修改起来还是复杂。于是,你将程序框架大刀阔斧的修改和升级,通过MVC结构,比如WPF,实现界面,逻辑,算法,数据的全面分离。对整个软件的框架,你把它们设计成了“很多桥连接的小岛群”。小岛可以看成数据类,可以通过抽象类,重载等方法实现,你可以随时加入新的小岛。桥可以看成方法接口,通过抽象接口和其继承,实现随时更换桥~当然桥必须实现必要的“接口”!
动态自适应高级阶段:
第七阶段:可自适应环境的代码!你的代码随着火箭上天了!星际通信允许你对代码远程升级?太搞笑了吧。环境变化了,你的程序必须依照环境自适应的修改参数和方法,来实现对环境的适应性。当出现错误,它还可以自行检查异常,回到正轨。 这需要怎样的编程技术呢?神经网络?但可以认定,模式识别和人工智能将在这个阶段非常重要! 这让我们想起了人,人可以适应环境,同时可以在可控的范围内实现自恢复。
第八阶段:可思考和进化的程序! 你制造了一个机器人,强大无比,但它同样配合了最先进的软件技术,它可以通过对环境的学习,动态的学习和思考,与人交流。判断哪些是有益的,哪些是有害的,并建立自身的行为准则。它可完全脱离你的控制,实现自我学习和升级。很酷吧?强大的动态性!终结者啊。
第九阶段:能生孩子的程序(笑~)!你的代码不仅可以进化自身,而且还可自己编写程序,实现更多的小程序!这让我们想起了《星舰战将》的大臭虫。 自我繁衍,从而可以自己演化出一个大的“程序家族”出来。这是人类之幸?还是人类之不幸?不可否认,达到这种目标,人类几乎已经不是其对手了!
无敌阶段:
第十阶段: 有感情的程序!能思考,能生孩子,有智慧,能自我演进的程序,还是打不过人类,因为人类有“爱”(摘自终结者4)。我相信,情感才是超越一切智慧和能量的终极。技术和智慧能让人类极度发达,但却不一定幸福,而情感却能做到这一点。 “有爱的程序”这是怎样的动态性啊!
让我们回到现实。
就如我最近编写的一个框架一样,我希望它能尽可能满足我未来的要求,并动态的加载功能,于是我花了很多时间,研究了各个组件之间的接口和交互方法,而并不着急做实现。我想努力地达到我上面说的“第六阶段”的水平,但实在太难了,因为我毕竟不是软件科班出身,但我也会努力的。
作为一个通信界人士,讨论下移动通信的动态性。导师牛老师所著的《移动通信原理》中提到,“移动通信的发展核心就是为了满足动态性.....",第一代系统满足了信道和用户的动态性;二代系统(2G,如GSM,CDMA)进一步的提升了效率,通过蜂窝和时分技术提升容量;第三代系统,实现了业务类型的动态选择特性,并加入了自适应调制和编码,以更大的提升效率;第四代系统(LTE?)引入了网络拓扑和网络运行的动态性,实现扁平接口,三网融合。 而移动网络的发展,说白了就是为了更好地满足这四类动态性的!
最后,打一个不恰当的比方,我们宿舍没有独立卫生间,只有集体的。有人认为好,有人认为不好。我觉得还是公共卫生间比较爽,不会因为有人在独立卫生间导致你没法用厕所。对公共卫生间来说,所有位置都满的概率是相当小的。这也就是资源的动态分配的最好体现。 移动通信也是这样,其实资源还是那么多,我们更好地动态分配了,所以看起来,通信容量在高速的发展!
欢迎讨论,本人不是软件科班,有些概念有误,轻拍~
作者:热情的沙漠
出处:http://www.cnblogs.com/buptzym/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。