你都读985大学了,为啥还要磕算法?

1/17/2022

今天有一个读者问了我一个问题,感觉挺有意义,跟大家分享下。

这位读者在某985大学读计算机专业,因为身边很多同学天天刷算法题感到很疑惑,于是跑来问我:

图片

回答完这位读者,感觉要不要好好学算法,要不要刷算法题还真是一个计算机学生和程序员们都会思考的问题,跟大家分享下我的想法:

1.算法是大厂的敲门砖

算法是大厂笔试和面试必考题,这点毋庸置疑。而算法可以通过刷比如Leetcode得到不小提升,刷题的本质是强化,能更高效夯实基础知识,同时也属于刻意训练的范畴。

别说现在了,我毕业那会儿大厂就开始考核算法和数据结构了,面试就要求手写各种奇葩算法问题了,写出来的就能通过面试,反之就被无情淘汰。

其实不光是中国这样,在北美,在硅谷刷题进大厂的现象更普遍,在硅谷无论科班出身、文科转码、无学历转码,要想进大厂就得疯狂刷题。

从实习,到全职,跳槽,一路上硅谷码农都在刷LeetCode。在可以预见的未来,中国程序员的面试状况会不断接近美国,这几乎是不可避免的趋势。

2.大厂考核算法背后的逻辑

其实大厂的初中级工程师在工作中的95%以上的时间里,的确不需要用算法,有的朋友会说:这是面试造火箭,入职拧螺丝钉。

但思考一个问题:能造火箭的人拧螺丝钉自然不是问题,只会拧螺丝钉的人遇见造火箭的需求,能行吗?

大公司对程序员的算法能力有更高要求的原因也很简单:算法要产生巨大价值,往往基于海量的用户和复杂的业务场景。

海量的用户就需要千人千面、需要智能推荐,这样才能最大程度让用户黏在平台里,让企业获取更大的用户商业价值。反过来说,如果用户量很少,供给给算法程序的训练库都不够用,更别谈精准了。

海量的用户就意味着对性能的追求,高并发/高可用/低延时往往就需要用算法调优,最起码你得知道时间复杂度、空间复杂度吧?这也算是算法基础对不对。

业务越复杂,它对应的产品形态和代码实现也就越复杂。这种情况下,代码的任何一个微小的优化,都会产生巨大的生产力。比如阿里云对服务器策略的一点点优化,都会节约成千上万的服务器资源。

所以,大厂尤其重视算法,这个真的很理所当然。

其实不光是算法工程师要好好研究算法,在大厂混的或者要想进大厂的朋友,算法都是重中之重,关键中的关键。

当然有人可以说:我就不想去大厂,就要混中小厂,但很遗憾也只有中小厂的底层码农不需要算法,一旦想成为架构师,算法还是不可回避。

我在360带研发团队之际,部门做了一个o2o的新产品, 某一次大型活动,并发量增长10倍,服务器直接卡死,紧急带领部门几个架构师,对整体的代码做了重构,用算法数据结构疯狂优化了好几个性能卡点,在没增加服务器的情况下解决了故障。

这就是学好算法的作用。

3.算法体现代码和架构之美

踏上了编程之路也就意味着你选择了一种终身学习的生活方式。每一个程序员都要练就十八般武艺,而掌握算法就像修炼了九阳神功。换句话说,掌握了算法,你的内功修炼速度就会有质的飞跃。

无论你是从事业务开发,想要评估代码性能和资源消耗;还是从事架构设计,想要优化设计模式;或者想要快速玩转热门技术,比如人工智能、区块链,都要先搞定数据结构与算法。

因为任凭新技术如何变化,只要掌握了这些计算机科学的核心“招式”,你就可以见招拆招,始终立于“不败之地”。

真正掌握算法的工程师对计算运行有更深刻的理解,比如对cpu执行的理解,对多线程/多进程编程,对高效存储读写的理解。

以b+树算法举例,只有精通了b+树底层原理:以块存储分割换总体读写性能,这种底层理解才会驱动你对计算机原理的全方位理解,你才能从学会cpu cache优化到精通并行编程,再到精通服务器体系架构。

写在最后的话:

如果你是计算机专业在读学生,又或者是工作三年内的职场萌新,感觉自己对算法还很陌生,那么在它身上花再多时间都是值得的。

无论是进大厂还是成为高级工程师/技术专家,算法都是你要攻克的第一个难关。

另外,我的公众号上收录了一份经典算法资料,是一位阿里大佬撰写的,大家回复【01】即可获取。