程序员学算法到底有什么用?

曾传新


首先我们来聊聊什么是算法

在计算机领域,算法是一个永恒的主题,在计算机领域,我们用算法这个词来描述一种有限、确定、有效的并适合计算机程序来实现的解决问题的方法。算法是计算机科学的基础,是这个领域研究的核心。我们关注的算法都需要适当的组织数据,而组织数据就产生了数据结构,数据结构也是计算机基础学科研究的的核心对象,它和算法的关系非常紧密,因此理解算法必须学习数据结构。因此我们所学的算法应该是:算法和数据结构。

说了这么多,我们来快速了解下算法,比如要定义一个算法,我们可以用自然语言描述解决某个问题的过程或是编写一段程序来实现的。如发明于2300多年前的欧几里得算法所示,其目的是找到两个数的最大公约数:

1、自然语言描述

计算两个非负整数 p 和 q 的最大公约数:若 q 是0,则最大公约数为p。否则,将 p 除以 q 得到的余数 r,p 和 q 的最大公约数即为 q 和 r 的最大公约数。

2、Java代码实现

会算法和不会算法的区别是什么?

首先我们来看两张图,你就能很快明白。

1、会算法的开发人员

2、不会算法的开发人员

上面的图片是否很直观呢,会算法的开发人员一般会选择更合适更优的方案去解决问题,不会算法的开发人员,逻辑性就比会算法的开发人员弱许多,更多的是使用自身的蛮力,写出来的代码就不是最优的。

帮助我们提升优化系统性能

当计算解决一个问题时,一般会有不同的方法,对于普通的问题,使用不同的方法并没有什么关系,但是对于复杂的问题,大型的数据逻辑处理运算问题,我们就需要设计出有效的利用时间性和空间性的方案。

学习算法的主要原因和目的就是帮我节省非常多的资源问题,甚至让我们完成一个自己都觉得不可能完成的任务,比如某些时候要处理百万个对象的应用程序,设计优良的算法甚至可以将程序的运行速度提升数百万倍,与此相反,没有应用算法速度慢的无法想象,比如我们公司以前大数据清理任务,一个任务要跑好几天,这个效率怎么能忍受?或者购买新的硬件去提升速度,则可能是十倍或百倍。无论在何时,精细设计的算法都是系统性能优化最有效最直接的方法。

训练我们的逻辑思维

我们都明白,逻辑思维对我们写代码时很有帮助的,对于复杂业务的理解,需要我们有很强的逻辑思维能力。学习算法,让我们的思维在迁移默化中进行提升,这是一个过程,量变引起质变,无论是程序员的工作中,还是工作之外的生活和交流,拥有良好逻辑思维的人都有着得天独厚的优势。

算法是面试的基础内容

经历过面试的同学们,对这个应该深有体会,我们做笔试题时,或多或少都会出现让你手写一个排序算法,为什么这样呢,因为算法作为程序员的必备技能,通过算法的考核很容易能反映出一个人的基础是否扎实。

如果你想职业走的更远,算法必须深入学习

当今最火的莫过于机器学习和人工智能,随着这领域的兴起,对人才的要求层次一下子提高了许多,不在是哪些只会写基础业务代码能够完成的,你需要更深入学习和其相关的算法。如果你想在计算机领域走的更远,算法你一定要深入学习。

小节

今天的内容就和大家分享到这里,由此可见算法对我们职业生涯的重要性,只要我们从事计算机行业,算法这门基础内容,我们一定要学好。


感谢大家阅读,如果你有什么好的想法欢迎到留言区分享交流,如果你赞同我的回答,欢迎给个赞和转发,谢谢支持。

前端达人


程序是算法加编程语言。其中,编程语言是很多程序员都熟知的。但说到算法部分程序员觉得跟自己关系不大。实际上,所有的程序都要用到算法。下面举几个算法的例子帮您理解一下算法的作用。

Hello World里的算法

学过编程的人,接触到的第一个程序大概都是著名的“Hello world”了。这么简单的程序会有算法吗?当然有啦,请思考一下计算机是只认识数字的,怎么让它能识别文字呢?聪明的人类给每一个文字都制定了一个编码,配合数据类型的定义,计算机就能识别文字了。这种编码的方式就是一种算法了。您在键盘上输入文字本身就是一种算法的实现。英文还好就一两百个字母数字和符号。汉语博大精深有几万个字符,用101个按键组合来体现所有的文字这本身就是一种了不起的算法。

经典的算法-割圆术

割圆术跟程序的关系不大,但它却凝聚了编程的思想。我们知道所谓程序运算是由四则运算加上逻辑运算组成的。割圆术正是反复使用用了这些基本运算,经多次循环不断接近圆周率的。这个方法在算法中叫递推法。在只能用算筹的年代,就能想到这么时尚的方法,我不得不说老祖宗真的很聪明。从另一个角度上说,算法其实是超越了编程的一种思想。

一个关于算法的故事

这个故事有点悲伤。我们知道法律规定一个人去逝后,他的遗产要由直系亲属继承。有这样一个家庭夫妇二人和一个孩子。有一天丈夫带着孩子二人坐飞机旅行,不幸的是飞机坠毁了二个人都遇难了。现在出现了一个遗产继承的问题。

  • 丈夫的父母都健在,如果丈夫先于孩子去世,那么按照法律他的遗产要由父母妻子和孩子四人继承,每人分得四分之一。之后孩子去世,妻子将继承孩子的全部财产。结果是父母每人分得四分之一,而妻子一人独得二分之一。
  • 如果孩子先于丈夫去世,则结局就是父母和妻子每人得三分之一。

到底该怎么分呢?没人能知道,因为谁都没有办法搞清楚丈夫和孩子哪个先去世。这说明了前面那个关于继承的法律有点问题。这个问题是一个关于时间的算法问题。这种现象在互联网的世界里很普遍,很多人都在发信息,但互联网不能保证先发的信息就能先到。因此,必须要设计出算法来解决这种时间上的冲突。

我们可以把计算机程序想象成用数字去模拟现实世界,算法则对应了现实世界中的各种规则。不懂得算法,我们便无法确定写出来的程序能否满足需求。


日冲信息 黄


编程从本质上来说就是算法加数据结构,算法是编程思想的核心部分,也是研发级程序员必须重点掌握的内容。

随着当前程序员的岗位划分逐渐细化,而且大量的程序员都在从事应用级开发(增删改查),所以不少程序员在工作过程中并不会接触到太多的算法,比如Web开发、Android开发等应用级开发岗位,对于算法的要求并不高。但是,这并不意味着程序员就不需要掌握算法。

对于研发级程序员来说,掌握算法是完成岗位开发任务的基础,而对于应用级程序员来说,掌握算法是进行岗位升级的重要基础。如果应用级程序员不能掌握算法知识,那么将会遇到较大的岗位升级障碍,未来的职业生命周期也会受到一定程度的影响。

随着大数据、人工智能的发展,未来算法的掌握情况对于程序员的影响会越来越明显,未来大量的应用级开发任务都将由智能体来完成,程序员的工作将逐渐转向研发创新方向,而算法正是程序员进行研发创新的基础。

以人工智能领域的研发为例,不论是从事机器学习方向、视觉方向还是自然语言处理等方向的研发,算法设计、算法实现、算法训练等操作都是绕不开的,所以人工智能研发的核心就是算法,这足以说明算法对于程序员的重要程度。

从事大数据岗位也离不开算法,因为大数据分析主要就是通过各种算法来完成数据价值化的过程,目前数据分析的主要方式是统计学方式和机器学习方式,而这两种方式都需要掌握大量的算法。

我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!


IT人刘俊明


说现实点,很多公司面试门口,隐约写着: 懂算法请入,不懂算法者不得入内。


共识: 算法是内功,内功的深厚决定后续技术发展的天花板高度

很多人都回答了算法是程序员的内功,是程序员必备技能之一,简单说算法技能好坏,决定了你的程序跑多久,同一个功能,不懂算法的人可能跑一个月才能完成任务,懂算法的可能需要跑几个小时。


算法在程序员的地位,相当于佛经对少林寺和尚的地位,基础并极其重要。天龙八部中扫地神僧中,正是对佛经深入感悟,才能完败南慕容北乔峰两大主角。

算法的这方面重要性就不多说了,后续换个角度,从公司或面试官的角度看看,程序员在面试中算法中有多重要。

现实点,对于很多公司而言,算法是面试门槛

公司招聘一个程序员进来,需要了解一个人。一个人的品质、价值观等至关重要。但人是一个复杂的动物,通过短短的面试来判断一个人的品质、价值观的高低,是不太现实的。


而考察一个人的知识技能,相对容易得多。算法作为一门知识技能,容易考察。通过几道算法题,就能大概了解这个程序员的技能情况。


美国社会心理学家戴维·麦克利兰将一个人的素质通过冰山来建模:

  • 冰山上部是容易考察的部分,可通过培训来改善。
  • 冰山深藏的下部,是人内心的、不该容易测量的部分。

结合最近两年的互联网行情,算法重要性更突出

最近互联网行情不是特别好,之前都是野蛮发展,近几年好多公司裁员的新闻不断。而程序员的高薪,加上培训机构的推波助澜,候选的程序员越来越多,市场需求没那么多,竞争激烈。

简单点说,僧多粥少,如何证明你是一个潜力好僧呢?来吧,看看你的佛经掌握程度。


平凡科技


计算机语言的算法要是用技术来理解的话它是一个很繁杂的系统。


我们可以这样理解程序员的算法,程序员是一个很纯净的孩子,是主体。

计算机沟通语言就是代码,代码就是孩子看世界的素材,当孩子看到缤纷世界的素材后,他并不能理解这些素材到底是什么,他们可以用在哪里,以及怎样正确的使用。


这时候纯净的孩子随着时间的流逝,他的本性是好奇,对世间的各种各样的素材,有着探索的欲望,由于大人们通过上一代的理论和实践发现了很多识别与应用的方法,于是就会将经验传承给纯净的孩子。

会告诉孩子这个是什么,他有什么样的作用,而如何运用素材来满足自己的需求,就是计算机语言的算法,也就是方法论。


计算机语言有它独特的结构和定义,在生活中经验丰富的人会带出很好的后代。在程序员的世界也是同样,一个好的老师也会让自己的学生少走弯路,如何更加高效运用专业的计算机语言算法,实现最大效率的目标,这就是算法的作用。

我在最初学编程语言的时候,用的是最基础最老的BASIC语言,发明于1964年,其中有一个最简单的语句:If...Then...Goto...

If你足够努力Then就会获得成功Goto新的开始

If...Then...是素材,告诉纯净的孩子逻辑关系,如果你足够努力,那么就会获得成功,转向新的开始。



就是这样,算法方法是一致的,区别在于工具有点区别,解决的问题不同。


七色慧


其实,一般初级甚至中级程序员在日常开发中是用不了算法的,要么接触不到,要么别人帮你封装好了,你可以用现成的

但是时间一长,你就会发现不会算法,就很难变得更加优秀,你会发现优秀框架的源码,部分是需要用到算法,你不懂,有些存储原理,也用到算法,用到这些算法,你的代码执行的效率更高,这个时候你就需要去了解这些东西,否则你就很难再上一层楼

千万不要觉得算法不重要,其实这个是一种宝贵财富,在日常的开发中,对你有潜移默化的影响,所以,想成为一个优秀的程序员,算法数据结构是必不可少学的,一起加油学习算法吧


修炼IT基本功


很高兴回答您提出的,程序员学好算法到底有什么用?

1、首先算法学好的话,不论对你思考问题的方式还是对你编程的思维都会有很大的好处。

2、编程算法只是算法的一种表达形式,还可以用表格或流程图来表达算法。

3、各种算法在不同领域扮演不通角色,本质上没有区别,一通百通。

4、一些基础算法的话,没必要找资料书籍,也没有太多要求,随便在网上搜索一下,就能找到很多详细的资料。





信通老宋


所有的程序基本上就是算法+数据结构。


悲伤的镇魂曲


算法是计算机的灵魂,是解决所有问题的根源,所以计算机与数学关系非常密切。


分享到:


相關文章: