最近在找工作,所以重新开始看书,重新整理知识体系,而现在上海的晚上很湿热,睡不着,就产生了这些想法。

不说更早的历史,就从dos开始说起。dos刚出来的时候是单进程的,根据人们的需求发展出了多进程的概念,而这种技术一直被保留到现在。现在的操作系统好像没有单进程的系统了吧。那为什么要有多进程,为什么会有这样的需求?比如你现在打开了word考试撰写文档,而又想要上网去查找一些资料,如果是单进程的,那就意味着打开了word就不能开IE,要开IE就要关掉word。那样操作起来肯定会很麻烦。这个和编程的发展方向有什么关系呢?暂且绕开这个话题,先看看我们写一个web网站是如何工作的。

web的工作方式,肯定需要是有一个宿主(专业点的说话,比如IIS、Apache等),然后写一段程序,把这个程序配置到宿主中,就可以访问了。 那什么是宿主,它在做哪些事情?刚才都说了宿主就是比如IIS之类的程序,可以理解为一个容器,它有一些接口,只要满足这个接口规定的程序,就可以在这个宿主中运行。为什么我们写的一面一定要以aspx后缀结尾?为什么aspx页面里不能写汇编?这个可以理解为一种协议。怎么理解这个协议的作用呢?那就要知道IIS所扮演的角色。当你访问IIS某个站点的某个文件的时候,它就知道去哪里、以什么方式来运行所要做的事情。这个和C#里接口的概念很相似,你只要满足接口,那么就可以扔到一个上下文中去执行。

假如,你来开发一个宿主,需要做些什么?首先,需要写Socket侦听,侦听到连接,开始接收请求的数据(HTTP协议消息),然后解析消息,按解析结果执行,最后返回结果。大致这么几个过程。而所有的人都在请求这个IIS,这就是聚焦。用户使用的客户端是发散的,而所有的请求,都会聚焦到这个点上。这个聚焦的点,在IIS内部就是Socket?事实上不能这样理解。HTTP请求所用的Socket是一对一的,也就是说,每个用户请求IIS之后,IIS内部对每个请求有一个隔离。每个用户都有自己当前请求的上下文,这个上下文是独立的,而我们的代码只有一份,所以的请求,运行的进程、线程,代码对它们来说就是聚焦的。就是说,现在我们开发的web应用,是在维护一份代码,而让他们可以发散地(多线程、进程地)工作。事实上,单机程序,c/s架构也是和web的开发方式一样的。开发人员不会为每个人开发独立的应用,至于个性化,那是软件的一部分。

这个道理谁都懂,上面的分析有点画蛇添足的味道,无量天尊!~~~

事实上我们开发的应用,不全是那样。比如静态变量等全局应用,是在运行时唯一的。在处理这些全局数据时,我们一般会lock,和数据库应用的悲观锁是一个概念。这个地方就会产生一个问题,全局数据会影响所有人的响应,一旦全局数据出错,那是致命的。这就是我们这里要讲的聚焦效应。静态数据是运行期有聚焦效应,而代码就是编码期有聚焦效应,并且这个效应更加明显。对一处代码的改动可能会影响很多地方,那么这里的代码就是聚焦的。在C#编程中可以理解为,接口、超类、生产者都是聚焦的。这个焦点改变了,那么影响是巨大的。可以想象下,凸透镜的焦距发生变化,要保证焦点不变,那么光源的光线就要全部变化。为了适应这种变化,各种理论发展起来,而OO就是其中之一。OO的多态是在拥抱变化,而这个过程就是发散的过程。

假设,现在开发的应用都毫不相干,没有任何可以提取公用的部分,也就是说,提不出接口,泛化不出超类,那整个代码都是发散的。而OO里面很关键的就是要提取不变的部分,设计会变的部分,这是代码重用里最重要的思想,我是这么认为的。我认为这就是一种聚焦思维,而未来一段时间编程的发展也会朝着这个方向发展。如果认为一个系统哪个地方都需要变化,那就根本没有代码重用的可能。而事实上,一个软件的代码中总有能重用的代码,那就是说总有不变的代码,总有聚焦的地方。这是不变代码的聚焦,对于变化的部分,我们也在寻求聚焦点,而这个过程需要作好设计。

对于变动的代码,有两种开发的方式。一个是提供服务的,而另一个是享受服务的。这句话怎么说呢?比如,在C#开发中,调用.Net Framework类库,那就是享受服务,这个是发散的。而提供服务最容易想到的就是工厂模式和委托。和在网站开发中模板的方式类似,在网页中设置一个替换符号,用内容来填充这个符号。委托也是这样,在一个应用中,定义了一个方法执行这个委托,我们不知道他的工作方式,但是我们已经在使用它,这应该算是一种逆向的思维。插件架构就是这样工作的,由配置来决定调用哪个类。而聚焦点就在这个超类或接口。

最后,可以看出,编写代码一共有三种方式。

第一、不会变化的,这是绝对聚焦的代码,一旦改变,后果不堪设想;
第二、类库式的,这是发散式的代码,类库不能控制你怎么提取焦点;
第三、框架式的,这个是聚焦于接口或超类的代码,不变动接口和超类,还是可以接受的。

以上贫道的一点浅见。明早还要去面试,睡了。

聚焦与发散——浅谈编程的发展方向相关推荐

  1. 计算机对于管理信息系统其实并不重要,浅谈计算机管理信息系统发展方向

    摘要:随着计算机技术的飞速发展,作为一门综合学科,计算机管理信息系统不仅涉及到计算机.系统等技术,更与管理方面的知识有很大的联系.计算机管理信息系统水平的提高不仅优化了人们的生活,更成为教学管理的重要 ...

  2. 浅谈显 ipqq 发展历程

    浅谈显 ipqq 发展历程 [附显 ipqq原理] 声明,本文章未经过疯狂绅士与runjin的同意不得转载. 浅谈IPQQ软件的技术发展轨迹 疯狂绅士.RunJin 摘要:本文先给出了IPQQ的界定, ...

  3. 浅谈主流内存发展历史

    浅谈主流内存发展历史 申屠志刚2018329621200 信息学院 计算机科学与技术18(3) 摘 要:计算机必然包含运算器.控制器.存储器和输入输出设备等五个重要部分,其中作为内存储器的内存条在PC ...

  4. 量子力学在计算机上的应用论文,《浅谈量子力学的发展与利用》-毕业论文.docx...

    课题提纲 1.课题: 浅谈量子力学的发展应用 2.序论: 中心论点:量子力学的发展史和前景 3.正文: 1 : 量子力学简介 2: 量子力学的兴起 3: 量子力学的历史发展 4: 量子力学的研究内容 ...

  5. 浅谈编程思想的重要性

    浅谈编程思想的重要性                            作者:wfg2005 在面向对象编程里,其实你用什么语言不是最重要的,最重要的是OOP思想.也就是说在面向对象编程中我们要精 ...

  6. 浅谈智能问答系统发展及在高校中需求现状

    在科技新时代的发展中,智能信息化一直是研究的热点,家里用的扫地机器人,强劲有效清除尘土:阿里巴巴2017年推出的AI智能产品-天猫精灵,能实现智能家居控制.查天气.语音购物.手机充值.百科查询.音乐播 ...

  7. 浅谈编程思想的重要性[wfg2005]

    浅谈编程思想的重要性                            作者:wfg2005 在面向对象编程里,其实你用什么语言不是最重要的,最重要的是OOP思想.也就是说在面向对象编程中我们要精 ...

  8. 浅谈 Java VM 发展

    浅谈 Java VM 发展 Jim Huang <jimchyun @ ccns.ncku.edu.tw> <jserv @ kaffe.org> 略为整理笔者对 Java V ...

  9. 浅谈计算机网络,浅谈计算机网络的发展

    浅谈计算机网络的发展 摘要:计算机网络一直在不断地更新,也在快速的发展.计算机网络技术的不断提升,也使得其他的各行各业在计算机方面的应用也越来越受到重视,计算机网络的应用也充斥到了日常生活和工作中.除 ...

最新文章

  1. java 找不到符号变量_java编程找不到符号
  2. spark之1:快速入门
  3. How browsers work
  4. select下拉框带模糊查询_如何实现参数级联查询
  5. Linux中yum不能用的原因
  6. python 并发编程 socket 服务端 客户端 阻塞io行为
  7. 摊牌了,国内首个三维重建系列视频课程,涉及SFM、多视图几何、结构光、单目深度估计等...
  8. 【遗传算法】基于改进的遗传和粒子群算法求解高斯烟羽模型气体扩散优化问题含Matlab源码
  9. 韦东山嵌入式Linux三大学习路线
  10. 计算机公式怎么计算合计,excel表格函数数据求和公式是什么-Excel中怎么用公式计算合计...
  11. 谷歌勒令Chrome扩展程序开发者减少请求数据量 并打击欺骗性安装
  12. Mybatis错误 Result Maps collection already contains value for xxx
  13. mirna富集分析_课题研究实验外包高通量测序——miRNA测序
  14. GMSK调制解调(二)
  15. 移动宣传舞台车设计及运动仿真(lunwen+开题报告+初稿+cad图纸)
  16. 《RabbitMQ实战指南》读书笔记
  17. 股票突然出现断崖式下跌是什么原因?
  18. ccdc 剑桥数据库
  19. FFMPEG采集摄像头图像SDL渲染+MP4格式视频编码
  20. c# php 时间戳,C#实现时间戳的简单方法

热门文章

  1. 直播预告 | STC单车拉力组专题培训
  2. 2021年春季学期-信号与系统-第八次作业参考答案
  3. 拆解一个舵机组成的机器人
  4. 使用STC8H1K的高级PWM的正交编码器计数方式
  5. office2003计算机考试,计算机考试Office2003应用.doc
  6. mysql中index的作用,在mysql中使用INDEXES有什么好处?
  7. beego 获取字符串中的数据_MySQL中获取季度、年度等数据
  8. 计算机财务管理相关文献,财务管理外文参考文献(精选文献105个)
  9. 天线决定接受频率_对讲机天线到底有多重要?通讯效果好不好要靠它!
  10. 对未标记为可安全执行的脚本_Script Debugger for Mac(脚本调试软件)