诗海

我们越谦卑,就离真理越近

0%

学习计算机科学的方法论

计算机科学(Computer Science,以下简称CS)包罗万象,博大精深。由于是一门操作性极强且又极为复杂的学科,因此对新手并不友好。我个人从大学四年的专业学习上,只能说是积累了一点经验,打下了一点基础。我就在此谈一谈个人对于学习计算机科学的方法论,为接下来自己的自学提高指明一个方向。

我把自我的学习简单分为以下几种形式,缺一不可。

看书

我想把看书作为一个最重点的内容来谈。很多程序员觉得网络是必不可少的工具,因而过分的重视网络上的信息获取,反而轻视了书本阅读。我自己也在很长的一段时间内犯过这样的错误。事实上,书籍阅读的学习是十分体系化的,一本好书往往能帮助个人建立起整个知识体系结构,打通各个知识点之间的关联与互动,这些内容是自己通过零碎的网络信息获取所不能得到的。而且,网络上的资源参差不齐,许多说法互相矛盾,还要大部分都是抄袭、转载、浮于表面的东西。如果你愿意并且手边有质量高的书籍的话,你会发现很多几篇大段文章都说不清楚的概念,在书本上寥寥几句话就说明白了。

如何选择书籍是一门学问。我觉得就个人的经验来说,在决定阅读或购买一本技术书之前,在豆瓣上进行评分查看是个不错的选择。一般来说评分在8.0以上的都是用心写了的,有一定的可取之处,可以作为免费借阅的书籍选择。在9.0分之上的大部分情况下可以考虑直接购买,不会有太大的问题。另外,技术书籍是买新不买旧的,追求3-5年内的最新版本往往来说是最贴合当下的,没有过时的技术。我个人觉得外国人写书还是比中国人写书要好一些,但是外国书有个很大的问题就是翻译问题,这个直接影响到最终的阅读体验,所以一定要注意豆瓣下面关于书籍翻译质量的评论。图灵书的翻译质量是最高的,其次是异步图书、动物书、人物书也可以,华章和黑皮的机械工业书翻译质量参差不齐,需要仔细鉴别一下。在现阶段,自己不宜也不要去直接挑战英文版的书籍阅读,无谓的增加学习难度并且极有可能半途而废

最后说一个个人目前新的想法:那就是高质量的书籍还是买回来看好,这里所说的,就是纯粹为了个人兴趣学习的目的,不是为了一时完成作业、查阅一个小知识点这种零碎的学习。虽然中国有话说书非借不能读,但是借书的话在阅读的过程中有太多限制,不能自由的划重点、做批注这样。技术书的阅读是非常枯燥的,如果不通过这些方式调动自己积极主动的思考,那极大可能是看不下去整本书的。最后,中国的国情是书籍都很便宜,哪怕是特别厚的技术书也不过100块左右。所以说,只要是好书,买回来并且认真看完了,就只赚不赔

动手实践

动手实践和理论学习对于CS学科是同等重要的。一个人要是十天半月不写代码,那么他的代码能力绝对是会下降的。一个完整的项目,或者一个优质的课程作业,需要从最初的环境配置做起,到整体设计、代码实现、调试和试错,最后进行部署或发布,牵涉到了方方面面的内容。很多之前看到过的似是而非、没有完全理解和掌握的知识点,都是在动手实践中才能加深理解的。要知道整个CS学科是一门立足实践的科学,所有的概念和算法都有与之对应的代码负责具体的实现。Talk is cheap. Show me the code!

自己在动手实践上目前存在着非常大的不足之处,最近一两年来都没有什么大的、好的项目可以拿的出手。这是接下来一段时间内在看书学习之余需要着力提高的一个地方。

网络资源

许多的程序员都是面向网络编程的,这一点我们在初级阶段是无法回避的问题。希望有朝一日自己可以闭门造车还能写出高质量的代码,那就真的是达到极高的水平了。网络资源十分丰富:从文章帖子、文档手册、视频教程再到Github代码仓库一应俱全。就文章而言,我觉得最权威、最可信的莫过于官方的开发文档,其次是StackOverflowSegmentFault这样的高质量网站或DigitalOcean Community这种开源社区的文章,再其次是一些个人搭建的博客和知乎掘金简书这样的博客平台或腾讯云美团这样的开发者团队文章,最后是CSDN以及各种其他不入流网站。

Coursera上有很多课程很值得一学,这也是自己接下来要努力学习的一个方向。我想多说一句,就是做一件事情就要把它做到最好。一个人的水平有高低,反映到成果上就是有高下之分,但是态度是同样重要的。为了知识而学,而不是为了证书而学,课程作业是和教学视频同等重要的,需要认真对待,不到万不得已不可随意抄袭别人。

源码阅读

这是提高自己代码能力的又一条重要途径。目前实践的不多,暂时按下不表。但是,那些优秀的代码框架、轮子、库函数都是前任编程设计的智慧,都用代码的形式展示给自己了。一个只会调用而从来不去研究源码的程序员,就是只懂实现而不懂原理,他对编程的理解和掌握度就永远是低层次的。

同行和同辈的交流

这个是我在大学四年中一直没有做的很好的地方。我深感身边很多人太难沟通和交流,三观不合,因而人际关系处理得极为不好。但是,同辈的交流促进就CS学习来说是十分重要的。一个人是不能闭门造车的学习的,至少要对身边人的学习研究的方向有个大概的认识了解,对行业的发展有个了解。这就需要结识那些真正热爱技术,不断潜心钻研的人。但是,真的好难啊!不是说大学没有这样的人,而是说这样的人太难接触,更难以跟自己结交朋友:不是过于狂傲看不起人,就是沉默木讷不言。将来读研期间换个环境再着力吧。

身边人能给带来的益处是很多的:从直接的手把手教学、优秀工具的使用、项目的设计到个人看法和习惯的改变。虽然大学期间的诸多团队合作项目体验不好,但是我还是对这方面抱有期待。不应该因为有人投机取巧,就不相信有踏实肯干的人;不应该因为有人急功近利,就不相信有纯粹热爱的人;不应该因为有人狂傲不羁,就不相信有乐于分享的人。

论文阅读

目前对这方面涉及不多,所以暂时按下不表。我只记得谁说过一句话:一个行业内最新的成果、最新的发展趋势,肯定是看这个方向上的学术论文,如果说已经出了书籍了,那就已经过时了。将来走科研路线的话,这真的是要下大力气的地方。