学习学习再学习

和写博客一样,计划了很久要把学过的算法重新捡起来,结果每次都是半途而废,无法多坚持几天。桌子上有关算法的书摆了一大堆,但是都没有看完过,除了上学时学的《算法导论》之外,基本都处于全新状态,实在是都有点不好意思把这些书放在这里了,我有一颗学好算法的心,但总是力不足,无法坚持,只能YY。

最近借着新博客安家的东风,希望有时间能继续完成我未完待续的“事业”,那就是不要在面试的时候害怕算法设计题,工作中的算法其实还好,大家讨论讨论,Google一下总能有思路,可是要是真面试的时候就有压力了,做不出来总觉得很丢人,计算机科学可不就是算法+数据结构么,这都不会还扯啥蛋呢。

cover-image

以前总有一种心态,没事干老面试啥算法啊,工作中又不是天天让你写这些很tricky的算法,大部分时间还是砌墙码转的,何必这么为难人呢?后来随着时间慢慢的流失,自己慢慢的变老,当激情不在的时候,才慢慢体会到计算机科学真正核心的东西也还是它的本质,那就是算法了,做为一个搞计算机科班出身的人,丢掉算法,如同你失去了可以去闯荡世界的武器。

为什么大型的互联网公司不管什么,上来先面试算法呢?(当然这要排除已经在一些领域有所成就的人物,他们的价值已经体现的很透彻了,还需要啥面试。)我觉得现在这个互联网大数据的时代,产品更新迭代很快,需要码农门有很强的代码功底以及逻辑思维能力,说白了我觉得就是看你有没有活力,脑子还能不能转起来,给你一个稍微有点需要动脑子的活能不能hold住,这应该是面试的主要目的,而不是难为你。灵活运用算法的人,到了新的领域,面对新的未知问题,解决这些问题的速度和质量令人满意的概率是比较大的,这也许就是当今Google,Facebook之类的技术面试仍然以算法为主的原因了吧。

回过头来在看看我司,平时基本半毛钱算法的东西都不会用到,干的事情基本属于码畜阶段,就是刷image,push一些库,看看能不能work,不怎么写代码,手都生了,别提算法了,写代码也就是调用一些别人写好的API,组个轮子而已。所以我打算学习算法,倒不是为了跳槽,只是让自己的头脑不能锈掉。其实我司的工作环境很好,能学到很多东西,但离我所喜欢的计算机科学差太远。

我周围的很多人都不怎么折腾和计算机有关的玩意儿,对他们来说所有和计算机有关的事情就是在单位所做的,也不是太关心IT圈的发展,更不会去主动尝试一些新东西,只是把搞计算机当做工作的工具而不是自己喜欢的事情,这点和我的三观还是太不一样,我为啥喜欢瞎折腾,喜欢搞IT,就是因为它总是能带给我一些新奇的东西,不管有啥新技术新语言,我还是喜欢看一看,不求精通,但求了解,要知道这玩意是干嘛的。从高一的第一台电脑开始写代码到现在,我仍然对计算机技术充满了兴趣,计算机科技的每一次进步,我都充满了好奇与探索的渴望。

想了想,给自己指定了一个简单的计划,不比上学大把大把的时间可以用来戳,现在的时间太宝贵了,只能尽我所能了,从头一点一点看书估计是不太现实了,所以我的想法是这样的:

通过做题来学习算法,遇到不懂的知识点再去查漏补缺,看教科书。

具体的计划大概是这个样子:

  • 有空就去做一道LeetCode,从易到难,也就是按AC Rates排序一下,从最高的开始做起。
  • 先自己动脑筋想一想,想想思路,有了思路再写代码,没有自己写出一个soltion之前不要轻易看答案。如果实在是憋不出来,那就研究下网上怎么实现的,不能太打击自己积极性。
  • 对比下自己的和网上的,看看这道题都考了哪些知识点,总结一下,记录在这里, 以LeetCode Algorithm Study 做为tag。
  • 这个过程肯定很漫长,而且刚开始的时候很容易放弃,不要太急,慢慢来,就当玩玩,总比没事就刷微博要有意义。

想法就是这个样子,我也不知道能坚持多久,立此存照吧。

加油!