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

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

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

[[334243]]

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

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

勿以浮沙筑高台

基础不牢,地动山摇

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

......

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

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

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

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

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

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

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

大师:是啊,就说计算机编程语言吧,就是不断抽象,逐渐远离计算机硬件的一个过程,想当年我用汇编编程, 想在屏幕上输出一个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说“抽象只能节省你的工作时间,不能节省你的学习时间”, 用高层的抽象来工作,会比较快,但是你还得学习底层的东西,那是跑不掉的。

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

(完)

如需转载,请通过作者微信公众号coderising获取授权。

 

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2020-06-22 13:48:08

SQL查询SELECT

2014-12-29 12:15:56

Gmail

2015-01-04 15:36:52

XSS漏洞XSS

2020-01-06 18:11:00

雪花科学人工智能

2009-05-21 09:28:05

阿里巴巴马云忽悠

2022-03-01 21:05:39

TCP网络协议

2015-01-28 13:10:55

2013-05-21 09:32:11

ChromebookChrome OS

2013-12-06 10:47:22

宜家天猫雅座

2013-07-24 14:17:10

2022-02-16 15:00:35

Python开发语言

2019-02-12 15:24:50

C语言JavaPython

2022-03-07 05:53:41

线程CPU代码

2018-03-28 14:58:42

虚拟机内核系统

2022-04-26 06:43:12

文档TCPLinux

2022-06-15 08:02:53

testlive前端

2023-03-21 17:06:24

树莓派路由器

2009-10-16 14:30:00

2019-01-21 15:17:59

Java微软JCP

2019-03-26 08:31:37

技术主管团队
点赞
收藏

51CTO技术栈公众号