本书试图提炼出成就一名专业Erlang程序员所需的最关键的知识,借此我们才能让这门高效的语言发挥出其最大的潜力。Erlang/OTP功能强大,但直到目前为止,对初学者来说,通过研读OTP文档来自学OTP框架仍然是件令人望而生畏的事情(这些文档探究了很多细节,却缺乏全局观)。 本书三位作者长期从事Erlang相关工作,但各自的发展轨迹却很不一样。 Martin:“我是在自己第一份‘真正’的工作中接触到Erlang的。此前我一直从事C和C++开发,也有意思得很。我的第一任老板Hal Snyder甚至在20世纪90年代便对多线程深恶痛绝,后来邂逅了Erlang。我那时还只是个实习生,于是他给了我一个要用Erlang完成的项目。原因嘛,嗯,无非是我的工钱低,即便我搞砸了,公司在这桩买卖上的损失也就不过70美元。最后我并没搞砸,我自己写了一个1000行的监督进程,代码不好看,因为那时候我压根儿不知道OTP是什么东西,手边当然也不会有相关的书。在这个过程中,我爱上了这种‘靠谱’的开发后端系统的方法,也爱上了Erlang。Erlang给了我洞悉未来的机会:我所写的复杂分布式系统,所用的高级算法,都是我那些使唤着命令式语言的同事们所梦寐以求的,不花上两年工夫码上一百万行代码他们压根儿实现不出来。读了数千页文档,写了数万行代码之后,我依然钟情于它。一路走来,我遇到了许多杰出的人物,能与其中的两位共同撰写本书令我激动不已。2004年我在ACM会议上发言时遇到了Richard,四年后我又遇到了Eric,并和他一同创建了Erlware——一个仍在蓬勃发展中的项目。多年来,Erlang在我的职业生涯和个人生活中一直扮演着重要的角色,今后也仍会如此。” Eric:“我研究Erlang完全是无心插柳。我曾想写一款大规模多人游戏。然而我明白,仅凭一人之力,即便是才华横溢,也干不完所有图形处理的活儿。于是我决定集中精力主攻游戏逻辑部分,觉得借助于合适的工具和语言我应该能解决这部分问题。在我的设计中,我喜欢在游戏中设立多个代理对象,每个代理对象都能随时间自主学习并独立而并发地行动。那时我能想到的唯一可行的办法,就是把每个代理对象都建模为某种并发的东西,但当时我还不知道这个东西是什么。我所掌握的语言没法让一个开发者单枪匹马拿下这么一款游戏。于是,我开始考察各种语言,前前后后一共花了大概五年时间,作了一些深入的研究。我很早就见识过Erlang,虽然很喜欢它的并发特性,但实在受不了它的语法和函数式特质。直到考察了很多编程语言之后,我才重新开始欣赏Erlang并用它编写代码。那款游戏我一直也没能写成,但我确信选择Erlang没有错,经过深入的研究和剖析,我发现这门语言在许多方面都大有用武之地。这大概是2000年或2001年的事情了。后续几年间,我又自学了OTP。后来,在2005的时候,我在Amazon.com引入了Erlang,发布了Sinan的第一版,还认识了Martin Logan,并和他一起创办了Erlware。2008年,我搬到了芝加哥,开始写书并尽心打理Erlware项目。” Richard:“我大概是在1995年前后接触Erlang的,那时我正在乌普萨拉大学为计算机科学硕士论文选题。这引导我后来成为高性能Erlang研究组的一名博士研究生,就Erlang编译器和运行时系统做了若干年的研究。我在瑞典和美国的会议上结识了Martin Logan和Eric Merritt,他们对Erlang的热情令我印象深刻,尽管那时候Erlang还是一门鲜为人知的语言——尤其是在美国。在攻读博士学位期间,我搞了几个业余项目,其中语法工具库和EDoc应用都源自我在编译器方面的研究成果,而EUnit原本是为了检查我的学生们的并发编程作业是否符合规范而设计的。走出学术界之后,我做了几年和Erlang无关的工作,基本上都是在用Python、Ruby和C++写程序。不过最近,我加盟了瑞典最成功的一家创业公司,再次全职投入Erlang,目前正投身于高速发展的高可用性支付系统领域。” 我们三人努力从共同的经验中提炼出尽可能多的内容,以便让你在迈向大师级Erlang程序员的道路上少走弯路;我们也希望能借助本书,最终让OTP框架成为每个Erlang程序员——而不是少数能将手册翻烂的人——都能掌握的东西。