«

零基础怎样进入编程的世界

Created 161201
By 游遍星辰

注:本文是在李笑来老师的“共同成长”群中所做的一次分享,发表于公众号“学习学习再学习”。

今天,我分享的主题是零基础怎样进入编程的世界。提起编程,很多人都会直觉地认为,这是一件很难的事情,包括以前带的很多学生。其实,就像学英语,学了基本的音标和语法,就可以开始去听,去看,使用英语,编程也是一样的,入门并不难。只是面对一个全新的领域,难免会感觉一片茫然,不知道从哪里下手。今天我要分享的内容,就是让大家对编程有一个总体的了解,知道要学哪些内容,减少盲目摸索的时间。

以下是今天分享的一个提纲。 此处输入图片的描述

一、为什么学习编程

优酷上有一个奥巴马的讲话视频,呼吁每个美国人都学习编程,这是他2014年参加http://code.org 发起的“编程一小时”活动时拍的一个宣传片。他说“如果我们希望美国走在科技前沿,就需要年轻的美国人掌握这些工具和技术,它将改变我们的做事方式”。乔布斯在一次访谈中也提到,“学习编程教你如何思考,就像学法律一样,学法律的人未必都成为律师,但法律教你一种思考方式,同样,编程教你另一种思考方式”。

就我个人认为,假如你不以编程为职业,学习编程有这几个作用
1)减少重复性劳动
2)收集自己想要的信息

此处输入图片的描述 我们来看一个实例。这是一个中英文对照的文本文档。假如我要把里面的全部中文句子和英文句子提取出来,分别存到新的文本文件中。
方法1:直接复制粘贴。最直接,但是最耗时,特别是当你有许多这样的文档要处理的时候。
方法2:找工具。网上有很多处理文本的工具,但是不容易找到符合自己要求的。
方法3:写程序。可以完全符合要求,需要一定的编程基础。
但是除开前面所说的,我认为学习编程更重要的是培养一种新的看待问题和处理问题的方式。查理芒格曾说过,在拿着锤子的人眼里,整个世界都是钉子。人很容易被自己原有的思维固化,但当你进入一个陌生的领域,掌握了这个领域中的模型和方法,并且把它和你原有的思维体系结合,你会获得一种新的分析和解决问题的方法。

二、什么是编程

编程的目的是为了解决问题。实质就是把生活中的问题转化成计算机可以处理的模型,并且交给计算机处理。
以我们常用的网上购物为例,在没有电商之前,我们购物是这样一个流程
此处输入图片的描述

现在,我们购物则是这样一个流程
此处输入图片的描述

通过对比,大家可以发现,两者的流程其实是非常相近的,实质就是把现实生活中的场景切换到了虚拟的网络中,把之前人工完成的许多操作交给了计算机处理。
当我们编程时,通常是为了解决一个问题(一系列问题)。所以,首先要确定问题是什么?手里有哪些工具和方法?
前面那个问题,我们可以用以下步骤解决

此处输入图片的描述

但是如果仔细观察,发现所有英文句子是以英文字母开头,所有中文句子是以数字开头.可以采用正则表达式把所有符合要求的句子直接提取出来,写入新的文件。正则表达式通常被用来检索、替换那些匹配某个模式的文本 (了解即可,用到的时候就会去找每种模式该怎么写)。这是一种更灵活的解决方法。
这个小程序的代码(VBS)和文件放在云盘上,大家可以自行下载。VBS在任何一台windows系统的机子上都可以运行,无需安装编程和运行环境。

三、当我们学习编程时我们在学些什么?

1.编程思想

所谓编程思想,就是我们在编程时看待事物,分析问题的思维方式。
1)面向过程的思想
以功能为中心,按照完成功能的步骤来编写程序。

此处输入图片的描述 我们把这个过程写成一个函数,每次需要的时候调用就可以了。
此处输入图片的描述

2)面向对象的思想
世界是由一个个对象组成的,每个对象都隶属于某一个类。例如学生是一个类,每个特定的学生张三、李四就是学生类的对象。

此处输入图片的描述

每个类拥有特定的属性和方法。属性可以理解为它的构成成分。方法则是它可以做哪些事情。每个类可以做些什么事情,就取决于我们为它编写了哪些方法。但构造函数是必须的,因为通过构造函数才能生成一个具体的对象,才可能完成后面的操作。类是虚的,相当于一个规范,对象是实的,真正可以操作。对象是类的实例化。就像上帝在造人之前,先设定好,人这个类有什么属性,再用泥巴把人捏出来。

3)引入面向对象,可以起什么作用?

此处输入图片的描述

它们可以直接使用从父类继承的属性和方法,比如构造函数,同时自己添加新的属性和方法。所以这里就不需要再定义西红柿、鸡蛋这些材料了

此处输入图片的描述

这三种菜各自有自己的摆盘方式。但是在目前还不确定究竟是哪一道菜,可以先用父类来写
此处输入图片的描述 程序运行的时候会根据最终的情况,自动选择对应的摆盘方式。

以上三种面向对象编程的特点在教科书里面称为封装、继承和多态。

面向过程和面向对象这两种编程思想其实并不冲突,只是适用于不同的情况。我个人的理解是,面向过程相对微观的,朴素的思维方式,而面向对象则是相对宏观的,需要更多的归纳和抽象,更接近我们看待世界的方式。如果以造房子来比喻的话,面向过程是一个从地基、墙壁、门、窗一步步建造的过程,而面向对象则是把门、窗、墙壁都做成一个个有特定接口的组件,需要使用的时候就把它们组合起来。

2.编程语言

前面所说的编程思想并不局限于某种特定的语言。而编程语言则是落实到最终要做的事情,写代码,要有一个特定的选择。和我们生活中学习的语言其实是类似的,学习外语是为了和别人交流,学习编程则是为了和计算机交流,让它听懂我们的指令并按照要求操作。学外语时,我们要学习单词、语法、句子,同样的,编程语言也包含这些要素。但是这里有一个区别,说外语的时候即使单词发音错误,语法不正确,对方也可能听得懂,但是在编程中,一个再细微的错误,也可能导致程序无法运行,或者得不到正确的结果。
打开任何一本编程语言的教材,基本上都包含以下几大块:
1)数据类型 运算符
对于编程人员来说,数据类型是最底层的。因为我们所处理的所有内容都是以数据的形式存储和处理的,无论是数字、文字、图像、音频、视频,对于计算机来说全部都是数据。回想我们从小学习的数学,数据类型从整数、小数,到后来的有理数、无理数,再到集合,运算符从最简单的加减乘除到乘方、开方,到集合的运算,是一个逐步扩充的过程。编程中的数据类型和运算符其实也是类似的,只是更加丰富和多样。
2)控制语句
控制语句的作用是对程序流程的选择,决定下一步该做什么。通常包含顺序、选择和循环三种。

此处输入图片的描述

此处输入图片的描述

五、如何学习

1.学习基础概念和知识
2.实践,实践再实践!

3.解决问题,纠正错误
4.回到步骤1