数据结构开篇
这篇文章里面不讲技术,抽空讲讲技术和通俗之间有一种奇特的关系,还有驱动力学习的东西。
看的是——《Java数据结构和算法》一书,作者RobertLafore。1)数据结构算法有什么用?当
你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,
也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。
校招会发现大公司考的就是这类的题目,刚开始不会考你java的线程,容器,多态什么的特性,
考的就是你的基础,你的这些基础扎实,学其他不是问题。正如作者所说,用于现实世界的存储,
我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的
存储,我们还能方便地查询到所需要的数据吗。而算法,在这么多的数据中如何做到最快的插入,
查找,删除,也是在追求更快。第一章也把数据库,面向对象,软件工程(原来整个软件工程项目的
生命周期包括分析、设计、验证编码、测试、生产和维护几个阶段)讲了个大概2)技术与通俗大学里
面那本严蔚敏的数据结构不厚,内容丰富,但是复杂问题的讲解方面篇幅这样就少了,比较难理解,
c也不是很擅长,但是基本的思路还是有的。简单的链表,数组,堆栈,队列,图,几个排序算法。
后面看到知乎涛吴的回答,当时很震撼,这里引用一下他的回答:如果说Java是自动档轿车,C就是
手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的
车子从A开到B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,
但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。如果你对这两件
事都不感兴趣也就罢了,数据结构懂得用就好。但若你此生在编程领域还有点更高的追求,数据结构
是绕不开的课题。Java替你做了太多事情,那么多动不动还支持范型的容器类,加上垃圾收集,会让
你觉得编程很容易。但你有没有想过,那些容器类是怎么来的,以及它存在的意义是什么?最粗浅的
,比如ArrayList这个类,你想过它的存在是多么大的福利吗——一个可以随机访问、自动增加容量的
数组,这种东西C是没有的,要自己实现。但是,具体怎么实现呢?如果你对这种问题感兴趣,那数据
结构是一定要看的。甚至,面向对象编程范式本身,就是个数据结构问题:怎么才能把数据和操作数据
的方法封装到一起,来造出class/prototype这种东西?
此外,很重要的一点是,数据结构也是通向各种
实用算法的基石,所以学习数据结构都是提升内力的事情。反正我有醍醐灌顶的感觉,好比说,我有在
编程上更厉害的追求,怎么能死在数据结构上的感觉。其实要将一门难懂的技术通俗地讲给不懂的人听,
需要很大的功力,包括之前我写的那篇《C与指针》刚开始的时候,那个C语言有什么用回答也是他写的,
我很佩服这样的人。所以当你能把一件东西清楚的讲解给别人听,类似前几篇文章提到的橡皮鸭调试法一样,
你搞懂了,摸清楚了。跟一个技术人士用技术的语言讲解,非专业人士通俗语言讲解。当然了,前提需要积
累。具体可以参见一下CSDN里面关于罗升阳的访谈——专访罗升阳:
老罗的Android之旅当时吓了我一跳,
之前以为和那个老罗同个级别的年龄,后面发现好年轻的小伙子,积累,慢慢积累。3)驱动力学习当你看到
你自己玩过的马里奥可以自己写出来的时候是不是心动了?顿时学习的驱动力是不是有了——我要做一个这
样的东西出来,然后开始学,直到自己动手完成。当时我在大学里就在推算,按照我这个学习速度,10年之
后那也可以牛逼哄哄啊。有些人为什么技术没有提升,几年之后还是那样,因为驱动力的东西,有段时间
我曾经停下来过,Java的差不多都学完了,干什么?因为从J2SE到EE的东西,大体的看完做过,
然后就有一段迷茫期了,驱动力也没有了。后面意识到自己太肤浅了,还有其他一些热门的框架没用,
最好的单例你写出来了吗,虚拟机你深入了吗,Java还有很多经典书籍没看呢?以学习新知识为驱动力
也是可以的,期间不停地学到新知识是很有成就感和很兴奋的东西——原来是这样xx。还有一种——目标驱动,
当时要做一个网络相关的东西——想到了爬虫,然后以做出这东西为目的,收集资料,看别人的代码,
这样的驱动力学习也是可以的。工作的时候,如果目标只放在工作的项目,每次的项目都有新的东西在里面,
那是可以学到东西的,一成不变的话,只能自己去发掘了。不然哪有那个学习到半夜的——专访雷果国:
从1.5K到18K一个程序员的5年成长之路。我要学Python,学了之后会发现,原来真的很牛逼,
可以尝试用Python写个爬虫,GoAgent之类的。这便是进步。扯了那么多,就是不希望自己只懂的用
Java做xx系统,只懂得用容器而永远不知道里面是怎样的。这些作为根基的懂了,其他也好学。
说回数据结构这个,为什么很多学生听课听得想睡,xx链表,双向链表,我排序都有N种,学生的想法
是这不知道有什么用,你讲链表给我,我把它实现一次,完事。但当你生活中的编程问题需要解决的时
候,你会发现到处都是数据结构的使用,像基金买入买出不是队列吗,先进先出;像简单的一个班级学生
的数据保存,用个数组不就可以解决了吗;再复杂的游戏路线问题,这不是图的问题吗;Java里面有Tre
e这字的,其实不也是用到树的原理吗?种种下来,你会发现,原来现实问题和语言里面的封装,都是和
这些有联系的,每当你学会一种,就会恍然大悟,这不就是当年西湖河畔的夏雨荷,就是这种感觉。而学
生在没有想过这些问题和没真正去使用这些语言的封装类之前,是不会考虑到上面所说的东西的。所以,
一大群学生趴在那里睡觉玩手机是正常的。后面自己意识到之后,马上去买了《Java数据结构和算法》,
补回之前没学和没弄懂的。不想学好基础的程序员不是好的程序员。
看的是——《Java数据结构和算法》一书,作者RobertLafore。1)数据结构算法有什么用?当
你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,
也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。
校招会发现大公司考的就是这类的题目,刚开始不会考你java的线程,容器,多态什么的特性,
考的就是你的基础,你的这些基础扎实,学其他不是问题。正如作者所说,用于现实世界的存储,
我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的
存储,我们还能方便地查询到所需要的数据吗。而算法,在这么多的数据中如何做到最快的插入,
查找,删除,也是在追求更快。第一章也把数据库,面向对象,软件工程(原来整个软件工程项目的
生命周期包括分析、设计、验证编码、测试、生产和维护几个阶段)讲了个大概2)技术与通俗大学里
面那本严蔚敏的数据结构不厚,内容丰富,但是复杂问题的讲解方面篇幅这样就少了,比较难理解,
c也不是很擅长,但是基本的思路还是有的。简单的链表,数组,堆栈,队列,图,几个排序算法。
后面看到知乎涛吴的回答,当时很震撼,这里引用一下他的回答:如果说Java是自动档轿车,C就是
手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的
车子从A开到B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,
但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。如果你对这两件
事都不感兴趣也就罢了,数据结构懂得用就好。但若你此生在编程领域还有点更高的追求,数据结构
是绕不开的课题。Java替你做了太多事情,那么多动不动还支持范型的容器类,加上垃圾收集,会让
你觉得编程很容易。但你有没有想过,那些容器类是怎么来的,以及它存在的意义是什么?最粗浅的
,比如ArrayList这个类,你想过它的存在是多么大的福利吗——一个可以随机访问、自动增加容量的
数组,这种东西C是没有的,要自己实现。但是,具体怎么实现呢?如果你对这种问题感兴趣,那数据
结构是一定要看的。甚至,面向对象编程范式本身,就是个数据结构问题:怎么才能把数据和操作数据
的方法封装到一起,来造出class/prototype这种东西?
此外,很重要的一点是,数据结构也是通向各种
实用算法的基石,所以学习数据结构都是提升内力的事情。反正我有醍醐灌顶的感觉,好比说,我有在
编程上更厉害的追求,怎么能死在数据结构上的感觉。其实要将一门难懂的技术通俗地讲给不懂的人听,
需要很大的功力,包括之前我写的那篇《C与指针》刚开始的时候,那个C语言有什么用回答也是他写的,
我很佩服这样的人。所以当你能把一件东西清楚的讲解给别人听,类似前几篇文章提到的橡皮鸭调试法一样,
你搞懂了,摸清楚了。跟一个技术人士用技术的语言讲解,非专业人士通俗语言讲解。当然了,前提需要积
累。具体可以参见一下CSDN里面关于罗升阳的访谈——专访罗升阳:
老罗的Android之旅当时吓了我一跳,
之前以为和那个老罗同个级别的年龄,后面发现好年轻的小伙子,积累,慢慢积累。3)驱动力学习当你看到
你自己玩过的马里奥可以自己写出来的时候是不是心动了?顿时学习的驱动力是不是有了——我要做一个这
样的东西出来,然后开始学,直到自己动手完成。当时我在大学里就在推算,按照我这个学习速度,10年之
后那也可以牛逼哄哄啊。有些人为什么技术没有提升,几年之后还是那样,因为驱动力的东西,有段时间
我曾经停下来过,Java的差不多都学完了,干什么?因为从J2SE到EE的东西,大体的看完做过,
然后就有一段迷茫期了,驱动力也没有了。后面意识到自己太肤浅了,还有其他一些热门的框架没用,
最好的单例你写出来了吗,虚拟机你深入了吗,Java还有很多经典书籍没看呢?以学习新知识为驱动力
也是可以的,期间不停地学到新知识是很有成就感和很兴奋的东西——原来是这样xx。还有一种——目标驱动,
当时要做一个网络相关的东西——想到了爬虫,然后以做出这东西为目的,收集资料,看别人的代码,
这样的驱动力学习也是可以的。工作的时候,如果目标只放在工作的项目,每次的项目都有新的东西在里面,
那是可以学到东西的,一成不变的话,只能自己去发掘了。不然哪有那个学习到半夜的——专访雷果国:
从1.5K到18K一个程序员的5年成长之路。我要学Python,学了之后会发现,原来真的很牛逼,
可以尝试用Python写个爬虫,GoAgent之类的。这便是进步。扯了那么多,就是不希望自己只懂的用
Java做xx系统,只懂得用容器而永远不知道里面是怎样的。这些作为根基的懂了,其他也好学。
说回数据结构这个,为什么很多学生听课听得想睡,xx链表,双向链表,我排序都有N种,学生的想法
是这不知道有什么用,你讲链表给我,我把它实现一次,完事。但当你生活中的编程问题需要解决的时
候,你会发现到处都是数据结构的使用,像基金买入买出不是队列吗,先进先出;像简单的一个班级学生
的数据保存,用个数组不就可以解决了吗;再复杂的游戏路线问题,这不是图的问题吗;Java里面有Tre
e这字的,其实不也是用到树的原理吗?种种下来,你会发现,原来现实问题和语言里面的封装,都是和
这些有联系的,每当你学会一种,就会恍然大悟,这不就是当年西湖河畔的夏雨荷,就是这种感觉。而学
生在没有想过这些问题和没真正去使用这些语言的封装类之前,是不会考虑到上面所说的东西的。所以,
一大群学生趴在那里睡觉玩手机是正常的。后面自己意识到之后,马上去买了《Java数据结构和算法》,
补回之前没学和没弄懂的。不想学好基础的程序员不是好的程序员。
上一篇:俄语话术练习
下一篇:小桔灯全文
声明:以上文章均为用户自行添加,仅供打字交流使用,不代表本站观点,本站不承担任何法律责任,特此声明!如果有侵犯到您的权利,请及时联系我们删除。
文章热度:★☆☆☆☆
文章难度:★★☆☆☆
文章质量:★★☆☆☆
说明:系统根据文章的热度、难度、质量自动认证,已认证的文章将参与打字排名!
本文打字排名TOP20
- 1亿小点点 03-11 14:28167 WPM
- 2宁珂寂寞沙洲... 03-11 15:37122 WPM
- 3游客17854719... 03-12 11:30109 WPM
- 4我是省油的灯 03-12 11:41109 WPM
- 5苍海一沙鸥 03-11 20:03105 WPM
- 6游客17586156... 03-12 11:08104 WPM
- 7风向标- 03-11 17:51101 WPM
- 8游客9736020 01-23 11:1098 WPM
- 9游客16873827... 03-11 23:2491 WPM
- 10properties 01-23 11:0390 WPM
- 11游客17932580... 03-12 14:1487 WPM
- 12游客17919493... 03-11 16:4384 WPM
- 13游客15467417 02-06 11:1582 WPM
- 14游客19113028... 03-11 16:4182 WPM
- 15游客19160197... 03-12 14:0582 WPM
- 1620而已 03-11 17:1079 WPM
- 17游客18495788... 03-11 15:5678 WPM
- 18游客14665528... 03-11 20:4778 WPM
- 19游客18491825... 03-11 20:4777 WPM
- 20悦方 03-11 14:5776 WPM
用户更多文章推荐
- 注意力高度集中2017-01-26
- 笔记本电池的保养误区2017-01-26
- 程序=算法+数据结构2017-01-24
- 对对象的理解2017-01-23
- 如何学好数据结构?2017-01-23
- 为什么会有一些很漂亮的女孩子当性工作...2017-01-22
- 你具备了刷题的知识结构了吗?2017-01-21
- 动态语言与静态语言的区别2017-01-21
- 而立之年我做了什么事以及要做的事2017-01-21
- (上)正确的做事与做正确的事同样重要2017-01-21
- 如何深入理解设计模式2017-01-21
- 谈谈你对OOP的理解?2017-01-21
- 中国为什么没有自己编程语言?2017-01-20
- 为什么很多人会沉迷于电脑游戏,一打开...2017-01-20
- 谁才是计算机之父2017-01-19
- 现代计算机的终极形态2017-01-19
- 苹果六招干掉了诺基亚(一)2017-01-19
- 数据结构在内存中的表示2017-01-19
- 赵薇玩影视与贾跃亭造车,到底哪一个更...2017-01-17
- 了解编程的历史的必要性2017-01-17