关于刷题的一些碎碎念——来自一个 LeetCode 刷了 600 题的普通码农

2023-01-27 00:38:36 +08:00
 enchilada2020

混 V 站久了,总会看到几个关于 LeetCode 刷题的帖子,刚刚又刷到一贴,《刷算法题有感》,在底下想评论,奈何写了太多,最后决定单独开贴,一吐为快。

码农来说,LeetCode 这种 OJ 适当刷刷能应付面试就得了,别太当真,除非你就是喜欢这玩意儿,本质上跟有人喜欢解数学题、有人喜欢写毛笔字、有人喜欢画漫画……等等等等没什么不同的话,那这个另算。

可是,我相信发自内心喜欢这个的人终究是少数。大多数自诩对算法有热情的,无非是别有目的,也可以说是动机不纯,只是刚到了刷题的甜蜜点,自我催眠一下罢了。不然遇到难题想破脑袋都想不出来,那是真的打击积极性,不自我暗示一下根本坚持不下去。

刷题只是为了过笔试找工作,这本身并没什么不对,进大厂多赚点钱嘛不寒碜,但这并不能称之为热爱。我始终认为,真正热爱算法的人,也一定会喜欢数学。因为算法的本质就是数学,解题时的思考过程也相差无几。不信你大可以去看看那些算法书,真较起真来是要用数学来证明算法的正确性和效率的。

至于去讨论区看题解,发现各路高手贴出无比巧妙刁钻优雅简洁的解法,同时还附赠了简单的数学证明过程,当然会有 mind blown 时刻,然后相比之下自己就是个渣渣,就忍不住开始自我怀疑。

然而,你跟那些高手比,就相当于你一个普通念书备战高考的,跟校田径队的体育特长生去比短跑长跑。你根本没花心思练过,某天心血来潮,看人家跑挺好,自己也想试试,结果跟着跑了两步,发现完全跟不上,然后说我靠这帮孙子跑太快了,我是不是体质不行没有天赋不适合跑步啊——大可不必如此。

不说那些从初高中开始就玩竞赛的,毕竟人家可能根本瞧不上 LeetCode 这个平台的出题水平,哪怕是读了研才开始自学转码,只要下足功夫,也能做到 LeetCode 竞赛分数 2400 分左右——这是什么概念? Top 0.6%。怎么做到的?先刷够 2500 道题再说。扪心自问,你做得到吗?先不论是否可行,只看主观能动性,你真的愿意付出大量的时间和精力在这上面吗?

话说回来,刷题有没有用,要看你的目的是什么。如果像上面提到的那样,为了刷题过笔试找工作进大厂赚高薪,那肯定是有用,不然 LeetCode 不会火遍全球。但 LeetCode 刷得溜,并不代表你工程能力强,能写出易于维护、方便扩展的代码,或是能做出超炫酷的软件,也不代表你的算法造诣深,能像 Dijkstra 那样发明新的算法,同样不代表你能设计出一个数据库、编译器、网络协议或是操作系统,这些领域对算法确实有相当的要求,但刷题本身跟这些完全是两码事。

抛开功利性的目的不谈,刷题本身对码农来说也是种思维和编程上的双重训练。能解难题,说明对某些明确了特定条件的问题,有较强的抽象能力。很多时候眼睁睁看着归类标签,明知道要用某一算法来解,读完了题都不知道从哪开始下手。另外题解代码能同时做到“高效、优雅、简洁、易读”,说明你比较熟悉某一门编程语言,能用一些语法糖和语言特定的“奇技淫巧”,以及在工程上至少某一局部的代码,比如明确了输入输出的某个 util 函数,能写得比较优质。

君不见有太多基本编程素养不过关的码农,为了解决一个很简单的功能,循环嵌套了一层又一层,却根本不知道一个递归就能简洁明了地搞定。对于这样的选手,简单刷几十道题就会有明显进步,那刷题肯定是有用的。

再简单推荐两个我的偶像,LeetCode 上比较老的题的讨论区很容易找到 Stefan,这位好几个语言都玩得贼溜,但很久不更新了,大概对他来说解题只是娱乐的一种吧,感兴趣的可以去他的上古个人博客看了解更多。新题则是国人之光 Lee215我愿称之为 LeetCode 界的 Faker (不是),基本每个题解都会有 C++/Java/Python 三种写法。国服大佬也很多,但我只刷过美服,就不太了解了。

虽然可能没人感兴趣,但都写了这么多,就干脆再简单聊下自己。我刷题坚持刷了一年多,每天 996 下班回家之后还开机刷道题,365 天风雨无阻毫无例外,当时自我感动得不行,最后也只是拿了个 LeetCode 的 Annual Medal 2021 徽章而已,依然菜得抠脚。到目前不刷题也已经快一年了,因为意识到在软件工程领域,无论是 Web 前后端还是别的什么,都还有更多有趣的东西可以去探索把玩。同时也是因为根本没可能去 FAANG 或是 GAMAM ,whatever ,就看开了。

最后感谢各位花时间来看我这一时兴起的水贴,欢迎各路大佬拍砖指教,也欢迎像我一样曾经虽菜但肝的小伙伴来讨论。

10246 次点击
所在节点    程序员
51 条回复
enchilada2020
2023-01-27 20:44:30 +08:00
@movq 边工作边刷的 实际上找工作面试那阵在我看来根本没问算法。。coding 很简单 读完题就直接一个递归搞定 基本没什么思考过程 毕竟不是大厂
msg7086
2023-01-28 08:16:25 +08:00
我被面的时候基本都是 easy 到 medium ,没见过 hard 题。
Moha
2023-01-28 09:28:48 +08:00
作为一名普通人,我目前正在准备找工作,刷了 400 道左右,我发现 hard 题,脑筋急转弯,数学推导类的题目真的很难写出来,平常都调试很久,更别说面试的时候了.......除非是真的大佬
ytmsdy
2023-01-28 10:33:59 +08:00
作为大学期间 OJ 做了上千道题目的人来说一说
1:刷题只是一个比较容易证明自己编程水平的方式
2:这玩意儿刷个 100 多题,把常规的几种算法熟悉熟悉,对算法的适用范围又一个清晰的了解就可以了
3:刷题最难的不是算法,而且根据具体的题目,找到最适合的算法
4:在需要换工作的时候,阶段性的刷一刷就好了。
ytmsdy
2023-01-28 10:35:21 +08:00
5:别去做那些 hard 题目,那些题目是给那些脑回路清奇的人做的。咱们这些普通人就别去找虐了。
6:人和人的智商差距是巨大的,要认清现实,别没事给自己添堵。
AustinDeng
2023-01-28 15:05:03 +08:00
就亲身经历而言,刷题确实是有用的。

去年面鹅厂实习,二面是 mentor 面,发挥不好,原本是要被刷掉的,但是一面 leader 面的还不错,然后 leader 看了我 leetcode 刷了差不多九百题(差不多刷了一年),觉得我是一个有恒心会坚持的人,就给我过了,后面总监面和 HR 面基本就是走个过场了。

确实有点侥幸或者运气,希望新的一年大家都可以有所好运。
furlxy
2023-01-28 17:57:51 +08:00
所以那么多喜欢招 leetcoder 的意义是什么呢?企业一边不想通过小作业方式筛选工程能力、架构能力,一边又在用与工作无关的 leetcode 筛人,到底是谁急功近利。
enchilada2020
2023-01-28 18:30:39 +08:00
楼上有几位提到了 hard 个人资历尚浅 没见识过太多面试 道听途说来的印象是 一般好一点的企业面试会出几道 medium 主要看思路 在解题过程中跟面试官的交流很重要 至于出 hard 只有三种可能 一种是变相劝退 人家出于各种理由不想招你了 又不方便明说 一种是额外加的 bonus 面 过了会给 special package 还有一种是 FAANG 。。。务实且有诚意招人的公司应该不会那么想不开 哈哈哈
enchilada2020
2023-01-28 18:34:16 +08:00
@furlxy 这个属于更宽泛一些的问题了 非要说的话 因为作为行业标杆的那几家巨头就是用这种方式筛人的😅
Rwq8xlHrBAi0ct2w
2023-02-05 17:17:24 +08:00
赞同 双手赞同👍👍
Linon
29 天前
为啥根本没可能去 FAANG 或是 GAMAM

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/910785

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX