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