《黑客与画家》读书笔记(四)

1. 摘录

    机器语言

    机器语言和汇编语言的共同问题就是,只能让大多数计算机做一些很简单的事情。编程语言的一个重要特点:代码越多,越难避免bug,也越难发现bug。

    高级语言

    高级语言使程序更简短,更具有可移植性。高级语言的实现方法有编译器和解释器,编译器是先将整个程序全部翻译成机器语言,然后再运行。解释器的作用是实时地将代码解释为相应的机器语言,然后一行行运行。

    开放源码

    开放源码对软件有更大的控制权,可以修改软件、重新编译。开放源码的优势在于所有人都可以参与解决bug。

    语言的战争

    一些黑客只喜欢自己用的语言,反感其他所有的语言。另一些黑客则说所有的语言都一样。事实介于这两个极端之间。语言之间确实有差别,但是很难确定地说明哪—种语言是最好的。

    抽象性

    高级语言比汇编语言更接近人类语言,有利于编程,但如果关注运行速度,那么最好使用接近机器的语言。

    语言的分歧

    有些人认为编程语言应该防止程序员干蠢事,另一些人则认为程序员应该可以用编程语言干一切他们想干的事,前者的代表是Java语言,后者的代表是perl语言。

    面向对象编程

    面向对象编程的优点在于,如果需要修改程序,只需要增加相应的代码,可以不修改程序的其他部分。但反对者认为这种方法往往导致写出性能不佳甚至有副作用的代码。应该使用允许你面向对象编程的语言。至于最后到底用不用则是另外一个问题了。

    设计自己的语言

    一些自己设计的语言内核设计得并非很好,但是却有着无数强大的函数库,可以用来解决特定的问题,这些库本身可能比核心的语言还要重要。自己设计语言使得编程语言多样化,语言之间存在很大区别。

    百年后的编程语言

    编程语言存在一个进化的脉络,思考在整个进化过程中,某一种语言的位置,争取找到编程语言进化的主干,选择那些靠近主干的语言,有利于当前的编程。认清进化的主干就不仅有助于识别现存的优秀语言,还可以把它当作设计语言的指南。

    内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。

    语言聚合

    出现聚合是编程语言进化与生物学进化的主要区别,编程语言之所以可能出现聚合,一个原因是它的概率空间较小,另一个原因是它的突变不是随机的。语言的设计者们总是有意识地借鉴其他语言的设计思想。

    运行速度

    基本可以断定未来计算机的运行速度一定会快得多,这将实质性地改变编程的基本规则。如果其他条件不变,现在被认为运行速度慢的语言将来会有更大的发展空间,但是一些应用程序依然会对运行速度有很高的要求。当运行速度大幅提高时,如何才能充分利用是一个值得深思的问题。

    目前的一些以加快运行速度为目的、却使得编程语言的语义大大复杂的行为,对未来的编程来说也是不明智的。当速度不是最关键的因素,通常不需要考虑硬件层面上的微观管理。

    语言灵活性

    语言设计时,对实现方式少作限制还会使得程序具备更大的灵活性。语言的规格发生变化不仅是无法避免的,也是合理的。

    软件层次

    在应用软件与硬件之间设置很多的软件层,也是未来的发展趋势。即使是应用程序,使用多层形式开发使得程序可重用性就越好。

    并行计算

    由于硬件性能的大幅提升,除了一些特殊的应用程序,很多情况下并行计算可能不再使用。

    语言数量

    由于硬件性能提高,程序员根据使用目的在运行速度和编程便利性之间做出不同的取舍,使得编程语言数目变得更多,但是常用语言可能只有很少几种。

2. 思考

    百年前的生活是什么样?学术一些的人翻翻历史书,偷懒一些的人看看电视剧。但史书是胜利者书写的,古装剧比伦理剧还荒唐,所以尽信书不如无书,相信剧不如无剧。想要知道真相,只有独立思考,认真分辨吧!

    百年后的生活是什么样?很多人也会天马行空的想一想,汽车会飞,大楼会动,资源枯竭,星际移民,会有个来自星星的你,会有个穿越时间的他。思维发散一些,脑洞开大一些,都没关系,未来嘛,一切皆有可能。但是,未来的编程语言是什么样子的,这个......真没想过。

    计算机的历史并不长,我们熟知它的产生,了解它的进展。编程语言也随之进步,从底层到高层,从简单到复杂,林林总总,数目繁多。我选择学习主流的语言作为工具,以辅助目前的研究,为未来的工作做好准备,但未来的语言会是怎样呢?通过这次的阅读,才真正有了些许的概念。

    未来编程语言的一些趋势是很容易想象的,如灵活性强,语言种类多,运行速度快,内核简洁,但是一些变化是不容易看出来的,如软件层次增加,编程语言扁平化趋势,以及大规模并行计算的需求减少。

    当然,这只是笔者的一家之言,究竟如何,还需要认真思考,但是有一点是可以肯定的,摒弃早期编程语言的影响,根据编程语言进化的脉络,发挥想象力,就可以设计出适合编程,效果良好的语言。

发布了536 篇原创文章 · 获赞 156 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/liyazhen2011/article/details/104126063