计算机学习的回顾和体会2

1.算法的学习体会

我感觉算法分析与设计和编译原理是我学过的最难的两门课(计算理论当然也很难,不过我觉得没用,没有学)。一方面当然是因为水平不高,另一方面也因为这两门课的内容比较抽象。

我觉得凡是和树有关的算法,不管多复杂,都不太难理解;而和数组有关的算法,则理解起来要困难一点,或许是因为更抽象。

好在现在有网络,对一个算法不理解,到网上找博客,往往能找到一个分析得比较容易懂的。比如KMP,AC算法我就是找了好几个帖子,终于找到比较好懂的。

要学好,感觉还是要有需求,做出一个应用某算法的实用程序,才算是真正掌握。

2.编译原理的学习体会

编译这门课,很多内容的确是没用的。一般情况下不需要你去写编译器;某些知识如词法和语法分析,即使有可以应用的场合,现在网上免费的工具那么多,往往不需要知道原理也可以拿来用。明白了这一点,可以减少思想负担。反正学不会也没有大问题。

真要学,建议先不要去啃理论,尤其是要回避那些光谈理论,没有代码的教材。先从使用一些实用工具如antlr,yacc,roslyn入手,获得感性认识,再去看理论。推荐Compiler Design in C,虽然有些内容过时了,但是优点是有完整的代码。

3.代码阅读能力很重要。特别是维护别人写的代码,往往文档很少或者过时了,只能看代码来理解逻辑。看的时候,要从全局到局部,先理清大致的流程,再一点点抠细节。对于关键的,复杂的流程,需要做点笔记,画流程图。

另外就是学习别人写的代码比如某些开源代码,最好是边调试边看。

4.理解原理

理解原理很重要。我当初做了两个月web开发,理解了web程序的基本原理(前后台交互的流程,页面的生命周期等),这时有人要我帮忙,用php写个程序。我虽然不懂php,但是拿着书看了两天,一个星期就把程序做出来了。理解了原理,虽然具体技术比如asp.net, asp.net mvc等等不断升级,但是基本原理差不多,即使一段时间不接触,要重新抓起来也不难。

现在很多代码网上一搜就有了,如果不理解,只是拷贝来用,或许程序可以工作,但是不会举一反三,换个场合,又不会用了。我有这个教训。前段时间写个类似外挂的应用,找来一段代码,依样画葫芦,可以从树形控件中提取文本,虽然对于pinvoke的代码并不是完全理解,但程序能work,就不求甚解,不管它了。

后来又想实现模拟鼠标点击这个树型控件,结果不工作,找了很多帖子,看来看去,有段代码好像跟我拷过来的那段有点相似。回过头再去看那段代码,这下把它看懂了,理解了原理,终于写出了working的程序。

如果当初就理解了原理,就不用走这段弯路了。

posted @ 2018-01-11 04:14  平静寄居者  阅读(157)  评论(0编辑  收藏  举报