这次我真的不是标题党
很多年前当我还在学校的时候,就有人和我说那些编程高手能非常快得学习新的编程语言。当时的感觉是哇,好牛逼。要是哪天我也能做到这样就好了。但是自己工作了七八年后,基本上还是在使用当年学习的c语言。除了平时用不到,自己懒之外,还有一个不太好意思说的原因--自己心里也没底。人可能就是这样的,对自己没有做过的事情,心中不免有点抵触甚至是惧怕。所以我一直没有尝试去扩展更多的编程语言的学习。
不过这件事情最近有了点变化。因为最近我一直在思考怎么样算入门编程,怎么样快速掌握一门编程语言的基础,究竟有哪些点是切换到新的编程语言时需要的最少必要知识。
所以最近我在公众号中连续发布了几篇和“套路”相关的文章。
从最初形而上的:你与高手间差了点“套路”
到有点接地气的:编程的世界充满套路
接着连续发了三篇让大家估计有点摸不着头脑的入门套路:
c语言入门套路
python入门套路
js入门套路
绕了这么一大圈,谜底将在今天揭晓。在重新学习了python, javascript之后,并运用套路的思维,我发现
在已有的编程概念基础上,使用如下的套路只要一天就可以入门一门新的编程语言
PS: 当然只是入门。如果你以为一天就能成为高手,抱歉我不知道,至少现在我还没有发掘出这个秘诀。
那究竟是怎么做呢?在继续往下面看之前,请问你有没有研究过我上面三篇文章总结的入门套路?有没有发现这些套路的规律?能不能猜测一下我今天要讲的套路?
再如果,你阅读过我的学编程,究竟学的是什么?,能不能想到今天套路背后蕴含的是哪个思想?
好了,不卖关子了,让我细细道来。
运行环境
这是我认为我的套路中最接地气,也是大部分小白以及初入门朋友迫切想要学习的内容。
计算机科学虽然可以复杂到能战胜柯洁,但是总体而言也算是一门实践学科。就好像我一直说的例子,最简单的一个程序只有这么几行代码。
作为一个成年人,虽然可以脑补出最后的运行结果。但是这种效果还是比不上让一个初学者亲自输入代码,编译,并执行后得到正确结果时对他大脑的刺激。 你可能不知道,哪怕是现在的我,当我编译运行后看到复杂代码执行的结果和我自己想象的结果一样时会还是很兴奋。一般此时我会脱口而出:“艹,牛逼!”。
根据我的经验,网络上多的是各种语言的语法描述,告诉你要怎么写,少的是真实的告诉你怎么把你写好的代码运行起来。通常我们可能会看到某些点滴的描述,作为有经验的人或许能够把他们拼凑起来,但是对于小白那简直就是灾难。天下代码一大抄,但是对于小白抄完了也不知道怎么跑。
我不知道有多少人会因为没有办法执行自己的代码而放弃学习编程。
不仅是小白,哪怕对我这种老司机也会遇到这样的困难。在刚开始接触js的时候连简单的console.log()也不清楚在哪里观察结果。因为js通常使用在网页前端的交互,但是在页面上我怎么观察输出?怎么调取某些函数?怎么观察变量的改变?这种感觉就像是你明明知道某个东西放在哪了,但是却怎么也找不到。
之所以这部分的资料很少,我认为有两个原因:
- 对知道的人来讲,这不是秘密
- 太过细碎,没有人乐意去总结
从这个层面看,编程也是一门手艺活。
所以最好的方法是跟着前人把这些步骤走一遍。找个这方面的老手,也还不一定是要高手,让他带着你走,你模仿一遍就自然知道了。
语言语法
很多学习语言的朋友都讨厌学习语言语法,当然了其实我以前也讨厌的。觉得这种东西枯燥乏味,而且翻来翻去也没什么花样。但是我现在对此有了改变,因为我们越是躲避的东西,到时候越是会拖住我们。
好消息是:
高级语言的语法基本大同小异
我基本列举一些众多高级语言通用的语法:
- 循环语句
- 判断语句
- 类的继承
- 函数定义
- 构造函数
- 析构函数
所以当我们掌握了一门编程语言之后,想要入门新语言的语法,重点就是把这门新语言的语法特殊点记录下来。这么看来,对语法的学习其实花不了多少时间。
当然,这里我要补充一下对一些语言中神奇语法的学习。
比如说python中的lambda,ruby自动扩充函数名,js的语法糖,这些神奇的语法怎么办?(听不懂?没事儿,听不懂就跳到下面一节吧~)
先不学,用到的时候再去突破
首先不用这些神奇的语法一样能够实现基本的功能。这些神奇的语法出现更多的是为了锦上添花,让程序代码更少,书写更符合人类的习惯,或者是实现一些原本不容易实现的功能。
不过我们要注意的是,在入门阶段我们的目标是“入门”,而不是玩出高级花样。这些特殊的语法确实在实践中有它的优点和好玩的地方,然而不懂这些高级语法并不影响入门。如果我们一味钻研这些语法,而且自己没有一定计算机基础,又没有比较资深的人士讲解,往往会使我们陷入这些精妙语法的细节,而忽略了最基本的执行原理。
尤其对于初学者来说,可以去领略一下这些语法的优美之处,但是重点还是要放在基本概念之上。
数据类型
这部分的内容我如何强调都不为过,用一句洋气的英文:
Last but not least
甚至我最近领悟到了一个道理
数据是编程活动的核心
对数据的理解讲贯穿于一个软件工程师生命的各个环节,哪怕他已经是一个经验丰富的高级工程师,他的关键工作依然是对数据的空间维度和时间维度进行处理。对于这个道理,我想我会用另一篇文章进行阐述。
本文继续回到入门的环节,所以这里只涉及语言自带的数据类型,不包含各种库衍生的数据类型,更不包含应对复杂现实世界而创造的数据类型。因为不论是多么复杂的数据类型,都是在其基本数据类型上变化而来。
对基本数据类型的理解,是入门的标志,也是深入的基础
有的语言的基本数据类型非常简单,而有的则稍微复杂一些。其中最为常见的类型有
- 整数型
- 字符型
- 列表
- 元组
- 字典
所以当你能总结出这几个类型的使用方式,也就基本入门了这个语言数据类型了。在这个基础上,就可以编写简单的程序了。
这一切的基础
一天入门编程语言的套路已经讲完了,但是真的做到这一切都需要一个前提
懂得计算机运行原理
其实这一切都归结到两个计算机领域的经典概念,那就是:
- 图灵机
- 冯诺依曼架构
在学校的时候一直听说这两个概念,但是从来都没有觉得这两个经典概念有多少重要,总是觉得不就是这样么?还要说么?
但是当自己开始认真思考入门编程的教学,思考究竟什么是编程学习的核心,什么样的概念是计算机领域的元知识,学习完了之后大家能够获得自我成长的造血功能,而不是每次都需要从头学起,那么计算机的运行原理则是编程入门学习中最重要的元知识了。
前方是广告
前方是广告
前方是广告
基于这样的思考,我将推出了“通过c理解编程原理”的课程,目标就是希望帮助大家建立编程领域最核心的元知识。
敬请期待