不确定你指的 lab / pro 是什么东西,最好举例一下
你这个问题也很泛,计算机科学有很多细分知识,单举例大学课程就有典型的数据结构与算法、操作系统原理、计算机网络等等。它们可能存在课堂留题,这一般是教师为了巩固和检验教学成果的手段;也可能存在非教材读物的章节练习题,一般是书籍作者认为对应章节所讲述的知识足以或可辅以解决某些配套迷题,留给读者自行发挥和练习;也可能是为了给某些考试、笔面试设置区分或筛选门槛而设置的题目。
所以你看同样是刷题,它们的目的可能不一样,其意义应该取决于你想达成什么样的目标。
单论刷题这个行为,本质上就是重复练习。著名的“10000 小时定律”虽然饱受争议,但其实有一定的可取之处,即刻意训练。为什么会有讲师、教授的区分,为什么会有初级/高级/资深/专家工程师的区分,除了不同等级所要求的软素质不同外,是不是也应该存在某种技能体系的广度、深度、熟练度的要求?熟练度或许是这个问题讨论的关键。
除学术研究外,工程和应用技术最讲究动手实践,很多东西你没做、做过但不多、做过很多次、做过很多也思考了很多完全不是一个体验。最简单的例子就是所谓的设计模式,它只不过是当年一群走到了行业顶级的人,根据他们的经验总结出软件开发的几种可行且可复用的套路,你学习到了他们的基础思想,套用上合适的设计模式,似乎就能设计出看起来还不错的程序。那么问题来了,如果你不实际动手去做,就算这是前人的优秀经验总结,你怎么知道什么情况下套用哪种模式是最合适的?它在一些边界情况的细节处理怎么搞?在你没做过的情况下,你只是很机械地照本宣科罢了,实际工程环境的复杂度可能超乎你想象;在做过但不多的情况下,细节就可能处理不好,可能也不能活用,比如你可能设计了一套很复杂的抽象工厂应对 A 处理 a / B 处理 b 的需求,实际上可能简单做个策略模式就能搞完;做过很多也思考了很多,你可能会把多种模式结合在一起使用,甚至会提出新的设计模式也说不定对吧。
而跟上面工程实践例子比较相像的就是刷算法题。本质上打竞赛的人刷题也是在掌握公认的有限几种适合比赛的基础算法的前提下,尽可能多地见识不同题型,不同陷阱与套路罢了,它就跟高考一样,很枯燥。达到区域赛拿牌水平,可能仅一种算法比如贪心的不同题目都刷过上百道,所有算法题加起来几千道;一般寄希望于刷题过大厂笔面试的求职者,刷 LeetCode 前百道包含各种贪心、搜索、动态规划等各种算法的题目,跟竞赛选手比起来简直就是小巫见大巫。不管竞赛也好求职也好,刷题的共同目的是让自己更熟练,在有限时间内越快越好越准确地解决问题。这也是国内大环境大家觉得“卷”的一个缘由,大家都觉得自己智不如人,那就只能靠努力来填补;而准入机制又因为大家的平均熟练度水平越来越高,不得不一次又一次地提高门槛。
但刷题不一定只给你带来熟练度的提升,于是你会发现我在开头就做了一个错误引导,我并没有明确“刷题”的概念,而是按一般人理解的题海战术来讨论的。回到工程实践,其实你不一定(且大概率不)是主观地重复练习,你可能因为实际生产需要而不停地运用你过往的经验、知识和技能,复刻出实质相似的工作成果。通常评价要求工程师摆脱被动,由初阶晋升为高阶,这就离不开总结与归纳,并化被动为主动,能够运用自己的知识经验发现并解决问题,而不是等问题来找你给它一个交代。这也是“刻意训练”的另一种内涵,这里的训练从以量取胜转变为以质取胜,说人话就是像楼上说的追求理解,知道它什么能做/不能做、为什么能做/不能做,知道它怎么做/怎么改进,这需要你付出脑力去思考,通常消耗的心智是远比在海量中灵光一现发现规律要多得多的。
这里我稍微偏离讨论,单独点一下求职者刷面经的模式。我就不喜欢这种形式,换个角度看也是一种对自己的不自信,通过观察面试官会出什么题来做针对性练习,以达到在所考察的范围内都貌似优秀的结果。这可能是双方都有锅的,一方面求职者不自信、不熟练,甚至可能不诚信(开摄像头笔试都能搞出投屏枪手代答的操作),另一方面是部分面试官不专业,出刁、难、怪题,出工作中用不上的造火箭题。于是负反馈循环,求职者要摸清行情,面试官要设置准入门槛,越来越难。
忽略上面的偏离,让我们总结一下并回到主题。同样是刷题,分支可能不一样:更偏记忆的理论学科 vs 更偏实践的应用学科;目的可能不一样:比赛 vs 考试 vs 求职;形式更是千人千面,有题海战术这种极端,也有形成了方法论的学习方法。这完全取决于个人,也就是你自己。在你有明确的目标方向,或者正式进入社会做一个打工人之前,你可能缺乏实践的机会,刷题是弥补这种缺憾的一种手段,这就是刷题的意义。它当然不是唯一解。你说我就喜欢先理论学习,然后直接上手工程实践怎么办?那也可以,如果你真的能在学习之后就手撕操作系统内核实现、手撕 tcp/ip 协议栈实现、手撕大数据集多维解空间下的最佳求解策略,并且真的做出来了还能开源放在 github 上接受同行 CR 并且没什么大问题,那就不需要刷 OS 题、计网题、算法题,做到这个地步那就是妥妥的天才,不论是研究所还是企业都抢着要,对吧。