1. 聚能聊>
  2. 话题详情

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

image
有人说,算法,先于计算机存在于世,比编程语言本身更为重要,语言只是工具,而算法才是灵魂。而程序就等于算法加数据结构。足以可见,想要在编程之路上走的更长远,数据结构与算法就是必须要掌握的基本功。

可是,“真实”的情况是什么样的呢?

尽管大学学过这门课程,甚至网上有很多学习资料,依旧对对数据结构和算法一窍不通?
只听说过数组、链表、快排这些最最基本的数据结构和算法,稍微复杂一点的就完全没概念?
数据结构和算法,跟操作系统、计算机网络一样,是脱离实际工作的知识?除了面试,可能这辈子也用不着?
就算不懂这块知识,只要Java API、开发框架用得熟练,照样可以把代码写得“飞”起来?

事实真的是这样吗?
为什么要学习数据结构和算法?
想要通关大厂面试,千万别让数据结构和算法拖了后腿
很多大公司,比如BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。有些人虽然技术不错,但每次去面试都会“跪”在算法上,很是可惜。那你有没有想过,为什么这些大公司都喜欢考算法呢?

校招的时候,面试的学生通常没有实际项目经验,只能考察基础知识是否牢固。社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们看中你的长期潜力。

你可能要说了,我不懂数据结构与算法,照样找到了好工作啊。那我是不是就不用学数据结构和算法呢?当然不是。你别忘了,我们学任何知识都是为了“用”的,是为了解决实际工作问题的,学习数据结构和算法自然也并不例外,那么它实际工作中到底能起到多大的作用呢?

业务开发工程师,你真的愿意做一辈子CRUD boy吗?
如果你是一名业务开发工程师,你可能要说,我整天就是做数据库CRUD(增删改查),哪里用得到数据结构和算法啊?

是的,对于大部分业务开发来说,我们平时可能更多的是利用已经封装好的现成的接口、类库来堆砌、翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不需要自己实现,并不代表什么都不需要了解。

如果不知道这些类库背后的原理,不懂得时间、空间复杂度分析,你如何能用好、用对它们?存储某个业务数据的时候,你如何知道应该用ArrayList,还是LinkedList呢?调用了某个函数之后,你又该如何评估代码的性能和资源的消耗?
基础架构研发工程师,写出达到开源水平的框架才是你的目标!
现在互联网上的技术文章、架构分享、开源项目满天飞,照猫画虎做一套基础框架并不难。高手之间的竞争反而在细节。这些细节就包括,你用的算法是不是够优化,数据存取的效率是不是够高,内存是不是够节省等等,这些累积起来,就决定了一个框架是不是优秀。
对编程还有追求?不想被社会淘汰?就不要只是能写出凑合能用的代码!
为什么说初级程序员才比招式,高级程序员只看内功呢?

何为编程能力强?
是代码的可读性好、健壮?还是扩展性好?我觉得没法列,也列不全。但是,
如果你在一个成熟的公司,或者像BAT这样的大公司,面对的是千万级甚至亿级的用户,开发的是TB、PB级别数据的处理系统。性能几乎是开发过程中时刻都要考虑的问题。

一个简单的ArrayList、Linked List的选择问题,就可能会产生成千上万倍的性能差别。这个时候,数据结构和算法的意义就完全凸显出来了。一旦掌握数据结构和算法,你就会常常被它的强大威力所折服。之前你可能需要费很大劲来优化的代码,需要花很多心思设计的架构,现在很容易就可以解决了。

那么你觉得
1、数据结构和算法知识重要吗?

2、何为编程能力强?

3、对编程有怎么样的追求?打算怎样实现它?

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    阿里云代金券 x 5

  • 奖品二

    云栖定制鼠标垫 x 3

  • 奖品三

    野营灯 x 1

47个回答

3

sharetrip 已获得云栖定制鼠标垫 复制链接去分享

原因是什么,从这些程序员的履历背景就能看出来,凡事名校科班毕业的,这方面知识就不差,如果不是名校,或者培训班培训出来的,这方面知识就往往欠佳。
名校氛围中,在这方面的教育的确高出一筹。编程有一个很有趣的特性,表面上看是只需要码代码,真正需要的思维技能不容易考察,而且即使编得不好,你也可以把代码写完,换句话说,即使你不会数据结构和算法,你也能找到工作(难易姑且不说)。
如此一来,程序员种自然会出现大量没有接受数据结构和算法训练的成员。此外,实际工作中,很多人的工作是不需要接触数据结构和算法的,挑挑框架,按照规范写代码,照着文档调用API,如此而已,时间长了,即使学过数据结构和算法也忘了。不会,如果你在学校真认真学过,即使忘了红黑树怎么实现,也不会忘了栈和双向链表是怎么回事。
话说回来,要不要学数据结构和算法呢?当然要!如果你不会,你依然能找到工作,但在这一行你没法上升得足够高,因为这个金字塔顶端的人可都是会这些的。我不是歧视非名校毕业的程序员,大家的出身、际遇和运气不同,任何时候只要好好学习努力相当,都是好同志,我只是说明一个事实。
对于还没有参加高考的同学,努把力,考上名校,你的基础知识会更牢靠,将来找工作容易;对于已经参加工作但数据结构和算法知识欠佳的同学,花点时间学一学,不要只是满足于学会什么什么工具和框架,基础知识对你有百益而无一害。

帮你点赞; 回复

同感同感,加油!

shuixiansheng 回复

同感,加油

聪爷law 回复

明天起床立马制定计划去学习

评论
2

cjsoldier 已获得野营灯 复制链接去分享

1、数据结构和算法知识重要吗?
重要啊。就像聊主说的,知道别人是怎么实现的,用的时候自然就会避免影响性能的写法。这就是优秀程序员具有的素质啊。

2、何为编程能力强?
我的理解就是搬的一手好砖。别误会,我是说懂原理的话就可以直接从源码里抠代码来用。

我这里有一个例子。我们知道C语言是不支持map的,我就把安卓的hashmap.c抠过来了,因为代码跟jdk的
hashmap.java几乎一模一样。我还把锁给去掉了,因为我这里不会用到多线程(遗憾的是最终我还是没用上它,因为一个进程只能启动一个jvm)。https://github.com/CJSoldier/whitepawcat/tree/master/clib/cmap (奇怪,markdown语法失效了?)

为什么要抠别人的代码?因为速度快啊。就算自己最终写出来了,估计也跟人家的差不多,甚至还不如别人的呢?
为什么要学数据结构和算法,就是为了抠代码方便。最重要的是老板喜欢啊。

3、对编程有怎么样的追求?打算怎样实现它?
就一个字“得心应手”。因为这种状态是最舒服的,最不会感觉到累的,效率也是最高的。
怎么实现?请一个月的假,好好修炼修炼。目前已辞职,正在路上。

微wx笑 回复

这里有些markdown会被河蟹。

微wx笑 回复

一个月不够吧

评论
4

海阔天空yy 已获得阿里云代金券 复制链接去分享

1、数据结构和算法知识重要吗?
很负责任的说,很重要
如果说编程属于武术中的招式的话,那么算法可以说算是内功心法。
现在虽然各种框架比较多,很多都不需要你去开发,只要直接使用就行了,就好像你学会一些好的招式
但一旦和人对打你的招式再好,和人家会内功心法的人比,还是会差很多,而且这种差距会随着时间越来越大

2、何为编程能力强?
1 别人写不出来,你能写出来
2 别人要花2天写完,你只花1天
3 别人写完有10个bug,你写完没有bug
4 别人写的东西,难用,性能不好,你写的东西好用,性能也不错
5 别人写个东西,抓耳挠腮的想,你要写个东西,写之前,心里已经知道怎么写了

3、对编程有怎么样的追求?打算怎样实现它?
编程本身的目的就是用电脑去简化人类的工作,所以将来一切东西都会是越来越简化的
包括编程本身,也会越来越简化。所以我希望今天的复杂,将来能给我带来的是更从容,更省心。
实现的话,就是自己要建立一套自己的开发工具库,模块库之类的,以后需要什么功能,只要copy就行了,不要去重复造轮子了

希望得个 野营灯

1

aoteman675 已获得云栖定制鼠标垫 复制链接去分享

1、数据结构和算法知识重要吗?
当然重要啦!比如说代码写得多了,臃肿了,那好比一个胖子。然后那个胖子觉得需要减肥,让自己有力量、有活力就去健身了。于是体重减下来了,身体也结实了,运动也灵敏了。这就是程序优化,不断的用算法优化体积提高速度、活力。
代码越简洁,逻辑越清晰,效率就越高。基础代码靠的是力量,科学算法靠的是内力,绝世武功以容克刚。

2、何为编程能力强?
首先代码要有注释,不管写得再好,没有注释,除了自个没人看得懂。然后是说明文档,比如说函数块、代码块、功能性说明等。
能够去代码优化重构,升级。
写代码不关心行数,考虑效率和逻辑。
能充分利用各种算法的应用场景和优秀特性合理优化。
用记事本写代码。

3、对编程有怎么样的追求?打算怎样实现它?
兴趣最重要,其次就是有这个毅力去战胜它,有多少人败在在学基础语言的路上。
0和1的出现,带动了多少现代科技,硬件设备都离不开代码,未来是软件定义硬件的时代。
编程路上注定是复杂的,因为你的脚步永远跟不上技术革新的速度,但是我们在不断的缩小距离。

微wx笑 回复

对编程没什么追求?

评论
1

景凌凯 已获得阿里云代金券 复制链接去分享

1、数据结构和算法知识重要吗?

各种编程语言是基本功,基本功是筑基
数据结构是高深的内功,内功练好了,才能结丹,
算法知识是绝世神功,练好了不愁天下无敌

少年你还在等什么!

2、何为编程能力强?

斩尽天下妖,除空六界魔

3、对编程有怎么样的追求?打算怎样实现它?

不求能斩妖,不求能除魔,只求能满足项目经理的要求。

微wx笑 回复

只求能满足项目经理的要求【允悲】

评论
0

莫法 已获得阿里云代金券 复制链接去分享

1.我们常说数据结构和算法是程序员的内功心法,但是在真正的开发中,又有多少人会用到这些或者仅仅是浅尝即止的,所以说重不重要主要看从事的方向,当然我个人觉得还是有必要了解一些的,毕竟会内功的和不会内功的,层次是不一样的;2.现在我们往往是团队高强度作战,所以我认为代码规范很重要,有的时候甚至比个人能力重要多了,所以我认为团队合作能力强就是编程能力强,例如hadoop的“小鱼吃大鱼”的思想,也就是分布式的思想;3.现在毕竟是学生,所以想要熟练掌握一门语言,能对其了如指掌,毕竟语言大部分都是相通的,至于怎么实现,模仿github上的例子,好吧,就是码代码

微wx笑 回复

改昵称

评论
2

wangccsy 已获得云栖定制鼠标垫 复制链接去分享

1、数据结构和算法知识重要吗?
这个还用回答吗?当然很重要了。相信每个大学的每个计算机(及相关)专业 ,基本上是要学数据结构的吧。常用编程语言,肯定是要讲点算法的吧。而要真正理解算法,数学得学好吧。而计算机专业的人数学知识相对于数学系的人来说肯定是要差不少的了。这么来看,特别是在当前的情况下,计算机专业毕业的人会数据结构和算法的是很少的了。

2、何为编程能力强?
编程能力强,看强是怎么定义的。强到自己定义一个编译器,自己开发一个编程语言是强。还是说会写出漂亮的代码是强。还是写出人能看懂的代码的人是强。所以强要有强的定义。基本上来说,会使用编程语言(不管是C,还是C#,C++或者Java)完成相应的功能,并且代码可读性、可维护性强算得上是编程能力强。或者说不管是什么编程语言,接触两天就学会,能实现相应功能也算编程能力强。但在现代各种语言的各种框架盛行的情况下,编程能力不是程序员的主要能力了吧。小学毕业生学习两个月就能编程,还要大学本科毕业生干什么呢?

3、对编程有怎么样的追求?打算怎样实现它?
如果有一天,沧海变桑田,我能基于自己使用的语言,写出一个通用的而现在没有的框架,那就是我对编程的追求之极了。要干到这步,我想要重新去了解数据结构和算法了吧。

0

盖地虎王晓 已获得阿里云代金券 复制链接去分享

1、数据结构和算法知识重要吗?
数据结构和算法知识当然重要,在我的理解里面,假如我们把编程看成一个语言的(其实就是计算机语言),我们说的码代码,只是过是学会汉字结构、汉字语音及汉字词组,能说说一句话,但是算法就像同样一个意思的话,别人说出来意思明了,用词妥当,语言优美,而你说出来,可能语义都不太清楚,用词不当就更谈不让语言优美了。所以说数据结构和算法知识还是很重要的。

2、何为编程能力强?
编程能力强的话主要表现在三方面:一方面是架构思想,这个就像下象棋,下棋下的好的,走一步看三步甚至更多步,下棋弱的,只能走一步看一步了。二是代码规范,有些人写的代码,前面写的后面就忘记这个函数是做什么用的了,有的人,写的代码谁来都知道该怎么调用,三就是算法啦,大牛都是以很少的代码完成最大的功能,像我这种都是绕了老久才完成了功能。

3、对编程有怎么样的追求?打算怎样实现它?
编程吧,我现在就想学好几门语言就好了,想在这几门语言上深学一些,能解决一些我目前或者是以后可能同到的问题,毕竟年龄大了,不可能和过去一样精力旺盛。实现嘛,就是坚持学习,养成一种习惯,每天也不要求学太多,学习个一个小时就好了。

0

浮生递归 已获得阿里云代金券 复制链接去分享

1、数据结构和算法知识重要吗?
重要。没有用到数据结构和算法的程序,只能算是入门级的程序。当水平到了一定的层次必然会用到数据结构和算法,如果不懂数据结构和算法,就会一直被局限在初级程序员的水平。数据结构和算法,不仅仅局限于面试和各种考试,实际业务环境中也是经常有用到的,比如统计?

2、何为编程能力强?
这个我仍然认为是可读性强、易扩展、bug少、执行效率高等等传统的观点,毕竟,绝大多数的程序,能做到这些已经非常了不起了。如果还有其他要求的话,恐怕在实际环境中,不大现实。

3、对编程有怎么样的追求?打算怎样实现它?
首先是可读性强吧,仅仅是这一点,平时也比较难做到。有时候为了追求速度,很多代码写得可读性非常差,经常自己回头看的时候,发现已经很难看得懂了。虽然现在有了开发规约,但是养成良好的编程习惯,并不是一朝一夕的事情。路漫漫其修远兮,吾将上下而求索。

2

饭娱咖啡 复制链接去分享

说到我心坎里了,我就比较缺乏数据结构和算法的知识,打算今年把这块知识补一补。
因为现在在做基础架构方面的,感觉很多东西做得力不从心,不够优化,也不够简洁。
所以,数据结构和算法的知识很重要,有时间的童鞋赶快学起来。

来个题外话,数据结构和算法有什么好的书籍或者教程可以推荐的吗?

微wx笑 回复

我入手了一本《数据结构与算法分析》Java语言描述,还只看了个开头。

评论
-1

淡而无味 复制链接去分享

原因是什么,从这些程序员的履历背景就能看出来,凡事名校科班毕业的,这方面知识就不差,如果不是名校,或者培训班培训出来的,这方面知识就往往欠佳。
名校氛围中,在这方面的教育的确高出一筹。编程有一个很有趣的特性,表面上看是只需要码代码,真正需要的思维技能不容易考察,而且即使编得不好,你也可以把代码写完,换句话说,即使你不会数据结构和算法,你也能找到工作(难易姑且不说)。
如此一来,程序员种自然会出现大量没有接受数据结构和算法训练的成员。此外,实际工作中,很多人的工作是不需要接触数据结构和算法的,挑挑框架,按照规范写代码,照着文档调用API,如此而已,时间长了,即使学过数据结构和算法也忘了。不会,如果你在学校真认真学过,即使忘了红黑树怎么实现,也不会忘了栈和双向链表是怎么回事。
话说回来,要不要学数据结构和算法呢?当然要!如果你不会,你依然能找到工作,但在这一行你没法上升得足够高,因为这个金字塔顶端的人可都是会这些的。我不是歧视非名校毕业的程序员,大家的出身、际遇和运气不同,任何时候只要好好学习努力相当,都是好同志,我只是说明一个事实。
对于还没有参加高考的同学,努把力,考上名校,你的基础知识会更牢靠,将来找工作容易;对于已经参加工作但数据结构和算法知识欠佳的同学,花点时间学一学,不要只是满足于学会什么什么工具和框架,基础知识对你有百益而无一害。

微wx笑 回复

不要Copy别人的答案,小心封号

评论
1

等待蓝天 复制链接去分享

这个话题不要上纲上线,个人从事的职业性质和企业交付的工作任务99%的CRUD那么做到极致就行了,那么面试的时候为什么要刻意强调大量的算法知识!谁也不是傻子剩余的简单算法网络资源有的是,又不是专业从事算法工作的,为什么Carry?

1

黄二刀 复制链接去分享

1、数据结构和算法知识重要吗?
数据结构和算法知识我个人觉得非常重要,我大学刚入门学的就是C语言,学数据结构和算法。
2、何为编程能力强?
算法精简、逻辑缜密、代码可阅读性高还有就是能很好的利用计算机内存资源。
3、对编程有怎么样的追求?打算怎样实现它?
代码精简、可阅读性高、复用率高。通过好的应用架构和设计模式实现。

1

1973536884879398 复制链接去分享

知识非常重要,流程更重要。

1

晓生寒 复制链接去分享

leetcode刷到了动态规划,越刷越觉得有意思。正在转向软件的路上,听别人说算法很重要,于是开始刷题。很多算法现在还没用到,但是总觉得随着职业发展,它们都会用到。

1

1577430061391921 复制链接去分享

还是需要在工作中有实际的应用场景才能真切的理解算法重要性

1

乐玩 复制链接去分享

可能还没有达到一定的水平吧 到现在还没有深入的去了解数据结构和算法 但总体认为 数据算法和结构还是相当重要的 也一直在看这方面的文档 可能个人水平有限吧 总是似懂非懂 纠结啊

0

山林野人 复制链接去分享

很多程序员不是学计算机相关专业出身的,因为这一行工资高,很多是跨专业自学成才,自然基础不牢靠。

0

archersado 复制链接去分享

算法 数据结构这种就像是内功
业界解决方案的了解 开源框架的学习 造轮子是外功
练好了内功,拳掌功夫才能登峰造极 甚至杀人于无形

0

谢杨易 复制链接去分享

数据结构和算法是基本功,有多重要,则需要看从事的什么方向的工作了。

  1. 如果从事互联网前后端业务开发,私以为不是很重要。至少设计模式的重要性大于算法。平时接触到的算法不多,而且就算有,也是封装好了的,不需要重新造轮子。但此时设计模式则相当关键,直接决定了代码的可维护性和健壮性
  2. 如果从事的是大数据和AI等工作,则算法十分关键,这个相信就不用多说了
3