学编程真的很难吗?!_数据结构

学编程真的很难吗?!_搜索引擎_02

伴随着昨天下午 5 点最后的钟声的响起,对我来说,考研已经结束了。在之前的复习期间有公众号号主给我开了长白,让我在没时间写原创的考研复习期间给了我公众号发文的机会,毕竟我担心长时间不发文会被冻结。考研已经结束了,考得好不好已经不重要了,我们直接来看一下今天的问题——学编程真的很难吗?

学编程真的很难吗?!_搜索引擎_03


为什么提出这个问题

我之所以提出这个问题,是因为不同人对这一个问题的回答不一样,有的人认为很难,有的人认为很简单。为什么有的人会认为很难主要有以下原因:

  1. 完全没兴趣,纯粹为了混毕业,混饭吃(面向毕业编程)。
  2. 真的很想学,但是发现学的东西太多,好多东西学完就忘记,根本不知道重点在哪里。

对于完全没兴趣的人,几乎从不自己进行编程,都是抄别人的代码,一切都是能应付过就应付过,不能应付就算了,这种人在编程方面基本上没戏了。然而,对于想学但发现学的东西太多记不住的人还有戏,下面我就具体阐述一下原因。有很多人一直问我一门语言有很多个框架,一个框架有很多个包,一个包有很多个模块,一个模块有很多个类、很多个函数、很多个变量,一个类有很多属性和方法,为什么可以全部记住?对于这个问题的回答,我只想说:“我也记不住全部,我只记得常用的。你们认为我能记住全部,不是绝对的全部,而是相对于你们,我能记住的比你们多一点。之所以我能记住的比你们多一点不是因为刻意去死记,而是因为用多了就自然记住了,仅此而已!”那么仅仅只要多进行编程把这些东西记住就行了吗?在回答这个问题之前先来回答下面两个问题——什么是编程?怎么学编程?



什么是编程

先来看一下第一个问题——什么是编程?编程顾名思义就是编写程序,那么什么是程序?计算机程序(以下简称程序)就是算法 + 数据结构,换句话说,程序就是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。因此,学编程不仅仅是去记那些东西,而是学习算法和数据结构。

怎么学编程

上面已经提到了,学编程不仅仅是去记住那些东西,而是学习算法和数据结构。关于怎么学编程这个大问题,可以分为以下几个小问题:到底学什么,在学习编程期间遇到问题怎么办,要先设计框架吗。

到底学什么


有些人认为学编程就是学编程语言、学框架……这种想法是严重错误的,因为不管是语言还是框架都会伴随着版本更新多少会有一些不兼容。既然如此,难道就真的不能从相对中找到绝对,从暂时中发现永恒,从变化中找到不变?其实真正不变的是原理、思想和逻辑,包括算法思想和逻辑、数据结构思想和逻辑、程序设计思想和逻辑、数据库原理,其中最重要的就是算法思想和逻辑。所以学编程不要纠结学什么语言什么框架(当然框架和语言还是要学的,只不过没有思想逻辑重要),要学习其中的思想逻辑。学了数据结构和算法,也只能编写简单的单线程程序,要编写复杂的高并发的程序就不行了,因此还要学习计算机操作系统。学了数据结构和算法、操作系统编写高并发程序已经不是问题了,但是有的时候我们必须知道数据在计算机中如何存放,存放多少空间,这个时候计算机组成原理就显得非常重要。

学了数据结构和算法、操作系统、组成原理不仅可以编写高并发的程序,还可以对存储空间进行优化,但是高并发程序很少是单机的程序,几乎都是与网络相关,因此还需要学习计算机网络。

综上所述,专注原理、思想和逻辑,不要纠结学什么语言什么框架。学好计算机基础学科知识(数据结构、操作系统、组成原理、网络)和算法远胜过学无数个框架。



有问题怎么办


在学编程的时候遇到问题很正常,既然如此,解决遇到的问题就变得极其重要。有些人会认为解决问题很简单,毕竟百度一下你就知道,百度不行还有谷歌、必应,如果搜索引擎不行我还有 StackOverflow 等论坛,这种情况属于典型的面向搜索引擎编程,找不到解决方案就问人,这种做法是不正确的,因为相对于搜索引擎和论坛,还有更重要的参考资料。比如你的思想逻辑,官方文档,源码实现,在学习编程期间编写的例子……其中思想逻辑是最重要的,官方文档次之,其次是源码实现和学习期间编写的例子,接着是搜索引擎,最后才是其他人。最后再唠叨一句,任何教程或者解决方案(包括官方文档里的)都只能参考,不能直接照搬,包括今天我讲的方法,对你们来说也只能参考,千万不能照搬,因为照搬别人的学习方法几乎不可能成功,甚至可能会浪费大量的学习时间。

要先设计框架吗


有很多人在通过编程解决一个小问题时,总是想一步写一步,发现有错误就几乎快崩了,完全不知道怎么改,怕这里改了那里又有新的错误。其实处理这个问题的方法很简单,先设计一个大概的框架。框架的设计很简单,先想一下解决这个问题要经历几大步,每一大步对应一个函数,然后在执行的地方按解决问题的顺序逻辑写上这些函数的调用,然后依次按前面所说的顺序补上每个函数的执行细节,补完一个函数的执行细节就需要把一些重要的变量做输出检查结果是否正确,如果正确就可以删掉输出语句(当然如果有需要也可以不删)继续下一个函数,不正确就不用去看整个程序代码,看当前编写完的函数就行了,这类似于归并排序中把一个大问题分解成多个小问题,把每个小问题解决好的同时解决大问题,可以大大节省实现的时间。有的时候规模变大,函数变成了类,但是框架设计的思想和问题抽象的逻辑不发生改变。

总结

学编程说难也不难,说简单也不简单!下面直接给出一些学编程可供参考的建议:

  1. 在频繁使用中自然记住所学过的东西就行,不需要刻意地死记。
  2. 专注原理、思想和逻辑,不要纠结学什么语言什么框架。
  3. 学好计算机基础学科知识(数据结构、操作系统、组成原理、网络)和算法远胜过学无数个框架。
  4. 遇到问题寻找解决方案的顺序:自己的思想逻辑→官方文档→源码实现和学习编程期间所编写的例子→搜索引擎和相关论坛→其他人。
  5. 任何教程和解决方案只能参考,不能照搬。
  6. 通过编程解决问题先设计框架(当然如果发现有现成的框架能拿过来直接用,但必须确保你所拿过来用的框架真的可以解决当前的问题),然后再去设计其中的实现细节。

今天的文章有不懂的可以后台回复“加群”,备注:小陈学Python,不备注可是会被拒绝的哦~!


学编程真的很难吗?!_数据结构_04