首页 > 编程语言 > 详细

《黑客与画家》读后感之二: 百年后的编程语言

时间:2014-01-21 00:41:35      阅读:465      评论:0      收藏:0      [点我收藏+]

接前一篇 《黑客与画家》读后感之一

3.  百年后的编程语言

Paul是一个LISP的启蒙家,他认为100年后编程语言进化的主线,应该以少量公理为基础的”最小最简洁核心的语言“。 现有的编程语言中,最具这一特征的莫过于他最喜欢的Lisp了,所以他的主张实际上就是说,Lisp才是100年后编程语言的进化方向。

任何一种编程语言都可以分成两大组成部分:基本运算符的集合(扮演公理的角色)以及除运算符以外的其他部分(原则上,这个部分可以用基本运算符表达出来)。

 我认为,基本运算符是一种语言能否长期存在的最重要因素。其他因素都不是决定性的。这有点像买房子的时候你应该先考虑地理位置。别的地方将来出问题都有办法弥补,但是地理位置是没法变的。
 慎重选择公理还不够,还必须控制它的规模。数学家总是觉得公理越少越好,我觉得他们说到了点子上。
你仔细审视一种语言的内核,考虑哪些部分可以被摒弃,这至少也是一种很有用的训练。在长期的职业生涯中,我发现冗余的代码会导致更多冗余的代码,不仅软件如此,而且像我这样性格懒散的人,我发现在床底下和房间的角落里这个命题也成立,一件垃圾会产生更多的垃圾。
我的判断是,那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。“

回顾一下我们中学学习的欧式几何, 就是先定义一些点,线,面这些基本概念,然后再定义5条公理, 就构成整个欧式几何的内核,这个内核确实够小的, 但是其他的定理和几何命题都可以由此推导出来, 反应出这个内核非常强大而生命力旺盛。

 

LISP是一种特殊的编程语言,因为它原本不是作为编程语言,而是作为一种数学计算模型来设计的,麦卡锡设计了一种以Lambda 演算为基础的“图灵完全”的计算模型,并没有当做计算机语言来使用,知道他的一个研究生在IBM 的机器上实现了描述计算模型的万能函数eval(求值函数), LISP才作为一种编程语言正式诞生。

 

Paul 推崇LISP有一个非常重要的原因,就是LISP强大的元编程能力, LISP自身扮演了公理的角色, 程序员可以在其上定义,推导出其他定理和命题。 这就意味着当你用LISP编程的时候,可以先针对一个问题域用LISP定义一个Domain Specific Language (DSL)  , 然后用这个DSL 进行编程, 效率当然就非常非常的高了。 了解Ruby on Rail 的同学就明白这一点, RoR 在Web编程领域非常成功, 一个重要的原因就是它其实是面向Web 编程的DSL 。 

再举个例子来说明LISP在元编程领域的强大, Common Lisp 第一版中没有包含面向对象的功能, 但是在第二版中默认包含了一个叫做Common Lisp Object system 的东东, 这个面向对象的功能实现,是通过LISP的宏等手段,仅有LISP自身完成的,在语言自身和编译器没有进行增强的情况下,就可以定义出面向对象的功能, LISP元编程能力强大的令人发指。 

这也从侧面反映了Paul 所说的最小,最简洁语言的强大能力。

联想到《Unix编程艺术》中反复提到的K.I.S.S 原则,和最小,最简洁语言有异曲同工之妙。

 

Ruby 的作者松本宏行也对百年后的编程语言做了预测, 他的观点是未来的编程语言会具备更高的抽象度,程序员编程时主要描述What , 而不关心How 这种具体的实现, 这点我非常赞同, 人类的大脑能同时容纳概念数是有限的,就是7加减2 , 超过这个范围, 必须像电脑那样做内存,硬盘置换, 所以程序员很难同时处理太多的细节,否则非常容易出错。

程序语言的抽象度确实非常重要, 它能把程序员从思维的细节谜团中解放出来, 专注到问题的本身。 要不然, 程序员只好充当抽象的角色,用各种各样的设计模式,封装,分层等武器来战斗,非常辛苦。

《黑客与画家》读后感之二: 百年后的编程语言

原文:http://blog.csdn.net/nylx/article/details/18370637

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!