UP | HOME

信息技术、文学编程与物理学纲要

目录

在谈到本篇博文的主旨之前,我不得不多说一点,以便让读者先熟悉一些概念,然后方便切入主题。

信息技术、文学编程的相关概念

你能够准确运用的词汇量就是你的思想能够抵达的边界。如果说生活的自由度部分地由财富、地位等界定,则你思想的自由度可部分地由你的词汇量来界定。拓宽词汇量就是在拓展你思想的边界。而对于具体的学科而言,一个由术语构成的辞典或者纲要其实就是这门学科的地图,也构成了人类目前对这门学科所认识的边界。我们日常所做的笔记、摘要、总结、文章、结果汇总、发展规划等等,都是在让这个地图更加精细与完善,只有其中极少的部分(比如爱因斯坦的相对论)是在拓展这个地图的边界。我们不妨从这个角度去视察一下日常的学习与学术行为,考虑一下如何借助信息技术,以符合人类认知的规律来辅助我们的学习与研究。

通常谈到 信息技术 (一般也简称 IT), 指的就是现代计算机所引发的一系列革命性的技术。在我看来,它的概念还要广得多,至少还要包括一些文献相关的内容,比如古代的 校雠 、编目,及现代的文献学、图书馆学等。我对信息技术的定义是:人类在信息识别、传播、存储、检索应用等方面所使用的各类技术手段的汇总。这其中就包括文字技术 (比如仓颉造字,以及其它各民族的文字书写系统的发明与语音的规范化等)、信号技术 (如旗语、烽火警报、灯光等),以及现代计算机中的各类编码、加密、存储、检索、传输协议等等。如后也将主要指这些现代的信息处理技术。

这个世界上最神秘的事情之一就是:人类居然可以认识世界以及人类自身。人类大脑的认知模式与信息技术紧密相连,这就是人工智能等领域所涉及的研究内容。人类将认知转变成概念,这就是一个个的单词或者术语,再将这些概念进行合理的组织与运用,转化成实物或现实中的处理流程,这个认知转化的过程也是信息处理的过程。如果从程序设计的角度去思考这类过程,应该会从程序设计的技术中受益良多,这也是在《如何设计程序》 (How to Design Program, 一般简称为 HtDP1 ) 一书 前言 中所谈及的广义上的程序。我赞成 HtDP 中所提倡的观点: Programming has become a required skill.

文学编程 的概念最初由 高德纳 (Donald E. knuth) 提出2 并应用于 TeX3 排版系统中。简单看去,文学编程不过是将代码与文档汇总在一个文件中,从其中可以“绕出” (tangle) 代码,也可以“织出” (weave) 格式化的文档。但这并非文学编程的全部。按我的理解,文学编程不仅是程序设计模式,更是一种思考模式,其中的“宏” (macro) 就是我们思考过程中的概念,可以是己有的,也可以是即时创造的;文学编程就是用这些概念去编织一个网的过程,一个用我们的认知去构造或还原世界的过程。按高德纳的说法,这是一种对待程序设计的不同态度,传统的态度是组织指令告诉计算机要干什么,而文学编程则面向的是人类,是要告诉他人我们希望计算机来干什么,而那些要告诉计算机做什么的指令可变成程序中内嵌的宏。

随着计算机信息处理能力的增强,又出现了许多新的信息组织概念:心智图 (mind map)、纲要 (outliner)、概念图 (concept map) 等。这些概念极大地方便了人们的思考,比如,我们用心智图来进行头脑风暴式的设计,使用纲要来组织工程,使用概念图来组织知识等。这些概念中的每一个都有相对应的一批优秀软件:比如处理心智图的有 FreeMind 以及基于它专门为学术研究优化的软件 Docear, 更多的参见 维基百科; 处理纲要的软件在维基百科上多达数十种,其中有我在 Mac OS X 上最喜爱的 OmniOutliner, 但它无法在其它平台上使用,因此我转移到了基于 Emacs 的 Org-mode, 其它的还有支持多种平台的独立应用软件,如 Jreepad 等;支持概念图的软件相对偏向于学术研究中,大众化流行的并不多,在维基百科上还将这部分软件中的 VUE 错误地归类于心智图软件中, 其它比较好的概念图软件还有 Conzilla 概念浏览器,以及 IHMC CmapTools. 你如果将我的英文名字 Exaos 与关键词 Conzilla 一起 google 一下,还会找到我曾经参与的相关讨论。:-)

那么,如果将文学编程、纲要 (outline) 处理的技术应用于物理学的概念整理中,去构造并完善一个由物理学概念组成的物理学纲要 (physics outline),构造一个信息化的物理学科的地图,这不仅让初学者受益,也会让该领域的开拓者获得信息检索与组织的便利;并且,这个纲要的整理过程本身也是对物理学科再次认识与学习的过程。这就是本篇博文所欲探讨的主旨。

HyperPhysics 及其中文翻译

其实,许多人一直在利用信息技术来服务于物理学,这其中最著名的必然属于 Tim Berners Lee, 他发明了网页技术,就是现代人几乎天天都要使用的 World Wide Web! 而 Tim 最初的目的只是让在 CERN 工作的物理学家相互之间方便交流。美国乔治亚州立大学 (Georgia State University) 物理系的 Carl R. (Rod) Nave 博士历尽十多年编撰了在线的物理学知识网站 — HyperPhysics4 , 该网站几乎覆盖了物理学所有领域,是大中学教师、学生很好的参考资源,在世界各地每年有着数百万的用户,每年的点击数超过数千万。 2004年的时候,当时在加拿大 SFU 的好友提议将 HyperPhysics 翻译成中文,并建立了海波物理中文翻译项目5 . 遗憾的是,应者廖廖无法应对海量的翻译工作量,项目目前仍处于搁置状态。

文学编程与物理学纲要

在逐渐接触到文学编程、概念图、心智图以及纲要等概念之后,在尝试了一系列的相关软件之后,我觉得不妨将文学编程引入到类似于 HyperPhysics 的项目中:

  • 原始的文档是文学编程的程序源码。
  • 网页是由这些源码“织出” (weave) 的结果。
  • 网页中相关的计算程序(比如质能方程)是由源码“绕出” (tangle) 的结果。
  • 源码可以充分利用现代的版本控制技术 (如 git) 进行管理,而分布式版本控制技术也极大地方便了参加者通过网络的协作。

目前,我能够找到的具备文学编程功能的工具有:

利用文学编程工具来组织的物理学纲要,其结果可能与 HyperPhysics 很相似,也可能有很大不同。构造一个类似于 HyperPhysics 的在线物理学知识纲要 (outliner) 站点,可以方便学生与学者研习物理学,这是件百利无害之事。但利用哪一种工具来处理这样的项目,要达什么样的效果,这也是我想通过本篇博文与大家认真探讨的问题。

关于这个问题的讨论,有一些内容请直接不要提出:

  • 基于微软的技术,如 .NET, Miscrosoft Office 等。从长远来看,这些属于私有的技术都将是昙花一现的东西,并不适用于保存可以流传下去的文档。它们可用于赚钱,但不适用于公益性的项目。
  • 未列入正规教科书及学术期刊中的内容中,比如许多民科所推介的永动机之类的东西。

对于引入文学编程工具来整理物理学纲要所能达到的效果,有一些初步的设想如下:

  • 概念图及其中的链接是自动生成,但结果是静态的页面。
  • 支持 LaTeX 数学公式,导出网页可使用 MathJax 来显示公式。
  • 支持导出 SVG6 矢量图和动画,物理学的运动模型可直接由 SVG 动画来演示。
  • 简单的计算,如动力学、质能方程、相对论质量等可由内嵌的代码直接对输入值求结果。
  • 能输出达到出版级的文档,如高质量的 PDF。
  • 源码是采用万国码 (Unicode) 编码实现 (如 UTF-8) 的结构化纯文本,可方便在不同语言之间进行转译,如中文、印地语、阿拉伯文 (从右往左的书写 :-) )。
  • 版本控制功能可用于追溯某个具体概念的演化过程。
  • 可按时间 (chronal) 及类别 (catagory) 等不同视图来查看物理学科。当然这种查看方式是由程序自动生成的,源码开发者只需要在相应的代码中提供年代信息即可。比如,在核物理纲要源码中只要填写上“1895: 伦琴发现 X 射线”,在时间线上则会自动在这个位置出现相关信息。
  • 自动生成 LaTeX 文档中类似的术语表 (glossary).

目前,我所使用的 org-mode 可以达到其中的部分效果,比如导出 LaTeX 公式、内嵌 JavaScript 程序、采用万国码。但某些功能还需要进一步的程序开发,比如以时间线和类别等不同方式来查看源码、自动生成术语表等。而 SVG 是可以内嵌 JS 代码的纯文本,只需要对程序开发过程进行规范化即可。整体上来看,如果使用 org-mode, 在此基础上开发一些 elisp 程序是可以完成目标的,唯一的缺点是对 Emacs 平台的依赖性太强,会让 Windows 或 VIM 用户有些不爽。另外,我也只是个 elisp 初学者,并且还在期待将 Emacs 用Guile 重新编写呢。 :-)

如果使用 Leo 平台,我刚接触这个平台不久,还不太熟悉。因为 Leo 可以内嵌 Python 代码,可随时随地进行编程并执行结果,似乎也可以实现目标。目前有些遗憾的是 Leo 对万国码的支持不太好,我在 4.9 下尝试将 QuickStart.leo 翻译成中文,结果 node 为 UTF-8 编码时会导出出错。

如何将文学编程、纲要 (outliner) 等技术应用在物理学的资料整理中,这是我的一些初步设想。长期以来未能为海波物理中文翻译项目有所贡献而心有所愧,贡献这一点思路给大家讨论,如果能够促进这个项目继续下去,或者改换头面继续下去,都将令我欣慰。类似海波物理中文翻译这样的项目,属于一种长期持续的公益项目,不仅需要热情,还需要优秀的组织与设计,更需要大家的无偿贡献:时间与智力。

脚注

脚注:

2

Donald Knuth. "Literate Programming (1984)" in Literate Programming. CSLI, 1992

5

海波物理中文翻译项目: http://hep.phys.sfu.ca/d0/zyliu.page/hp_cn/index_trans.html

在反思海波物理中文翻译项目的过程中,个人认为,除了参与者的热情外,所使用的信息处理技术也是导致项目处于搁置状态的原因之一。 HyperPhysics4 采用的是静态网页,这本身很方便传播,比如用 Web Server, DVD 等,只要有浏览器就可以方便地查看。但静态网页并不利于翻译,每个页面中的链接、静态图片、表格等,如果逐一使用 HTML 语法处理过来,无疑让工作量大大增加。 HyperPhysics 中最具特色的就是物理学概念链接图,你可以从一个图一路链接下去,进行一次物理学概念的回顾。但这些图恰恰是整个翻译项目中非常难处理的部分。我最初的猜想是可以使用 GraphViz 自动生成,但这些图之间的相互链接又是件非常麻烦的事情。

6

SVG, 可缩放矢量图形,支持 JavaScript 动画,参见 http://www.w3.org/Graphics/SVG/http://en.wikipedia.org/wiki/Scalable_Vector_Graphics

版权所有 ©2015: Exaos Lee | Date: [2012-04-27 五 21:03] | Generated by Emacs 24.4.1 (Org mode 8.3.2), Validate, 88x31.png

comments powered by Disqus