这些实际问题都是跟着写实际的代码,解决手头的问题,天然而然带出来的,而不是一开首就抱着说话手册看得仔细心细。因为控制了说话特点的人都知道,本身须要的特点,在任何说话琅绫擎必定有对应的表达方法。如不雅没有直接的方法表达,那么必定有某种“绕过方法”。如不雅有直接的表达方法,那么它只是语法稍微有所不合罢了。所以,他是带着问题找特点,就像查字典一样,而不是被吞没于大年夜部头的手册琅绫擎,昏昏欲睡一个月才开端写代码。
控制了通用的说话特点,剩下的就只剩某些说话“特有”的特点了。研究句言的人都知道,要设计出新的,好的,无害的特点,是异常艰苦的。所以一般说来,一种好的说话,它所特有的新特点,毕竟不会跨越一两种。如不雅有个说话号称本身有跨越 5 种新特点,那你就得当心了,因为它们带来的和可能不是优势,而是灾害!
同样的事理,最好的说话研究者,往往不是某种说话的设计者,而是某种关键说话特点的设计者(或者支撑者)。举个例子,有名的计算机科学家 Dijkstra 就是“递归”的强烈支撑者。如今的说话琅绫擎都有递归,然而你可能不知道,早期的法度榜样说话是不支撑递归的。直到 Dijkstra 强烈请求 Algol 60 委员会参加对递归的支撑,这个局面才改变了。Tony Hoare 也是说话特点设计者。他设计了几个重要的说话特点,却没有设计过任何说话。别的大年夜家不要忘了,有个说话专家叫王垠,他是早期 union type 的支撑者和实现者,也是 checked exception 特点的支撑者,他在本身的博文里指出了 checked exception 和 union type 之间的关系 :P
合理的入门说话
所以初学者要想事半功倍,就应当大年夜一种“合理”的,没有明显严重问题的说话出发,控制最关键的说话特点,然后由此把这些概念应用到其它说话。哪些是合理的入门说话呢?我小我认为这些说话都可以用来入门:
- Scheme
- C
- Java
- Python
- JavaScript
那么比拟之下,我不推荐用哪些说话入门呢?
- Shell
- PowerShell
- AWK
- Perl
- PHP
- Basic
- Go
总的说来,你不该该应用所谓“脚本说话”作为入门说话,特别是那些源竽暌冠早期 Unix 体系的脚本说话对象。PowerShell 固然比 Unix 的 Shell 有所进步,然而它仍然没有摆脱脚本说话的根本问题——他们的设计者不知道他们本身在干什么 :P
采取脚本说话学编程,一个很严重的问题就是使灯揭捉?习者抓不住关键。脚本说话往往把一些体系对象性质的器械(比如正则表达式,Web 概念)参加到语法琅绫擎,导致初学者为它们浪费太多时光,却没有懂得编程最关键的概念:变量,函数,递归,类型……
不推荐 Go 说话的原因类似,固然 Go 说话不算脚本说话,然而他的设计者显然不眉僮霸己在干什么。所以应用 Go 说话来学编程,你不克不及专注于最关键,最好的说话特点。
控制关键说话特点,忽视次要特点
为了达到我之前提到的融合贯通,一通百通的效不雅,初学者应当专注于说话琅绫擎最关键的特点,而不是被次要的特点分心。
可是殊不知,这种输出输入操作其实根本不算是说话的一部分,并且对于控制编程的核心概念来说,都是次要的。有些人的 Java 课程进行了好几个礼拜,居然还在安排各类 printf 的功课。学生写出几百行的 printf,却不睬解变量和函数是什么,甚至连算术语句和轮回语句都不知道怎么竽暌姑!这就是为什么很多初学者感到编程很难,我连 %d,%f,%.2f 的含义都记不住,还怎么学编程!
然而这些野鸡大年夜学的“传授”头衔是如斯的洗脑,以至于被他们教过的学生(比如我女同伙)到我这里就教,居然骂我净教一些没用的器械,学了连 printf 的功课都没法完成 :P 你别跟我讲 for 轮回,函数什么的了…… 可弗成以等几个月,等我背熟了 printf 的用法再学那些啊?
所以你就发明一旦被差劲的师长教师教过,这个法度榜样员根本就毁了。就算碰到?锬师长教师,他们也很难改┞俘过来。
当然这是一个夸大的例子,因为 printf 根本不算是说话特点,但这个例子大年夜同样的角度说清楚明了次要肤浅的说话特点带来的问题。
这里举一些次要说话特点的例子:
- C 说话的语句块,如不雅琅绫擎只有一条语句,可以不打花括号。
- Go 说话的函数参数类型如不雅一样可以归并在一路写,比如 func foo(s string, x, y, z int, c bool) { ... }
- Perl 把正则表达式作为说话的一种特别语法
- JavaScript 语句可以在某些时刻省略句尾的分号
- Haskell 和 ML 等说话的 currying
本身着手实现说话特点
在根本学会了各类说话特点,能用它们啻写代码之后,下一步的进阶就是去实现它们。只有实现了各类说话特点,你才能完全地拥有它们,成为它们的主人。不然你就只是它们的应用者,你会被说话的设计者牵着鼻子走。
有个大年夜师说得好,完全懂得一种说话最好的办法就是本身着手实现它,也就是本身写一个说冥器来实现它的语义。但我认为这句话应当稍微修改一下:完全懂得一种“说话特点”最好的办法就是本身亲自实现它。
留意我在这里把“说话”改为了“说话特点”。你并不须要实现全部说话来达到这个目标,因为我们最终应用的是说话特点。只要你本身实现了一种说话特点,你就能懂得这个特点在任何说话里的实现方法和用法。
很多人在乎本身或者别人是否“会”某种说话,对“创造”了某种说话的人倍加崇拜,为各类说话的孰优孰劣争得面红耳赤。这些问题对于我来说都是不存在的。固然我写文┞仿批驳过不少说话的缺点,在实际工作中我却很少跟人争辩这些。如不雅有其它人在我身边争辩,我甚至会戴上耳机,都懒得听他们说什么 ;) 为什么呢?我发明归根结底的原因,是因为我看重的是“说话特点”,而不是全部的“说话”。我能用任何说话写出不错的代码,就算再糟糕的说话也差不了若干。
推荐阅读
Web 开辟是比较操心的,须要控制很多很多的器械,特别是大年夜事前端开辟的同伙,须要通十行才行。今天,本文向初学者介绍一些 Web 开辟中的根本概念和用到的技巧,大年夜A到Z总共26项,>>>详细阅读
本文标题:王垠:如何掌握所有的程序语言
地址:http://www.17bianji.com/lsqh/36130.html
1/2 1