Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >知乎 | 明明可以调库,为什么还要学算法呢?

知乎 | 明明可以调库,为什么还要学算法呢?

作者头像
TechFlow-承志
发布于 2021-04-29 02:39:50
发布于 2021-04-29 02:39:50
8350
举报
文章被收录于专栏:TechFlowTechFlow

最近在知乎里看到了一个很有意思的问题,很有感触,就和大家简单聊聊。

其实不只是在知乎,平时也有很多同学问过我这个问题,尤其是在他们刷LeetCode刷得头疼,不知道这些题目刷了有什么用的时候,估计这种心理最是明显。

在我看来,这个问题之所以会产生,只有一个原因就是搞错了学算法的目的。因为我们从小到大接受的教育都是学以致用,学了就是要拿来用的。反之一个东西如果没有用,那么我们自然也没有必要学,因此还产生了屠龙术这么一个专有词语,描绘那些高大上但是却毫无卵用的技能。

而算法呢就是这样一个学来乍一看和仔细一看都没什么用的技能,很多人不敢承认这一点,可能是担心真相打击大家的积极性,也可能是深受学以致用这一传统观点的束缚。所以有很多大V强行列举出许多算法的用处来证明学算法是有用的,你看某某场景某某场景就用到了某某算法,你不学能行么?

但实际上这些用到高端算法的场景凤毛麟角,我就不谈acm-icpc竞赛当中用到的一些高级算法和数据结构了,很多我高中竞赛时候学的算法至今也没有在工作当中用过,哪怕一次。即使是机器学习人工智能这些新兴算法也是一样,在日常工作当中在有现成的库或者是其他人已经开发好了的模型的时候,我们也是不会自己从头到尾复现论文或者是自己做一个模型的。原因也很简单,因为成本。有现成的用当然要比自己重新写一个更快。

当然这只是我的个例,但也看得出来算法的实用性真的不强的。所以相比于强行给自己或者是初学者找学算法的借口,倒不如大大方方地承认,算法这个东西它本身就不是一个实用性非常强的领域。所以问题来了,既然不是为了实用,那么我们为什么又要学习它呢?

这个问题的答案和我们为什么要学数学是一样的,反智主义者们经常挂在嘴边的一句话就是买菜只要十以内的加减法,高数这种东西学来干嘛。

碰到这样的问题去纠结是不是真的用不到没有意义就走偏了,很多看起来用不到的东西可能只是时候未到。这个和玩游戏有点像,有些英雄是前期英雄有些是后期英雄,有些技能前期的时候简直是bug,到了后期废柴的不行。同样自然也会有一些技能前期的时候看起来平淡无奇,但是到了后期至关重要。游戏还有可能前期结束战斗,但人生总是要拼后期的。等到了后期阶段的时候再点后期的技能往往就晚了,技能点不够用了,需要我们前期的时候提前布局。

比如高数就是一个非常经典的例子,几乎所有理工类的专业深入研究之后都需要用到高数,微积分可以算电流、电容、能量,还能算宇宙的各种粒子的运动情况,还能算化学反应的进行程度,也可以推导神经网络的梯度公式……这么多领域当中只要涉及一个,就必须要用到高数,这个时候你还能说高数没有用吗?

算法也是一样的,殊途同归。算法培养的是我们的思维,既给我们提供了种种可以参考的模板、脚手架,也提升了我们思维的能力。举个简单的例子,当你理解了各种复杂的树结构,理解了平衡树各种旋转操作,再去学决策树、随机森林的时候,你会自然而然融会贯通,原理一看瞬间理解。因为你的脑子里有了参考,可以瞬间建立联系,自然学东西更快,理解得更深刻。

在当今时代,大数据、大流量是主流,几乎无论什么岗位到了后来都离不开系统设计。而系统设计不是说闭门造车,随便设计一下可以用就行。不但要包含业务发展需要的所有功能,还需要为将来的拓展做好预留和准备,并且还要注意一些技术痛点。到了这个时候,你就会发现对高并发的各种中间件、框架、系统设计没有深入的思考和理解是玩不转的。强行设计只会纸上谈兵。

因为设计出来的系统运行的环境绝不是理想环境,一定会有各种意想不到的情况发生。像是什么内存爆了,系统扛不住了,延迟太大了下游抱怨了等等等等。相比于设计系统,解决这些意想不到的问题才是真正的考验。因为我们看到的现状都是表象,真正引发问题的核心本质是需要自己通过理解去捕捉的。内存不够就加内存,并发扛不住就加机器只会欠下越来越多的技术债,直到崩盘的那天。

我们拿后端举个例子,对于后端工程师来说,前期的时候几乎和算法没什么关系,无非是做做增删改查,写写业务逻辑。

但是真到了需要系统设计的时候,你会发现分布式和并发是一个绕不开的问题。而并发和分布式天生又会产生许多问题,比如著名的一致性问题。举一些现实一点例子,比如当用户多次提交或者是网络延迟导致数据重复发送的时候,怎么保证逻辑上最终只会执行一次?对于一个分布式系统来说怎么加锁?怎么保证多台机器之间的数据、状态共享?

而分布式的一系列问题、中间件、工具以及理论,本质上就是一系列算法、数据结构和软件工程的结合体。像是SkipList、B+树、LSMT、布隆过滤器等等数据结构都是在分布式场景当中有实际作用的,显然这些内容没有一定的算法和数据结构功底,几乎不可能吃透。

这就是为什么大家叫得出名的外企那么看重候选人的算法能力,甚至很少考察其他方面。而且有些企业的岗位分配也不是固定的,我就听说过有后端出身的被分配去了前端组,我也曾替他担心过,但很快就听说他做得有模有样照样风生水起。其实想想也不意外,能硬着头皮把这么晦涩算法啃下来的人,去理解业务逻辑、一些框架和工具的使用,显然毫无压力。

说了这么多,其实都是在说一点,算法是一个后期技能,前期看起来废柴不代表不重要,它越到后期威力越大。最后放上这篇回答下的高票回答做个结尾罢。

好了,今天的文章就到这里,感谢大家的阅读,喜欢的话不要忘了三连。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
知乎 | 一年半的时间成为算法工程师,这可能吗?
感觉自己什么也不会,导师放养,又想要拿一个offer,但时间有限,只有一年半。我想,很多同学在硕士阶段可能都有这样的困惑。本来这是一个很好的问题,但让我遗憾的是,高票回答聊的都是项目经验、竞赛、简历、LeetCode这些。感觉没有一个达到点上的,所以今天和大家聊聊这个问题,希望可以对迷茫当中的同学们有点帮助。
TechFlow-承志
2021/04/16
1.2K0
太卷了!面试前背面经,这是八股文么?
大家好,最近分享了一些内推的渠道,后台有小伙伴问我,现在准备大公司的面试是不是都要靠背面经?甚至网上还有很多人把面试前的准备戏称为背八股文。
TechFlow-承志
2021/03/25
3.8K0
读者上岸阿里的硬核经验分享
大家好,我是石头哥,最近正值校招季,这里分享一篇硬核校招面经,希望对大家有帮助。
程序猿石头
2021/09/24
9740
读者上岸阿里的硬核经验分享
面试一线互联网大厂?那这道题目你必须得会!【石杉的架构笔记】
这篇文章简单给大家来聊一个互联网大厂的Java面试题:如果让你设计一个消息中间件,你会怎么做?
程序员小强
2019/06/03
5570
为什么时不时会看到「珍惜生命,远离 C++」?
这个问答提问一下子把我的思绪拉入往昔那些使用 C/C++ 的“峥嵘岁月”里。女朋友还是原来的女朋友,而我却不是当初的那个我了。
范蠡
2023/01/04
1K0
为什么时不时会看到「珍惜生命,远离 C++」?
老生常谈:想做算法工程师,到底要学什么?
这个问题时常有人问我,单单是知乎里的付费咨询就很多次。最近新增了许多关注,所以今天再拿出来聊一聊,相当于给大家画一个学习路线,帮助大家更好入门。
TechFlow-承志
2022/08/26
5.2K0
老生常谈:想做算法工程师,到底要学什么?
2018-08-13 如何成为一位「不那么差」的程序员
一个学渣的阿里之路 https://crossoverjie.top/2018/06/21/personal/Interview-experience/
Albert陈凯
2018/08/15
4070
20天拿到美团快手小米搜狐跟谁学offer
总体周期在 4.15 ~ 5.15,中间还包含了个五一假期。看机会原因是好久没挪窝了,想再提高下自己的技能跟待遇,我自己是个焦虑患者,所以不想面试周期太长,本次面试原则就是主攻周期较快的公司。
sowhat1412
2022/09/20
4830
20天拿到美团快手小米搜狐跟谁学offer
关于你们最近的提问
最近比较奇怪,收到不少在微信问我怎么学习语言,看什么书才好的,还有问我是不是要换专业、转行做IT应该怎么学习的?
艾小仙
2021/01/30
5760
只要看完这些书,你就是个算法工程师啦!
前两天有同学私信我,让老梁推荐一下算法工程师入门书单。今天就和大家抛砖引玉聊聊这个话题。
TechFlow-承志
2022/08/26
7050
只要看完这些书,你就是个算法工程师啦!
如何成为一位「不那么差」的程序员
也不知道啥时候我居然成人生导师了。当然我不排斥这些问题,和大家交流都是学习的过程。
纯洁的微笑
2018/09/26
4470
互联网架构“高并发”到底怎么玩?
**高并发(**High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
Java宝典
2021/01/14
8930
互联网架构“高并发”到底怎么玩?
吐血整理:程序员什么水平才能拿20K的offer?
这两天在知乎里看到了一个热门问题,叫做:“程序员需要达到什么水平才能顺利拿到 20k 无压力?”
TechFlow-承志
2022/08/26
5520
吐血整理:程序员什么水平才能拿20K的offer?
我的2021年度书单(主要教你面试怎么装B)
这本书主要讲的是 数据库的设计,我只看了前半部分,里面把有很多方法论行业的关键词,读过一遍之后,工作中再遇到问题都可以直接百度搜索 关键字,不然都不知道去哪里查。
韩旭051
2022/04/13
7620
我的2021年度书单(主要教你面试怎么装B)
适合普通大学生的 Java 后端开发学习路线
接下来的一段时间,帅地会总结各种技术栈的学习路线,例如 Java 开发,C++ 开发,python 开发,前端开发等等,假如你没有明确的目标,或许可以按照我说的学习路线来学习一波,我写的每一份学习路线,不会很全面,因为我认为,东西列的太多,反而不利于新手的学习,所以我列举的,都是比较必要的知识,当你把这些知识学了的时候,我相信你不需要别人的学习路线,也能知道自己接下来需要学啥了。
帅地
2021/04/14
6760
二本本科秋招无实习 | 硬扛上岸滴滴京东58科大讯飞复盘(下)
社群的小伙伴在 3 月 27 日晚,一起搞了互动交流第一期活动,产出了以下 Q&A,以下内容仅代表个人观点,欢迎大佬指正!
Java宝典
2021/01/14
1.1K0
二本本科秋招无实习 | 硬扛上岸滴滴京东58科大讯飞复盘(下)
Java学习之路 -- Java怎么学?
当时,作为懵懂的小白,大一学习了c和c++,还有数据结构,后来才自学的java。有了c++的基础,其实学java确实感觉挺容易上手。如果没有c或者c++的基础,建议开始需要先把java的基础打好,基础是指什么?基础的语法,能用!至于源码,不建议在刚刚开始学就看源码,绝对劝退!!!
秦怀杂货店
2021/03/29
1.3K0
聊聊阿秀过去三年间做的最正确的一件事 | 快来薅羊毛
我买的大部分是技术书,也有一些非技术书,比如《明朝那些事儿》、《平凡的世界》之类的。
拓跋阿秀
2021/04/26
1.4K0
聊聊阿秀过去三年间做的最正确的一件事 | 快来薅羊毛
如何深入学习Java并发编程?
    在讲解深入学习Java并发编程的方法之前,先分析如下若干错误的观点和学习方法。
用户1153489
2022/05/10
5150
社招一年半面经分享(含阿里美团头条京东滴滴)
最近一段时间面试了几家互联网公司,陆续通过了阿里、头条、美团,滴滴,京东的面试,基本上面试的公司都通过了,所以在这里想分享一些自己面试的经验给大家,希望能帮助大家拿到心仪的offer
捡田螺的小男孩
2021/04/23
2K0
推荐阅读
相关推荐
知乎 | 一年半的时间成为算法工程师,这可能吗?
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档