算法开始

  由于本专业是软件工程专业,所以课程多接触的比较多到的是软件工程技术,本人对计算机系统的知识如操作系统、计算机网络、数据库知识、以及编程语言设计理论比较感兴趣,操作系统学习的初衷源于大学时小伙伴对于linux 的着迷,因此我也跟着入坑,操作系统是程序员每天接触到的系统,掌握了知识后,便会有掌控的快感。而计算机网络的兴趣则源于linux下的编程,因为涉及到网络编程,所以对计算机网络也有比较大的兴趣。对编程语言设计理论的兴趣起于本科接触了很多的编程语言,java,c/c++,js,php,python,c#为何有这么多语言,以及语言设计的初衷、起源、可以解决什么问题。学习了这么多编程语言后觉得新语言是不断出现的,因此想掌握更高层次的知识,从一个更高的高度就看待编程语言。

  对于算法一直是心里的一块心病,因为感觉自己从未进入算法之门,身边总有人在讲算法,面试总是在问算法,但是因为周围同学没有做过ACM,因此没有学习算法的动力(可能那些大牛学算法的初衷就是ACM,得奖,只是后来才意识到算法的重要吧,感觉他们赚了很大的便宜,对找工作很有好处)。找工作和实习的时候单纯从准备面试来学习算法其实就是刷题,因为经常问的就是那几个题,因此会写就可以了,也没想太多,因为心里不是主动学(虽然知道面试有用),心里甚至有些小小的抵触情绪。一个个刷题,刷一些彼此没有关系,不成体系还特别晦涩的题目有意思吗,看算法书那看N遍都不一定能看得懂记得住的东西是在找虐吗。人是个很有趣的动物,做事是需要动机的,只有心里完全接受这个东西认同这个东西才会行动,但是一旦行动起来,那股子韧劲又会让人不可思议(看了下一些大牛的博客,这里就不说明了,又是研究人脑又是引经据典去找证据的,个人感觉忒累,而且如果真的有所谓的认知或学习方法论的话,掌握了岂不是世界无敌了。人类需要的简单的动机,至于方法真的用简单暴力的即可,好的方法只是起一个加速作用,没那么那么重要。如果有所谓的元知识,那机器学习为何还不能满足人的要求,还需要大数据)。学习算法可以是因为ACM队里有个特崇拜的队长,有高大上的联系场地,这里突出了环境的重要,环境给人最直接的感官刺激。当然这里我不是要给读者们提供一个环境,而是要提供一个动机。就像喜欢一个人就是凭感觉,饿了才吃饭,睡饱了才起床。

  算法首先是一个基础,是学习计算机专业的基本功,而不是一个个oj上毫无意义的题目,意识到算法的重要性是必要的,算法其实存在感挺差的,因为都被封装成库了(一些人喜欢分析库,其实了解语言本身的同时,里面经常性的用到算法,工作中用到的算法都是用来解决问题的,而成熟的算法都被封装了)。稍微接触过算法的人都知道,算法围绕的是数据,离不开数据结构。计算机中最重要的是什么,是信息,是数据,为什么说二十一世纪是信息时代,就是指的这个。在处理信息得过程中,人们总结了一些与信息密切相关的问题,这些问题如此常见,到了必须要总结成方法论的地步。都是些什么问题呢,就是面试的时候经常问道的字符串、排序、编码、搜索、图(信息流动问题)。总之,算法就是问题问题问题,分类分类分类。学操作系统是为了了解底层知识,丰富计算机体系知识。学网络是为了网络编程(因为当初为了沟通计算机这个问题已经解决了),学编程语言设计理论是为了了解PL的本质。而学算法就是为了解决问题了,信息处理的问题,这也是为什么很多算法比赛叫信息学竞赛的原因吧。那学操作系统一定要去heck kernel,读linux源码吗,学计算机网络一定要深入了解协议吗,学PL theory一定要精通lamda演算,精通编译器吗,算法这东西看个差不多懂就行吧。我学linux kernel完全是凭兴趣,没有说精读哪子系统的代码,学网络也没写过高并发的框架,甚至学PL还处于一个刚开始的阶段。怎么说呢,感觉什么都涉及但是没有精通吧。下一阶段想精通linux kernel也只是在对linux知识掌握了够多的情况下想深入了解一个模块。因此我觉得学习算法不要先想着精通,而是随自己的兴趣由浅入深,然后重点去学某一类问题。我想ACM队在参加比赛的时候每个人的侧重都是不一样的,你可能搜索比较厉害,而我可能图比较厉害。更不要一开始把目标定的很高,有的时候过于深入,可能是一种无用功,构建自己的知识体系才是重要的。不能否认ACM在知识体系培训和训练强度上是优于大部分人的,但是规范的培训不一定能形成好的知识体系,而且我们学习算法更重要的是为了满足一个优秀工程师的工作能力,当然更为实际的还有面试能力。无需过于深入,对于工作的同学来说,发现更有价值更有乐趣的才是重要的。另外不能只看不写,因为写程序才是更大的乐趣哟哈哈

  对于自己,其实没有ACM这种功力的东西学习的动力还是很差的,毕竟只是基础,因此还是兴趣驱动吧,不过注意一定要有的放矢。我是有多懒,连面试都不算动力嘛,可能面牛公司的话动力就大一点了吧。不过对于操作系统,兴趣驱动之外我也已经想要深入了解子系统了,因为可能以后工作需要,而且以后的工作我确定应该会用到。我感觉我的职业生涯会或多或少的跟我的兴趣挂钩了,因此兴趣驱动的学习还是对自己影响很大的,到后来可能自己的生涯应该脱离不了自己兴趣形成的知识体系。根据自己的性格,喜欢随性自由,目前可能只限于技术层次,因此我在学习的时候应该不能只停留在理论而是要用工作来提升,同时还能积累经验,不至于被人说是纸上谈兵。研究生的败笔就是兴趣没能和工作挂钩,想一口吃个胖子(去bat或者微软亚洲研究院实习,其实他们想去并没那么难),结果老吃不着,不如先从一般的做起。

  那现在算法我先从兴趣开始,然后不断加强学习,并在需要的时候加大强度。

posted @ 2016-04-08 11:35  johnny_HITWH  阅读(287)  评论(0编辑  收藏  举报