新手关于如何看编程经典书的一些疑惑?

昨晚翻了萧大的151个答案,看了很多,收获也有些,总结如下: 1.《csapp》 2.《sicp》 3.《算法导论》 4.脚踏实地学2+年 小白问题来了: 1.学了这些如何实践到现实的项目中去,小白的意思是,如何应用到现在的Web开发,移动开发,类似做出一个Demo中去,小白太菜,描述不好,囧。 2.很多公司要求参与过什么项目,学了这些能做出什么? 3.这几本书学习的先后顺序? 我在想提问的方式和语气是不是欠妥,不妥求见谅。
关注者
7806
被浏览
937907

64 个回答

很多学计算机的朋友,都有类似的困惑:我学了计算机专业,怎么还是做不出网站、软件、APP?很多人误以为是教材不接轨,因此崇拜国外教材,其实不是那么回事。我尽量详细地答一下,顺便也讲讲计算机科学到底是干什么的。

假如有个同学,受过基本的语文训练,初学写作,梦想成为金庸那样的小说家。他现在想知道,如何提高创作能力,并练习写第一篇小说。这时,有个中文系的大学生路过,面对这位略有稚气的同学,给出了高票答案:

我不认为学生写小说有啥意义。学生,就要沉得下心。你看我懂文学理论,要写小说的时候,哪怕不会组词,有本辞典就能写了。所以你不要浪费时间去搞那些,你要先把文学的本质理解透彻,达到我的境界,就能“会当凌绝顶”。所以你现在应该学习《深入理解现当代诗歌》、《文本的结构和意义的生成》以及《音韵导论》,然后脚踏实地学习2+年,这些才是语言的内功。

这位同学当场被这些华丽的书名击倒,跑到知乎恭恭敬敬提问:

我想写小说,大师给我推荐三本经典,我应该按什么顺序学?学了这些,我能写出什么?

不用觉得滑稽,初学者被高大上的书目击倒是正常的,这三本书也确实都是入门经典。但是我们要先搞明白,它们入的是什么门。

CSAPP 《深入理解计算机系统》
这是 CMU 的“计算机科学导论”的教材。是计算机系统和操作系统入门。(这门课要求有编程基础)

SICP 《计算机程序的构造和解释》
这是 MIT 的6.001课程的教材。是编程语言入门。(这门课在好几年前就改成Python了)

CLRS 《算法导论》
这是 MIT 的6.006课程的教材。是算法分析入门。

那么操作系统、编程语言、算法分析又属于什么呢?我们系统地看看,计算机科学到底是干什么的。CS大体可以分成这么几个大领域:硬件、系统、软件、网络、计算理论、计算方法。

硬件 —— 数字电路、集成电路、存储器、各种硬件设计和验证方法等。
系统 —— 计算机架构(指令集、串/并行、网格、云端之类)、嵌入式、实时系统等。
软件 —— 操作系统、虚拟机、编程语言、软件设计/开发/验证的工具和方法论等。
网络 —— 计算机网络的架构、协议、组件、路径算法、性能分析等。
计算理论 —— 可计算性、形式语言和自动机、密码、逻辑、算法分析等。
计算方法 —— 数值计算、符号计算、并行计算、计算机图形学、人工智能、机器学习等。

你可以按这个提纲,逐个了解一下CS是干什么的。但现在可以先看着这些词,大概感受一下。我们再说那三本书:计算机系统属于系统领域,操作系统和编程语言是软件领域中的小领域,而算法分析是计算理论中的小领域,这是那三本书在计算机科学中的位置。它们作为所谓“经典”,入的就是这几个门。现在你知道这几本书是干什么的了,那么你的问题来了:做网站、做APP又属于这里面的哪个位置?

答案是,哪个也不属于。你看整个计算机科学,研究的都是非常底层或基础的东西,与你说的“现实中的产品开发”,基本上是没有关系的。即使有些名称看着和开发有关,其实也不是一回事。比如这里所说的“编程语言”,就好比语言学,是研究各种语言结构的,而不是教你用语言写作的。你要认识到这一点,这不是教材好坏的问题,而是分工不同。就像天文学不是教你制造望远镜的,机械动力学不是教你开挖掘机的。

那么问题又来了,你现在就想学习做网站、做APP,这是什么?怎么学?哪家强?

实际上,国内大学极少有独立的CS专业,都是加个“与技术”,全称叫“计算机科学与技术”。顾名思义,这就包括计算机科学、计算机技术两部分。你想学的这些,就属于那个“与技术”。你想学的是技术方向,别人推荐的却是科学方向的经典,这个就是你困惑的根本原因。

说到这里,我想题主应该已经理解了:计算机科学是干什么的,那三本书是干什么的,以及为什么学完了还是做不出来网站和APP。接下来,我想你会问这两个问题:

1、如果我想搞技术,那么学习科学部分还有没有必要?

我的观点是,这不是有没有必要的问题。这两者之间的区别,是追求的目标不同:科学追求尽量深入,探索原理;而技术追求尽量封装,提高效率。各种高级技术都是力求隐藏细节,以提高效率。而你选择学习内容的标准,就看它能否显著提高你的生产力。有些技术高度依赖底层细节或原理,造成了效率瓶颈,就应该学。但具体到Web、APP开发,最能提高你生产力的,就是那些前/后端框架和脚本,学完了你马上就能做产品,而不是《计算机程序的构造和解释》什么的。当然,上边有些朋友告诉你,你要学挖掘机,一定要先学机械动力学,否则你就没有内功,永远不可能成为挖掘机高手,机械动力学才是真正的知识,只是现在社会太浮躁,没人愿意花时间学。然而,我并没否认机械动力学的价值,它能让你把挖掘机分析得头头是道,甚至设计制造挖掘机。但是,如果你的目标是开挖掘机,那你就不该这样入门,因为这是两回事。说了这么多,希望你明白了。

2、我现在应该如何提高技术水平?

学技术的关键思路是两点:一个是模仿,一个是边实践边学。比如说学挖掘机,首先你要知道基本操作,然后看别人是怎么开的,最后自己上去开。遇到问题,比如跑偏了,你研究一下,挖掘无力,你再研究一下,弄明白了就继续开。具体到你说的做网站为例,首先你可以看看《Head First HTML5》和《Head First PHP & MySQL》,或者用Codecademy,学会基本操作。然后找一些作品,比如WordPress,和它的一些经典模板,去看别人是怎么做的。然后,你就可以自己设计一个小网站,尝试把它做出来。不用等什么都学会了再开始做。做的过程中,你遇到什么障碍,再有针对性地去学习和解决。这种边实践边学习的模式,才是学技术的正确思路,这跟搞理论研究的思路是不一样的。

最后,再跟你说两个题外话。

第一,这几本书,就是大学教材而已,没有那么神。我们以前搞OI,初三就把《算法导论》的习题做得滚瓜烂熟,也就算是入个门,从地下室来到地面的水平。只是有人刚来到地面,就跟你大谈“会当凌绝顶”、“程序员世界的高富帅”什么的,这个不至于的,没必要激动。

第二,我面试过一个前端,问他最喜欢什么书,他说TAOCP,连QQ签名都是“只盼TAOCP出第五卷”。我问这对前端有何帮助,他说这是内功。后来考查写代码,他写不出来,说这个不是内功,而他擅长内功。我说那你先证明一下辗转相除法吧,他又强调他擅长的是计算机内功,而不是数学。但其实这个证明,就是TAOCP第一卷、第一章的第一道例题。
没时间,晚上再说,先随便说几句。

这些都是计算机的基础学科,学好了基础,迁移技术和往高处爬都很容易。

说实话,我不认为学生做个网站有啥意义,我要做网站的时候找个东西看一下就好了,我要做windows程序找个最佳实践和几个例子看看就好了,你把每种api都会背了,也只是一种经验*n而已。

学生,就要沉得下心。

以学算法为例,第一步完成之后,也就是大致的算法你都知道优劣和实现了,那你以后一辈子的光景,都不必为这些分析啊性能啊最佳数据结构之类的问题发愁困惑。
这个境界,只要把算法导论上的算法看看熟就好了,甚至公式证明习题你都完全可以不看,一点关系都没有。我去年说过,7天就够了,结果被一堆喷子围攻。。。哎,我就是7天的嘛没人信,每天十几个小时手写了一本本子诶,人非各种挑刺,很没意思啊,7天真的可以让你算法入门的啊。。。。
然后第二层,就是那些喷我不做习题不看证明的人其实也没达到的境界,设计算法,手机屏幕太小先不展开讲了。



其实编程高手的能力无非是对特定问题像语言,算法,平台,库,底层设施等知识的理解程度高以及对设计和思想的透彻理解。
简单说来就是越深入理解,越能掌控全局。如果你只想做泛泛之辈,随便怎么玩都行。

像你只会算法,那只能说是算法强,没有平台知识,不能解决平台问题,所以说算法平台这些东西你本来就逃不掉,必须学好。

番外讲两个小故事,一个是fb发布的php编译cpp的工具,php社区用户不行,所以用着拙劣的语言也写不出堪用的工具,而写得出的人压根不会用php,这个东西的出现完全是因为巧合,世上本不会有这样的工具。
喷子要说了扎克伯格就用php造fb,比你牛逼多了,是呀,你赶紧去学php造下一个fb吧。

还有一个是前几年手机游戏刚火爆,很多公司ios的游戏用cocos2d,安卓就重写一份,其实把objc的运行时弄到安卓上再写几个基础库函数就好了,何必重写。。。。。
其实还可以自己弄一个何必用cocos2d,我说就月旬就可以写出来结果又被无知的人在知乎轮了。。。
码畜会说unity包办一切,其实unity这种工具你不改是不能做得更快更好的,渲染器那么糟糕,当然你如果就只是想普普通通,怎样都行。

所以你学好这些cs学生本应该学好的专业课,以后就少了一个喷我的程序员。

你应该感到庆幸的是这些书都是我用人肉看出来的,我看了很多别的坑爹书,不希望有人再看烂书误入歧途。我从事的领域不够多,所以推书也不够全,以本科基础为主,但这足够让你打下坚实的基础了。

看了这些书,腰还是会疼,走路还是会费劲,一口气也上不了5楼,但是我保证一个人会在思想上有巨大的转变,获得极大的自信,看老师同学和csdn的眼光会变得非常微妙,虽然还只能是屌丝但已经成为了程序员精神世界的高富帅。
不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但,你好好看书,那就是体验会当凌绝顶的感觉哟

欢迎实践过的同学现身说法
为什么?