最全面、最前沿、最专业的游戏研发实战

提供最全面的游戏研发技能分享,让您在最短时间变成高级游戏工程师

查看:0|回复:4

【环境】怎么看待程序员普遍缺乏数据结构和算法的知识?

 attach_img

4

帖子

7

回复

10

积分
最后登录:
2025-04-05 19:06
注册时间:
2023-03-12 12:10
楼主
  发表于:2025-04-05 19:37:16|查看用户信息

怎么看待程序员普遍缺乏数据结构和算法的知识?

几点说明

1、题主不在一线城市,公司面试要求数据结构和算法

2、所问的问题都很基础,类似于“数组和链表元素在内存中存放特点?,查询第n个节点时间复杂度?”,“二叉树遍历”等,候选人答对比例差不多不到两成,工龄越长,比例越低。

3、如果不问这些,问哪些(.net方向)?

2.jpg

3

帖子

6

回复

7

积分
最后登录:
2025-04-05 17:14
注册时间:
2023-02-26 14:02
1 楼
  发表于:2025-04-05 19:40:42|查看用户信息

咱这行有句话,叫“面试造火箭,上班拧螺丝”。


懂算法的人在所有程序员中所占比例不高。具体到无需准备就能回答链表时间复杂度和二叉树遍历问题的,最多10%吧。


对,这些都是基础问题,是正经学过算法课就该懂的知识。


也是理论上初级程序员升到高级、升到架构师、分析师、CTO必不可少的知识。


但实际真是这样吗?扪心自问,程序员工作中能真正用到这些的有多少?


你懂哈希表,工作中是用现成的Hashmap库还是自己写?


你会写解析器,工作中还不是乖乖一个JSON.parse?


绝大部分工作了几年的程序员,就算曾经学过数据结构和算法,那也是应付考试,最多在面试前捡起来重新刷刷题。


工作越久,忘得越干净,而且忘了也就很难捡起来了。


所以大厂才要招懂算法的应届生,一是基础本身就好,能适应很多职位,二是不至于被多年低层工作给带废了。


至于进厂之后废不废,有几个能真搞研发,那是另一回事。


不知题主公司所招的职位具体负责什么工作,究竟要不要用到算法。


如果用不到,还是老老实实弄几个更接地气、更贴近框架的问题。具体到.net方向,比如页面生命周期啦、泛型啦、常见关键字的作用啦、父类子类调用谁的方法啦、常用设计模式啦之类的,再配上一两个带实际场景的题目让他谈谈,了解一下真实工作经验,大概这样就可以。


否则硬要脱离岗位需求去面试一堆硬邦邦的算法题,其实除了能筛出一堆会刷题又进不了大厂的面试油子之外,反倒把真正需要的那些基础稍差但有实际动手经验的人都拦在门外了。


4

帖子

6

回复

9

积分
最后登录:
2025-04-05 15:47
注册时间:
2023-10-20 15:11
2 楼
  发表于:2025-04-05 19:42:02|查看用户信息

我面试过几百个各个层次的程序员,很清楚这是事实,的确很多程序员都缺乏数据结构和算法知识。


原因是什么,从这些程序员的履历背景就能看出来,凡事名校科班毕业的,这方面知识就不差,如果不是名校,或者培训班培训出来的,这方面知识就往往欠佳。名校氛围中,在这方面的教育的确高出一筹。


编程有一个很有趣的特性,表面上看是只需要码代码,真正需要的思维技能不容易考察,而且即使编得不好,你也可以把代码写完,换句话说,即使你不会数据结构和算法,你也能找到工作(难易姑且不说)。如此一来,程序员种自然会出现大量没有接受数据结构和算法训练的成员。


此外,实际工作中,很多人的工作是不需要接触数据结构和算法的,挑挑框架,按照规范写代码,照着文档调用API,如此而已,时间长了,即使学过数据结构和算法也忘了。不会,如果你在学校真认真学过,即使忘了红黑树怎么实现,也不会忘了栈和双向链表是怎么回事。


话说回来,要不要学数据结构和算法呢?

当然要!如果你不会,你依然能找到工作,但在这一行你没法上升得足够高,因为这个金字塔顶端的人可都是会这些的。


我不是歧视非名校毕业的程序员,大家的出身、际遇和运气不同,任何时候只要好好学习努力相当,都是好同志,我只是说明一个事实。


对于还没有参加高考的同学,努把力,考上名校,你的基础知识会更牢靠,将来找工作容易;对于已经参加工作但数据结构和算法知识欠佳的同学,花点时间学一学,不要只是满足于学会什么什么工具和框架,基础知识对你有百益而无一害。


5

帖子

3

回复

6

积分
最后登录:
2025-04-05 15:30
注册时间:
2024-04-21 00:39
3 楼
  发表于:2025-04-05 19:42:59|查看用户信息

算法和数据结构的确是程序员的基本能力,但精通它们并不是码农的基本需求。


不抖机灵的话,算法和数据结构属于个体的能力。而大多数码农最大的挑战是社会化协作,是工程质量。


码农最需要的三项技术能力,是阅读理解,杂乱的记忆检索能力,侦探式的逻辑推理。


数据结构和算法那些清晰严谨的概念,论理解难度,哪能和产品经理写的洋洋洒洒几百字……需求文档比?哪能和你接手的离职程序员的交接文档比?哪能和你公司 Sdk库、自研框架的FXXKME(README)比?


随便一个开发需求,产品文档藏在哪里?开了多少个交流群?到哪里填写开发进度?需求评审要找谁?你要修改哪几个库?你眼前ide打开的项目是哪个?刚搜过的stack overflow问题在浏览器哪个标签页?要修改的文件怎么找?上线建表工单联系谁?……开发六成以上的精力在这些琐事上。


最后,你接手的项目出bug了。问题可能出在哪个环节?客户端?通信?网关?中间件?缓存?数据库?代码里写反的布尔判断?服务器磁盘满了?运维把redis读库做了持久化?分布式配置中心各环境配置不一致?……


大多数码农本来就在写简单的业务,而做业务百分之八十的时间都在解决代码无关的琐事,一天有效代码一百行不错了。


协作能力,工程素养(解耦,分层,复用,debug,代码质量,测试习惯……),对大多数码农和打键盘人而言,远比算法和数据结构重要。


结果有经验的程序员因为年龄大和没准备八股文,倒在了hr与一面面试官前。而应届做题家们屡创倒挂新高。


做题家们正式工作后,一看到直冲云霄的屎山,才意识到现实残酷性。一边骂着不负责任的老混子,一边要大展鸿图。


他们刷了大半年的算法题,从没教他们怎么去封装、分层、解耦、尽可能少写代码复用别人的。来自算法的优越感使他们造了一个又一个用尽语法糖,难以读懂的神代码。他写了十行的代码,我偏要用一行写完,这才叫生产力语言!看不懂是你没文化!结果几天后QA报bug工单了,自己也读不懂了


而学会的各种花式数据结构,面对没有任何注释的json嵌套结构体,面对各种红map<interface{}>interface{} defaultdict map<T>object 也毫无用武之地。上下游还偏偏要求强类型校验,一个整数不用字符串传就自爆给你看……


最后这些习惯了打游戏到凌晨的做题家,在赶不上末班地铁的绝望中,终于成为了被他们鄙视的前辈,一样开始自暴自弃地造屎。


为什么现在大公司普遍面试造火箭,工作拧螺丝?因为只有你拥有造火箭的逻辑思维能力,才能够遨游在巨大屎山屎海中,找到那颗螺丝,拧下去,还能不造成屎崩。


2

帖子

4

回复

5

积分
最后登录:
2025-04-05 18:57
注册时间:
2023-10-10 18:18
4 楼
  发表于:2025-04-05 19:44:39|查看用户信息

在很多程序员看来,数据结构,算法这一类的东西感觉没用,在实践中都不常用,所以都会很忽视这类内容,但是在很多公司看来,尤其是大公司看来数据结构和算法这种东西确实最有用,而且经常在笔试和面试中出现。为什么会这样呢?


1、看似最枯燥、最基础的东西往往具有最长久的生命力

像数据结构,算法这类东西,还有有一些计算机原理之类的知识,这些东西都是编程和实践的根本。他们看似枯燥和基础,但是具有最长久的生命力。


我知道,你可能熟悉各种框架,各种开源库的使用,但是那又怎样?看着各种框架和开源库的文档,只要有编程基础,谁不会照着葫芦画瓢呢?


不要天天谈什么框架,什么库,框架每年层出不穷,可是扒下框架那层炫酷漂亮的外衣,里面还是那些最基础的知识和原理。就是这些算法,数据结构,计算机网络,计算机原理这些看似基础的东西。如果这些掌握扎实了,你才有更加深一步的可能。


编程语言和编程框架等这些表面的东西,对于一个基础扎实的程序员来说,学习起来很快,成长也很快,如果这些基础和原理都懂,你就可能会写出这样的框架来。技术更新迭代快,语言层出不穷,但是数据结构,算法,计算机原理这类的东西确实没有变。


2、数据结构和算法在面试的时候最容易量化和体现能力

什么意思呢?在面试或者笔试的时候,面试数据结构和算法,可以面出你的思维能力,思考能力,这个能力对于编程来说很重要。比如:如果面试你使用过什么框架吗?你说:会,使用过,然后你谈了谈使用这些框架的一些知识和遇到的坑,以及怎么解决的?通过这样的问题,不能看出的思维能力和编程能力,只能看出你确实会用这个东西。


而面试算法和数据结构不一样了,以为面试这种东西可以让你写出来,或者写伪代码,而且这些能力如果你有,你的成长空间也高。面试你编程的实践能力,不可能让你上机去敲一个模块的实现吧?而让你写个算法和数据结构却很方便,也可以量化。


所以,很多人平时不用算法和数据结构,在跳槽的时候,也会提前去复习算法和数据结构的知识,因为这是面试中很常见的问题。但是我还是建议大家能够一直有这种能力。不要因为不常用而忽视这些基本的东西,这些东西才是精华。


目前大部分程序员是不重视这类东西的。而优秀的程序员是非常重视这些东西的,所以他们才优秀。要想优秀的话,你懂得。


共 1/1 页

0

帖子

0

回复

0

积分
最后登录:
1970-01-01 08:00
注册时间:
1970-01-01 08:00
会员必须登录才能发布帖子! 点击登录