原来,程序的世界远比我想象的精彩

文中所有的 Pxx 指得是《Erlang程序设计》一书中的页码,书的信息放在文章最后。

人都说无知者无畏,那么这些年来我是不是一直很无畏?而且,还要继续无畏下去?

既然无畏,那也无所谓了,有啥说啥,不禁止评论,但是禁止笑我,违者删ID~~~HOHO~~~~~~~

开门见山的说,最近看了《Erlang程序设计》一书,发现原来程序的世界远比我想象的要精彩。高中的时候开始学了点儿C语言和一点VB,上大学后继续发扬光大(其实是老师说考不过不让毕业 :$),还学了些.NET,了解了点儿PHP和Java,顺便用ASP做了两个破网站,毕业后继续了一年VB之后便从此彻底投身.NET怀抱。由此产生了一个根深蒂固的想法:程序无外乎C系的顺序编程、ASP之类的网页脚本编程和.NET/Java之类号称面向对象的编程,直到去年学到了Perl,才发现,原来脚本不都是ASP/PHP那样的!也幸亏先补了点Perl,因此对PowerShell接受起来很顺理成章。但归根结底,程序无非就是拿各种控制结构去折腾那堆变量。这里面有两个非常重要的概念是下面要说的:变量 & 循环。

直到前些天看到了Erlang,原来变量是不对的,原来循环是不需要的~~~~~faint~~~世界好像突然可以变了?

X归来:
先来看一段《Erlang程序设计》里的一段话:(P12)

在我上初中时,数学老师就告诉我“如果在同一个方程式的不同地方都有X,那么这些X指的都是同一个东西”。解方程就靠它了,比如,我们有X+Y=10和X-Y=2,那么根据这两个方程可得:X为6,Y为4。
但是当我学习第一门程序语言时,却看到老师在黑板上写出这样的式子:
X=X+1
大家都懵了,“这是个无解的等式”。但老师却说,我们错了,我们应该忘了在数学课上学到的东西。X不是一个数学变量,它就像一个鸟笼……

 

怎么样?反正我最初学的时候没有考虑过这个问题,我认为很自然(因此入门快了?),但是现在,不得不回头考虑一下,嗯,数学老师一直在说“数学很重要,你们学计算机的不好好学数学,到时候什么都做不了”,可是现在呢,和数学完全反过来了!还好有Erlang,“在Erlang中,变量恢复了它在数学中的涵义。当把一个变量和值关联在一起时,你其实就做出了一项断言,也就是对一个事实的陈述,这个变量的是多少,仅此而已。”这是什么意思?意思是说:在Erlang的世界里,你的变量一经赋值,变再也无法改变了~~~~~

我们真的需要for(;;){}吗:
真的,在Erlang里没有for循环,有意思吧?我最初看到这个的时候就在想,变量不能变,连个for循环也没有,这帮人怎么写程序啊?然后事实上,Erlang依然很容易的就可以写出很棒的程序,这个很有趣,但是我不知道应该说些什么,所以就此略过:让编程回归数学:模式匹配与高阶函数。

 

PS一些超帅的Erlang特性:

1. 超大数的计算,太BT了,从未见过哪个语言如此强悍(P11)
2. X = 1234,这个式子中,X不是一个变量,而=也不是一个赋值操作符(P12)
3. =表示一个模式匹配操作,之所以进行后X“变”成了1234,原因仅仅是为了“使得语句有效”(P13)

 

上面这些,只是感觉比较有趣的一些东西,而真正强大的异常处理、并发编程和分布编程,我还没搞太明白,不敢写出来,只是觉得这是一种完全不同的编程体验,也是一种非常有趣和强大的方式,有兴趣的可以去看看。

今天,我了解了一点点Erlang,知道了在我以前知道的那些东西之外,还有如此与众不同的东西,那么明天呢?我肯定要继续无畏下去了……

暴力推荐这本书:

PS:卓越网的网址真够恶的,一点儿不像程序员的杰作~~~~

 

posted @ 2008-12-23 23:05 丁学 阅读(...) 评论(...) 编辑 收藏