我发现,我一直是站在巅峰啊!

张大胖学了Java语言,学了Web基础知识,又学了SpringBoot, MyBatis,Vue等框架, 他成了一个"全沾"程序员。 

他觉得这样也挺好,前后端通吃,可以在编码的天地中自由地飞翔了。 

可是他在网上、群里经常听到大家说计算机基础很重要,尤其以码农翻身为甚, 像什么:

勿以浮沙筑高台

基础不牢,地动山摇

沉下去有多深,弹起来就有多高

......

张大胖不以为然嗤之以鼻,他认为除了在面试时会用到计算机底层的基础知识,别的地方根本用不到,工作中主要是实现业务,连个稍微复杂一点儿的算法都用不到。

他决定去请教一下软件大师,问问到底是怎么回事。 

张大胖:大师,我觉得现在的编程已经变得非常轻松了,利用现有的框架和类库开发软件非常容易,高中生编程都没有任何问题。 

大师:你觉得为什么会这样? 

张大胖:就是不用接触底层的那些细节了,直接就可以面向业务开发了。 

大师:你算是说到点子上了,这就是抽象带来的好处啊。

张大胖:抽象?我似乎听说过一句话,说计算机行业的任何问题,都可以通过一个抽象层来解决。 

大师:是啊,就说计算机编程语言吧,就是不断抽象,逐渐远离计算机硬件的一个过程,想当年我用汇编编程, 想在屏幕上输出一个Hello World都累得要死,写个大程序更是要累得吐血了。

张大胖:嗯,我现在用的就是最高层的Java,根本不用考虑什么汇编语言,机器语言,连指针都用不上!

大师:再比如说,Web编程,我用CGI那会儿真是痛不欲生。

张大胖:哈哈,我还是站在最高层。

大师:网络编程也是如此。

张大胖:哈哈, 我只用HTTP,根本不管底层的东西。

大师:还有对数据的操作,也是一层层地抽象。

张大胖:大师,我发现我一直是站在巅峰啊!

大师:这有什么好得瑟的,你站得越高,越容易出现难以解决的抽象泄露的问题。

张大胖:抽象的泄露? 

大师:对, 这是Stack Overflow的创始人Joel Spolsky提出来的一个理论:所有重大的抽象机制在某种程度上都是有泄露的!  

张大胖: 不对吧! 这种分层的抽象,好处不就是每一层都可以屏蔽下层的变化嘛,我站在高层编程,根本不用理会底层, 为什么会泄露?

大师:我来给你举几个例子,你就明白了。外国有个程序员,她使用Ruby语言通过HTTP向本地的一个消息队列发送消息, 这抽象层次很高吧!  但是每次发送消息都得耗费40ms,这是不应该的, 时间太长了。 她查来查去,发现Ruby的类库没有设置TCP_NODELAY, 但是本地的HAProxy却使用了TCP delayed acknowledgement,于是双方互相等待,出现了延时。 

张大胖:我听不懂!

大师:你站在抽象的巅峰,这些TCP的细节怎么能听懂呢?我给你举个简单例子吧, 比如你用了Hibernate这个ORM工具,它是一个抽象层,隐藏了SQL, 但是当出现Hibernate性能问题的时候,你怎么办? 

张大胖:那我得去看Hibernate 是怎么把对象变成SQL语句的,然后慢慢调优。

大师:对啊,你看Hibernate这个抽象层没法完美地隐藏底层的信息,发生泄露了。  SQL 也是个抽象层,隐藏了读数据库表查询处理的细节,如果SQL语句出现性能问题,你怎么办? 

张大胖:那...... 我只好去分析SQL的查询计划,如何利用索引,还得慢慢调优。 

大师:你看SQL这个看似完美的抽象层也泄露了不是? 

张大胖:有道理,哎呀,这抽象层泄露的代价很高啊,我得学习这么多底层的东西。

大师:所以Joel Spolsky说“抽象只能节省你的工作时间,不能节省你的学习时间”, 用高层的抽象来工作,会比较快,但是你还得学习底层的东西,那是跑不掉的。 

张大胖:明白明白了,为了能继续好好地搬砖,我得赶紧去学学计算机的底层基础知识了。

(完)

程序员的宿命

芯片战争70年,真正的王者即将现身

干掉软件开发的最大怪兽:狼人

宇宙第一IDE到底是谁?

HTTP Server :一个差生的逆袭

我要穿越,干翻“烂语言”JavaScript

如何降低程序员的工资?

程序员,你得选准跑路的时间!

两年,我学会了所有的编程语言!

一直CRUD,一直996,我烦透了,我要转型

字节码万岁!

上帝托梦给我说:一切皆文件

Javascript: 一个屌丝的逆袭

我是一个线程

TCP/IP之大明邮差

一个故事讲完Https

CPU 阿甘

猜你喜欢

转载自blog.csdn.net/coderising/article/details/107478955