程序员需要懂算法吗(算法对于程序员来说有什么用)

网友提问:

作为一名程序员,需要精通高深的算法吗?为什么?

优质回答:

首先,程序员需要有扎实的数学基础,这一点是毋庸置疑的,因为程序设计说到底就是数学问题。数学基础的作用体现在算法设计上,而算法设计则是程序设计的“核心”。

算法的应用最重要的因素是场景,最常见的算法是应用最广泛的算法。对于程序员来说,如何把算法与实际问题相结合是重点内容,所谓的高深算法往往应用场景十分有限,效果也未必会比常见算法好。

比如在机器学习领域,K近邻、决策树、朴素贝叶斯、支持向量机等算法被广泛使用,也被业界所广泛认可,是公认的重要算法。在特定的场景下,把这些算法与实际问题相结合并形成高效的解决方案,这是研发人员的重要任务。另外,基于常见算法的改进是一个被广泛采用的方案,这样的方案往往具有更高的稳定性。

算法的设计需要一个系统的过程,需要大量的数据验证才能形成最终的解决方案,所以虽然算法的研究经过了这么多年,但是被广泛采用的算法却并不多。在解决问题的实际方案中,往往经典的算法有更好的效果。所以,在程序员解决问题的过程中,并不会去追求算法的复杂性,而是追求解决问题的时效性。

作为一名研发级程序员,首先要做的是系统掌握经典算法的设计与实现,然后在实际解决问题的过程中再针对特定的使用场景进行算法的改进,这往往是一个系统的过程,也往往需要经过大量的实验。

我做机器学习的时间比较久,几乎每天都要跟各种算法打交道,我会陆续在头条上写一些算法方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。

如果有算法方面的问题,也可以咨询我,谢谢!

其他网友回答

作为一个做了十几年程序的老司机,现在做的时间越长越是对于精通两个字避之不及了,无论是精通编程语言还是精通算法之类的话,轻易都不会说出口,学的越多越觉得自己知识面的狭窄,算法决定程序员的上限,有很多程序员对于算法的意识比较淡薄,觉得没有特别厉害的算法也能把程序做的很不错,这个涉及到一个问题,不是所有的程序员岗位都是必须把算法搞得特别好,才能做程序员。其实很多程序员的岗位对于算法的要求不是那么强烈,算法主要在游戏或者大型数据计算上用的比较多。

现在多了很多专业的算法工程师职位,这种属于专业的算法,比如现在的人工智能岗位更加现实点的例子今日头条的推荐机制基本上沿用算法的方式,当然在平时的开发过程中涉及到性能方面的问题会有算法相关的操作,笔者曾经做过一个广告过滤功能,策略就是列举一堆不能访问的广告网址,然后采用一定的查找算法,毕竟在列表中的数据很少的情况下效率基本不用考虑,但在成百上千规则的时候,算法就显得特别重要了,算法在编码的过程中相对来讲用的不是很多,但在一些影响性能的地方没有算法,就会显得特别笨重。

说到算法在人工智能上用的最广泛,而且属于比较深层次的算法,数学基础不过关,基本上玩不转,很多公司招收人工智能的程序员,夸张一点算法的要求大于对编码的要求,编码能力时间长了可以弥补回来,但算法不是一时半会就能学会的,对于数学的线性代数,微积分基础知识用的特别频繁,很多人觉得人工智能就是简单学个python就可以玩了,只是入口函数的调用而已,真正涉及到性能的算法,大部分还是C/C++完成。

术业有专攻,不是每个程序员都对算法都会很熟悉,算法和程序设计逻辑有一定的相通之处,很多人所说的编程需要一定的数学基础就是指的算法相关的东西。

现在很多大公司在招聘程序员这关还会专门设计一些算法的考验,算法也是程序员基本功的一种了,不是所有的程序员算法能力都很强,但算法强的程序员能力一般不弱。目前国内市场算法工程师的待遇还是高于一般的技术工种,算法是特殊的技术工种,初学者入门写程序的过程中不要忽略其中算法的作用。

希望能够帮到。

其他网友回答

1. 算法重要吗?

题主,看到你的问题,我想你的潜台词是在说,“现在计算机的性能已经这么强大了,而且还有摩尔定律作支撑,会越来越强大,即使只用简单的逻辑,或者不那么优秀的算法,运算时间照样也差不了多少”。对吗?

说起来有点惭愧,其实最开始我也是这么认为的。当我还在读研期间,我导师给我说过这样一句话,让我受益匪浅。他是这样说的:

“永远都要记住,计算机的性能不是留给程序员用的。”

我恍然大悟,冥冥之中仿佛看到一个公式:

计算机性能 = 常数 = F(用户)+ F(程序员)

归根结底,用户也是希望通过服务器的算力,得到他想要的东西,而程序员编写程序,也需要消耗部分算力,如果程序员用的越多,用户得到的就越少,如果用户得到的少了,体验差了,怎么留的住用户呢?

尤其是在如今,强调产品思维的互联网环境下,用户就是天,就是上帝,作为生产者的程序员,怎么能去与用户争算力呢?我想,讲到这里,要表达的东西已经讲清楚了。

算法,很重要,不光是真正的算法工程师,即使是普通的走业务流程的SDE,学会算法也非常重要。

2. “高深”的算法重要吗?

题主说到高深的算法,我不太知道题主确切的指代的是什么。

现在说到的算法,已经分为了两块,一块是Algorithm,也就是我们传统的算法,另一块是method,也就是现在最热门的机器学习算法。

对于第一块Algorithm,视岗位而定,如果是普通的研发岗,掌握最基本的图,树,链表等数据结构与算法就可以了,如果是算法工程师,其实是多多益善的。

对于第二块Method,不论是偏向应用的机器学习工程师,还是偏向research的机器学习工程师,都是要经常追论文,追会议的,出了什么新鲜的方法,或者是能够提升效果的小trick,都需要持续跟进,毕竟现在互联网企业,很多都是结果为导向,对结果负责。没有好的方法,怎么能得到好的效果呢?

3. 怎样学算法?

这个学法主要还是看你是不是科班出身。

如果你是科班的话,大可以把从前的教科书捡起来。最好的回顾与总结的书是下面这本,算法导论。

如果你不是科班出身,这个问题就比较复杂了。老实说,非科班出身学习数据结构与算法还是有一定难度的,有时候会难到让你从入门到放弃。所以,我推荐你先从MOOC网络上的一些公开课开始学起,比如说,非常著名的MIT的算法导论公开课。

这里我就不放链接了,怕有广告嫌疑,有需要请自行搜素。

4. 结语

其实数据结构与算法,就是解决一个抽象化的实际生活中的问题,这对于培养理性唯物的思维习惯也是很有帮助的。希望题主能够越学越好:)

其他网友回答

先说答案:不是必须精通算法!!!!

不是所有的程序员都需要精通算法,比如前端开发的程序员对于算法来说就没有多大要求,但是一个程序员能走多远,最大的决定因素就是—算法!!!

特别是最近比较火热的 人工智能 区块链 大数据等对算法要求还是蛮高的。

因为人工智能 区块链 大数据等需要大量的算法计算。

所以从事这类工作的程序员基本都要求很高的学历就是因为需要很高数学功底。

其他网友回答

到底需不需要,这个得看你的志向和方向。

如果你有志于软件行业发展,在技术上有一番造诣,那当然是需要精通。因为你追求优秀,工作效率能达到其他程序员的十倍乃至百倍,那么底层知识、算法都是必备知识。你看起来高深的算法,在优秀的人看来只是小菜一碟,这怎么说?那么高深不高深,这也是看人的。

如果你只是觉得软件行业,在目前的就业前景还可以,想混个饭碗,那么只需要熟悉一些框架,熟悉API的调用,有问题就百度,那就不需要熟悉太多算法,更不要说“高深”算法。