昨天在知乎上看到有人在问算法有没有用这个话题,有人说有用,也有人说没用。
其实哪怕你是做工程的,能较好的理解算法和数据结构都非常重要的,对使用的轮子能更深刻的理解,也能更好的使用轮子。能知道合适的场景下使用怎么样的数据结构,而不是明明可以选择O(NLogN)算法时选择了O(N^2)。不仅仅数据结构和算法重要,操作系统和网络的知识也很重要,在学习c++中,比如堆栈溢出崩溃,也不一定就完全奔溃,“为什么不是一定崩溃”,“崩溃的本质是什么”,这些问题学完操作系统才有一个答案。
我当年也觉得不学数据结构和算法也能写出“正确”的代码,然后什么都遇到问题自己去想,有时候自己“顿悟”想出某个特别好的办法然后非常有成就感时,在后面看算法书过程中发现,明明就是书上一个简单的算法。这种是个很傻的行为,在聪明的人不可能把前人的算法都在发明一遍。还是要脚踏实地的学习基础知识,看书系统的学习远比偶尔向某大佬请教,或者从搜索引擎学的点状的知识要好,偶尔学个一招半式没用的,武林高手都是一门武功能融汇贯通。
由于工作的原因,工作中用的语言大部分时候是lua,前几年的时候打算读一读lua的源码,只是lua的数据结构这块代码,发觉根本就读不懂,然后网上搜索源码分析,看懂源码分析后“拍案叫绝”,觉得作者太聪明了。然而后面数据结构知识补充好了后,看这些代码就是觉得这些只是书上算法的应用而已。
我这个人很多时候也喜欢“瞎想”事情,我目前觉得学计算机智商并不很重要,智商看你“顿悟”能力,如果基础知识牢靠,很少地方需要靠“顿悟”或者“小聪明”来完成的。学习需要系统的学习,知识要成体系,零散的知识很容易忘记的,小聪明不能让一个人可以走的很远。
在从另外一个维度来讨论讨论算法重要不重要这个话题,在有限资源的情况下怎么去分配的问题,比如说“IT公司10个人来面试但只招1个人”,“系统中有10个进程需要选择1个进程来运行”等等如此之类的问题,这个时候就需要根据某个规则来比了。想要在对比中能拿到好成绩,就必须遵循规则,这样才拿到自己想要的好结果。
网友评论