想学好算法,先纠正这三个误区

本文作者胡光,前百度高级算法工程师,分享了关于算法学习的三个误区:误以为学算法只为面试、忽视基础知识的重要性、认为自学优于跟随老师。强调算法作为基石对编程和职业发展的重要性,鼓励深入理解算法设计过程而非单纯算法本身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文作者胡光

前百度高级算法研发工程师,ACM 国际大学生程序设计大赛亚洲区金牌获得者

他曾经是百度高级算法研发工程师。在百度期间,他开发了部门内部的第一版推理引擎,并顺利在人物关系推理等应用场景中落地实施。他的算法之路很早就开始了。高中上大学,他靠的是算法竞赛的保送名额。大学期间,他还参加了 ACM 国际大学生程序设计大赛,拿到了亚洲区金牌,进过两次 ACM 全球总决赛。可以这么说,他的算法知识,是在激烈的竞赛环境中积累起来的。


算法到底有多重要,这已经是一个老生常谈的话题了。

我相信,你在看这个课程之前,肯定也看过非常多的文章,这些文章都从不同的角度告诉你,为什么要学算法,以及怎么学。

但你真的学会了吗?就像有很多的学生,在和我学习算法之前,会问我这几个问题:

  • 我知道算法很重要,但是工作中好像总也用不到。
  • 我为了面试学算法,刷了那么多题,遇到新题还是不会怎么办?
  • 这么多算法知识,总是学了又忘,忘了又学,怎么才算学会呢?

如果你也有同样的疑问,那说明你真没学好算法。想要学好算法,我们必须要纠正几个误区。

误区一:学算法就是为了面试,工作中根本没用

很多大厂的面试都要考算法,所以很多人学算法,就只是为了面试,他们把算法当成了一种应用技术。这会导致我们在学算法的时候,只关注能不能用某个算法解决某个问题。当解决不了这个问题的时候,算法自然就显得“没用”了。

可我想说,有些知识的学习是面向当下的。例如,我想用命令操作一个服务器,那我学习相关命令的使用就行了,不用去了解操作系统底层。而有些知识的学习,是面向未来的,就像算法学习。

为了更形象地说明这一点,我想给你讲一个建筑工人村头老王的故事。首先,我想问你一个问题,如果我让你盖一个“茅草屋”,你会做些什么准备?你会去学习建筑艺术,还是去学习相关的计算机设计软件,又或者是去了解相关知识?

如果你真的去盖了房子,就会发现这些准备都是无用的。因为即便是村头的“王大爷”,在不了解这些专业知识的情况下,也能用现有的材料,给你盖一个像样的茅草屋。那么问题来了,会盖茅草屋就等于懂建筑吗?当然不是。因为我们重复盖 20 次茅草屋,也盖不出 20 层楼。所以,知识有没有用,主要是看你要实现的目标是什么。

如果你要实现的目标,就是盖一个茅草屋,那么建筑学相关的知识很多都是用不上的,凭感觉盖就行了。而如果你的目标是盖 20 层的高楼,那你真的需要花很多时间来学习大量的理论知识。理论与实践永远都是相辅相成的,没有理论的实践会丧失高度,没有实践的理论也会变得空洞无用。

编程或者说我们的程序设计之路,就像是去盖这 20 层高楼,我们必须要学习大量的基础理论知识才能走得更稳,算法就是其中非常重要的基石。

误区二:学数据结构和算法 = 走“弯路”

抛开面试,我们再来谈谈工作。

在 IT 企业中流传着一句老话:大公司造轮子,小公司用轮子。越是大型的互联网公司,自己造的轮子越多。因此,快速掌握行业知识的能力,也是我们必须要具备的核心竞争力。这都是建立在拥有大量专业基础知识之上的。

如果说应用知识标记了你在行业跑道中的距离,基础知识就是你在行业跑道中的加速度。一个加速度大的人,即便他在一开始是落后的,通过几年的发展,最终也会赶上那些起点很高,但速度很慢的人。

可是很多人并不注重基础知识。举个简单的例子,我教过一些学生,他们在最开始学习写代码的时候,就是把代码写出来而已。一旦他们的代码运行出错,就会跑过来问我到底是怎么回事儿。因为他们认为,写代码就是写代码,找代码的错误就是在“走弯路”。可实际上,写代码的目标并不是把代码写出来,而是用代码将逻辑正确地表达出来。只有找到自己代码中的错误,才能使自己的代码能力真正得到增长。

这其实也是我们学习数据结构和算法的意义。换句话说,我们要根据数据的性质,用一套合适的计算流程把它们写到计算机中,然后表达出我们想要的逻辑。

总的来说,我认为,在学习中犯错不是在走弯路,学习基础知识也不是在走弯路,而正是这些所谓的“弯路”才是通往行业核心的真正捷径。所以我说的捷径,其实就是在学习过程中,多给自己一些耐心、努力,找对真正有用的学习方法。这也是我做这门课的初衷。想想我们将来要面对的几十年行业生涯,除了学习应用技术外,多花几个月时间在基础知识的学习上,我觉得一点儿都不多,甚至很划算。

误区三:算法我自己能学,没必要跟老师学

有些同学可能会问,那算法一定要跟着老师学吗?在回答这个问题之前,我想先问你一个事儿:去肯德基点东西的时候,如果多点一个蛋挞会让你这顿饭吃得更满足,你会不会点?我想咱们的答案应该是一样的,肯定会点。

其实肯德基这个例子,就已经回答了最开始的问题,需要跟老师学么?答案就是,不冲突。咱们假设,你现在可选的学习方式有:看技术博客 + 看书学习。那么所谓的跟老师学习,不是剥夺了你看技术博客和看书学习的权利,而是作为你现有学习方法的一种补充。老师的作用,也不是单纯的知识灌输。一个好的老师,最主要的作用,是帮助你抓住学习重点,帮助你规范你的训练方法,帮助你提高学习效率。

所以,跟着老师学习,是对你现有学习方法的补充。如果你自己就能学好,那么跟着一个老师学,肯定会学得更好。只是,你需要选择一个好的老师。尤其是计算机领域的好老师,需要理论和实战两手抓两手硬,这就非常难找。如果你真的碰到了好老师,跟他学,准没错的。

最后,你一定要记住,学习算法最重要的,是学习算法的设计过程,而不是算法本身。

接下来我会继续分享:数据结构与算法学习的方法、实际工作中经常用的三类算法、最重要的数据结构与算法、生活中的算法等系列内容。如果你也对算法感兴趣的话,可以先关注我哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值