算法的重要性

前几天,在博客上看过一篇写算法重要性的文章,个人对此极为赞同。随着时间的变迁,很多东西都会变,很多技术都会更新。目前火在一时的Java,或者已经面临淘汰危险的iOS,似乎就在说明这个变化。但是,永远不变的,确实是算法。这无需争论,因为,无论是谁站在反对的一面,都会输的一塌糊涂。

李开复老师也多次言明过算法的重要性。他说,数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等这些,远远比日新月异的语言重要的多。这些都是本质,是“万变不离其宗”的东西。

在国外,美国哈佛大学《算法导论》的公开课,已经登上各大网上公开课的界面,供全世界的人学习。微软操作系统的研发更新,谷歌搜索,百度地图导引等等,这些都需要强大的算法理论在背后支撑。

真正学懂计算机的人(不只是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。

通俗来说,算法是数学理论和工程实现的杂糅,是一门十分神奇的学问。

自上个世纪九十年代,全世界就开始流行着一种“算法竞赛”——即ACM\ICPC,一项以三个人为一支队伍,在五个小时之内,对十一个题目通过编程进行解决的同场竞技。

可喜的是,发展到如今,很多人都加入了进来,这说明算法已经得到了他们的重视。并且优秀的人似乎不光是想着自己,更是想的整个ACM界的前途发展(比如说坎普的叉姐等)。在大学内,我们还没有走入社会,是还在学习时代,会得到很多人的陪伴和帮助,我们应该好好珍惜。

但同时又是可悲的。因为ACM受到足够的重视,这种初衷为提高信息类专业大学生算法功力的比赛,渐渐变得“功利”,甚至让很多人在“功利”中沉沉浮浮,无法自拔。固然说算法是重要的,但是算法毕竟还需要依赖于一门语言实现,它并不纯是理论,并不能跟“数学竞赛”等同。算法具有一定的工程性,明白一类算法的思想,并不一定能写出这类算法的程序,而且,对算法理论和程序精通的人,把这种精髓用到实际工程中,也是需要学习锻炼的。所以说,竞赛之人需要酌其轻重,不然可能会适得其反。

另外一方面,ACM的慢慢庞大,使得越来越多的大学生和业界人士认为,算法除了在ACM竞赛中用到,平时几乎接触不到,把算法看做是一门“不食人间烟火”的东西。认同这种观点的人,当下并不少有。而产生这种观点的原因,可能就在于算法的“门槛”之高,算法的“内容”之难。

算法包罗万象,奇杂无比。单从狭义上面来说,在ACM竞赛中包括的内容就有二十几种之多,其中就以动态规划、搜索、贪心、递归、计算几何(凸包、半平面交、旋转卡壳)、数学(数论、组合、概率、博弈等)、图论(最短路、生成树、强连通分量、网络流等)、数据结构(线段树、并查集、树状数组等)、字符串(KMP、扩展KMP、AC自动机、字典树、后缀数组)为主。可以说,在任何一类中想要达到某种高度,都是非一两年的学习而不得速成的。

而上述仅仅是从狭义上面说的。在广义上面,ACM算法只是算法中的一小部分。还有其他的包括机器算法、人工智能算法、大数据算法等等。可以说,算法才能代表计算机科学。没学过算法,没掌握过算法的程序员,不能说他有能力。用一句话来形容,就是“整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。”

接触过算法的人也许都知道,算法难,甚至非常难。当然,没接触过的但是身边有学算法的人听他们说的也可能领会到了,算法的“难”。的的确确,算法是真的具有很大的挑战性。要学好算法,极其不易。但正是因为它的“难”,才具有必学的“重要性”。*每个行业,初步探索,都是一条漫长而艰苦的道路。计算机行业何尝不是这样呢!只是当今很多人对此产生了认识的偏差,因为工程性的原因,很多业界人士甚至还未毕业工作的大学生都如此认为,我们学计算机,学软件知识以后是用来工作的,是用来做项目的,我们应该学活Java或者其他一门足够拿到offer的技术学算法以后工作都用不到,这岂不是浪费时间?*

听到这样或者类似这样的认识,我个人觉得很可悲。当然,有的时候我也会将心比心,换位思考一番。毕竟大学只有四年,刨去大四,最多只有三年的学习时间,如果不选择考研,选择找工作这条路的话。面对如今不管大小公司的职位招聘,无非是一些“Java工程师”、“C++工程师”、“Java服务器”、“php工程师”、“前端工程师”、“安卓工程师”等等。其涉及涵盖的主要是网站前端设计、网站后端服务器维护、安卓app开发、嵌入式几个方面。接触过的明白,这些东西任何一样似乎同样不太好学,就算零基础选择某一个知名培训机构培训,似乎也需要半年到一年的时间。而这些时间大多是在大三的时候。因为IT技术日新月异,涵盖范围广,90%的大学生在大学前两年都不会清楚自己应该学什么,以后找什么样的工作。就算是想好当程序员,可殊知,程序员也是分很多很多种的。

因此,就大学里面分成两类人而言,想学算法的人也是甚少的。我们不妨分析一下。

第一类人,根据自己爱好进入这个行业的。他们的可能从一入大学那一刻开始,就知道自己以后要做什么。但是很可惜,很少会有人选择算法,因为知道自己以后要做什么的人,他们是针对工作的职位而言的。在五花八门的职位中,要找到算法这两个字,是难上加难的。

第二类人,他们根本就不知道IT行业是个什么样的世界。在进入大学后,要通过不同的途径,逐渐地了解,并且对自己进行规划, 对以后的路进行选择。经历过一段时间的摸索之后,可能会对算法避之不谈,至少一半以上的人都会如此做。这是事实!因为他们已经知道,算法是块十分难啃的“硬骨头”。再加上早在自己认识之前,已经有很多大佬功力深厚,后来居上在目前来看,几乎是不可能。

所以,即使ACM算法竞赛在一步一步壮大,实际上算法还是很难普及。大部分人的思想观念仍然还未转变。算法在国内,仍然不受重视和欢迎。

但是,个人建议,如果你是正在读相关专业的大一学生,希望能够接触一些基本的算法。就算不能熟练掌握,不能够写出优美代码,也需要了解其中思想。因为有可能在以后的某个项目中,你就会用到。这是每个程序员都需要掌握的“内功”。不学,可能就会吃亏。因为,不管在什么时候,算法都是计算机科学领域最重要的基石之一。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值