写代码快十年了,没写过一次插入排序,也没有写过一次红黑树,甚至递归也很少涉及到。这是绝大多数程序员的工作现状。
然而,许多人对“算法”却情有独钟,认为它是评判一个程序员技术水平高低的重要标准之一。
有句话叫做:程序员=数据结构+算法。为此许多人痴迷于刷leetcode不能自拔,执意追求算法,却忽略了在工作项目中学习的重要性。
另一部分人则走向另一个极端——算法无用论。公司项目的核心代码都是我写的,几乎都是“评论回复功能”怎么实现,“点赞功能”怎么实现,“充值提现功能”怎么实现,根本不会涉及所谓的算法,花大量精力去刷算法题,根本就是浪费时间。
在面试过程中,“算法”往往扮演着智力题的作用。因为计算机科学知识深度较浅,培养起来不难,大公司在招聘初级开发工程师时,都会用算法知识,来考察面试者的学习能力及潜力,而不是会使用某种技术。
在实际工作中,绝大多数情况下也不会用到算法,更多的是增删改查、API的对接,数据格式的调整。只有在做比较底层、比较尖端和敏感的场景,才可能涉及算法的实现,但这些场景的需求也远远不止算法。
对于软件工程而言,写出易懂、易合作、易维护的代码,显然比写出效率高一点,代码却很复杂要重要许多。
这样看来算法就显得很“鸡肋。”这也是许多写了多年代码的程序员,坚持算法无用论的原因之一。
另外一部分人认为,算法非常之重要。
大公司非常注重基础,编程语言、数据结构与算法、Lnux、操作系统等等。算法也是发掘程序员学习能力和成长潜力的关键手段。此外,算法能力的强弱,也能判断程序员面对新问题时,分析和解决问题的能力。
懂算法和不懂算法的程序员,完全是两个水平,一个天一个地,所以算法非常重要。
其实不论哪种看法,都十分极端。算法究竟有多重要,到底是算法重要还是项目经验重要,在许多人心中都有答案。
这个问题与“学历还是能力重要?”“选择重要还是努力重要”类似。当你偏执地认为A很重要,所以B不重要的时候,就犯了一种逻辑谬误。势必要为此付出代价。
死磕算法,不了解常见的技术方案,就要付出代价。
轻视算法,过于重视项目经验,同样要付出代价。
因为工作中所需要的技能太多太多,沟通能力、管理能力、商业、规划、招聘、架构、工程等等,都会共同决定一个人能达到的高度。
在庞大的职场技能体系中,算法仅仅是其中的一环,缺算法行,缺了算法也不行。把算法替换成上面所述的任何一种能力,结论都是一样的。