一周XX思考(第12期)

大家好,这里记录,我每周碰到的,或想到的,引起触动,或感动的,事物的思考。这是 [一周XX思考] 的第12期,不见得都对,但开始思考总是好的。

借鉴和传承

 

先有的SOA,再后来出现微服务,那么实际上微服务是SOA的升华。

 

再拿前端开发来说,从Windows原生的直绘界面到基于QT的Web混合开发,再到小程序、Flutter等移动跨平台方案。

 

那么还能够举出N多这样的例子,后面也会有层出不穷的新技术,新架构。

 

但这些大都会沿袭传承和借鉴。

 

"吾生也有涯,而知也无涯, 以有涯随无涯,殆也"。

 

所以,我们要善于找不变的内容,去思考有哪些是不变的,才能以不变应万变。

 

计算机为什么能执行无限个可能

 

这里的计算机,就理解成我们的PC吧。

 

计算机如何组成的呢,PC=CPU+存储+I/O设备。

 

计算机运行的原理是什么样的呢,CPU从存储中读入指令,然后按照指令执行命令,再然后就一条指令一条指令的执行下去。

 

那计算机是怎么执行无限个可能的呢,这里的无限个可能,就是不固定,你输入什么,他就可以执行什么,只要不报错。

 

能够达到这个目的,这里面最主要的是可编程。

 

本周看极客专栏中的文章《架构设计的宏观视角》一文看到如下描述。

 

CPU 指令是一个很有限的指令集,但是CPU执行的执行序列,我们也叫它程序,并不是固定的,而是依赖保存在存储中的数据-由程序员编写的软件来决定的。

 

而,指令序列的可能性是无穷的,这也就意味着电脑能够做的事情的可能性也是无穷的。

 

架构的作用

 

谈论架构的作用,可以有好多个维度。

 

这周,我看到下面这句话,也是在《架构设计的宏观视角》中读到的。

 

“在越强大的基础架构支撑下,应用程序开发需要关注的问题就越收敛,我们的开发效率就越高“

 

这句话呢,理解起来,跟我们经常说的,分层架构的主要目的之一是:隔离关注点,有些相同,这句话中提到的”收敛“其实,某个程度上也是关注点的”味道“。

 

要举一个例子来说明上面这句话的观点,有很多方式,比如无论分层的MVC架构,还是向内依赖整洁架构,更或者是六边形架构,能够很好的阐述这个观点。

 

不过呢,文中举了一个例子,我到觉得很妙。

 

一位程序员之所以能够舒服的编程并能够让代码在计算机上运行起来,最底层是依靠的冯诺依曼体系架构,在上面是操作系统和编程语言,再往上是中间件类基础软件,比如Dubbo、MySQL等等,再往上是应用程序框架比如spring框架等,最上面是什么呢,就是我们的业务架构了。

 

试想,如果没有业务架构下面那些各层的基础架构,我们能够很舒服的写代码么,有能够让我们写的代码很方便的跟其它软件系统交互通信么。

 

 

编程的本质是什么

 

很抱歉,这周问题似乎多了些,可是当你这样想的时候,你是怎么理解的呢。

 

编程的产出就是软件,软件的作用是解决问题,我们一般都是怎么解决问题的呢,分解。

 

就是,如果遇到大问题,我们就会拆成小问题,如果发现小问题还是大,就继续拆成更小的问题。“大事化小”。

 

然后,我们就会给出这些小问题的解决方法,也就是我们编写解决这些小问题的代码。

 

最后,就出现了编程的本质:我们要把这些代码片段复合起来,从而产生那个原始的大问题的解法。

 

反之,如果我们不能把这些代码片段复合起来并还原回去,那么当初我们对问题的分解就没有任何意义。

 

关于这个论点,大家可以搜索《函数式编程与面向对象编程[5]:编程的本质》这篇文章,有更详细的叙述。

 

同时这篇文章还提到了代码的面积和体积,我确实第一次看到这个说法。

 

代码的面积和体积

 

我个人觉得讲的有点太好,我直接引入原文的内容:

 

那么,对于程序的复合而言,正确的代码块是怎样的?它们的表面积必须要比它们的体积增长的更为缓慢。我喜欢这个比喻,因为几何对象的表面积是以尺寸的平方的速度增长的,而体积是以尺寸的立方的速度增长的,因此表面积的增长速度小于体积。

 

代码块的表面积是是我们复合代码块时所需要的信息。代码块的体积 是我们为了实现它们所需要的信息。一旦代码块的实现过程结束,我们就可以忘掉它的实现细节,只关心它与其他代码块的相互影响。在面向对象编程中,类或接口的声明就是表面。在函数式编程中,函数的声明就是表面。我把事情简化了一些,但是要点就是这些。

 

正交设计

从某个角度来说,软件设计的本质就是分、合。

 

分开之后为什么要合,在上面[编程的本质]中我们也有提到,只不过那是拿代码片段来阐述的,你可以理解为是微观层面的角度。

 

如果你把单系统模块化以后,跨进程的时候,再合起来,就是宏观层面的角度,靠什么合呢,可以是API。

 

这些是合,不过正交设计,讲的是在分的时候,到底该怎么分,也就是正交设计不是指导合的。

 

所谓正交设计,就是当我们把一个系统或者一个业务模块,沿着两个方向去拆分的时候,任一方向上的变化,都不能影响另外一个方向,就是正交(其实本是数学上的一个概念)。

 

 

 

三人行必有我徒

 

”三人行,必有我师“,出自于《论语.述而》,意思大家都懂,一些人在一起,别人的言行举止甚或思想知识,一定有我学习的地方。

 

谦逊,敏而好学,不耻下问,这些都是美德。

 

那么,现在回到一个本质的问题,学习的逻辑,如何学习,如何学习好。

 

学习最好的方式就是主动学习,主动学习最好的方式之一,就是分享,然后得到反馈,然后再修正。这样的路径是最优的。

 

可是,如果总觉得,我目前已经掌握的知识,我总结的思想,很LOW,我分享了,别人也不会来看,更不会给出反馈,所以,我得向别人来学习。

 

这里的障碍就是,有过多的敬畏之心。

 

如何破除这个障碍呢。

 

这周看到一篇文章《学习的逻辑 3:三人行必有我徒》,对于分享有独特的见解。

 

这个障碍其实可以很简单的破除,就是降低分享和传授的门槛。不要一提到分享和传授,就想到PPT,投影仪,济济一堂的听众。没那么复杂,分享就是聊天。当你有一个想法的时候,随机碰到谁,就跟他/她聊,听的懂正好可以给你反馈,听不懂正好逼迫你寻找一种更容易理解的表达。而且要不止一次的聊,不止一个人的聊,聊多几次,你会发现你的想法更完整了,一些新的点涌现了。

 

对于此,文章还给了一定的理论逻辑基础:

 

三人行,必有我徒。因为师徒必然是同时出现,互为定义的。不存在没有徒弟的老师,也不存在没有师父的徒弟。因此,如果你认同三人行必有我师的话,自然也就明白三人行必有我徒,总会有人从你的分享中获得有价值的知识。分享带有分享者自己的经历和视角,没有两个人的视角会完全相同。只要周围不都是因人废言的人,总有人会结合你的视角得出新的洞见。

 

不过也会有个”副作用“,就像文中描述的那样:

 

一个副作用是,在周围人的眼中,你变成了一个健谈的人 :)

 

 

阅读和写作到底是什么关系

 

经常读,经常看,就一定能写好文章么。

 

结论是,阅读和写作不是因果关系,而是相关关系。

 

也就是并不是因为你读了,你就能写出来,但是读的多了,看的多了,你就能在写的时候发力,如何措辞,如何造句,就能用上了,是一种潜移默化的效果。

 

我记得,我在之前的XX思考中提到过,竹篮子打水并不是一场空,最后会发现“篮子变干净了”。

 

关于这个问题的来由,是我这周在得到上看《小学生家长必修课》这个专栏的时候,看到了读者留言以及作者的回复。

 

是呀,看家庭教育,没想到还有这样的收获,具体的内容,截图如下。

 

             

 

什么才叫真懂

 

让我们一起看下,李诞的理解和解读,下面是中国新闻周刊对李诞的一段采访,我个人读到的时候觉得很有道理,截图如下:

 

             

 

双输

 

去高铁站,在滴滴上打车,选了快车、出租车、特惠快车,特惠出租车,其中特惠出租车显示8.5元,这个结果比平时少了4元。

 

当到达目的地的时候,提示付款,结果只有选择滴滴支付才有这个优惠,但是必须要帮银行卡,这就有点麻烦了,因为之前都是用的微信支付。

 

司机师傅说,尽量下车前支付吧,我当然也想着赶紧进站。

 

只能作罢,还是选择了微信支付,我没有得到优惠,滴滴支付没有新增用户。

 

双输。

 

那我在想,滴滴为什么不在我当时选车的时候,优惠那里,提示一下呢,要让用户提前绑上银行卡什么的,这样我在路上,就可能操作好了。

 

本周完。

题图:葫芦时刻

猜你喜欢

转载自blog.csdn.net/wangxindong11/article/details/109685417