笑一笑

关于网络分层的原因,实际大部分软件系统都是分层架构,这一切都是为了工程上实现/调试/维护的方便。之前在一个关于为什么Linux为什么还要坚持使用宏内核的问题下我看到一段话非常的有意思。

因为Linus可以把这些乱七八糟的东西全都一个人写了,一遍写对了,
还能稳定跑起来无bug,而我们这些渣渣做不到,只能依靠保护模式
来防止几百个工程师写出来的那一坨垃圾动不动蓝屏,自己弱却去质
疑天才的做法,和明知自己弱还要模仿天才的做法,都是认不清现实的表现。
工程这个东西是很有意思的,我们说科学是掌握规律,技术是利用规律克服大自然
的限制,而工程,却是利用技术来克服人自身的限制。技术会告诉你,造个金字塔,把石头垒成四棱锥就行了,如果你是个力大无穷的巨人,或者是个能意念移物的魔
法师,你就啪啪啪把石头搬过来堆起来就完事了。但我们是凡人,我们力量很小,
我们很弱,所以我们需要滚木,需要滑轮,需要绳索来帮忙,做了许多额外的麻烦
事情,只为了克服我们肉体的自身限制。体力上有限制,智力上同样有限制。软件
工程很大程度上就是解决我们人类智力上限制的问题,软件工程师在面对不知所谓
的kernel dump的时候会无助,会哭泣,在面对无休止的接口变动的时候会歇斯底
里,面对改一行代码系统就全挂的窘境束手无策,所以我们需要微内核、微服务这
样的框架来约束系统,降低系统的复杂性,让我们所有犯的错误都能保持在可控的
范围内,让因为我们的愚笨而写出的有bug的代码也能勉勉强强运行起来而不是分
分钟crash,哪怕这些方法额外增加了许多工作量、还降低了效率。但是,总是有
超人存在的,我们人要造一个纪念碑,设计一堆方案,superman会说,哈?这个
事情,不是只要我去把那个石头举起来,然后飞过来,放在这里不就好了嘛?体力
上差距这么大的超人也许不存在,但智力上差距这么大的超人却是存在的,所以要
记住工程方法只是为了拯救我们这些凡人,对于超人来说,他们是不需要这些的,
他们要做的仅仅是“搬起来,放下去”而已。
可以多人开发这件事情在软件工程上是至关重要的,如果一个工程必须每个程序员
都完全理解整个工程的架构才能着手开发,那这个工程一定做不成,不说完全理解
一个庞大项目本身不可能这个问题,大家理解也会有偏差,写出来代码合不到一起,
这就是为什么需要有严格的模块拆分,而且接口必须控制在解耦的、可以理解的、
数量尽量少的范围内,而且通过框架来避免错误相互扩散。

即使是一次看似非常简单的数据传输,背后实际需要做的工作也非常多。我经常会感叹网络的强大,无论需要传输的是一段文字,一张图片,一段视频,又或是无论我和通信的对方相距多远,数据都可以稳当的送达给对方。如何打包处理大小不同用户的数据;如何去和对方建立连接;如何在不可靠的信道上提供可靠的数据传输?处理这里面繁杂的逻辑,是一个大问题。前辈们给出的解决办法是将大问题分割成若干个小问题,交由不同的层去解决。每一层相互独立,互不干扰,只关心自身的任务;处理结束之后将结果交由下一层继续处理。

转载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值