编程语言入门学习
Contents
###前言
大家好,我是小雨。今天想跟大家分享一些我对 python学习 过程中的思考。其实这个想法在半年前我就有了。最近有个小伙伴私信我,说是对 机器学习 很感兴趣,但是只有一点点的编程基础。所以在看一些机器学习视频中,由于看不懂演示代码,而觉得机器学习入门很难 或者 由于看不懂演示代码,而觉得编程学习很难。
就像学车,不能因为对车体结构不了解,而觉得自己不能开车。
而今天我录制这个视频的目的就是想试着回答 编程学习很难吗? 这个问题。先说一下我个人情况:
- 我学的是物理类-天文学专业
- 2018年因为科研需求开始接触编程,接触python
- 我的python学习主要是自学(看视频+看书)。今年疫情期间花了200块钱报了一个python基础班,为了是跟着别人梳理一下自己的学习内容(两个星期的网上课程)
总的来讲,我开始学习python编程并没有比任何对编程感兴趣的同学有起点优势,下面是我这两年的学习感悟总结,希望对想学编程语言的小伙伴有所启发。
HELLO WORLD!
如果我们决定要学一门编程语言,我们最渴望的就是能在网上找到学习资料or学习视频。刚好B站也有很多 python入门 相关的教程。而这些教程最大的特点之一就是:让我们在python环境中输入「print(“hello, world!")」 来一次所谓的python入门学习初体验。如果我们运行成功,比较虎的老师会说 恭喜你已经学会了python,就像赵本山对做脑筋急转弯的范伟说 恭喜你,你都会抢答了 那种既视感。
可我并没有丝毫的成就感,相反会跟小品中的范伟一样懵圈。
学习一门语言之前,输入 print(“hello, world!") 真的有助于我们学习编程语言吗?至少对我而言,我除了懵圈、疑惑之外,没有任何有促进我学习编程语言。而且,正是这种初始的疑惑,会让我在后续的学习中,因为没有得到解答而开始怀疑我是否学会了python这门语言。
注:我这里指的解答不是指为什么输入 print(“hello, world!"),点击 运行,就出现了 “hello, world!"。
函数概念
这篇总结虽然是基于我学习python语言,我觉得也会对学习其他编程语言(C,Java等)有启发。所以我变大言不惭地用 编程语言入门 这个标题。
在进行下面的讲述前,我默认看这个视频的小伙伴满足一下几点:
- 具备中学数学(初中)水平
- 会使用浏览器,遇到问题有意识去寻求帮助
函数概念
既然 print(“hello, world!") 不是一个好的入门方式(对我而言,我只是觉得它只是一个展示方式,根本谈不上编程入门),那 什么才是学习编程的入门方式呢?
我个人觉得,如果想学习编程语言,一定要有 函数概念,而且要有 接受数学符号 的阅读习惯。
#####函数表达式 $y=f(x)$
函数是我们在中学时就接触到的一个概念,简单来讲 给定一个 $x$,$f(x)$ 输出一个对应的 $y$。
这个时候我们再看 print(“hello, world!") 这段代码,是不是可以理解为 print() 本身就是一个函数而已(在python中,带有小括号的就是函数),而这个函数的作用就是你输入什么,它就会返回什么。【去网页运行一下】
1 = 1
x=1
x=y=1
赋值号 =
我们再来审查一下函数表达式: $y=f(x)$,在数学上这个表达式读作:$y$ 等于 $f(x)$。
- 如果 $f(x)=1$,则 $y=1$
- 如果 $f(x)=1+x$,则 $y=1+x$
也就是通过 等号= 作用,$f(x)$ 取什么,$y$ 也取相同结果。因此,我们可以将这个概念推广一下,使 = 不仅仅是书面上的相等,而是表示一种 赋予 行为(有点想武侠小说内功功法传递,或者理解为文件复制操作)。
X = Y:只要 Y 拥有任何属性,X都具有相同的属性(更严谨的数学表达:X,Y互为真子集)
例如:Y表示一个旅馆,旅馆里面有编号为6个房间,编号为0-6。我们用 Y(0) 表示0号房间
有了上面的 赋予 操作, X(0)也表示0号房间。更专业地我们将这种赋予行为读作 赋值操作。
多项式函数 $Y=F(x)=a_0+a_1x+a_2x^2+…$
$Y=F(x)=g_0(x)+g_1(x)+…$
有了上面的函数概念和赋值概念,我们应该很容易理解多项数函数表达式,它仅仅是多增加几项而已。在这里重点提到这个概念,是为了重点介绍一种表示方式。
例子1:
如果我们要用多项式Y去表示上面的点,我们根据数据点的分布规律可以明显看出我们只需要$Y=F(x)=x$,即$a_1=1$,其他系数都为0。为了跟前面的母函数(数学上说法为函数空间)做为区别,我们可以用一下的表示方式 $Y.a_1=F(x).a_1=x$(编程语言中用的这种方式),如果你喜欢你也可以这样 **$Y_{a_1}=F(x)_{a_1}=x$** 或者 **$Y^{a_1}=F(x)^{a_1}=x$**。这些只不过用来表示我们取 $Y=F(x)=a_0+a_1x+a_2x^2+…$ 某一部分功能概念而已。
例子2:
根据前面的例子1,我们会很快写出来 $Y.a_2=F(x).a_2=x^2$,更为简略地可以写为 $Y.a_1$(前提你要知道Y的函数空间是什么,这样你读到这个表达式的时候才会知道具体含义)。
粉笔颜色
虽然上面我们描述了如何用函数去表示上面两组数据,但是为了真正得到上面两幅图,是不是需要用粉笔画出来呢?根据图1的颜色,我知道图1的画笔颜色是蓝色的(没有色盲)。然而小红同学可能画的图是图3
为什么在这里要强调这个问题呢?如果对于一个人来讲,根据最后选出的函数方式,他/她可能随意用任何颜色的笔来做图。但是对于电脑(机器)而言,我们必须告诉它你想用什么颜色让电脑呈现出来,在这里我们可以把 颜色 看成函数呈现的未知数,是蓝色or红色,我们必须告诉电脑。那如何把这个参数写到表达式里面呢?
$Y.a_1(x,color=red)$
总结
现在我们重新复习了函数概念,并对函数表达式的写法有了初步的理解,目的是为了我们以后看见长长的表达式而不再困惑,它们仅仅是一种书写或者表示简单的方法罢了。
学会寻求帮助
如果我问:牛顿第二定律的数学表达式是什么?
你可能会很快的写出 $F=ma$
我如果再问:请写出泰勒展开公式
你会说,我的数学水平只有中学水平,不知道你在说什么,那么现在就请用浏览器寻求泰勒展开式这几个字的含义吧。
如果你说,泰勒展开公式我在高数课程中学过,但是具体的数学表达式我忘记了,那么你可以去翻开高数书找到它。
无论你通过那种方式,你会给出下面这样的表达式:
$f(x)=f(x_0)+f’(x_0)(x-x_0)+\frac{f’'(x_0)}{2!}(x-x_0)^2+···+\frac{f^n(x_0)}{n!}(x-x_0)^n+R_n(x)$
在这里,我想强调的是 一定要学会寻求帮助。可这和学习编程有什么关系呢?
无论是通过浏览器还是通过翻阅工具书来寻求答案,是不是可以看成 为了解决我提出的问题,你需要一种or多种工具帮忙,直白的讲你需要把高数书上已有的公式再次写到(导入)我的问卷上?
编程入门
前面说了那么多,终于到了编程。
让我们先来看看Wikipedia给出的定义吧
A programming language is a formal language comprising a set of instructions that produce various kinds of output.
是不是跟前面函数概念基本类似呢?所以我们可以把编程语言python看成不同功能函数的集合呢?
让我们再来看这段代码 print(“hello, world!")。是不是就可以把 “hello,world” 看成 X,把 print() 看成Y。这个函数的功能就是你对他输入 X 他就原封不动输出这个 X。
有了这个概念,和前面的知识。我觉得我们可以阅读一段代码试一试,我这里的阅读不是让你理解其中的真正含义,而且 我们可以理解代码之间的逻辑结构。【阅读鸢尾花python代码】
详见鸢尾花
出错情况
print(hello, world!)
|
|
如果你是这样输入的,而且报错了,那么恭喜你,开启学习python之旅吧。
$G(x)=\frac{1}{x}$,就像这个函数一样,输入 $x=0$ 是没有意义的。