天下大势,合久必分,分久必合。感觉这句话很有道理,基本上蕴含了普天万物的发展规律。IT技术似乎也是如此,比如说异步与同步。异步是自然界的普遍现象,而同步不是,是需要人工干预的。为了保证一致性,我们引入了同步机制。然而当我们有效地解决了这个问题以后,又发现了新的问题:效率。为了解决这个新问题,我们又回过头来研究异步。就这样反反复复多次,最终达到平衡。B/S架构似乎就是一个很好的例子。
软件工程似乎也是如此。一开始我们从机器的角度考虑问题,使用汇编写代码。问题繁琐,但是单一。为了模拟信息隐藏和多元相关性,我们开始面向对象。但是当我们泛化过度时,又发现难以保证语义一致性,这是过分模拟现实世界的必然结果。现实世界是复杂的,过度的模拟必然将这个复杂性引入工程管理中。为了解决这个问题,我们开始重聚合,轻泛化。其实所谓的聚合,组合,泛化都是语义上的,从二进制的角度没有本质区别。我们所作的工作就是不断的抽象,不断的将简单问题复杂化。编译器的智能性越来越强,为了适应这部机器,我们不得不改变简单的思维方式,去从它的角度考虑问题,从它的角度编写代码。进而使得我们根本不去考虑问题的实质,因为有这时间我们会去抓紧时间研究这台机器为我们提供的复杂模型。
好了,忽悠到此为止。最近心情烦躁,感觉比较有点迷失。就是不想看书,无聊只有来瞎写了,嘿嘿。其实我要说的东西很简单,从二进制的角度来说,一直来我们都被封装、继承、派生、泛化、组合、聚合、关联、耦合、内聚等概念忽悠了。其实很多问题都是同一个概念,不同的形式而已。举几个例子吧。
1:汇编和结构体
软件工程似乎也是如此。一开始我们从机器的角度考虑问题,使用汇编写代码。问题繁琐,但是单一。为了模拟信息隐藏和多元相关性,我们开始面向对象。但是当我们泛化过度时,又发现难以保证语义一致性,这是过分模拟现实世界的必然结果。现实世界是复杂的,过度的模拟必然将这个复杂性引入工程管理中。为了解决这个问题,我们开始重聚合,轻泛化。其实所谓的聚合,组合,泛化都是语义上的,从二进制的角度没有本质区别。我们所作的工作就是不断的抽象,不断的将简单问题复杂化。编译器的智能性越来越强,为了适应这部机器,我们不得不改变简单的思维方式,去从它的角度考虑问题,从它的角度编写代码。进而使得我们根本不去考虑问题的实质,因为有这时间我们会去抓紧时间研究这台机器为我们提供的复杂模型。
好了,忽悠到此为止。最近心情烦躁,感觉比较有点迷失。就是不想看书,无聊只有来瞎写了,嘿嘿。其实我要说的东西很简单,从二进制的角度来说,一直来我们都被封装、继承、派生、泛化、组合、聚合、关联、耦合、内聚等概念忽悠了。其实很多问题都是同一个概念,不同的形式而已。举几个例子吧。
1:汇编和结构体