学算法有什么用?唉,对你来说,可能真没用

作者 | liuyubobobo

来源 | 是不是很酷

我以前一直认为,学习计算机,必须要懂算法,不仅要懂算法,还应该要“精通”算法。

在我大一的时候,曾看过李开复老师的一篇著名的文章——《算法为魂》。这篇文章对我影响深远,甚至说改变了我的人生选择都不为过。

因为这篇文章,我开始有意识地去接触算法,学习算法,打算法比赛,直到现在,还在关注最新的算法发展。

我做这些事情,真的并不完全是功利的

当然,这些对算法的学习过程,极大的为我自己的简历贴了金,但更重要的是,我确实想搞明白,对于我所热爱的信息技术,这个被称为“魂”的东西——算法,到底是怎么回事儿

十多年过去了,直至今日,我依然坚信算法为魂。

我经常说,计算机领域里,到处都是算法。

算法的运用是如此常见,如此自然,如此平凡,乃至像空气一样,会被绝大多数人,甚至是计算机专业的人忽视。从我们打开计算机(或者手机,平板电脑)开始,一系列算法就开始运转起来。从操作系统的调度算法,帮助我们顺畅地使用操作系统;到网络连接过程中各种协议的运转,帮助我们畅游信息世界;从我们使用搜索引擎,一个简单的关键字就可以在毫秒级别的时间返回数以亿计的信息,按照优先级排列展现到我们眼前;到浏览器将枯燥的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的开发人员需要关心的问题;一个赛车手也不需要学会制造一辆赛车。这样的例子太多太多,怎么举都举不完。

“分工”本身就是经济学的基础概念之一,是我们这个世界能够良性运转逐渐发展的诸多核心规则之一。

回到计算机领域中来,成功的打造一款网站,不代表你需要开发出浏览器,开发出运行在浏览器上的各种语言,以及一个底层的网络模型;成功打造一款app,也不意味着你必须先学会开发出一个iOS或者Android系统。

这些操作系统,编译环境,网络基础,框架,语言,都是现成的,我们可以直接使用。现如今,随着计算机逐渐发展,我们使用这些工具打造出一款成功的网站,服务,app,软件,游戏,在绝大多数情况下,确实不需要什么算法。即使需要,也真的很简单。所以,学算法到底有什么用?嗯,对你来说,可能还真的没有用。

可是,一旦你的工作是开发新的语言,新的数据库,新的编译器,新的游戏引擎,新的搜索引擎,新的语音识别系统,新的操作系统,新的底层框架,等等等等,你就一定会开始大量的使用算法。如果你的算法功底不够,你就会意识到,自己是无法胜任这样的工作的。所以,有很多同学问我,学习了算法,怎么能够运用到工作中?我的回答是:去接触那些真正使用算法的工作。

这也解释了为什么大场面是会更多的侧重算法。因为大厂的产品服务大多更底层,或者需要解决尚没有被完美解决的问题。这些问题不是业务场景的问题,是需要更多的算法功底做支撑才能胜任的。但是,在我创业的过程中,见识了各种各样的在计算机领域的大牛,他们很多人算法水平极其一般,也能在计算机世界的“应用领域”大有成就。就是因为,他们所创造的产品和服务,没有这么底层。

但是,大家一定要提醒自己。虽然我说学习算法对你来说不一定有用,但与此相对应的,要想取得成功,就一定有别的什么,是有用的。

一个航空公司并不需要了解怎么造飞机,那是飞机制造商的事情:但是,航空公司要做航线的规划,客户的争取,服务的升级,安全的管理……

成功运作一个餐饮品牌不一定是一个顶级厨师,但是,需要你理解餐饮行业,从品牌定位,到地址选择,从食材采购运输加工,到服务人员的管理培训,从卫生保障,到库存管理,餐厅的环境布置,这些都是学问,都是厨师不懂的;

一个成功的游戏设计师不一定了解游戏引擎底层的诸多原理,但是,游戏设计师要理解游戏的设计理念,从美术风格,到游戏机制,从数值策划,到运营维护;

一个顶级电竞高手不一定是一个游戏设计师,但是打好一个游戏也并不容易,也需要日以继夜的练习和思考;

一个设计人员不需要理解photoshop背后诸多滤镜所隐含的图像学知识一样,但是,他要理解设计,理解美,理解客户的需求,并且勇于创新,大胆尝试;

回到计算机领域中来,成功的打造一款网站,不代表你需要开发出浏览器,开发出运行在浏览器上的各种语言,以及一个底层的网络模型;成功打造一款 app,也不意味着你必须先学会开发出一个 iOS 或者 Android 系统。但是,从产品的角度,你要有清晰的定位,提供稳定的性能和服务,满足用户的需求甚至超出他们的预期;从技术的角度,你要有灵活的扩展性和安全性,可以高效满足业务场景的快速变化和各种意外。

算法不是技术领域的唯一的核心竞争力,但无论是一个人,一个企业,还是做一份事业,都需要有核心竞争力。什么都没有,肯定是不行的。

很多同学问我,去大厂工作,一定要有算法比赛的成绩吗?答案当然不是。我认识太多大佬,没有参加过任何算法比赛,轻轻松松进大厂。有的大佬在面试时直接说:算法我不太懂,但是设计模式软件架构随便问;有的大佬则本科三年就做出一个简易的操作系统内核,面试时聊 os 把面试官聊晕;有的大佬在 iPhone 3 的年代就自学 iOS 开发,一年时间直接进大厂 iOS 部门当负责人;有的大佬只有高中学历,考不上大学,自学外挂技术竟然成才,如今成为知名游戏厂商的安全部门技术大拿。

所以,“没有什么”从来不是问题。关键问题,从来都是:“你有什么”。

大家加油!:)

推荐阅读

拜托,面试官别问我「布隆」了

昨天,终于拿到了腾讯 offer

几道和「二叉树」有关的算法面试题

几道和散列(哈希)表有关的面试题

一道看完答案你会觉得很沙雕的「动态规划算法题」

几道和「堆栈、队列」有关的面试算法题

链表算法面试问题?看我就够了!

学算法有什么用?唉,对你来说,可能真没用

欢迎关注学算法有什么用?唉,对你来说,可能真没用

原文始发于微信公众号(五分钟学算法):学算法有什么用?唉,对你来说,可能真没用