最近刷脉脉看到一个问题:
这个灵魂拷问,估计每个小伙伴或多或少都怀疑过。
毕竟工作中写业务代码,用着别人封装实现好的函数、类、库、中间件,程序只是搭积木而已,“日常增删改查、API BOY”的形容,是不好听,但却是很多程序员的真实写照,写代码更像是体力活。
还有人戏称“面试造火箭、入职螺丝刀”,但实际上,大厂面试卡算法,高薪资的背后,是通过算法,来筛选有思考能力、解决问题能力的人才。
算法的价值,不仅止于面试,更在于入职后,真正解决工程实战中存在的问题。
评论区有位阿里大佬说得非常不错:
毕竟算法在工作中无处不在,你可能经常会碰到:
要根据你的业务排序需求来选择是用稳定排序还是非稳定排序;
要根据插入和删除数据的频率来选择使用 array 还是 linked list;
对上亿数据排序除了外排序是不是也能用 bitmap;
在不同的 workload 下应该选择行存还是列存的数据库,选择基于 lsm-tree 的索引还是 b+ tree 的索引;
.....
还有每天都在使用的 JDK、STL 等基础库中的算法等等。只有搞懂什么场景下、该选用什么算法和数据结构,并且深入了解程序在物理机上到底是如何运行的,面对特定问题,才能用较优的时空复杂度求解,尽可能避免性能瓶颈,真正写出高效运行的程序。
所以那些背了很多“八股文”、学了很多概念的人,在真正临上阵时却不会用。比如都知道 Redis 实现有序集合底层采用的是跳表,但跳表的实现细节、跳表和红黑树相比有什么优势,就很少有人真正理解了。
算法,不仅仅是应对技术面试的工具,还是编程的灵魂。如果你想吃 IT 技术这碗饭,算法会制约一个人的上限,等到技术更高深,经验越丰富,算法的重要性就越来越明显。
武功套路容易学,扎马步基本功难练,学算法也是一样。你没办法讨巧,你要像郭靖学习降龙十八掌那样,一掌一掌劈下去才行。
网上资料不少,大多讲的理论,不结合实际问题,不考虑工作场景,还是学不会。最近看到极客时间上了个《算法实战高手课》专栏,还是让我眼前一亮的,点题就是「实战」,我第一时间就订阅了,看了更新的几篇,可以说是从实际工程问题的视角,真真切切的为大家呈现了一堂实用的算法课,分享一张专栏中「核心算法应用图」。
这个专栏是从算法的工程实践开始,着重讲算法是如何运行在真实的物理机器上的,如何解决实际业务系统中的问题的,如何在各个稳定运行的中间件、分布式系统、基础库中实现的。再加上源码剖析,手写实现,深入细节,带你掌握 35 类算法实战应用场景、6 大领域常用算法知识体系,真正提升你解决问题的能力。
刚上线,最是优惠,还有隐藏口令,到手 ¥89。
黄清昊(网名微扰理论),前阿里云、字节跳动、腾讯工程师,毕业于上海交通大学。本身经历也非同一般,非科班毕业,但因为对算法的兴趣,在 LeetCode 上刷了 800 多道题目(800多道,什么概念!),贡献了200 余篇优秀题解,对算法理解颇深,也成功从前端转型成基础软件研发,现任 EMQ X 存储工程师,对函数式编程和分布式系统有丰富的实战经验。
正因如此,专栏不是枯燥的理论,而是基于实践、结合作者自己很有故事性的经历,真正讲透那些被忽略的有趣算法们,杜绝纸上谈兵的理论知识,可读性很强,很难不追更。
市面上算法教程很多,我为什么要推荐这个专栏:
相对于市面上从基础开始讲的算法教程,内容更进阶。如果说小争哥的《数据结构与算法之美》是从基础到思维带你攻破算法学习、算法刷题、算法面试三大难关,那么黄清昊的《算法实战高手课》就是从算法实践开始,真正提升你的问题解决能力。
专栏主题是真实世界的算法、工程中的算法。主要分为基础和实战两部分,共 6 个篇章:
学习工程中常用的基础数据结构和算法思想,比如双向链表、动态数组、哈希表、红黑树、二分搜索、深度优先搜索等,由浅入深,推演算法的来历和特点,分析源码实现思路,不止是了解算法知识,更要理解工业级的算法实现是如何运行在真实的物理机上的。
学习两门非常重要的计算机基础课——操作系统和计算机网络中会用到的基础算法,比如 LRU 内存置换算法、最短路算法,同样会结合真实的网络库、操作系统的源码进行讲解,互相串联,融会贯通,才能真正深入理解。
学习高流量、高并发、高可用的现代互联网应用中各种算法的应用,解析 Redis、MySQL 或者MapReduce 等系统或者论文的经典源码。深入理解各场景如何拆解问题、应用算法,升级编程思维,帮助你排查真实业务开发中的各种问题,做出良好的架构设计。
最后想跟大家说,其实纠结面试的算法值不值得学,是本末倒置了。
有句话说得好“程序员两条腿,一条是算法,一条是英文,想跑的更远,这两条腿都不能弱”。英文,暂且不谈,算法搞懂、学会、用得上,你才能走得远。
就像左耳朵耗子说的“你得知道,技术不是用来写 CRUD”的。