I如何掌握程序语言.doc
文本预览下载声明
摘要:这篇文章曾经叫做《初学者程序语言的选择》,但是后来我发现,这里给出的看法其实不只是给初学者看的,甚至可能会让初学者看不懂。而就我在 Google 实习的时候的观察看来,很多写了几十年程序的资深程序员,可能也没有明白这里指出的道理。所以我把题目改了一下,并且加入了新的内容,希望对新手和老手都有所帮助。
学习程序语言是每个程序员的必经之路。可是这个世界上有太多的程序语言,每一种都号称具有最新的“特性”。所以程序员的苦恼就在于总是需要学习各种稀奇古怪的语言,而且必须紧跟“潮流”,否则就怕被时代所淘汰。
作为一个程序语言的研究者,我深深的知道这种心理产生的根源。程序语言里面其实有着非常简单,永恒不变的原理。看到了它们,就可以一劳永逸的掌握所有的程序语言,而不是只见树木不见森林。我想写一本书,试图用最简单的方式来解释程序语言(以至于计算机科学)的根本性原理,从而让人可以在非常短的时间内掌握所有程序语言的精髓。但是在还没有完成之前,我想先提出一些建议和参考书。
对程序语言的各种误解
学习程序语言的人,经常会出现以下几种心理,以至于他们会觉得有学不完的东西,或者走上错误的道路。以下我把这些心理简要分析一下,希望可以消除一些疑惑。
1. ?追求“新语言”。
基本的哲学告诉我们,新出现的事物并不一定是“新事物”,它们有可能是历史的倒退。事实证明,新出现的语言,很多还不如早就存在的。正视这个事实吧,现代语言的多少“新概念”不存在于最古老的一些语言里呢?程序语言就像商品,每一家其实都是在打广告。而绝大多数的设计,包括某些最“艰深”最“理论”的语言里面的概念,都可能是肤浅而短命的。如果你看不透这些东西的设计, 就会被它们蒙蔽住。过度的热情和过多的宣传,往往意味着肤浅。很多语言设计者其实并不真的懂得程序语言设计的原理,所以常常在设计中重复的犯前人犯过的错误。但是为了推销自己的语言和系统,他们必须夸夸其谈,进行宗教式的宣传。
2. ?“存在即是合理”。
记得某名人说过:“不能带来新的思维方式的语言,是没有必要存在的。”他说的是相当正确的。世界上有这么多的语言,有哪些带来了新的思维方式呢?其实少之又少。绝大部分的语言给世界带来的不过是混乱。有人可能反驳说:“你怎么能说 A 语言没必要存在?我要用的那个库 L,别的语言不支持,只能用 A。”但是注意,他说的是存在的“必要性”。
如果你把存在的“事实”作为存在的“必要性”,那就逻辑错乱了。就像如果二战时我们没能打败希特勒,现在都做了他的奴隶,然后你就说:“希特勒应该存在,因为他养活了我们。”显然这个逻辑有问题,因为如果历史走了另外一条路(即希特勒不存在),我们会过上自由幸福的生活,所以希特勒不应该存在。对比一个东西存在与不存在的两种可能的后果,然后做出判断,这才是正确的逻辑。按照这样的推理,如果设计糟糕的 A 语言不存在,那么设计更好的 B 语言很有可能就会得到更多的支持,从而实现甚至超越 L 库的功能。
3. ?追求“新特性”。
程序语言的设计者总是喜欢“发明”新的名词,喜欢炒作。普通程序员往往看不到,大部分这些“新概念”其实徒有高深而时髦的外表,却没有实质的内涵。常常是刚学会一个语言 A,又来了另一个语言 B,说它有一个叫 XYZ 的新特性。于是你又开始学习 B,如此继续。在内行人看来, 这些所谓的“新特性”,绝大部分都是新瓶装老酒。很多人写论文喜欢起这样的标题:《XYZ:A Novel Method for ...》。这造成了概念的爆炸,却没有实质的进步。可以说这是计算机科学最致命的缺点。
4. ?追求“小窍门”。
很多编程书喜欢卖弄一些小窍门,让程序显得“短小”。比如它们会跟你讲 (i++) - (++i) 应该得到什么结果;或者追究运算符的优先级,说这样可以少打括号;要不就是告诉你“if 后面如果只有一行代码就可以不加花括号”,等等。殊不知这些小窍门,其实大部分都是程序语言设计的败笔或者历史遗留问题。它们带来的不是清晰的思路,而是是逻辑的混乱和认知的负担。比如 C 语言的 ++ 运算符,它的出现是因为 C 语言设计者们当初用的计算机内存小的可怜,而 i++ 显然比 i=i+1 少 2 个字符,所以他们觉得可以节省一些空间。现在我们再也不缺那点内存,可是 ++ 运算符带来的混乱和迷惑,却流传了下来。现在最新的一些语言,也喜欢耍这种语法上的小把戏。如果你追求这些小窍门,往往就抓不住精髓。
5. ?针对“专门领域”。
很多语言没有新的东西,为了占据一方土地,就号称自己适合某种特定的任务,比如文本处理,数据库查询,Web编程,游戏设计,并行计算,或者别的什么专门的领域。但是我们真的需要不同的语言来干这些事情吗?其实绝大部分这些事情都能用同一种通
显示全部