刷题时代的困局(续)

前一篇< 刷题时代的困局 > 引起了很多不少讨论,朋友们提了很多有意思的问题。老实说,这给了我们很大的动力,所以今天就继续谈谈我们心中理解的困局和一些建议。

没有永远的捷径

先岔开聊聊股票。大部分普通人眼中,通过投(chao)资(gu)赚钱是一件特别让人兴奋甚至骄傲的事情。小编见过那种炒股小挣一两万刀就能比自己升职加薪还来劲的主。为啥?炒股不操心嘛,尤其是赶上好时候,那天天看着账户数字往上翻是一件多么牛逼的事情。

问题是:人们在好日子呆久了,往往就觉得这日子不会到头。

也许这种类比有点夸张,但看看当前的势头:每个在美国留学的朋友,只要自己数理还不错,哪怕专业和 CS 离的十万八千里,也觉得靠刷个两个月的题目就能跑到湾区拿个六位数的 offer,加上不断有算法辅导班出来告诉你”别怕,我们的老师转行几个月横扫 FLGUAP,你也可以的!”. 这想象中的幸福存在过么?存在过,祛除夸张的成分,很多非科班出身的朋友的确能靠短期训练进顶尖公司。

但当困局若隐若现的来了,当刷题似乎没有那么有效了,如果大家脑中还是“除了刷题,那我们还该准备什么才能俩月就进 Google 呢?”,那就未免过于天真。

难道就不刷题了?

非也。

刷题的重要性依然存在,万一碰上考原题的呢?这个可能性完全是存在的,只不过这个概率越来越小罢了。退一万步说,刷题锻炼了写代码、解决和思考问题的能力,无论面试中是否碰到准备好的套路,刷题本身是有意义的。

也有朋友说,“多想就是刷题刷的少”。此类“刷题决定论”的观点小编不敢苟同,上一篇文章我们大篇幅聊了全靠刷题的 candidate 会出现的问题,在此不多赘述,点击“阅读原文”看看就明白。

怎么破?

想走捷径的朋友,还是可以继续刷题,然后去面试碰运气,万一成功了呢 :slight_smile: . 只不过提醒一下骑驴找马的朋友们,理论上你可以面试很多公司,但限于时间和精力(相信我,周五没事儿就飞来飞去是体力和精神的双重折磨),去参加面试的机会成本非常高,每一次 onsite 最好有拿下的把握。

对于背景稍弱、转专业求职的朋友,如果想扎实一点,拿 offer 的数量多一些,除了刷题之外,几条实在的建议:

大量 Coding

每天 coding, 刷题算是算法方面的 coding, 也可以尝试其他方向的 coding, 牛逼一点的去 Github 找感兴趣的项目帮忙,差一点的也有办法,比如去实现一些类库,比如 linked list, stack, queue, hash map, priority queue, binary search tree 等。如果有机会,学校期间多参加 technical project 或者 internship,多和比自己水平高的人一起 coding, code quality 会不知不觉的提高。

至少有一门熟练使用的语言

最好是一门高级面向对象语言 + 一门动态类型语言;对于语言的了解不要仅限于刷题时用到的 syntax;熟悉语言绝不仅是搞定语言的 syntax, 你需要懂得语言中大量的细节和常见惯例,这需要大量的 coding 和 code study;

建立 Feedback loop

对于学生或者工作经验很少的朋友们,准备期不要完全闭门造车。自己在家刷题的确方便省事儿,但 Leetcode 除了会告诉你 Success/Fail 之外,不会对 code quality 做任何判断。大到代码结构、抽象层次,小到变量、函数命名,这些体现基本功的地方是很难靠自己速成。建议大家找有很丰富技术经验的朋友做 code review (同学就算了,除非是大牛),有 feedback 才能有针对性的改进,才能提高的更快。

从里到外的明白

设计类的题目,无论是系统设计还是面向对象设计,是很多朋友面试前的心头病。

为什么怕?还是因为“虚”嘛。

电脑上写代码用 IDE 各种自动化, 刷题上网站,连配环境都不需要。好处是练算法非常直接,坏处是省掉了很多可以学习的机会。比如你写的 java code 是怎样编译运行的?如果只用 command line, 你能做到么?其实这些知识也许不会在面试中遇到,但在寻找答案和摸索的过程中,你会不断接触到很多深入一点的知识。

同样的道理,你天天使用的 weicht, weibo, 知乎,google doc, twitter, netflix 等,他们有什么样的技术挑战?具体又是怎样实现的?

在计算机这个领域,保持好奇心、探索态度是非常重要的。对于每一个技术细节,从里到外的弄明白,你才有一个 coder 的范儿。保持这种态度,慢慢的你会发现,CS 这个领域的知识是相通的,需要解决的问题是类似的。总有一天,你也可以入手那些从前看不懂的设计问题,对面试官侃侃而谈。
转自:包子铺里聊IT