我以前一直认为,学习计算机,必须要懂算法,不仅要懂算法,还应该要“精通”算法。
在我大一的时候,曾看过李开复老师的一篇著名的文章——《算法为魂》。这篇文章对我影响深远,甚至说改变了我的人生选择都不为过。
因为这篇文章,我开始有意识地去接触算法,学习算法,打算法比赛,直到现在,还在关注最新的算法发展。
我做这些事情,真的并不完全是功利的。
当然,这些对算法的学习过程,极大地为我自己的简历贴了金,但更重要的是,我确实想搞明白,对于我所热爱的信息技术,这个被称为“魂”的东西——算法,到底是怎么回事儿。
十多年过去了,直至今日,我依然坚信算法为魂。
我经常说,计算机领域里,到处都是算法。
算法的运用是如此常见,如此自然,如此平凡,乃至像空气一样,会被绝大多数人,甚至是计算机专业的人忽视。从我们打开计算机(或者手机,平板电脑)开始,一系列算法就开始运转起来。从操作系统的调度算法,帮助我们顺畅地使用操作系统;到网络连接过程中各种协议的运转,帮助我们畅游信息世界;从我们使用搜索引擎,一个简单的关键字就可以在毫秒级别的时间返回数以亿计的信息,按照优先级排列展现到我们眼前;到浏览器将枯燥的html, css和js文本转换成直观的网页,供我们轻松阅读浏览;从看似平凡的文字处理工具帮助我们排版,修订;到图像工具中各种神奇的滤镜帮助我们磨皮修片;从游戏,影视作品中炫酷的特效;到最新的交互科技——无论是AR还是VR,越来越普遍的应用。
算法无处不在!
但是,说实话,现在,我的这个“学习计算机,必须要懂算法”的观点在逐渐转变。这是因为,计算机的软件行业也在渐渐走向成熟。软件行业已经慢慢成熟到了:如果不会算法,也完全可以有所作为的程度。
打一个可能不是那么恰当的比方。在乔布斯的时代,如果搞计算机,那是必须会设计线路板,焊线路板的。因为在那时,芯片还不是标准化产品,大家拼的,就是谁的线路板设计得更好。可是现在,大家搞计算机,谁还用焊板子呢?
再随便举两个例子,IBM大家应该都知道,曾经也是IT界举足轻重的企业。他家的一个很重要的业务是技术咨询。曾经,IBM的一大杀手锏,竟然就是二分查找法!是的,查找是信息世界中最重要的操作之一,这个世界上近乎有一半算法,都是在处理提高查找速度这件事儿。曾几何时,企业的信息查找速度不行了,来咨询IBM,IBM就教他们使用二分查找法,赚得满盆金钵。
另外一个例子就是数据库。现在大家学习数据库,都是直接学习SQL语言了,可能很少有同学会去想,一条SQL语言在计算机内部到底是怎样执行的。要知道,曾几何时,数据库可不是一个标准化产品。所有的企业做任何软件系统,都要自己做一套数据库!那么自己做的数据库,性能怎么样,就是核心竞争力之一!你家的系统只能处理万级别的数据,我家的系统却能处理千万级别的数据,那我家的产品就领先整个市场。
其实,老牌的很多技术企业,都是靠这种“底层产品”起家的,比如Oracle的数据库,微软的windows(还有更早的MS-DOS);adobe的PS等一系列产品;苹果的macOS,iOS;包括google的搜索引擎,等等等等。现在,我们在大多数时候,更多的只是使用这些产品,但如果真要深入下去,思考一下,怎么做这些产品?大家将面对的,是一系列算法问题。
但是,怎么做这些产品,确实已经渐渐不是技术世界的唯一出路了。业务场景变得越来越重要。这就是我说的,其实,在计算机的世界中,如果不会算法,也完全可以有所作为。
做一个 PhotoShop,要学习很多算法,但是用 PhotoShop 做出一张优美的图片,不需要接触算法;制作一款游戏引擎,要学习很多算法,但是用游戏引擎打造一款成功的游戏,不一定需要接触算法;制作一个 iOS 系统,制作一个 XCode ,需要学习很多算法,但是用 XCode 制作一款优秀的 App ,不一定需要使用什么算法;制作一个数据库,或者一个框架,需要学习很多算法,但是使用这些框架和数据库,打造一个网站,一个软件,一个服务,不一定需要接触很多算法。
或许这就是很多同学觉得算法没用的原因。因为,大多数同学所面临的任务,不是做 PhotoShop,不是做游戏引擎,不是做操作系统或者编译软件;不是做数据库或者底层框架;而是应用他们打造具体的业务。算法已经被封装起来了,很多时候,我们不需要接触算法的原理,就能很好地完成业务需求。
为什么很多同学觉得算法没有用?一个很“可能”的答案是:因为你所接触的工作就是用不到算法。你所接触的工作只需要合理地使用各种工具框架就够了。我经常遇到同学们这样的疑问:我在具体工作中如何能够运用我所学习的这些算法知识?大概率的,答案是,可能不太能运用。
因为,如果你觉得自己的算法水平一般,但是在做当前的工作,并不觉得有问题,那么就已经说明了,你现在的工作内容,并不需要太多的算法知识的运用。虽然在计算机的世界里,算法无处不在,但这并不代表我们一定要掌握他们。
这有点儿像数学。数学有没有用?当然有用。人类文明发展至今,数学的发展有着举足轻重的地位。但是我们在生活中,却越来越不容易感知到数学的重要意义了。
这种业务上的“分级”,其实是一种很常见的现象。一个航空公司并不需要了解怎么造飞机,那是飞机制造商的事情;开一个饭馆也不一定是一个顶级厨师,怎么做饭是厨子的事情;一个成功的游戏设计师不一定了解游戏引擎底层的诸多原理,那是游戏引擎开发商的事情;一个顶级电竞高手也绝不一定是一个游戏设计师。
这就好比一个设计人员不需要理解photoshop背后诸多滤镜所隐含的图像学知识一样,那些是adobe的开发人员需要关心的问题;一个赛车手也不需要学会制造一辆赛车。这样的例子太多太多,怎么举都举不完。
算法不是技术领域的唯一的核心竞争力,但无论是一个人,一个企业,还是做一份事业,都需要有核心竞争力。什么都没有,肯定是不行的。
所以,“没有什么”从来不是问题。关键问题,从来都是:“你有什么”。
作为一名编程学习者,如果你想更好地提升你的编程能力,好好学习C/C++编程知识以及数据结构,以后努力成为高薪软件开发工程师的话!
编程学习书籍:
编程学习视频:
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
C语言C++编程学习交流圈子,点击下方【了解更多】获取更多学习资料帮助你学习成长~