《Implementing QuantLib》译后记
就在几天之前,经历了一年时间断断续续的坚持,《Implementing QuantLib》的初步翻译工作告一段落。撰写此文作为总结和纪念。
《Implementing QuantLib》译后记
初心
我还在读研究生的时候,为了实践某些计算金融学的课题自学了 C++ 语言(当时 C++ 大概是“老派 quant”最为推崇的工具性语言,现在“新派 quant”可能都转向 python 了),进而接触到当时就已经久负盛名的 QuantLib。
刚开始使用 QuantLib 时就遇到了 Luigi 在书中指出的问题:缺乏相应文档的弊端开始显示,我对这个库的整体架构一无所知,函数之间的调用关系似懂非懂,类之间的继承关系不清不楚,更棘手的是当时没有遇到任何中英文文献帮助我解决上述问题。
后来事情出现了好转,我读到了名为《QuantLib 实现》的翻译文章(对不起,我已经记不起译者的名字了),并了解到 Luigi 正在撰写相关文档描述 QuantLib 的整体设计和实现细节,尽管当时文档的内容还非常有限。
直到 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!(注:这是个彩蛋)
《Implementing QuantLib》译后记的更多相关文章
- QuantLib 金融计算
我的微信:xuruilong100 <Implementing QuantLib>译后记 QuantLib 金融计算 QuantLib 入门 基本组件之 Date 类 基本组件之 Cale ...
- 《构建 QuantLib》正式出版
<构建 QuantLib>在 leanpub.com 出版了! leanpub.com 上的购买链接:<构建 QuantLib> Luigi 发来贺电:Implementing ...
- 金融计算的开源库——QuantLib 学习入门
本文在Creative Commons协议下发布. 简介 瞬息万变的金融市场开发出了太多的金融产品,产生了太多的计算问题,这对于 Fintech 来讲:无论是计算能力上的,还是软件设计上的是一个巨大的 ...
- Python金融行业必备工具
有些国外的平台.社区.博客如果连接无法打开,那说明可能需要"科学"上网 量化交易平台 国内在线量化平台: BigQuant - 你的人工智能量化平台 - 可以无门槛地使用机器学习. ...
- [翻译]通过使用正确的search arguments来提高SQL Server数据库的性能
原文地址:http://www.sqlpassion.at/archive/2014/04/08/improving-query-performance-by-using-correct-search ...
- 《只是为了好玩:Linux之父林纳斯自传》
<只是为了好玩:Linux之父林纳斯自传> 基本信息 作者: (美)Linus Torvalds David Diamond 译者: 陈少芸 出版社:人民邮电出版社 ISBN:978 ...
- java正则表达式语法详解及其使用代码实例
原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...
- 在 R 中估计 GARCH 参数存在的问题
目录 在 R 中估计 GARCH 参数存在的问题 GARCH 模型基础 估计 GARCH 参数 fGarch 参数估计的行为 结论 译后记 在 R 中估计 GARCH 参数存在的问题 本文翻译自< ...
- CODING 告诉你硅谷项目经理的项目管理之道(2)
优秀的项目管理者是怎么工作的?如何帮助研发团队高效工作?这一直是 CODING 关注的重要话题,我们不断地打磨 CODING 研发管理系统来让开发更简单. 近期我们精心挑选了几篇硅谷科技公司研发管理者 ...
随机推荐
- 通过curl模拟多线程抓取网页(curl_multi_*)
curl请求多个url,以前都是使用循环来处理.最近发现可以通过curl_multi_*系列函数来模拟多线程.比对一下,发现如果请求的url只有几个,2种方案耗时差不多,但是url比较多,差距就非常明 ...
- 光源 材质 简析——基于《real time rendering》第三版 第五章
对于真是世界的渲染,有三个重要的组成部分,光源,材质,以及摄像机.下面,我们一个一个来简单介绍一下. 光源:方向光,点光源,聚光灯.但是,在和物体表面交互的时候,光源对物体表面的影响是依赖光的辐照度( ...
- python 3 print function
if episode % 50 == 0: print('Episode {} Total Reward: {} counter: {}'.format(episode,G,counter))
- 一些json在js和c++ jsoncpp的操作
1.对于javascript部分,如果将字符串转为json对象? var aa ={ keyword:"zoumm", requestcount:"5", ne ...
- Debian Mount nfs 出错的解决
系统未安装 nfs 客户端 #aptitude install nfs-common 解决!
- android studio导入项目时一直在Grandle Build Running
在使用AS开发安卓应用程序的时候经常会遇到Gradle build running一直在运行甚至卡死的情况,解决方法如下: 方法1:(亲测有效) 1.在C:\User\<用户名>\.gra ...
- IntelliJ IDEA 2017版 快捷键CTRL + SHIFT + A无效如何调试(详细的开启idea自动make功能 )
1.前景描述 因为我把编译器的快捷键都设置成eclipse模式了,所以要做热部署的时候,需要CTRL + SHIFT + A --> 查找Registry --> 找到并勾选compile ...
- 程序员不常用Linux命令集
1) 关闭指定网卡,如关闭网卡eth0 ifconfig eth0 down 也可以使用ifdown,通常ifdown是一个指向ifup的软链接,而ifup为一个脚本文件. 2) 命令自启动,如希望机 ...
- linux每天一小步---touch命令详解
1 命令功能: 创建文件和修改文件或者目录的时间戳 2 命令语法: touch [选项] [文件名或者目录名] 3 命令参数: -a 只修改文件的access(访问)时间. -c 或-- ...
- 试题 H: 人物相关性分析 第十届蓝桥杯
试题 H: 人物相关性分析时间限制: 1.0s 内存限制: 512.0MB 本题总分: 20 分[问题描述]小明正在分析一本小说中的人物相关性.他想知道在小说中 Alice 和 Bob有多少次同时出现 ...