极简编程课:入门教程的入门课

常见的教程是这样的:

Image

虽然学了入门知识,但不了解整体框架,不知道这些入门知识有什么用。

就像画了脑门,依然不知道这是谁。

更合理的教程应该是这样的:

Image

每个阶段都是完整的,下一阶段是对上一阶段的细化。

学习时,起码知道学了这些有什么用,不会因为太纠结细节,而忽略了整体。

而这篇《极简编程课》作为入门的入门,作用大概是这样:

Image

不论你是完全的编程小白,还是半途而废的初学者,看过这篇“极简”介绍后,都会对编程有一个整体的了解。

后期再看其他的“入门教程”,也会知道为啥要学习这些知识了。

《极简编程课》目录

1.函数和模块 2.数据和变量 3.循环和判断 4.安装和实操 5.补充说明

说明1:这篇文章不涉及太多具体操作,耐心阅读即可入门。

说明2:这里以 Python 编程语言为例。文中涉及的代码和资源会放在文末,大家可以下载到电脑上自己学习。

说明3:全文比较长(一万字)。因为是一个整体框架,所以没有拆分,建议收藏后抽时间集中阅读。

说明4:欢迎分享给周边对编程感兴趣的朋友,这篇文章一定会帮助到他们。

1.

变量和模块

程序就是我们写给电脑的一串指令。

电脑读完这些指令后,就能按照我们的要求,一步步完成指定操作了。

因为是写给计算机看的,所以要用计算机的语言,也就是我们所说的编程语言(这里的例子是 Python)。

这里贴出一个简单的示例程序,大家可以先看一遍,感性认识下。

Image

尽管和人类语言不同,但有点英语基础的话,大概能猜出来,这段代码想让计算机干什么。

我们先把这段代码“翻译”一下。

Image

执行过这个程序之后,原来的硬盘上,就会出现程序中的文件和文件夹了。

Image

而这一步步操作中,最关键的部分就是程序中蓝色和绿色的那些代码。

Image

括号中的这些代码,在程序中叫做:

函数

这个词儿不太好理解。

它的英文原名是 function,意思是“功能”,相对更直观一些。

函数的作用就是实现某些“功能”(例如:打开文件,写入内容,创建文件夹等等)

可以把函数看成一个“机器”。给它输入一些东西,它就会做相应的处理。

这就好比把照片传入修图软件,它就能帮我们加滤镜,把食物放进微波炉,它就能帮我们加热一样。

Image

之前我们说,程序是给电脑下达的指令,而函数则是这些指令中的核心。

对初学者来说,学会使用函数,就相当于掌握了编程的核心。

其余的编程知识都是一种补充,是为了让我们更好使用函数。

函数和机器一样,功能越丰富,内部构造越复杂。

Image

但好消息是:

这和初学者无关。

对于初学者来说,关键是知道如何使用函数,而不是如何创造函数。

就像我们只要会用微波炉就行,至于里面的结构,暂时不知道也没事。

而很多入门教材中,会讲解函数的结构,如何创建新函数等,这很容易吓坏初学者。

初学者遇到的问题,基本上都有现成的函数可以解决。

初学者要做的,是把复杂的问题,拆分成多个简单的问题,然后通过搜索,找到解决这些简单问题的函数,最后把它们拼起来就可以了。

比如,在上面的示例程序中,有一步是用 Python 把一个文件复制到另一个文件夹中。

那我就可以在网上搜索“python copy file”。

Image

进入搜索结果,查看里面给出的例子和说明。

然后把代码复制到到自己的电脑上,看看具体是怎么用的,随后就可以用在自己的程序里了。

比如,在示例程序中,我用的就是下图的第二种方案。

Image

Image

这其实是学习编程的最佳路径:

遇到问题,搜索方法,快速学习,马上应用。

第一,弄清楚要引入什么“模块(module)”。

Python 有很多函数,为了方便管理,人们把它们存放在了不同的模块(module)当中。

就像我们会把铅笔放在笔筒里,扳手放在工具箱里一样。

Image

要用某个函数时,首先要把对应的模块引入进来,然后再从这个模块中找到相应的函数,然后使用。

比如我们要使用的“创建文件夹”,“复制文件”等函数,都存放在名叫 os 和 shutil 的模块中。

那我就会在程序中,先引入这些模块,随后用 os.mkdir() 来新建文件夹,用 shutil.copy() 来复制文件,用 os.rename() 来重命名文件。

Image

除了 Python 自带的模块之外,还有很多函数被放在了第三方模块中。

引入这些模块之前,要先把它们下载到电脑上。

就像我们的新手机上只有几个简单的原生应用,想要用其他软件,要去应用商店先下载一样。

比如,你想处理 pdf 文件,可以搜索“python pdf module”。

Image

在结果页面中,通常会给出例子和需要使用的模块。

Image

如果你想处理图片,视频,ppt,word等其他文件,按照这个方法搜索,都能找到处理这些文件的模块,以及详细的使用方法。

说明1:特别常用的函数,已经内建在 Python 当中,比如 print(), open(),这些不用引入模块,也可以直接使用。

说明2:程序里的某些对象也可能有自己的函数。比如,那个 file 对象,可以使用 write() 函数写入内容,也可以使用 close() 函数来关闭文件。

这部分内容已经超出“极简”的范围,这里暂时不做详细介绍。

对于新手,只要记住,碰到的大部分问题已经有答案,只要找到合适的模块(module),利用里面的函数(function),就能解决这些问题。

第二,弄清楚“输入”和“输出”。

刚才说函数就像一台“机器”,所以我们得知道,什么东西可以放进去,处理之后会变成什么。

在程序当中,函数通常长这个样子:

Image

核心的部分是函数名和后面的括号。

函数名就是它的功能,而括弧相当于输入口,可以把想处理的数据放到括号里。

处理完的数据,如果需要继续使用,可以用一个变量“装起来”(这部分后面会讲到)

函数不同,输入输出的要求也不同。

有些可能是1个输入,1个输出;有些可能是2个输入,没有输出;也有些既不输入,也不输出。

Image

补充说一下函数后的括号。

即便没有输入,括号也不可以省略。

可以把括号看成是函数的启动按钮,只有这个括号存在,函数才能开始运作。

对于括号内的输入来说,除了数量之外,也要看输入的类型。

如果类型不对,函数也没办法处理。就像把冻排骨放到榨汁机里,榨汁机就没法处理一样。

所以,接下来说一下,输入到函数中的这些数据,都有什么样的“类型”,以及存储这些数据的“变量”。

2.

数据和变量

计算机当中的数据主要分为两种:

数字和文字。

数字又分为整数和小数。整数叫integer,简称int;小数叫float。

文字又称为字符串,叫做string,简称str,通常用引号括起来(单双引号都可以)。

Image

int, float, str 这三个词会经常出现在函数的使用说明书中,所以后面讲解时,我也会加上这些缩写。

文字(str)这种数据类型有很多功能,常见的两种是分别是“文字输入”和“名称指定”。

所谓文字输入,就是把它当做具体的内容,输入到函数当中,让函数给我们打印出来,或者写到某个文件中。

比如,我们在之前的例子中提到的,在文件中写入“极简编程课”的内容。

Image

另一种是指定文件(夹)的名称和位置,比如”C:\Users\Desktop\test.txt”。

因为我们无法直接把要处理的文件拖入到函数中,所以需要用文字形式(str),准确告诉电脑,这些文件在电脑的什么地方。

不论是图片、视频,还是word文档,只要用文字(str)说清楚位置,并且找到合适的函数,电脑都能处理。

我们在之前的例子中,就在复制文件的函数中,用字符串(str)输入了 txt 文件和文件夹。

Image

除了上面说的两种用法之外,字符串(str)还有很多其他的用途,在阅读函数说明书时,可以看到某些参数需要用字符串(str)形式。

比如,我们之前打开文件的那个函数,除了文件名之外,第二个输入的参数是文件格式,也需要用字符串(str)的形式来表达。

Image

这个在阅读函数说明时,就可以看到。

Image

说完了文字(str),再来说说数字(int, float)。

总有人说,编程对数学要求不高,之前一直不理解,入门之后大概知道是什么意思了。

编程就像解数学应用题。

真正的难点是把问题翻译成数字,而随后的计算难度不大,大部分都是四则运算。

而这个“翻译”才是难点,过程中可能会用到数字(int, float)。

比如,你需要查看文件名当中某个位置的字母,就需要告诉电脑,字母在第几号位。

再比如,你要查看某些数据的长度,看看是否超过标准,这些都涉及到数字的应用。

Image

数字层面的应用没有那么难,关键是要知道数什么,怎么数。

即便面对同一个问题,可能也会有不同的解决方法。

关于数字的具体应用,后面还会有详细介绍。

数字(int, float)和文字(str)是最基础的数据类型。

除此之外,为了使用方便,编程中还会把它们放在一起,组成一个集合。

比如列表(list),或者字典(dictionary)。

Image

这些集合类的数据,和之前的文字与数字一样,都可以输入到函数中。

而且,我们可以根据需要调用这些集合当中的数据。

Image

Image

这些具体应用在各种入门的教程中都会介绍。解决具体问题时,也会慢慢学到,所以在这里就不展开说了。

下面说说另一个重要的概念:变量。

程序复杂起来之后,里面会涉及到很多数据(文字,数字,列表等),管理起来很麻烦。

文字还能看清楚具体是什么内容。数字如果没有说明的话,很难知道到底代表什么。列表又很长,每次都复制粘贴很麻烦。

为了方便数据的管理,我们可以把它们装到一个“盒子”里,而这个“盒子”就是变量。

Image

这么做有三个好处:

看起来方便 用起来方便 改起来方便

这么说有点抽象,举一个具体的例子,大家就明白了。

假设有两个函数,只要把圆周率和半径输入进去,就能计算面积和周长。

现在有一个半径为3.14的圆,需要我们来计算面积和周长,并且要把半径打印出来。

如果在函数里直接输入数据,程序就会长这个样子。

Image

如果我们这么写,就会有几个问题。

第一,看起来不方便。

函数中的数据代表什么?前面的3.14和后面的3.14有啥不同?

除非对这些函数很熟悉,否则仅凭数字,并不知道谁是圆周率,谁是半径。

对于阅读代码的人来说,这部分就很难理解。

第二,用起来不方便。

如果这个程序后面还需要用到“半径”或者“圆周率”,我就需要自己查找对应的数值,并且复制粘贴过来。

因为看起来不方便,在复制数据时,很可能出现错误。

第三,改起来不方便。

这里的计算对象是半径为3.14的圆。

假设现在要计算半径为4.14的圆呢?那就要把每个半径的数据全都改一遍。

现在只有三个函数,改起来还不算太难。但如果程序很长,需要修改很多地方,一不小心就会遗漏,导致错误。

为了解决这几个问题,就出现了变量这个概念。

可以把变量假想为一个“盒子”,具体的数据可以被存放在里面,然后给变量起一个名字。

随后的程序中,我们就不用具体数据,而使用这个变量来进行运算。

Image

修改之后的好处也很明显。

首先,每个数据的含义很明确。

变量名称代表了数据的实际意义,尤其是数字类的数据,能用一个名称来标记,显然更容易理解。

其次,调用起来更加方便。

假设我想在其他函数中调用某个数据,我不需要记得它的具体数值,只要把变量名直接输入进去就可以了。

因为变量名是我自己起的,通常非常简洁和直观,所以调用起来会更方便。

Image

函数处理完某个数据后,会生成一个结果,如果我想继续处理这个结果,也可以把它装到某个变量中,然后用这些变量进行后续处理。

Image

Image

最后,有了变量,修改起来很方便。

如果我现在想计算半径为4.14的圆的数据,不再需要逐一修改。

只需要把半径这个变量内的“数据”修改一下,所有对应变量中的数据,就都会跟着改变。

Image

变量的命名方式还有很多需要注意的地方,这些内容在入门教程中都会详细介绍,在“极简”当中就不展开说了。

关于变量,最后还要提醒一点:

等号( = ) 不是“等于”,而是“赋值”的意思。

相当于把右边的数据,“装到”左边的“变量”里。

Image

了解了函数能处理的数据类型,以及装载数据的变量之后,我们就能像流水线一样,把函数组装起来,一步步完成具体任务了。

把数据装到变量中,放进函数里处理。把处理好的数据再放在变量中,继续后续处理,直到得到想要的结果。

Image

但这种处理有两个问题:

一,遇到重复工作时,只能一遍遍复制同样的代码,太麻烦。

二,没办法判断情况。不能具体问题,具体分析。

这就涉及到《极简编程课》中最后两个内容了:循环和判断。

3.

循环和判断

有了函数,变量,数据,我们已经可以解决点实际问题了。

下面就用一个简化的真实问题,来讲解下这部分的内容。

比如,我下载了一季美剧,打开文件夹后发现,所有的后缀都是“mp41”,现在需要把它全改成“mp4”。

Image

在前面的内容里,我已经知道怎么使用重命名的函数了。

Image

所以,我们可以利用这个函数,完成上面的任务。

Image

这里稍微说明一点,由于我们的程序在 tv 这个文件夹外面,所以从程序文件的角度来看,这些文件是 tv 文件夹内的东西,因此要在文件名前加上“tv/”的路径名。

Image

这么写肯定没问题,但还是有点啰嗦,复制粘贴太多。

如果想要简化一下,就需要知道编程中很重要的一个结构:

循环结构

原来的程序中,其他部分都是重复出现的,只有文件名每次都需要修改。

Image

所以我们可以这么做:

把重复的部分合并,只修改需要变化的部分。

我把这个循环结构先写出来,后面再一点点解释。

Image

这里有两个新函数,在解释循环结构前,我们先用试验的方法,看看它们是干嘛的。

先看第一个函数 os.listdir()

Image

运行后的结果是

Image

os.listdir() 把“tv”这个文件夹里的文件,按照列表的形式打印了出来。

说明 os.listdir() 这个函数,只要输入一个文件夹,就能把文件夹里的文件,做成列表输出出来。

我们再来看看第二个函数 replace()。

Image

运行的结果是

Image

说明 replace() 这个函数,可以把文件名中的某个字符串,替换成另一个字符串。

另外还有一个小知识点,就是两个字符串可以相加,得到一个更长的字符串。

Image

运行后的结果就是“tv/1.mp41”。

Image

类似这种小测试,是初学者学习编程时,最常用的手法。

把一个函数单独拿出来,输入一些数据,看看它是如何处理的,进而了解它的功能,然后就可以放到自己的程序里使用了。

相应的代码,我也放在了文末的资料里,大家下载之后,可以自己体验一下。

了解了这些内容后,再来看原来的循环结构,应该就能大致理解了。

Image

file_list 当中有我们所有要处理的原文件名。

后面的“for file in file_list”就是一种循环,翻译过来就是:

对于 file_list 里的每个数据,每次都放进 file 这个变量里,然后做后续的处理。

这里的 file_list 和 file 都是我们起的变量名,目的是知道变量中的数据代表什么,方便程序的书写和理解。

如果不在乎程序的“可读性”,理论上给这些数据起什么变量名都可以,只要处理的过程相同,最终的结果都是一样的。

Image

所以说,变量名主要是起给人自己看的。

file_list 里面的具体数据,逐个被装进 file 这个变量后,file 就会带着这个数据,进入到冒号后面的操作流程里。

注意:循环结构里面的内容,往后缩进了4个空格,并且它们之间是对齐的。这个意思是它们属于一个层级,都属于循环结构的内部。

Image

每次 file 换一个新数据,就要在循环结构里跑一次,直到把所有的数据都处理完

这个过程用动图简单演示一下就是。

Image

除了 for 这种结构之外,Python 还有一种 while 循环,用法稍微有些差别。

但本质上都是循环,大部分入门教程都会介绍,就不在“极简”这里讲解了。

大家只要知道,一旦程序中出现了重复出现的部分,我们就可以把它们提取出来,放到循环结构里来处理。

Image

还是这个例子,如果文件夹中还有其他类型文件,在修改文件名的同时,能不能让计算机自己判断,删除这些不必要的文件呢?

Image

这时,就要用到编程中另一个重要的结构:

判断结构

在原来代码的基础上,再加上一个判断结构,就可以实现这个功能。

还是先给代码,然后解释其中的内容。

Image

其中的“if…else…”就是基础的判断结构。

“如果(if)”满足第一个条件,就执行第一个条件内的代码,“否则(else)”就执行第二条件的代码。

我们能看到每个判断分支下的代码,也统一往后缩进了4个空格,以此来表示自己属于哪个判断条件之内。

Image

具体到我们这个程序中就是:

如果 file 文件名以“mp41”结尾( endswith() 是查看结尾的函数),那么就执行我们之前修改文件名的命令。

否则,就用 os 模块当中的删除函数( os.remove() ),把文件删除掉。

运行完的结果,就是我们想看到的样子。

Image

而这恰恰是编程强大的地方:可以根据我们制定的规则,具体问题,具体处理。

在讲解数据类型时,我们说过编程就像解应用题,核心是如何把现实问题,翻译成机器能听懂的语言。

而这个例子也能体现什么叫做“翻译问题”。

比如,我们想挑出所有“mp41”结尾的文件,所以这里用到了一个 endswith() 函数。

但同样的问题,我们还可以用一些其他方法。

Image

通过观察可以发现,我们想保留的文件,最后一个字母都是“1”。

所以,我可以不用 endswith() 函数,而直接提取每个文件名的最后一位,然后判断它是不是“1”。

如果是,就执行重命名的代码,如果不是,就执行删除代码。

这里稍微多说一句。

判断条件中用到的“1”是字符串,而不是数字。因为文件名当中提取出来的是字符串,而不是数字。

Image

除了检查最后一个字母之外,我们还可以查看文件名的长度。

我们需要保留的文件名长度都是6,也就是不超过7。

所以我们还可以这么写判断条件。

Image

这种方式同样能得到我们想要的结果。

即便是一个批量修改文件名的简单程序,也有很多种写法。

如果是一个更加复杂的程序,不同环节会有不同的判断和解决方法。

对初学者来说,只要能达成目标,不必太在意方法是否“高级”。

还是那句话,初学者以应用为目的,优化的事情,等到有了更多知识后,再做也来得及。

4.

安装和操作

函数,模块,数据,变量,循环,判断,它们组成了编程的基础框架:

确定解决问题需要用什么函数,把相应的模块下载并引入进来。

把要处理的数据放到变量中,把变量放到对应函数中处理。

如果需要重复处理,就加入循环结构,如果需要分类处理,就加上判断结构。

对初学者来说,所有的入门知识,几乎都是对这个框架的补充。

这个框架就相当于一个模糊的地图,作为司机,你可以根据自己的兴趣,一点点探索里面的细节。

但首先,我们要把车启动起来。

所以这一部分,我们来讲一下如何安装 Python,并运行一下之前讲到的程序。

安装 Python 和平时安装软件差不多,在官网上下载最新版本。

官网的下载地址:https://www.python.org/downloads/

Image

Python 的版本有很多,写这篇文章时,最新版本为3.10.5。

不论是苹果系统还是 Windows 系统,下载之后,都可以直接双击点击安装,一路默认选项来安装就可以了。

Windows 版本需要注意一点:在安装时,记得勾选“把Python添加到路径”上的选项。

Image

安装好 Python 之后,我们的电脑就相当于学会了 Python 这门“语言”,可以读懂我们用 Python 写的程序指令了。

只不过 Python 不像其他软件,不能直接双击打开,需要我们用“终端机”来操作。

这里简单介绍一下终端机(苹果电脑上叫终端,Windows电脑上叫命令提示符,为了方便,后面统一称为终端机)

(苹果电脑)

Image

(Windows电脑)

Image

我以苹果电脑为例,解释一下终端机的应用,Windows上也相同。

终端机打开之后,就是一个黑色的框,里面会闪烁着一个提示符,等待我们下达指令。

Image

这个东西和我们平时用的图形界面功能相同。

只不过我们在图形界面上要用鼠标操作,而在终端机上要用文字输入指令。

比如,想要进入一个文件夹,用鼠标操作,就是双击那个文件夹。

在终端机上就输入“cd(空格)文件夹名”,其中cd是change directory(改变文件夹)的缩写。

(图形界面中)

Image

(终端机上)

Image

有了终端机,我们之前安装好的 Python 就能发挥作用了。

我们的 Python 程序,通常会写在一个“.py”结尾的文件中。

Image

如果想要让 Python 读取这个文件,首先要利用终端机,进入到存放文件的文件夹中。

在终端机中输入 cd ,然后空格,把目标文件夹直接拖拽进终端机中,能看到终端机自动识别了这个文件夹的路径(应该是很长的一串文字),回车后就进入到这个文件夹当中了。

Image

Image

为了判断是否已经进入目标文件夹,我们可以在终端机里输入一个ls(list的简称,windows用户要输入dir),把当前文件夹内的文件都打印在终端机上。

我们可以通过查看图形界面中的文件内容,和终端机显示的是否相同,来判断是不是已经进入该文件夹里了。

Image

然后在终端机上写入“Python3(空格)代码文件名”然后回车,就可以运行代码了。

Image

随后就能看到程序生成的文件夹和里面的文件了。

Image

这个过程用动图来演示一下就是:

Image

除了运行我们写好的程序之外,终端机的另一个作用是帮我们安装模块。

在讲解函数时,我们曾经说过,好多函数都在第三方模块中,不在 Python 自己的安装包里,需要我们额外下载下来使用。

这就像是新手机上只有原生的软件,我们需要的微信,支付宝需要在应用商店里下载一样。

Python 也有自己的“应用商店”,里面有相应的模块,供我们下载。

下载的方式也很简单,在终端机上打入以下内容即可。

Image

至于应该安装什么样的模块,完全取决于我们要解决什么问题。

Python应用商店有一个官网:pypi.org

Image

在里面输入关键词,能看到很多已经写好的模块和相应的简介。

Image

阅读简介后,看哪个模块能解决你的问题,就可以点击进去,看看里面的详细介绍。

通常会有安装方法,以及使用的具体案例(比如,如何把 ppt 转换成 pdf)

Image

如果觉得这个说明太简略,也可以在搜索引擎中,直接搜索想要解决的问题。

Image

点击进去之后,通常会给出更详细的解答,并且在开头的部分,告诉你这个解决方案需要安装什么模块。

Image

5.

补充说明

到目前为止,作为入门的入门,这篇《极简编程课》已经把编程当中最核心的东西讲完了。

看完这篇介绍之后,再去看其他入门教程,能更容易知道每个部分的作用。

作为“极简”的内容,里面有非常多的省略和遗漏。

我也没有特意区分一些相近的概念,大家如果看其他“入门教程”,会慢慢体会到其中的不同。

但为了不让“极简”变成“简陋”,最后再补充几点。

一,关于编辑器

教程中的程序都是直接给出的,没有说这些程序是用什么软件写的。

其实,程序只是一串文本,如果愿意的话,我们用电脑上的记事本就可以写。

最后保存成后缀为“.py”的文件,就可以在终端机上运行了。

但我给出的例子中,不论是函数还是变量,都有自己的颜色,看起来一目了然,这就明显不是在记事本上写的了。

Image

为了更方便地编程,程序员们开发了很多专门用来编程的编辑器,其中有很多快捷键和自动补齐功能,可以大大降低编程中的重复劳动。

这些编辑器没有好坏,未来我也会抽时间专门介绍一些。

感兴趣的朋友,可以先去网上搜索一款叫“Sublime Text”的编辑器,然后下载体验一下。

Image

注意1:不能使用word软件写程序。因为word文件不是纯文本,里面还有很多字体,颜色等参数,终端机是读取不了的。

注意2:写代码要用英文的半角输入,比如里面的冒号,逗号等。如果用中文输入,程序就无法运行。

二,关于初学者资源

踩过很多坑之后,这里列举三个我觉得比较好的入门资源(也放在了文末的资源库里)

1.automate the boring stuff with python

这个基础教程足够系统,看完这篇《极简编程课》之后,直接去学习这套教材,会非常适合。

Image

这套教材也偏重于实践,有了这篇文章的框架之后,前几章的内容理解起来会非常方便。

Image

更重要的是:这个教材完全免费,里面给出了所有例子的代码,可以直接下载下来,像之前的例子一样,在自己的计算机上运行。

Image

2.geeks for geeks

这是一个编程网站,主要提供具体解决方案。

Image

我个人不会直接去这个网站,但遇到具体问题,在谷歌搜索解答时,如果搜索结果里有它,就会首选它的答案。

Image

因为里面的答案都是专业程序员利用业余时间写的,给出的例子也比较清晰,非常适合拿过来修改一下,直接使用。

这个网站本身也有一个 YouTube 频道,但因为是印度人制作的,口音实在不太好理解,所以比较推荐只看网站上的文字。

3.corey schafer

之前也提过,这是我在 YouTube 上的编程老师。

Image

为了写这篇文章,我还特地看了一下他制作的“入门课程”。

虽然视频解说依然很详细,但明显是针对有一定基础的人。

所以还是适合看完这篇《极简》之后,再去观看。

三,关于英语

上面给出的三个教程,都是英文内容,有些可能还需要谷歌才能访问(对于无法访问谷歌的朋友,可以在后台回复“谷歌”,查看解决方案)

编程这个没办法,看过《 大学生找不到工作,和当年的冷战有啥关系? 》那篇文章的朋友,应该知道互联网这东西,就是美国搞出来的,所以英语就是唯一通用的语言。

如果想学习编程,英语是一个必备的工具。

教程中展示的搜索结果,我也都是用英文搜的,因为这样能得到更多的答案。

不光是教程,还有很多编程中的 bug,都是以英文形式给的反馈,如果看不懂,就不知道是哪里出问题了。

Image

Image

至于如何学英语,之前在《 重要的事:非常简单,但不容易 》当中也说过,最关键的只有一个:

背单词

单词量到了,其他都是小问题,后期有机会,我再写一篇《极简英语课》,把这事儿说清楚后,就不想再纠结这件事了。

四,关于极简教程

最后说说,为啥想写这么一个“极简教程”。

我在学会编程后,一直有个遗憾:

要是有更好的“入门教程”就好了。

因为一直没碰到这类教程,所以干脆自己写一篇。

尽管能力有限,但总体上还是满意的。

写作中的一个原则就是:写给当初的自己,让他少走些弯路。

如果能帮他少走些弯路,相信也能帮助到其他人。

另一方面,我一直想整理积攒的编程笔记。

如果没有这么一个“极简框架”作为基础,写出来的东西可能很多人都看不懂。

所以也想做一个入门的介绍,让更多人理解往后笔记的含义。

以上就是《极简编程课》的全部内容。

这是第一版,等到后期有了更多经验,对编程有了更深入理解后,可能还会补充。

文中的资源,大家可以在后台回复“极简编程”来获取。

总感觉用不了多少年,编程会像英语一样,变成一门重要的“外语”。

希望在那之前,这篇《极简编程课》能帮助一些人迈过第一道门槛。