启程——本文逐渐完善中...
三个普适性主题:系统的问题解决方式,抽象能力,以及将计算思维作为思考世界的一种方式。
应当学会以下技能
初级技能
使用语言进行编程与计算
学会系统性地组织编写调试中等规模的程序;
理解算法复杂度
将模糊的问题转化为明确的计算方法,以此解决问题,并对这个过程有深刻的理解;
掌握一些有用的算法以及问题简化技术
中级技能
对于那些很难得到封闭解的问题,知道如何使用随机性和模拟技术进行清晰阐述;
学会使用计算工具(包括简单的统计,可视化以及机器学习工具)对于数据进行理解与建模。
编程本身就是一件非常困难的事情。正如那句名言所说:“在几何中,没有为国王铺设的大道”。对于编程而言,没有捷径可走。想学会的话,得练,得多练,得用心练!
计算机只能用来做两件事,执行计算与保存结果,但是它把这两件事做到了极致。世界上第一台通用电子计算机ENIAC为科学家们提供了一种不同于之前任何计算器的工具,先前在手动计算器上花费12小时的弹道计算可以在30秒内完成(因此被称为比炮弹还快),但是每秒也仅能执行几千次计算。而现在常见的台式机与笔记本电脑每秒钟大概可以执行十亿次计算。许多问题被证明可以通过计算机来解决(当然也有不能通过计算机来解决的)。
希望大家可以熟练地将计算思维应用到解决工作学习生活的问题中。
所有的知识可以被归结为两类:陈述性知识,程序性知识。
陈述性知识由对事实的描述组成。例如:若y×y=x,则x的平方根就是数值y。这就是对事实的描述,但是它并没有告诉我们怎样求出平方根。
程序性知识说明如何做,描述了信息演绎的过程。例如告诉我们怎么样求出平方根(引用[2]中的描述是说亚历山大的海伦第一次提出如何计算一个数的平方根)。方法如下
算法:以上这个方法描述了一系列简单的步骤,以及一个控制流,用来确定某个步骤在什么情况下得以执行。这种描述的方式称为算法(这里说的比较通俗,没有给出算法的形式化定义,想仔细探究的去看算法的百科吧,附带谈一下科学史,算法这个词源于波斯数学家穆罕默德-穆萨-阿尔-花剌子模)
世界上目前存在几百种编程语言,没有哪一门语言是最好的(尽管你可以数出一些最差的)。每门语言都有自己的长处。
每种编程语言都有基本结构,语法,静态语义,语义。
我们举个栗子:就拿英语来说,它的基本结构是单词,语法则是来描述那些单词放在一起可以组成通顺的句子,静态语义则定义了哪些句子是有意义的,语义则定义了句子的实际含义。
下面是更加详细的解说;
英语的基本结构,比如:
1 名词 noun n. student 学生 | 6 数词 numeral num. three 三 |
2 代词 pronoun pron. you 你 | 7 冠词 article art. a 一个 |
3 形容词 adjective adj. happy 高兴的 | 8 介词 preposition prep. at 在... |
4 副词 adverb adv. quickly 迅速地 | 9 连词 conjunction conj. and 和 |
5 动词 verb v. cut 砍、割 | 10 感叹词 interjection interj. oh 哦 |
英语的语法定义了字符和符号组成句子的正确形式,比如:
<代词><系动词><形容词>的形式在语法上是有效的,而<名词><名词><名词>这样的句子形式在语法上是不对的。
英语的静态语义定义了哪些语法有效的句子是有意义的,比如:
英语中I are big.这个句子符合语法<代词><系动词><形容词>的形式,但是它不是有效的句子,因为are是复数形式,而代词I是单数,这在静态语义上是无效的。
语义为每个语法正确又没有静态语义错误的句子关联一个含义,比如:
在自然语言中许多句子是模棱两可的。比如句子I cannot praise this student too highly可以是一种赞扬也可以是一种批评,而编程语言是被精心设计过的,所以每个语言都只有一种确切的含义(所以不用担心相同的程序执行时会出现不同的结果,这可是编程语言很重要的一个特性呢)。
编写程序会出现的错误
语法错误是最常见的错误,但危害性最小。每种严谨的编程语言都会尽力去检查语法错误,绝不允许用户运行有语法错误的程序。大多数情况下,语言系统都会给出足够明确的提示,指出错误的位置,让用户懂得如何修复错误。
静态语义错误比较复杂,但是一般编程语言会做很多的静态语义检查,但是不一定会捕捉所有的静态语义错误。这些错误如果没有检测出来,程序的运行结果往往是不可预知的。
通常我们不会说出现语义错误。如果一个程序没有语法错误,也没有静态语义错误,那么它就具有某种含义,也就是语义。
初学者遇到的困难
初学者学习一门新的编程语言时,最常遇到的问题是记不住编程语言的关键字与语法结构,很遗憾没有快速记住和掌握它们的捷径,只能靠多练。最常遇到的错误是语法错误,但是语法错误的危害性却是最小的,也是最容易排查的,所以刚开始学习编程的时候不要怕犯错,不要过于追求程序的完美,即便犯错了也是能很快纠正的,犯的错多了自然就掌握啦,总不至于会在同一个地方跌倒一千次吧,相信自己一定能成功地掌握的(๑•̀ㅂ•́)و✧。
[1]python编程导论第二版,John V.Guttag著,陈光欣译
[2]Introduction to Programming in Python : An Interdisciplinary Approach
[3]Celebrating Penn Engineering History: ENIAC,https://www.seas.upenn.edu/about/history-heritage/eniac/,2018.12.29