|
|
51CTO旗下网站
|
|
移动端

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

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

作者:刘欣来源:51CTO专栏|2020-07-20 09:04

张大胖学了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说“抽象只能节省你的工作时间,不能节省你的学习时间”, 用高层的抽象来工作,会比较快,但是你还得学习底层的东西,那是跑不掉的。

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

(完)

【编辑推荐】

  1. Java 反射以及动态代理,来看就懂了
  2. Java架构之路(多线程)JMM和volatile关键字
  3. JavaScript中的reduce()的5个用例
  4. Python的替代品?我尝试了你从未听说过的优秀编程语言
  5. JavaScript对象符号(JSON)简介
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

大数据安全运维实战

大数据安全运维实战

CDH+Ambari
共20章 | 大数据陈浩

86人订阅学习

实操案例:Jenkins持续交付和持续部署

实操案例:Jenkins持续交付和持续部署

微服务架构下的自动化部署
共18章 | freshman411

176人订阅学习

思科交换网络安全指南

思科交换网络安全指南

安全才能无忧
共5章 | 思科小牛

108人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微