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