昨晚我梦见自己在演奏厅演奏,台下很多人,当我敲下第一个音符的时候发现这钢琴并不会发出声音。奇怪的是这时候响起了澎湃的音乐,我作势在卖力演奏,我没能装完这场戏就醒了,毕竟我只会在很窄的音域看着音符像键盘一样敲击白键,对于我来说这更像场噩梦。
醒来后,想起这场梦的起因。
记得妹妹学钢琴的时候,偶尔会陪她一起上课,知道会经历手型、坐姿、识谱、节奏、技巧的学习,以及什么如何连音、跳音、和弦、爬音、八度的弹奏,还有她正在学的乐理。这不是一天半个月的事情,刚刚开始我好奇为什么就88个琴键,而完整的钢琴学习过程,需要十年或者更久?当时我叫小妹教我弹钢琴的时候,手型、坐姿、识谱、节奏几分钟就上手了,然后每天一小时,过几天,学会了弹《月亮代表我的心》,自认为还不错。天真的以为只要给我乐谱就能弹出来了,可惜当我百度到《不能说的秘密》乐谱的时候,看着音符我就懵逼了,才领悟到原来蝌蚪文还有四六级,节奏怎么都不对。
直到有天我知道有门课叫做乐理,乐谱不是1234567这样就完了,《不能说的秘密》是我看不懂乐谱,理解错误,更不要说弹奏出来了。再到后来我还知道了视唱练耳,也终于知道,有门课程叫做“内功”,十几年的事情原来是在修炼“内功”。
学钢琴的故事说完了,然而新的篇章从昨晚的梦说起,为什么我不能在台上演奏像样的曲子,细思极恐,原来我把钢琴琴键看成是API,看一遍“文档”就开始弹了。
API: 计算机编程领域术语:应用编程接口,其主要目的是让软件开发人员得以调用一组功能,而无须考虑其底层的源代码为何、或理解其内部工作机制的细节。
想回我现在作为大三软件工程学生,挣扎着,止步不前的编程能力,到现在会用JAVA API做个动态网页,拼装机器人,以为JAVA jdk可以解决一切,当我遇到新型框架,我甚至看不明白大师的代码原理,为什么要这样设置,到我和别人说我学完AOP之后,别人问我这样有什么好处,举个例子,我没答道他认为满意的答案,现在到处乱撞,越学越没信心。之前还写了《外面的世界期望我们软件系的应届生能做什么》,写着写着我自己都不明白,删稿,请读者留言他们的看法。
现在有点明白了,一门语言要了解它的语法然后干增删改查的活需要很久吗?但是大厂并不需要这样的,培训班一大堆,为什么要到大学里面高价找呢,他们招人要求对应方面基础扎实,计算机基础不扎实,遇到编译器级别问题就会束手无策,做不出千万用户级别的应用。就像学钢琴那样,识谱到弹奏才两三天,然而没有扎实的基础,是上不了台面的。
那么,基础是什么?怎么定义?需要会什么?
- 这里要放三本书出来
- 《CSAPP》 推荐书评
- 《CLRS》
- 《SICP》
引用知乎孙天齐作者:孙天齐的答案
链接:https://www.zhihu.com/question/26157282/answer/32455092
CSAPP 《深入理解计算机系统》
这是 CMU 的“计算机科学导论”的教材。是计算机系统和操作系统入门。(这门课要求有编程基础)
SICP 《计算机程序的构造和解释》
这是 MIT 的6.001课程的教材。是编程语言入门。(这门课在好几年前就改成Python了)
CLRS 《算法导论》
这是 MIT 的6.006课程的教材。是算法分析入门。
CSAPP 《深入理解计算机系统》
这是 CMU 的“计算机科学导论”的教材。是计算机系统和操作系统入门。(这门课要求有编程基础)
其中的《CSAPP》,这里说的是第二版,在大二,我被多人提醒要认真看去领悟这本书,如何的重要,但是鉴于这么书有A4纸那么大,一共700页,买回来,写了: 2015.10.31,放在书架上摆着,一直没翻过。
直到大三开始学习并发,学习优化程序,发现自己无从下手,才明白自己离大厂的“需求”越来越远了,连快速排序都要去百度才能写出来,惊骇当年算法学的是什么鬼,都送回去给老师了。我在学计算机一直怀着使用主义,但是却发现自己是急于求成,一直抱着碰到了再去仔细研究好了的态度,能做个像样的Demo就好了。然而周四做计算机组成原理作业的时候,有关于VM局部性的问题,打开老师的课件,又翻阅了一下教材,直呼“计组难,难于上青天”。想起我书架上有本CSAPP,看了一下目录,试着打开第六章《存储器层次结构》,里面围绕着局部性,用编程的角度,主要详细解释了高速缓存(cache)的工作方式,以及利用局部性使得cache达到最好效果的方法。不仅使我明白VM,还上升到操作系统层面,更重要的是,我找到优化程序性能的方法,虽然只是皮毛。做完作业的晚上,我通宵看这本书,看得欲罢不能。三点多钟,爬上床,还在思辨,我感觉伸手就能碰到Linux内核,再过一晚上,我看到第三章,一学期没想学的汇编,这本书仅仅100多页,对汇编语言语法和使用,结合大量例子来解读产生的汇编代码,通读完,我写下第一个汇编程序。再看到第五章,优化程序性能,这章把能够用到的所有技巧的原理全部讲解得清清楚楚,这不是我一直找的内功吗?
我开始回想起某位在支付宝国际事业部实习,参与海外直购项目开发大神的话,他在面试支付宝、大众点评等大厂时,涉及比较难的问题,基本都可以在CSAPP找到。以前觉得这句话很玄,现在我觉得这本书很玄。我明白那些大厂为什么注重底层的东西,明明一般开发都用不到,还狠狠的抓住面试者不放,这就相当于钢琴中的乐理,要想即兴伴奏和演奏,最重要的是要具有较高的乐理知识和视唱练耳水平,要能真正搞懂自己在弹的是什么东西。同样,要做出真正可用的工具,成为真正的PPT,最重要需要深入理解计算机底层以及算法,明白自己的代码怎样操控CPU,怎样利用系统资源。这里引用前辈的训话,等你学完了上述几本书后,学什么框架都会很快的了,框架的学习要点不在于用,在于明白作者的思想,为什么要这样设计,然后你就可以用框架解决很多问题,以及会知道哪些问题框架解决不了要自己上。的确,这才是大厂需要的人才。
现在明白了大厂到底需要怎样的人,也明白如何去做。
编程不能饮鸩止渴,成为PPT需要很长的路。
- 现在想起,还好那天我弹奏的是一架没有声音的钢琴,还好那天我做的数据库优化还没到百万级别,还好没上线,我,还有一年时间去练习、实践。