技术 观点

十分钟学一门编程语言

Posted on 2017-06-02,7 min read

time:2017-06-02

author:wolf3c

字数:2.2K


这当然不是在骗人,因为我没有说「十分钟精通 X 」,我只是说学。

对于很多学习过编程语言的人,尤其学了 PHP、Java、C++ 等语言的,一定不相信这句鬼话,他们忍着吐血的痛苦学了无数个日夜,到头来还是 bug 满天飞,别说十分钟,就是十小时也不可能。

所以,我需要先详细定义一下我所谓的十分钟能学到什么效果。

我这里说的十分钟,是让你在十分钟能看明白这个语言的代码,即使有很多细节不懂,但你一看就明白这是个啥,是要干嘛,我应该从哪里入手弄明白它。

why

我为什么要总结出这套方法呢?

  1. 炫技。我自认为接触过比较多的语言,汇编、VB、C、Java、Shell、Python、HTML、CSS、JavaScript、Scheme、Common Lisp,虽然现在忘了很多,但我以前确实都接触过。
  2. 总结方法。这套东西在我脑子里有一个模糊的印象,但都是隐性知识,我需要把它显性化, 所以考虑把它写出来。
  3. 做铁证。我自己想在写出来后,再去读一些《七天七门语言》(好像是这个名字)类的书,看看自己的想法和其他大牛有什么出入,如果不写出来可能会忽略很多细节,到头来自认为和大牛想的一样,搞得自己洋洋得意。
  4. 测试自己的想法。我想用自己的方法再去学一门语言,可以是自己已经忘记的,也可以是自己感兴趣的,再测试一下自己总结出来的这套方法效果是否如预期。
  5. 这套方法可以让人语言初学者事半功万,不能私藏。很多时候,很多人在学习编程语言的时候一头雾水,我一直希望找到一个可以让初学者在学习语言过程中,如果看到不懂的东西,虽然他们不能马上懂,但明白这个东西属于什么,该从什么地方入手去弄明白它,这点很重要,因为我在以前学习语言的时候就因为没有做到这一点而一通乱撞而不得其法,最后花费了时间还不能让自己能力提升。我认为自己找的的这个十分钟方法可以达到这个目标。

下面,直接开始说我的「十分钟学习一门编程语言」大法。

大法

首先,我们要知道,一个编程语言的主要组成部分包括:

  1. 数据单元。
  2. 操作单元。
  3. 抽象方式。

「十分钟学习一门编程语言」大法就是要求你再学习一门编程语言时,先用十分钟弄明白一个语言的以上三部分。

数据单元

数据单元就是指一个编程语言中数据都有哪几种类型,如何表示,如何用。

在编程语言中,数据的类型一般有整型、浮点型、布尔型、字符、字符串、数组、字典、枚举等,你需要知道你学习的语言有哪些数据类型。

然后你需要明白这些数据如何表示,或者说,你如何定义一个整形变量,如何定义一个数组。

最后,你要知道这些数据的变量如何用。这点在很多语言中差不多。

操作单元

操作单元就是处理数据的方式,这里说的是最基本的方式,比如条件语句、循环语句、赋值、计算、比较等。

你需要知道他们是如何表示的,在很多类 C 语法的语言中,这些东西都很相近,但是其他语言就不是了,所以你需要注意这点。

抽象方式

所有的编程语言一定要有一种抽象方式,只有这样,这个语言才能够组织成一个越来越大型的工程。

抽象方式分为对数据的抽象和对操作的抽象。

对数据的抽象,举例来说,如果我需要用一组数据表示一个人,可以是:

{
  name: String,
  borthday: Date,
  job: String,
  marry: boolean,
  children: Array
}

这样,任何一个人都可以用这么一组数据抽象,就比如你说 Tom,你说 Tom,其他人就知道你说的这个人名字是什么,什么时候出生,工作是什么,有没有结婚,孩子都是谁。

C 语言用结构体(struct),JavaScript 用对象,Lisp 用 List……

对操作的抽象,就是把很多操作抽象出来,还是举一个例子:

function clone(people) {
  let newPeople = new People();
  newPeople.name = people.name;
  newPeople.borthday = people.borthday;
  newPeople.job = people.job;
  newPeople.marry = people.marry;
  newPeople.children = people.children;
  
  return newPeople;
}

然后,我们使用let Tom2 = clone(Tom) 就可以复制一个 Tom 出来,我们把克隆一个人的复杂事情抽象成 clone() ,然后,我们要复制谁,只需要clone() 一下就好了,而不是需要些一大堆东西来复制这个人的姓名、生日、工作等。

C 语言用函数,Java 用对象……

以上就是「十分钟学习一门编程语言」大法的全部内容。

开始吧

千万不要急着买一本八百页的某编程语言官方权威指南,你永远不会读的。

去找找那种简单的小册子或小文章,找到我说的这三类东西,快速弄明白它们。相信你十分钟就可以搞定。「十分钟学习一门编程语言」大法的目标就已经达到了。

(如果你十分钟没能搞定,那就再花十分钟。)

下一步

如果你知道了以上三种东西,下一步,建议你去读读其他人的代码,看看他们如何运用这三样东西,看不懂的地方就去查资料,这个时候就应该拿出你的各种大部头,不过,这个时候你看那本书,你会发现,整整一本书,不过就是在讲述这三种东西罢了。

当你看了一些人的代码后,你会越来越有信心,你会有一种想要写点什么的冲动,那么,不用再等待,找一个小项目练习一下吧。通常你会碰到很多问题,每个人都一样,多去 Google 就好。最主要的是,在你碰无法解决的问题时,先考虑一下,你现在需要对以上三类东西中哪一部分发力,免得自己走错方向。

拓展

很多写代码的人到后来成了半个哲学家,好像世界就是一个大的电脑一样,都可以用计算机知识套。

「十分钟学习一门编程语言」大法的原理也有类似功效。

拿一家建筑公司举例,数据单元就是砖、瓦、水泥、沙子等物料,操作单元就是一个个拥有各种技能的工人和他们的生产工具,他们把这些物料组合成地基、墙面、地面等,抽象方式就是金字塔状组织结构,有些小包工头拉一帮工人负责搭架子,有些小包工头拉一帮人负责粉墙装修;而一个更大的包工头可以负责一两栋楼,他们主要是管理一帮小包工头;再大的包工头则负责一两片区域,为了管理,这些大的包工头可能会成立一家大的建筑公司来运作。

不只是公司,小到细胞,大到人类社会,都可以用这种方式解构。

免责

方法就是这么方法,用不用由你。如果用了,没成功或走火入魔都不管我事。

Let's try. Just for fun.

Coding, not war.


请在这里留言讨论

<<< 回到首页 <<<

下一篇: 看火影:迈特凯→