《Implementing QuantLib》译后记

就在几天以前,经历了一年时间断断续续的坚持,《Implementing QuantLib》的初步翻译工做告一段落。撰写此文做为总结和记念。算法

《Implementing QuantLib》译后记

初心

我还在读研究生的时候,为了实践某些计算金融学的课题自学了 C++ 语言(当时 C++ 大概是“老派 quant”最为推崇的工具性语言,如今“新派 quant”可能都转向 python 了),进而接触到当时就已经久负盛名的 QuantLib。编程

刚开始使用 QuantLib 时就遇到了 Luigi 在书中指出的问题:缺少相应文档的弊端开始显示,我对这个库的总体架构一无所知,函数之间的调用关系似懂非懂,类之间的继承关系不清不楚,更棘手的是当时没有遇到任何中英文文献帮助我解决上述问题。设计模式

后来事情出现了好转,我读到了名为《QuantLib 实现》的翻译文章(对不起,我已经记不起译者的名字了),并了解到 Luigi 正在撰写相关文档描述 QuantLib 的总体设计和实现细节,尽管当时文档的内容还很是有限。markdown

直到 2013 年,我得知 Luigi 开始在其网站以博客的形式连载这些文档。当时我曾计划,等 Luigi 差很少写完,我就开始着手翻译工做,由于我主观上觉察到先前的那位译者彷佛中断了翻译计划。架构

可是我高估了意大利人写书的效率,Luigi 的写做进度很是缓慢。随后互联网政策发生变化,发布连载的网站一度须要“***”才能登陆,不幸的是当时我还没掌握这门技艺:)框架

一两年以后我习得秘技,从新登录网站,发现 Luigi 的写做转移到了 leanpub 上。固然,仍是没写完。接着就是漫长的等待。函数

瞎忙

在没有着手翻译的时间里,我也没闲着,瞎忙了不少事情。工具

我曾经试图将一个有点年头的 C++ 矩阵计算库改写成全模板实现的。对,就像 Eigen 那样的。为此,我阅读了一些有关模板技术的书和博客,好比《C++ 模板全览》和《模板元编程》。为了更好地设计,我阅读了设计模式相关的书,好比 GoF 的《设计模式》和《Head First 设计模式》。为了更好更好地设计,我阅读了领域驱动设计相关的书,好比《领域驱动设计》和《实现领域驱动设计》,这时候我发现设计的瓶颈在于领域知识的缺少。为了更好更好更好地设计,我复习了一遍“矩阵计算”的知识。学习

瞎忙的过程当中我深感提升效率的重要性,为此我刻意寻找和掌握可以提升效率的工具。为了编辑数学公式,我掌握了初步的 latex 语法;为了提升文字编辑的效率,我成为了 markdown 的拥趸;为了加速学习和复习的速度,我开始使用思惟导图,并尝试了“思惟导图驱动”的学习技巧,有点儿成功。

再后来我放弃了,我发现本身陷入了哲学家窘境:在不断在追求更抽象、更本质的问题的过程当中迷失了最初的问题。

在那以后,我告别了 C++,转而投向 python 和 R。用更轻便的工具解决更实际的问题。不过依然试图经过 swig 和老情人保持着若即若离的关系。

值得庆幸的是,我在陷入哲学家窘境时收获的经验和知识意外地帮助了我理解 QuantLib 的设计细节和宏观架构。固然,掌握的提升效率的小技能也大有裨益。

收获

2017 年 8 月份,《Implementing QuantLib》的第一个完成版本发布,个人工做在这以后的 11 月份开始。历时一年多的翻译工做,多少有些收获。

最直接的,我获得了一个约十三万字(不包括代码,仅汉字)的中译本手稿。顺便说一句,我主观上感受本身的行文受到了影响,也许是翻译时要揣摩原做者语气的关系,我本身的语言习惯在向原做者靠拢,要知道 Luigi 很是喜欢在描述专业内容时插科打诨、引经据典。不过,我更想说的是那些比较抽象的收获。

  • 成为领域专家

要写出公认专业的算法和软件,首先要成为特定领域的专家,而不是相反,那样的话容易陷入哲学家窘境。因此,首要的是去学习,从现成的工具着手,从最简单的问题着手,先成为一个专家再说。

  • 设计模式与知识结构

若是要成功的应用设计模式描述领域问题,那么设计模式所表现出的结构应该和这一领域的知识结构相契合。

举个具体的例子,QuantLib 的核心目的是为一系列金融工具的订价提供一个统一的框架,那么,什么是“订价”?依个人理解,所谓订价就是计算将来预期现金流的贴现值,关键词有这么几个:计算、预期、现金流、贴现。

这几个关键词正好描述了订价问题的知识结构,计算的方式能够分为解析解法、数值解法和随机模拟解法,等等;预期能够指风险中性测度下的指望,或是当前期限结构隐含的均衡结果,等等;现金流能够是固定的(固息债)也能够是随机的(浮息债和期权);贴现则整个就是期限结构选择的问题。每个关键词均可以成为一个庞杂的研究课题。QuantLib 目前的设计正是将上述几块的知识抽象成模块,再细分红类,将方法封装进类,最后用“配置类实例”的方式将这几若干实例组合成为一个用于订价计算综合实例(基本上就是策略模式)。

也能够反过来思考,要想理解一个领域的知识结构(前提是已经入门),发现新的细节,就去看这个领域相关的软件库是怎么架构的(最好是 OOP 的)。我关于订价本质的理解正是在研究 QuantLib 架构以后得到启发的,同时也见识到了许多何尝接触过的新课题,好比局部波动率和多曲线贴现。

  • 设计模式与纯数学

设计模式与应用数学结合的成功案例启发我在纯数学领域思考模式的存在,好比从基类与派生类的角度看待各类概念之间的关系,基本上是基于集合的想法;以及试图发现证实与计算过程当中的共性,一种相似设计模式的东西。我但愿找到模式,以帮助人们更快、更高效、甚至更机械地掌握复杂的知识结构。

不过目前尚未任何成果:(

彩蛋

Luigi 很是热衷于在书中以双关语的形式引经据典,从古典到流行,从神话到科幻,几乎无所不包。这些埋藏的文化彩蛋一般是一些欧美文化圈的人才能熟知的典故,对于汉语文化圈的人来说可能很是陌生,甚至不知所云。好比这个,第 7 章中出现的“curiouser and curiouser”,这句话是一个彩蛋,它最著名的出处是《爱丽丝梦游仙境》(第 2 章的第 1 句话,爱丽丝发出的一句惊叹)。不过这里用做双关语,用来形容“奇异(Curiously)递归模板模式”中让人费解的继承关系。

这种彩蛋很难发现,是吧。

在翻译的过程当中,我竭尽所能发现尽量多的彩蛋,考证其出处、注解其语义。寻找彩蛋的过程让耗时枯燥的翻译工做妙不可言,这彻底超出了个人预料。

目前的统计数据,共找到 52 个彩蛋,均以译注的形式呈现出来,随着校正工做的开始,可能还有更多的彩蛋被发现。

展望

下一步的工做,首先是进行校正,解决一些历史遗留问题。

接着,效仿欧美教授们的作法,计划在一个小圈子里面进行试读,征集修改意见。

最后,固然是但愿做为正式出版物出如今书店货架上。不过,在走到这一步以前,它还只是 My Precious!(注:这是个彩蛋)

相关文章
相关标签/搜索