算法无用论?算法到底为了什么?
误入迷谭
算法该不该成为考核普通开发岗位求职者的标准?这个问题议论纷纷,莫衷一是。其实,美国的许多软件巨头公司中,除了专门做算法的某些岗位,很少有面试当场考察算法题——例如Google。
随着Google的巨大成功,国内的许多企业、作家纷纷效仿Google的运营模式与招聘模式,于是便有了铺天盖地的算法面试。国内各个算法网站也随之应运而生。算法面试的初衷很好:考察求职者的智力、思维模式、功底与临场发挥能力。
但人都是贪心的,总希望用最少的付出得到最大的回报,在 2015 年便有了 LeetCode 这种直接收集各家大公司面试题库的网站。刚开始的时候,只要把 LeetCode 里面的题目刷完,基本等于手握大厂 offer。
但是原本考察算法题的初衷,并不是为了看求职者是否做过原题,求职者刷题的做法与其背道而驰。这股歪风邪气越刮越猛,甚至改变了相当多开发者的价值观。
贫瘠的思想
我见过许多令人大跌眼镜的代码,例如递归或循环里读写数据库、数据整理操作绕了百八十个弯……算法只用于应付面试岗的智力题却不融于开发让人深思。软件工程师生产代码应该是一件富有思维与技术难度的事。
算法的价值
说到算法,就不得不提起它的孪生兄弟:数据结构,数据结构与算法是计算机世界的基石。我们使用的框架中封装了大量精妙的算法与数据结构的设计。虽说不会算法也能开发,但会算法可以如虎添翼。
如果开发者掌握算法,就非常清楚在何时、何种业务场景下该使用什么样的算法、数据结构模型,而不是一头莽撞、不加思考地开发“流水线代码”。几十年积累下来的经典数据结构——栈、队列、链表、树……也会被开发者牢记于心。长此以往,开发者的思维模式、开发产出就不同如前。
算法的练习应该是日常生活中的一部分,而不是用于应付面试岗的智力题。