前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重要的一课!

重要的一课!

作者头像
沉默王二
发布2021-05-11 10:50:53
3010
发布2021-05-11 10:50:53
举报
文章被收录于专栏:沉默王二沉默王二

早上四点多起来,回复了微信小小号上近 100 条消息,很多都回复的蛮仔细!

累到不累,因为我喜欢和读者交流的感觉。但也有伤心的,好不容易敲了很多字,发过去,发现人已经不在了,麻了麻了。我是能理解的,毕竟关注你了,加了微信,给你发了信息,等啊等,一直不回复,算怎么回事,耍什么大牌!

当然了,这也是没办法的事,一对多,再加上工作、生活、读书、写作、学习,很难做到及时响应,尤其是需要沉浸式工作的时候,手机基本上是静音的状态。

有问题,尽管来问就行了,尽量不要问在吗?毕竟二哥是个活人,哈哈。像下面这样的读者,我就很喜欢,直接抛出问题,语气也很舒适。

有些直接甩了红包,遇到这种情况我一般第一时间就冲过来了,哈哈哈哈哈哈。

当然了,我也不是全天候都在看手机,像这个读者的信息是昨天 22 点发的,我那时候已经睡下了,但我早上 4 点多起来后就及时回复了。

温馨提示一点。大家不要学我起这么早,每个人的作息习惯不一样,还是要保证足够的睡眠,毕竟互联网打工人很辛苦的。我想表达的是,只要我看到信息,都会一条不落的回复,因为我觉得大家给我发信息是对我的信任,我必须得做出回应。只不过不一定能及时回复,还希望大家能够理解。

留个包袱,如果今年公众号的增长能突破一个关键性的节点的话,我也打算搞个知识星球,把这些问题都沉淀下,后面说不定还能整理出一本 PDF。

不说这些了。早上回复的这些信息当中,有一条我觉得蛮想在公众号里给大家统一说明一下的。

二哥,你觉得计算机专业课中哪门课是最重要的?

对于我们计算机专业的人来说,我觉得有 6 门课非常非常的重要:

  • C 语言
  • 计算机操作系统
  • 计算机组成原理
  • 计算机网络
  • 数据结构
  • 算法

不管你以后从事的是 Java 开发、C++ 开发、还是 Python 开发,也或者是前端开发,这几门课能在大学里早点学就早点学,如果时间不够用或者错过了,工作后一定要找机会补一补。前提条件是,你对技术有追求,想在这方面有更深的造诣。

这 6 门课涉及到的知识点还是非常庞大的,没办法通过一篇文章全部说清楚,所以这次,我打算重点说说数据结构。

什么是数据结构?

数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。不同种类的数据结构适合于不同种类的应用,而部分甚至专门用于特定的作业任务。例如,计算机网络依赖于路由表运作,B 树高度适用于数据库的封装。

菜鸟教程上对数据结构的定义我觉得还是蛮正式(官方)的,简单点说,数据结构就是把一堆数据,按照某种格式揉成一坨。

大家喜欢吃宫保鸡丁吗?

反正二哥挺喜欢这道菜的。我就以宫保鸡丁为例,来讲一讲数据结构吧。维基百科上是这样定义的。

宫保鸡丁(英语:Kung Pao chicken或Kung-Pao Chicken),又称宫爆鸡丁,呈糊辣荔枝味,源于黔菜、流传至鲁而后成于川菜的一道川味名菜。贵州、山东和四川三地对这道菜的做法不完全一样,称呼也有差异。贵州称为糊辣子鸡丁,山东则名为酱爆鸡丁,而四川是以宫保鸡丁为名的。

来,抽象下宫保鸡丁。

代码语言:javascript
复制
struct KungPaoChicken {
  鸡肉 = []
  花生 = []
  葱段 = []
  花椒 = []
  辣椒 = []
}

这个结构体(struct 是 C 语言中的一个概念)就是一个自定义的数据结构,将很多不同的配料融合在了一起。对于计算机的数据结构来说,只不过是把这些配料换成了基本数据类型。

拿 Java 来举例,基本的数据类型有 int、char、double 这些,复杂点的有 String(引用数据类型),底层是 char 型的数组,而那些自定义的类型不过是对基本数据类型和引用类型的封装。

抽象完宫保鸡丁再来抽象一下二哥吧。

代码语言:javascript
复制
class 二哥 {
  int age = 18;
  double 体重 =  65kg;
  
  void eat(宫保鸡丁) {
    体重 += 1kg;
  }
}

伪代码不是很严谨哈,大家理解这个意思就行了。

说到底,数据结构不过是一种抽象后的封装。像 Java,它之所以流行的一个很重要的原因,就是它提供了多种多样的、方便开发者调用的数据结构,比如说对数组的封装 ArrayList、对链表的封装 LinkedList、对哈希表的封装 HashMap、ConcurrentHashMap 等等。C 语言就没有这些,想用的话,就得自己封装。但 Java 和 C 语言的基本数据类型是一致的,int、float 这些都是相通的。

对于初学者来说,平常敲代码都是直接去调用数据结构的,是很少去想这些数据结构是怎么实现的。

当一个初学者向高级程序员迈进的时候,就必须得静下心来,去搞清楚 ArrayList 和 LinkedList 的内部实现,搞清楚之后就会明白,之所以它们在增删改查的时候性能上有差异,就是因为它们的内部使用了不同的数据结构所导致的。

有一说一,我在 2008 年刚学 Java 的那会,真的是不理解,为什么明明有了 ArrayList,Java 还要设计 LinkedList,不都是集合嘛!

害!

数据结构为什么这么重要?

我直接放大招吧,甩一段清华大学计算机系教授邓俊辉老师话吧。

数据结构是计算机科学的关键内容,也是构建高效算法的必要基础。其中涉及的知识,在相关专业的课程系统中始终处于核心位置。以 ACM/IEEE Computing Curricula(计算机教学大纲)为例,其中对于几个相关专业(计算机科学、计算机工程、信息系统、信息技术、软件工程)的共同要求中,数据结构与算法作为程序设计概念与技能的核心,紧随在数学之后,排在第二位。

数据结构说复杂也不复杂,说简单也不简单,这不重要,重要的是必须得学!

有读者可能会问,“我数学学的不好,学数据结构能学会吗?”

说句实在话,数据结构和数学之间没有必然的关系。我上小学的时候,参加过洛阳市的奥林匹克数学竞赛,还得了三等奖;初中的时候,数学成也一直保持得不错,但上了高中之后,由于贪玩,数学成绩一落千丈,成了瘸腿课。大学的时候对离散数学、微积分这些更是头大,压根没怎么学。

但这并不妨碍我学习数据结构,真的。数据结构中,树算是最难的一块了,像数组、链表、栈、哈希表这些相对来说,计算机专业的,只要稍微下点功夫,都是能掌握的。

说了这么多,数据结构到底该怎么学呢?

如果你有 C/C++ 的底子,我给推荐两本书。

第一本,《趣学数据结构》

说到这,多说一嘴。2018 年的时候,人民邮电出版社的张老师邀请我出一本 Java 方面的书,我当时想命名为《趣学 Java》。张老师说,刚好之前和陈小玉老师合作出了一本《趣学算法》的书,要不发一本你看看吧。

你别说,这本书还挺适合拿来作为算法的入门书呢。后来,陈小玉老师又出了一本新书,叫《趣学数据结构》,我看了,虽然离“趣”字有点距离,但很适合作为一门数据结构方面的入门书。

第二本,《数据结构(C++语言版)》

对,清华大学邓俊辉教授编著的,豆瓣评分也蛮高的。这本书还配套了视频课程,是免费的,可以在学堂在线上看,我之前也有推荐过。

https://www.xuetangx.com/search?query=数据结构

课程质量木得说,算是国家级精品课了。大家有时间的话,一定要刷一遍。

如果你有 Java 的底子,我也给推荐两本书。

第一本,《数据结构与算法分析(Java 语言描述)》

虽然翻译得不怎么样,但内容很全面,适合拿来作为一本数据结构的入门书。

第二本,《算法(第 4 版)》

虽然名为算法,但大家都知道,算法是基于数据结构的,数组、队列、栈、堆、二叉树、哈希表等等,这些数据结构都讲到了。

如果时间比较紧的话,C/C++ 程序员只看《数据结构(C++语言版)》就行了,Java 程序员只看《算法(第 4 版)》就行了。如果一遍没看懂的话,再看一遍就好了。

有网友“三色院堇子的老公”说得好。

数据结构就是你已经写了几百万行,然后数据结构减到 90 万行,性能还翻倍,嗯,终于学会了!?

在我看来,学习分为两种,一种是先学理论,后走实战检验,一种是先实战采坑,后补理论。

有些人,如果没有理论基础,完全不知道怎么下手写代码。

而有些人呢,就是喜欢先敲代码,因为一上来看书很容易懵逼,只有经过一定量的代码实战后,再去读书就会有一种豁然开朗的感觉。

两种学习方法我觉得都没问题,重要的是看你适合哪一种。但不管选哪一种,记得学数据结构~~~~

我是二哥,下期见。

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

本文分享自 沉默王二 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档