有人说,算法,先于计算机存在于世,比编程语言本身更为重要,语言只是工具,而算法才是灵魂。而程序就等于算法加数据结构。足以可见,想要在编程之路上走的更长远,数据结构与算法就是必须要掌握的基本功。
可是,“真实”的情况是什么样的呢?
尽管大学学过这门课程,甚至网上有很多学习资料,依旧对对数据结构和算法一窍不通?
只听说过数组、链表、快排这些最最基本的数据结构和算法,稍微复杂一点的就完全没概念?
数据结构和算法,跟操作系统、计算机网络一样,是脱离实际工作的知识?除了面试,可能这辈子也用不着?
就算不懂这块知识,只要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
sharetrip
已获得云栖定制鼠标垫
复制链接去分享
原因是什么,从这些程序员的履历背景就能看出来,凡事名校科班毕业的,这方面知识就不差,如果不是名校,或者培训班培训出来的,这方面知识就往往欠佳。
名校氛围中,在这方面的教育的确高出一筹。编程有一个很有趣的特性,表面上看是只需要码代码,真正需要的思维技能不容易考察,而且即使编得不好,你也可以把代码写完,换句话说,即使你不会数据结构和算法,你也能找到工作(难易姑且不说)。
如此一来,程序员种自然会出现大量没有接受数据结构和算法训练的成员。此外,实际工作中,很多人的工作是不需要接触数据结构和算法的,挑挑框架,按照规范写代码,照着文档调用API,如此而已,时间长了,即使学过数据结构和算法也忘了。不会,如果你在学校真认真学过,即使忘了红黑树怎么实现,也不会忘了栈和双向链表是怎么回事。
话说回来,要不要学数据结构和算法呢?当然要!如果你不会,你依然能找到工作,但在这一行你没法上升得足够高,因为这个金字塔顶端的人可都是会这些的。我不是歧视非名校毕业的程序员,大家的出身、际遇和运气不同,任何时候只要好好学习努力相当,都是好同志,我只是说明一个事实。
对于还没有参加高考的同学,努把力,考上名校,你的基础知识会更牢靠,将来找工作容易;对于已经参加工作但数据结构和算法知识欠佳的同学,花点时间学一学,不要只是满足于学会什么什么工具和框架,基础知识对你有百益而无一害。
cjsoldier
已获得野营灯
复制链接去分享
1、数据结构和算法知识重要吗?
重要啊。就像聊主说的,知道别人是怎么实现的,用的时候自然就会避免影响性能的写法。这就是优秀程序员具有的素质啊。
2、何为编程能力强?
我的理解就是搬的一手好砖。别误会,我是说懂原理的话就可以直接从源码里抠代码来用。
我这里有一个例子。我们知道C语言是不支持map的,我就把安卓的hashmap.c抠过来了,因为代码跟jdk的
hashmap.java几乎一模一样。我还把锁给去掉了,因为我这里不会用到多线程(遗憾的是最终我还是没用上它,因为一个进程只能启动一个jvm)。https://github.com/CJSoldier/whitepawcat/tree/master/clib/cmap (奇怪,markdown语法失效了?)
为什么要抠别人的代码?因为速度快啊。就算自己最终写出来了,估计也跟人家的差不多,甚至还不如别人的呢?
为什么要学数据结构和算法,就是为了抠代码方便。最重要的是老板喜欢啊。
3、对编程有怎么样的追求?打算怎样实现它?
就一个字“得心应手”。因为这种状态是最舒服的,最不会感觉到累的,效率也是最高的。
怎么实现?请一个月的假,好好修炼修炼。目前已辞职,正在路上。
海阔天空yy
已获得阿里云代金券
复制链接去分享
1、数据结构和算法知识重要吗?
很负责任的说,很重要
如果说编程属于武术中的招式的话,那么算法可以说算是内功心法。
现在虽然各种框架比较多,很多都不需要你去开发,只要直接使用就行了,就好像你学会一些好的招式
但一旦和人对打你的招式再好,和人家会内功心法的人比,还是会差很多,而且这种差距会随着时间越来越大
2、何为编程能力强?
1 别人写不出来,你能写出来
2 别人要花2天写完,你只花1天
3 别人写完有10个bug,你写完没有bug
4 别人写的东西,难用,性能不好,你写的东西好用,性能也不错
5 别人写个东西,抓耳挠腮的想,你要写个东西,写之前,心里已经知道怎么写了
3、对编程有怎么样的追求?打算怎样实现它?
编程本身的目的就是用电脑去简化人类的工作,所以将来一切东西都会是越来越简化的
包括编程本身,也会越来越简化。所以我希望今天的复杂,将来能给我带来的是更从容,更省心。
实现的话,就是自己要建立一套自己的开发工具库,模块库之类的,以后需要什么功能,只要copy就行了,不要去重复造轮子了
希望得个 野营灯
aoteman675
已获得云栖定制鼠标垫
复制链接去分享
1、数据结构和算法知识重要吗?
当然重要啦!比如说代码写得多了,臃肿了,那好比一个胖子。然后那个胖子觉得需要减肥,让自己有力量、有活力就去健身了。于是体重减下来了,身体也结实了,运动也灵敏了。这就是程序优化,不断的用算法优化体积提高速度、活力。
代码越简洁,逻辑越清晰,效率就越高。基础代码靠的是力量,科学算法靠的是内力,绝世武功以容克刚。
2、何为编程能力强?
首先代码要有注释,不管写得再好,没有注释,除了自个没人看得懂。然后是说明文档,比如说函数块、代码块、功能性说明等。
能够去代码优化重构,升级。
写代码不关心行数,考虑效率和逻辑。
能充分利用各种算法的应用场景和优秀特性合理优化。
用记事本写代码。
3、对编程有怎么样的追求?打算怎样实现它?
兴趣最重要,其次就是有这个毅力去战胜它,有多少人败在在学基础语言的路上。
0和1的出现,带动了多少现代科技,硬件设备都离不开代码,未来是软件定义硬件的时代。
编程路上注定是复杂的,因为你的脚步永远跟不上技术革新的速度,但是我们在不断的缩小距离。
莫法
已获得阿里云代金券
复制链接去分享
1.我们常说数据结构和算法是程序员的内功心法,但是在真正的开发中,又有多少人会用到这些或者仅仅是浅尝即止的,所以说重不重要主要看从事的方向,当然我个人觉得还是有必要了解一些的,毕竟会内功的和不会内功的,层次是不一样的;2.现在我们往往是团队高强度作战,所以我认为代码规范很重要,有的时候甚至比个人能力重要多了,所以我认为团队合作能力强就是编程能力强,例如hadoop的“小鱼吃大鱼”的思想,也就是分布式的思想;3.现在毕竟是学生,所以想要熟练掌握一门语言,能对其了如指掌,毕竟语言大部分都是相通的,至于怎么实现,模仿github上的例子,好吧,就是码代码
wangccsy
已获得云栖定制鼠标垫
复制链接去分享
1、数据结构和算法知识重要吗?
这个还用回答吗?当然很重要了。相信每个大学的每个计算机(及相关)专业 ,基本上是要学数据结构的吧。常用编程语言,肯定是要讲点算法的吧。而要真正理解算法,数学得学好吧。而计算机专业的人数学知识相对于数学系的人来说肯定是要差不少的了。这么来看,特别是在当前的情况下,计算机专业毕业的人会数据结构和算法的是很少的了。
2、何为编程能力强?
编程能力强,看强是怎么定义的。强到自己定义一个编译器,自己开发一个编程语言是强。还是说会写出漂亮的代码是强。还是写出人能看懂的代码的人是强。所以强要有强的定义。基本上来说,会使用编程语言(不管是C,还是C#,C++或者Java)完成相应的功能,并且代码可读性、可维护性强算得上是编程能力强。或者说不管是什么编程语言,接触两天就学会,能实现相应功能也算编程能力强。但在现代各种语言的各种框架盛行的情况下,编程能力不是程序员的主要能力了吧。小学毕业生学习两个月就能编程,还要大学本科毕业生干什么呢?
3、对编程有怎么样的追求?打算怎样实现它?
如果有一天,沧海变桑田,我能基于自己使用的语言,写出一个通用的而现在没有的框架,那就是我对编程的追求之极了。要干到这步,我想要重新去了解数据结构和算法了吧。
盖地虎王晓
已获得阿里云代金券
复制链接去分享
1、数据结构和算法知识重要吗?
数据结构和算法知识当然重要,在我的理解里面,假如我们把编程看成一个语言的(其实就是计算机语言),我们说的码代码,只是过是学会汉字结构、汉字语音及汉字词组,能说说一句话,但是算法就像同样一个意思的话,别人说出来意思明了,用词妥当,语言优美,而你说出来,可能语义都不太清楚,用词不当就更谈不让语言优美了。所以说数据结构和算法知识还是很重要的。
2、何为编程能力强?
编程能力强的话主要表现在三方面:一方面是架构思想,这个就像下象棋,下棋下的好的,走一步看三步甚至更多步,下棋弱的,只能走一步看一步了。二是代码规范,有些人写的代码,前面写的后面就忘记这个函数是做什么用的了,有的人,写的代码谁来都知道该怎么调用,三就是算法啦,大牛都是以很少的代码完成最大的功能,像我这种都是绕了老久才完成了功能。
3、对编程有怎么样的追求?打算怎样实现它?
编程吧,我现在就想学好几门语言就好了,想在这几门语言上深学一些,能解决一些我目前或者是以后可能同到的问题,毕竟年龄大了,不可能和过去一样精力旺盛。实现嘛,就是坚持学习,养成一种习惯,每天也不要求学太多,学习个一个小时就好了。
浮生递归
已获得阿里云代金券
复制链接去分享
1、数据结构和算法知识重要吗?
重要。没有用到数据结构和算法的程序,只能算是入门级的程序。当水平到了一定的层次必然会用到数据结构和算法,如果不懂数据结构和算法,就会一直被局限在初级程序员的水平。数据结构和算法,不仅仅局限于面试和各种考试,实际业务环境中也是经常有用到的,比如统计?
2、何为编程能力强?
这个我仍然认为是可读性强、易扩展、bug少、执行效率高等等传统的观点,毕竟,绝大多数的程序,能做到这些已经非常了不起了。如果还有其他要求的话,恐怕在实际环境中,不大现实。
3、对编程有怎么样的追求?打算怎样实现它?
首先是可读性强吧,仅仅是这一点,平时也比较难做到。有时候为了追求速度,很多代码写得可读性非常差,经常自己回头看的时候,发现已经很难看得懂了。虽然现在有了开发规约,但是养成良好的编程习惯,并不是一朝一夕的事情。路漫漫其修远兮,吾将上下而求索。
原因是什么,从这些程序员的履历背景就能看出来,凡事名校科班毕业的,这方面知识就不差,如果不是名校,或者培训班培训出来的,这方面知识就往往欠佳。
名校氛围中,在这方面的教育的确高出一筹。编程有一个很有趣的特性,表面上看是只需要码代码,真正需要的思维技能不容易考察,而且即使编得不好,你也可以把代码写完,换句话说,即使你不会数据结构和算法,你也能找到工作(难易姑且不说)。
如此一来,程序员种自然会出现大量没有接受数据结构和算法训练的成员。此外,实际工作中,很多人的工作是不需要接触数据结构和算法的,挑挑框架,按照规范写代码,照着文档调用API,如此而已,时间长了,即使学过数据结构和算法也忘了。不会,如果你在学校真认真学过,即使忘了红黑树怎么实现,也不会忘了栈和双向链表是怎么回事。
话说回来,要不要学数据结构和算法呢?当然要!如果你不会,你依然能找到工作,但在这一行你没法上升得足够高,因为这个金字塔顶端的人可都是会这些的。我不是歧视非名校毕业的程序员,大家的出身、际遇和运气不同,任何时候只要好好学习努力相当,都是好同志,我只是说明一个事实。
对于还没有参加高考的同学,努把力,考上名校,你的基础知识会更牢靠,将来找工作容易;对于已经参加工作但数据结构和算法知识欠佳的同学,花点时间学一学,不要只是满足于学会什么什么工具和框架,基础知识对你有百益而无一害。
同感同感,加油!
同感,加油
明天起床立马制定计划去学习