是简单撑起了计算机世界
原创 公众号: 软件设计活跃区 2019-10-19
是简单撑起了计算机世界
你觉得计算机复杂吗?
但今天想告诉你的是——是简单撑起了计算机世界
-
回忆大学的学习时光,计算机或许是最难的一门学科
数学让文科的同学头痛,特别是女同学,英语让理科的同学头痛,特别是男同学;而计算机则需要同时学好这两门学科,难度可见不是一般。
学习C语言的时候,还算好;学到C++和面向对象的时候,也还行;但看到MFC类库的时候脑就要炸了。学《数据结构》,简直像天书。当时读大学用的是绿色版那本,只能看懂一大半,有点故作高深的感觉。后来工作了好几年,买了一本新的,简单多了,很容易看懂,行文用通俗易懂的语言也加多些图例说明了。还好没有放弃计算机,没有怀疑自己的智商问题。借用“举重若轻”,感慨:述繁若简真的很重要,能把问题说得简单,就不要说得那么高深。
-
回忆编码的工作岁月
在大学,学MFC太难了,也没能实现什么强大的功能。后来就学了Java,J2EE,感觉这个还比较实用,能快速做JavaWeb系统。就这样,毕业后就从事这方面的工作。当时jsp,servlet,EJB很流行。小网站,小系统用jsp开发,速度没得说,就是快。但开发企业级的系统,要用到EJB。EJB可是一个很庞大复杂的家伙。虽然有工具帮助生成很多相关代码,但要在生成的代码里加自己的业务逻辑却不是一件简单的事情。以致后来Spring的作者写了一本书《expertone-on-one J2EE Development without EJB》,反对使用EJB。书中列举了部分EJB为什么那么复杂的原因,如想写得更复杂,让别人看不懂,好收取服务费,捆绑销售(卖servlet服务器)等。因为EJB的复杂,最终被号称轻量级的Spring占据了市场。事实告诉我们,计算机世界要的是简单,并不是复杂。
-
是简单撑起了计算机世界
是简单撑起了计算机世界,而不是复杂。就像这个自然界,男女,白天黑夜等简单元素组成了这个美丽的世界。男人和女人组成了人类,白天和黑夜构成了我们过的日子。计算机世界也是由简单的元素构成的。作为开发工程师的你,不管你是用C语言、C++、Java还是python,其实最终都会被转成0和1,计算机底层是简单的,就0和1两种。比我们熟悉的十进制都要简单,十进制还要用0~9十个数字表示。 二进制里,一位0或1可以表示一种状态,如0表示白天,1表示黑夜。
在深圳特区从市民广场去往科技园的路上,被一条河(沙河)隔断,河上有一条桥,桥上有许多0和1的数字。寓示着有着中国硅谷之称的深圳科技园与外界的联系是用0和1的,而用0和1的科技正是IT相关的高新技术。
深圳科技园01桥
说到进制,大家不要觉得只有十进制。在现实现生活中,除了十进制,还有钟表12进制(转一圈就12小时),装箱的酒水、饮料等也是12进制,每12进1(即12瓶就满一箱啦)。还有纪年的,甲子60轮流转,转一圈就60年,也就60进制了;角度也是60进制。
再来说回二进制。用我们最熟悉的十进制来类比说明。十进制里逢十进一,所以不会出现一个数字是十的,要用两位10表示;二进制,逢二进一,所以也不会出现数字2,要用10来表示2。
十进制0~5,对应的二进制如下表所示。
二进制 | 十进制 |
0 | 0 |
1 | 1 |
10 | 2 |
11 | 3 |
100 | 4 |
101 | 5 |
通过分析得到规律:21=2=10,22=4=100,…,210=1024=100 0000 0000。
(每个式子里,前两个数是十进制数,后一个是二进制数;指数是多少,即多少次方,对应二进制就有多少个0)
计算机存储单位换算:1024比特=1k, 1024k=1M,1024M=1G。
现在知道硬盘500G,是怎么回事了吧。计算机里,进制千就是1024(商家可能会以各种理由说按1000算)。在计算机行业里的人对1024都是特别有感情,这就是10月24日程序员节日的由来。
-
简单对软件设计的启示与影响
软件设计,需要寻找一种简单的设计方法,而不是复杂的。 写复杂软件的解释就是:1)当时技术水平或认识限制;2)想写得更复杂,让别人看不懂,好收取服务费,捆绑销售等。without EJB这种书就说了EJB当时主要就是基于这种原因。
下面用JavaWeb开发中,大家都熟悉的ORM工具来说明使用简单思想来设计的软件有什么好处。
在ORM编程中,当用面向对象方式操作一个DB表时,要写一份dao文件;当操作两个表时,要写两份dao;当操作n个表时,要写n份dao。所以这代码老写不完,又感觉似曾相识,没必要这样重复劳动。
为了讨论编码效率问题,采用编码复杂度来衡量。编码复杂度用于描述编码量与所解决问题的规模的关系。则此时编码的复杂度会随着问题规模增长为n,编码复杂度也增长为n。可以回想下,大学岁月学的《数据结构》里的时间复杂度和空间复杂度,用类比来感受下编码复杂度。
下面通过具体使用例子,来看下ORM工具Hibernate与Bee的使用情况。
Hibernate ORM使用例子
Bee ORM使用例子
表1 ORM工具编码对比
新ORM框架Bee与Hibernate的对比,如表1所示。从表中可以看出,Bee框架的编码复杂度是O(1),也就是说Bee不会因为要操作更多的数据库表而要编写更多的代码。这样,ORM操作数据库表的工作量由n变为1,生产率也提高了n倍。将任何数据库表对应的实体类型看作是无区别的一种抽象类型,是Bee框架能将编码复杂度从O(n)变为O(1),工作量由n变为1的关键。
如果你可以将一件事情做得简单,请不要将它做得复杂!
--------------------------------------------------------------
Bee框架已开源,欢迎关注★。
https://github.com/automvc/bee
https://gitee.com/automvc/bee
[ 软件设计活跃区] 专注:开发速度快、编码少、简单、高效、AI智能的软件设计与开发方法。编码复杂度用来衡量编码量的多少。编码复杂度为O(1)的软件则编码量不受软件规模的影响,类似时间复杂度和空间复杂度为O(1)的效果。
目标:设计具有人工智能(AI),省时/优雅、简易、自动( AI Tea: Timesaving/Tasteful, Easy, Automatic) 风格的软件(AiTeaSoft)。
长按二维码可关注
更多重磅文章等着你!
QQ群: 992650213
微信群: IT软件设计交流群3