1-学习算法有用吗?不能用有用没用的角度看问题,这很危险,学还是要学的,不能说算法没用,同时也不能神话算法

为什么我没有学过算法,但是我写业务代码的时候并没有什么影响?

而且我看了那些算法的思路,我认为我写业务代码一辈子也用不到,

这让我很困惑,学习算法有用吗?

难道就是面试的时候用来装b用的吗?

我感觉就像八股文一样,

临时写算法这件事最低级了,真正考一个人本事的是给个实际的在做的问题,参考资料和编程系统全部开放,可以回家思考这个问题,给3天时间,看给出的方案好不好,如果方案不光能设计出来,还能把代码写完那更好。当然,要保留一个月试用期,这样如果找枪手作弊还是要滤掉的(其实仔细盘问设计细节也能看出来是不是自己想出来的)

比起算法落地是更为重要的,

为什么工作中很少用到算法?为什么会有算法无用论的想法?

1,不同岗位对算法的掌握程度不同,

  • 现在很多程序90%以上都被项目和UI实现业务逻辑给占据了。
    大部分的程序员整天做的事情就是增删改查,在所谓的“业务开发”工作里,更多的是利用已经封装好的现成的接口、类库来堆砌或者翻译业务逻辑,基本上很少会用到数据结构和算法,所以这些同学会认为学习数据结构是无用的。

  • 一般从事底层工具或者框架开发的同学使用数据结构和算法比较多,这部分同学接触数据结构和算法比较多,他们会认为学习数据结构是有用的。

算法虽然重要,但不同岗位需要掌握的程度不一样。如果做前端、客户端开发,或是做后端只写 API、对接口、做 CRUD,掌握一些算法基础就足够了。但如果做的是脱离接口层的后端,经常为了性能,要与 CPU、缓存、内存、I/O 等东西死磕,就需要多刷 LeetCode,把算法学精学透。这些系统性能每提升 0.1 个百分点,都可能会对业务带来巨大的提升。

2,在小公司不用处理大规模数据

转:

知乎热议:算法被吹上天了吗?程序员刷题只为面试?

算法只是面试敲门砖?

俗话说,“语言只是工具,算法才是程序的灵魂”。对于程序员来说,算法始终是一个绕不开的门槛。近两年,越来越多的互联网公司在招聘环节注重算法的考察。但对于程序员来说,真的有必要死磕算法吗?

近日,知乎上一条关于程序员是否要死磕算法的讨论热度颇高。题主自称自己在刚入门编程前认为算法很重要,但在入门之后却发现算法用处不大,因为题主在实际业务中遇到的问题和已经解决的问题都跟算法不沾边。那么问题来了,如果只是做编程的话,是不是没必要死磕算法?
https://www.zhihu.com/question/488192031

感觉算法在程序员中快被吹上天了,如果只是搞编程的话,是不是没必要死磕算法?
看到不少人各种吹算法,什么刷leetcode啥的,之前刚入门编程之前我也以为算法有那么重要,我还担心我那点算法功底进公司抗不了几天就被劝退了,身边也见过不少刷题家,完全把自己刷魔怔了,只会刷题,连接个linux服务器问我说用windows远程连接能连接上吗?让他关闭个连接,不会关,之后半天连不上问我咋回事原来是把服务器关机了,业务代码几乎写不出来,天天死磕算法,我跟他们不一样入门了之后就感觉算法真心没多大用,没把算法看太重,自己经常开发实际项目,学的比较早,17岁开始学,大一就找到工作了,一边上学一边上班(远程开发)现在大二了,公司项目也不简单,公司后端项目核心代码都是我写的,目前也更坚定了自己心里的想法,真心没感觉算法有那么的重要(可能我水平太差,眼界太低,格局太低),大多数功能都是这种,这个评论回复功能怎么实现,点赞功能怎么实现,这个私信功能怎么实现,充值提现等等,遇到的好多业务功能几乎不需要啥算法,到现在为止我提升技术都不是去刷算法题来提升实力,我就刷了一道leetcode感觉很没意思就没刷了,目前我遇到的问题和已经解决的问题都跟算法不沾边,所以我个人觉得真心感觉没太大必要死磕算法,看到那些死磕算法,可能有的人为了面试,我不知道他们进公司里会怎么样?

虽然很不好听,但是这个答案的确是最为理性的:



人类总是有一种自然的自我肯定倾向,而“A很重要所以B不重要”,则是未经训练的人常常用来麻痹自己的一种逻辑谬误。
其实社会就是这么现实,一切被你忽略的东西都会让你付出代价。
题主同事死磕算法,不了解常见的技术方案,他要付出代价,
题主觉得算法不重要,并且在工作中愈发坚定这个理念,同样要付出代价。
其实工作中用到的技能太多太多了,沟通、管理、商业、规划、招聘、架构、工程……这些东西共同作用决定了一个人能到达的高度。
在这个庞大的职场技能体系里面,缺了算法这个点就不行嘛?那肯定不是。只死磕算法就能发展好吗?那肯定也不是。
但是你把算法换成上面任何一个单点的技能,结论都是一样的。所以题主描述中的多数案例,基本都是正确的废话,是在预设了算法没用的观点下寻找一些无谓的支撑论据罢了。
而比“算法无用”更大的预设是“老子没错”,题主提供的案例中,所有对比的优胜方都是题主自己。
这个状态,不论高赞回答是什么,题主都不会接受的。这种心理状态,比“不会算法”的危害要大得多。

不同岗位对算法的掌握程度不同

对于这个问题,有网友认为,如果只是想做好眼前的编程工作,比如只是实现一些简单的业务逻辑,不考虑性能(效率、内存、功耗等)的话,那么学习算法确实“没用”,也有网友称,“95% 的公司并不需要算法,在需要算法的那 5% 的公司里写代码,写的代码 95% 是业务代码,和算法没啥关系”。

网友轩辕之风认为,算法虽然重要,但不同岗位需要掌握的程度不一样。如果做前端、客户端开发,或是做后端只写 API、对接口、做 CRUD,掌握一些算法基础就足够了。但如果做的是脱离接口层的后端,经常为了性能,要与 CPU、缓存、内存、I/O 等东西死磕,就需要多刷 LeetCode,把算法学精学透。这些系统性能每提升 0.1 个百分点,都可能会对业务带来巨大的提升。

谷歌 AI 研究员沈卓然认为:

实际工作中绝大多数内容都完全用不到算法,更多是增删查改、对接 API、调整数据格式之类的。更进一步的工作,通常也是和系统设计关系更大,而不是算法。只有在做比较底层、比较尖端、或者非常性能敏感的场景下才可能涉及自己实现算法,但这些场景所需求的也远远不仅是算法。实际上,在工作中反而需要注意不要过度使用算法。软件工程的目的是写出易懂、易合作、易维护的代码,而不是看上去很“聪明”的,或者是效率高一点却复杂很多的代码。

不过这并不是说算法不重要。我认为在实际工作中算法知识最重要的作用是知道某些算法是存在的,这样才能够理解系统的底层原理,或者在需要的时候找到合适的算法实现并引用。

算法在面试中承担“智力题”的作用

虽然大家对于算法的重要性观点不一,但一个共识是:越来越多的互联网公司,尤其是大厂,在面试中注重算法能力的考核。

此前有脉脉用户表示,硅谷大厂,无论是应届生还是工作几年的程序员,只要是一个写代码的岗位,都特别重视手撕代码(数据结构与算法,LeetCode 类型题目)这个环节,这个环节表现不好,面试官可能就没有兴趣去了解其他的能力,他们很忙。

获得高赞回答的答主 Xinyu Chen 认为:面试里的算法题是美国大科技公司(主要是早年的 Google)带起来的一股歪风,后来其他公司渐渐效仿。同时求职者为了在面试中取得竞争优势,就开始通过刷题来训练自己解决面试算法题的能力。LeetCode 这类网站也是在这种形势下产生并逐渐流行起来的。

谷歌 AI 研究员沈卓然则认为,算法题在现在的程序员招聘中基本上承担着智力题的作用,因为计算机科学的知识深度比较浅,培养起来不难,所以大公司招初级员工的时候更看重聪不聪明、潜力怎么样,而不是现在会不会某种技术。

至于互联网大厂为什么喜欢考核求职者算法能力,答主华中科技大学计算机应用技术硕士夏天总结了以下三点原因:

算法能力能够准确辨别一个程序员的技术功底是否扎实。

算法能力是发掘程序员的学习能力与成长潜力的关键手段。

算法能力能够协助判断程序员在面对新问题时,分析并解决问题的能力。

也有网友认为,算法只是一种高效率的筛选人才方式,评价体系比较单一,只需要看对方有没有写出正确的(甚至最优的)解法。此外,算法能力的考核相对比较公平,求职者也难以作弊。

当然,并不是所有的公司都适合在面试环节着重考察求职者的算法能力。答主 Xinyu Chen 认为,算法题作为面试题本身的效用,更适合大公司。公司招人,尤其是初级的开发者,并不需要他们具有特定的技能,所以面试考算法题普适性更高,反之,面试官需要花费大量的精力去准备特定领域的面试,成本更高。而小公司更多的时候需要掌握特定技术的人,如果只面算法题的话,误差会很高。

学算法,真正学到的是算法思维

对于另一部分程序员来说,学习算法不单是为了通过大厂面试,而是为了提升自己的算法思维。有观点认为,算法中最有价值的就是“算法思维”。

所谓算法思维,指的是用算法去解决问题的思维方式,算法在被设计出来之前,设计者究竟在想什么?

至于算法思维是否“有用”,原百度高级算法研发工程师、极客时间专栏作者胡光认为:算法思维不是为了我们传统意义上的“有用”而服务的,而是为了提升你的境界,提升你解决问题的能力。就拿刷题来说,题目总是刷不完的,每天都会有无数的新题产生,那你能找到合适的老师去学习所有新题的解法和技巧吗?当然是找不到的。这个时候,算法思维就能保证在碰到了新问题时,你可以有办法去解决它。

posted @ 2020-02-23 03:08  技术改变命运Andy  阅读(168)  评论(0编辑  收藏  举报