Go语言教程连载 - 编程思维(3)

编程思维是什么?包含了哪些内容?

首先,编程思维并不等于编程算法,不是编写程序的技巧,而是一种高效解决问题的思维方式。

它是“理解问题 发现规律 归纳整合规律 找出路径”的高效思维过程,由分解、模式识别、算法、抽象四个步骤组成。


分解

复杂问题简单化,化大为小,化繁为简。

把一个大的问题,繁杂的问题拆解成一个一个小的问题去解决,那么这个大问题也就解决了。

举个例子,装修绝对是一个非常繁杂且耗时耗力的事情,如果用“分解”的思维,我们大概可以分成这么几个小的问题:确定方案、硬装施工、软装施工;那么硬装施工又可分为水电改造、墙面、地面、顶面、木工、油漆等,软装施工又包括家具安装、家电安装、装饰等等,当然,拆分出来的问题还可以继续往下拆,直到我们可以很快的做出决策和找到方法为止,最后我们得出以下图解:

然后我们只要把这些个小的问题按照施工要求排列好顺序,安排好工期进度,按部就班的一个一个地解决掉就好了,当所有的小问题都解决了,你的房子也就装修好了


模式识别

发现并整合“重复规律”

模式识别,就是识别不同问题的模式和趋势(共同点)的过程,在我们的经验库里找出类似问题的解决办法,然后套用解决方法。识别的问题越多,解决问题的速度就越快

简单点来说,就是发现事物规律,所谓规律,就是自然界和社会诸现象之间必然、本质、稳定和反复出现的关系(来自百度百科)

有点晦涩了是吧?不要紧,我们来举几个简单的例子(小学二年级作业):

例一:填数游戏,观察三个表格,在最后一个表格右上处填写合适的数字

左上:18

右上:96

左下:32

右下:46

左上:27

右上:71

左下:12

右下:32

左上:54

右上:?

左下:31

右下:35

通过前面两个表格我们不难发现一个规律,即:左上 + 右下 = 右上 - 左下

所以最后一个表格的右上数字为:120

例二:填数游戏,观察表格,请在空格中填写合适的数字

0

1

3

6

?

15

我们很容易发现这样一个规律:

0 1 之间相差 1

1 3 之间相差 2

3 6 之间相差 3

也就是说,每两个数字之间的递进数是上一个递进数基础上再加1,

即:后一个数 = 前一个数 + (前一个递进数 + 1)

1 = 0 + (0 + 1) // 前一个数是0,上一个递进数是0,那么当前递进数 = 0+1

3 = 1 + (1 + 1) // 前一个数是1,上一个递进数是1,那么当前递进数 = 1+1

6 = 3 + (2 + 1) // 前一个数是3,上一个递进数是2,那么当前递进数 = 2+1

最后我们得出空格处的数字是:6 + (3 + 1) = 10

继续往后看,最后一个空格的数字是15,也符合这个规律,说明这个规律是不变且重复的,只要我们坚持这个规律一直计算下去,我们就可以算出很多符合这个规律的数字

那么如果用代码该怎么写呢?

package main

func main() {
    // 声明一个最大值,让 for 循环退出,防止死循环
    var max = 50
    // number 声明我们要计算的值,这个值一直是累加的
    var number int
    // step 声明递进数,step 每次循环的时候都加1
    var step int = 0

    for i := 0; number < max; i++ {
        // 要求的值 = 上一个值 + 当前递进数
        number = number + step
        // 当前递进数 = 上一个递进数 + 1
        step = step + 1
        // 打印
        println(number)
    }
}

当然新手朋友可能还看不懂这段代码,看不懂不要紧,这个章节的核心内容并不是让你看得懂代码的,所以不用太紧张,后续我们会在每个章节的教学中都贯穿着“编程思维”,让我们的大脑时刻处于逻辑思维的训练当中,以此让我们的大脑养成“编程思维”的习惯性思维。


通过上面两个简单的例子,大家会发现,其实我们一直在做着这样的事情:

当发现一些可重复的步骤时,就会把它们整合起来,建立模式;再遇到类似问题时就能让电脑套用此模式,快速解决。


抽象

抽象,简而言之,就是看问题要看本质,忽略不相干的非本质因素,找到根本点和相同点以及内在关系,并总结经验得出具象结论,以此来反映同一类事物或问题的特征和规则。

那么如何判断什么是本质?什么是不相干的非本质因素?

本质:对事物的性质、特点以及发生、发展产生影响的事物本身固有的属性(来自百度百科)

例如,水是流动的,油是流动的,白酒也是流动的,我们能抽象出什么结论?

我们试着思考一下,它们的共性是什么?

没错,它们都是“液体”,由此我们得出一个结论:液体是流动的

当下次,我说起“二正丙胺”的时候,虽然我们不知道这是什么东西,但是我告诉你,它是液体,你是不是马上就想到了,它是流动的了?

那么哪些是不相关的非本质因素呢?例如水是浑浊的还是清澈的?油是食用油、汽油还是柴油?白酒是45度还是53度,这些因素都不会影响它作为液体的本质特征,所以也不会影响“液体是流动”的这个特征


算法

当我们通过分解 模式识别 抽象三个步骤最终得出结论后,就开始去解决问题了。

算法,就是解决问题的过程,是对结论的应用,请注意这是一个过程,而非结果。

学生时代,我们做数学题就是一种通过某种算法解决问题的一个过程,过程中的每一个步骤都至关重要,一步错就会步步错,所以算法的锻炼,非常考验我们的逻辑思维能力和纠错能力。

在 Go语言教程连载 - 编程思维(2)章节中,我们讲到了,电脑其实一个很笨,但是又具有非常强逻辑性的家伙,它只能按照人给它下发的一条一条的指令来完成每个事情,如果我们的算法逻辑错误或者逻辑顺序不通顺,那么最终结果就会跑偏。

所以说,我们在以后的编程过程中,必须严格遵守编程规则,把我们想到的每一步思路都要严格地翻译成电脑能懂且非常明确的指令,通过大量的练习后,我们的逻辑思维和编程思维也会得到很大程度的提高。

当然,世界上不存在完全没有 Bug(问题)的代码!

纠错能力,也是考验编程人员能力的重要指标,当我们发现运行结果与我们预期结果不一致时,要能很快地发现问题,并解决问题,所以一定要用大胆且严谨的态度来审核我们的每一行代码,要做到 “大胆假设,小心求证”,不放过每一个可疑对象,但必须对每一个可疑对象进行求证


好了,编程思维的课程我们就讲到这里了,感兴趣的朋友也可以回顾一下上一章节的内容:Go语言教程连载 - 编程思维(2),作为本教程合集的开胃菜,旨在为零基础的朋友解答一些疑惑。

软件开发是一个讲究实际操作的工作,讲的再多,不如敲一行代码,从下一章节开始,我们将正式进入 Go语言的内容讲解和实际练习阶段,欢迎感兴趣的朋友关注!

展开阅读全文

页面更新:2024-05-22

标签:思维   抽象   算法   液体   表格   个数   规律   语言   代码   发现   数字   教程

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top