得知我将成为Beginning C# Objects: from Concepts to Code一书的中文版译者时,一位朋友以其亲身体验告诉我,译书是一件苦差,敢于译大部头的书,简直就是“无知者无畏”的冒傻气行为。
其实我何尝不知翻译的辛苦呢?在进入IT行业之前,我在外语界活动了整整十年(其中五年是越南语专业学生),其间做笔译、口译无数,基本属于接单能力较强的一类。翻译是破坏,也是创造。破坏一件事物并不简单,以另一面貌重建它更加费力。翻译,是戴着脚镣的舞步,是钢丝上负重的行走。每次翻译完一篇文字,总有从地底重生的感觉。然而翻译也是快乐的,这快乐来自于在两种语言间轻快转换的思维轨迹。所以我愿意翻译,愿意体验这种特殊的快乐。常常暗自盘算,读者会不会为某句推敲良久才定下来的妙语会心一笑呢?当这样想着时,自己已经微笑了。
有一些人,不一定精通外语,但每天做着翻译功夫。如果说计算世界是真实世界的某种映射,那么,编程就是把人类思维转换为计算思维的翻译。人们越是想把真实世界的模式搬到计算世界,后者就越远离真实世界。对于程序员,这戴着脚镣在钢丝上负重起舞的一群,经常面临壁立的学习曲线。我们不得不承认,内存中的字节,要比“纸类(Paper Class)”容易理解。“一张纸”和“一个纸类对象实体”是完全不一样的两种概念。当天才们试图用“对象”描述真实世界的万事万物,实则已经在计算世界独立发展的道路上渐行渐远。
在面向对象编程早已成为主流的今天,正确理解计算世界中的对象概念,是对程序员的基本“外语”要求。把真实世界的需求“翻译”为对象模型,再“翻译”为代码,则是程序员必须具备的能力。许多程序员实际上缺乏正确的计算世界对象观,遑论两次“翻译”的准确度和可靠度了。可恨的是,坊间流传的 “入门与精通”、“XX大全”之类图书,充斥着极端错误的谬论和所谓“指南”,书中常常看到“双击设计界面的按钮,在事件处理方法中输入上百行实现代码”的可怕做法。我怀疑这些书籍的作者是否有资格做合格的面向对象开发程序员,更为花钱买书的读者暗吸一口冷气——你们在吞食毒药。
年余以来,我打算写一本指导入门者树立正确对象观的读物。由于另一本书进度的压力,这个计划一直没有付诸实施。而当手头的撰写工作告一段落时,我却想先做做翻译,转换一下思维方式。恰好博文视点的周筠老师提及Beginning C# Objects: from Concepts to Code,一读之下,无法释怀,马上把翻译机会要下来了。小气点说,这么好的一本书,还真舍不得让别人译呢!该书的Java版本(Beginning Java Objects)口碑甚好,C#版本也在Amazon得到五星级的评价。对于在面向对象编程方面需要入门和提高的C#程序员(如前文所言,他们不在少数),它实在是大旱之后的甘霖。
这本书也将是我对“知识全媒体”理念的初步实践。负责CSDN网站的技术和内容工作,给了我很多实践和思考的机会。与刘韧合作的《网络媒体教程》是这些实践和思考的结晶,而Beginning C# Objects将是另一种全新的知识传播体验。这本书的整个翻译过程都将在网上呈现,实现译者、编者、读者即时互动。我还会制作一些多媒体(音、视频)素材,包括译者对作品的评论和翻译过程讲述、专家组逐章节的阅读指导、实作演示等等内容。我坚信未来知识传播一定是跨媒体和全媒体的,希望这本书能在实践上完善这个理念。