写点什么

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

  • 2021-09-23
  • 本文字数:1950 字

    阅读完需:约 6 分钟

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

算法只是面试敲门砖?


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


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

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


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


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


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


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


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

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


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


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


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


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


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


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

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

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


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


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

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


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


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


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

2021-09-23 14:044646

评论

发布
用户头像
该评论已删除
2021-09-23 19:50
回复
很简单 割韭菜的平台
2021-09-24 09:24
回复
没有更多了
发现更多内容

CSS学习笔记6

虾仁疙瘩汤

CSS css3 10月月更

一朝见微,十年知著:联想Tiny的办公聚变

脑极体

千锋HTML5大前端全网首发Web3.0面授课程,助力个人入局热门赛道!

千锋IT教育

OverOps在根本原因分析中重要性

阿泽🧸

10月月更 OverOps

构建超级自动化平台成为战略技术趋势——Gartner:可观测性应用将成为数据驱动型决策的最强大来源

九科Ninetech

RPA 流程挖掘 数智化转型

安全、快速、稳定,华为云CDN赋能中小企业数字化发展

IT科技苏辞

华为云 CDN 是如何修炼 “ 内功 ” 的?

IT科技苏辞

IoT设备与手机App之间如何实现实时消息通信——业务场景最佳实践

阿里云AIoT

物联网 IoT 传感器 智能硬件

网络畅通的“无名英雄”:华为云CDN,让数据传输又快又稳

路过的憨憨

华为

TOGAF企业架构框架-1概览

Marvin Ma

架构 企业架构 TOGAF

外包学生管理系统架构设计

Jack

架构实战训练营9期

智慧城市、数字政府、城市大脑、一网统管之间有什么关系

雨果

智慧城市 城市大脑 数字政府 一网统管

揭开epoll面纱:Nginx,Redis等都在用的多路复用,到底是什么?

董哥的黑板报

源码 高并发 多路复用 C语言 网络

【web 开发基础】PHP 的流程控制之多向条件分支结构 -PHP 快速入门 (14)

迷彩

10月月更 PHP基础 if条件分支 多条件分支

CSS基础4

虾仁疙瘩汤

CSS css3 10月月更

全国联动,千锋教育1024程序员节线下狂欢活动火热开展!

千锋IT教育

千锋杭州秋季IT专场双选会热烈启幕,招聘与就业成果显著

千锋IT教育

jsp 十个常用标记回顾

你笑一下嘛!

前端 jsp 10月月更

TOGAF企业架构框架-2常见术语

Marvin Ma

架构 企业架构 TOGAF TOGAF术语

“程”风破浪的开发者|研究生学习路程回顾

Studying_swz

学习方法 “程”风破浪的开发者

Impala基本架构

穿过生命散发芬芳

impala 10月月更

2022-10-26:以下go语言代码输出什么?A:1 3 2;B:1 2 3;C:3 1 2;D:3 2 1。 package main import “fmt“ type temp struc

福大大架构师每日一题

golang 福大大 选择题

上网冲浪总是慢?试试华为云CDN,高效加速真体验!

路过的憨憨

速度快、时延低、更安全,华为云CDN助力企业创新发展!

路过的憨憨

华为

架构---作业3

李某人

架构训练营 #架构训练营

服务巡检

芯动大师

Python 10月月更 服务巡检

“程”风破浪的开发者|Web3.0去中心化预言机网络技术剖析

小明Java问道之路

架构 预言机 Web3.0 10月月更 “程”风破浪的开发者

华为云CDN为什么能够打通数据传输阻碍?

路过的憨憨

华为

怎么制作一份能够帮助客户的帮助文档呢?

Baklib

帮助文档

css学习笔记5

虾仁疙瘩汤

CSS css3 10月月更

“程”风破浪的开发者|OpenHarmony 开发环境搭建

鸿蒙之旅

OpenHarmony 10月月更 “程”风破浪的开发者

知乎热议:算法被吹上天了吗?程序员刷题只为面试?_语言 & 开发_凌敏_InfoQ精选文章