《UNIX传奇》逸事

2020年5月份,人民邮电出版社的杨海玲老师找到我,问我有没有兴趣翻译一本题为 UNIX: A History and a Memoir的书。我已经十年没有做图书翻译,但了解到这本书作者是Brian W. Kernighan之后,确实有了翻译的冲动。

BWK是谁呢?他是UNIX早期核心开发组成员,和C语言发明人Dennis Ritchie写了经典的C Programming Language图书,是那个璀璨时代的亲历者。

这位老爷子要求几位候选译者发英文简历给他,由他决定谁承担中文版翻译工作。很幸运,我被挑中了。中文版于2021年初面世,总算完成一件有价值的事。BWK在中文版给读者的话及新书发布会视频贺词中都提到我的名字,这令我倍感自豪。

书中提到许多人和事。篇幅所限,并没有全面敞开写。我在翻译过程中查阅了一些资料,略说几件,作为这本书的花絮吧。

价值12000美元的米格战机之旅

书中写道:1992年十二月,肯和弗雷德·格兰姆帕到莫斯科驾驶一台米格29战机,比起他们平时开的塞斯纳飞机更上层楼。

这事发生在1992年十二月11~17日。他们通过Fly-with-us公司,每人交12000美元(不含往返路费),踏上莫斯科米格战机之旅。以每加仑牛奶价格计算,1992年12000美元购买力大概相当于现在的4-6万美元。在那一周里面,他们游览了景点,在L39教练机上学习,还分别体验了30分钟米格29战机。

肯回来后,专门写了一篇文章,记录这次难忘的旅行。文章链接是http://genius.cat-v.org/ken-thompson/mig,有兴趣的读者可以自行阅读。仅从写作的角度看,这篇文章也饶有趣味。尤其是关于在米格战机上体验的部分,军迷们应该都会很有兴趣。就说一点:俄军飞行员掌舵时,带他来了一次眼镜蛇机动。这可以算是任何飞行爱好者的高光时刻了。在文章末尾,肯评价这次旅行说:Was it worth it? Yes. Would I do it again? No. (这次旅行物有所值吗?是的。我会再来一次吗?不。)

神秘人M- L-先生

在写“Unix房间”的章节中,作者提到,“1127以外的Unix早期拥趸中,有一位非常杰出的理论物理学家。为逝者讳,姑且叫他做‘M- L-’ 好了。M- L-渴望使用Unix,他预见到物理学研究将大量使用计算机。他善良而大方,就是话多,能听得你耳朵起茧子。只要他一开口,就谁也就没有办法拦得住之后一个小时的独白。于是,有人在Unix房间的门上挖了一个小孔,这样我们就可以在进门前窥视一下,看看他是否在里面。这就是所谓的‘L-洞’。”

这位M- L-先生是何许人也呢?我查了一些资料,发现有可能是梅尔文·拉克斯(Melvin Lax)。拉克斯是纽约城市学院的杰出物理学教授,并于1983年当选为国家科学院院士。1962年至1964年,他担任贝尔实验室理论物理系主任。

拉克斯不但是杰出的理论物理学家,还是狂热的计算机技术爱好者。他推动美国物理学会接受使用Troff排版的论文,为以后TeX的普遍使用开拓了道路。《UNIX传奇》中也写了Troff(而且这本书的英文原版也是用Troff的后续版本Groff排版):

“为了驱动排版机,乔为Nroff写了个他称之为Troff的重要扩展。“T”代表排版机(typesetter),整个词念做tee-roff。Troff语言刁钻晦涩,只有很少人精通,但只要学会技巧、保持耐心,就能让它完成任何格式化任务。实际上,Troff是为特殊型号计算机设计的汇编语言,所以大多数人通过宏包来使用它。宏包封装了常用的格式化操作,如标题、章节标题、段落、编号列表等等。宏成了一种底层Troff命令之上的高级语言。”

拉克斯是UNIX专家。他在纽约城市大学装了UNIX系统。同事Michael Lubell问他,纽约城市大学的UNIX为什么比耶鲁大学的VMS要好时,拉克斯张口就讲了几个钟头,还找出一大堆书和笔记给Lubell,说:“花几天时间读读你就知道了。”Lubell后来说:“几天?对梅尔来说,也许是这样。对我来说,这是一年的工作。”

千面彼得

贝尔实验室计算研究中心气氛宽松,研究人员们像孩子一样调皮。《UNIX传奇》写道:

“1985年,彼得·温伯格晋升为1127主任。公司内刊《贝尔实验室新闻》为他拍摄了一张专业照片。千不该万不该,彼得错将这张肖像照留在了Unix房间。很快,他的尊容就在Unix房间遍地开花。”

“在AT&T揭晓公司新徽标后的几周内,汤姆·达夫(Tom Duff)弄了一个彼得徽标,从此成为我们中心的象征符号。”

这张脸随后被印到很多地方:楼梯拐角、水泥地面、光盘、杂志封面、电路板……

无论在东方还是西方,“上级”怎么说都有一些权威性。将上级的脸到处印,还真不是一般人干得出来的事。好玩的是,彼得对此也没有反对或者给谁穿小鞋。甚至还亲自出马做了脸部倒模,用来创建3D模型。

高潮发生在1985年9月16日夜间。贝尔实验室的一个水塔上出现了彼得脸。虽然很快被抹去,还是很多人看到和拍了照。

是谁干的已不可索解。事发后,Doug McIlroy收到一份报销申请,要求为水塔画的颜料支付费用。McIlroy继续往上传。Vic Vyssotsky以自己无权审批为由终止申请。这张单据的申请人落款是G R Emlin。然而,贝尔实验室却没有这号人物。

神秘人Grace R. Emlin

G R Emlin = Grace R. Emlin,一个虚拟人物。当年贝尔实验室开始要求员工佩戴身份胸牌,很多人对此非常反感,想出各种方式表达抗议。《UNIX传奇》中写道:

“有位同事(在此隐去姓名)用万能胶把胸牌粘在额头上,还有一位则把胸牌别在胸毛上,被要求出示时才露出来。

胸牌没有安全鉴证功能,只是在模板中填了张相片。因此,我们虚构了一位叫格蕾丝·R·艾姆林(Grace R Emlin)的人,她的系统登录名为gre ,还有自己的胸牌,并不时出现在官方名单和出版物上。”

Ficticious employee G.R. (Grace) Emlin. Grace makes numerous appearances throughout the history of UNIX at Bell Labs. Here she iis pictured with her genuine Bell Labs employee badge. These are curiosities from the research lab where the UNIX operating system was created at Bell Labs in Murray Hill, New Jersey.

Grace Emlin形象来自gremlin,一种小魔怪。从名字拼写上也可以看得出来其来源。关于gremlin的传说肇始于航空时代开始没多久。那时,飞机的制造还处于很粗糙的阶段,常常发生故障。人们半开玩笑地编造出gremin,说这种小魔怪生活在飞机中,喜欢破坏飞机部件。就像当程序发生故障时,程序员就会说“都是宇宙射线的错”一样。

1984年,华纳公司出品了电影Gremlins。我怀疑这部电影启发了1127某位仁兄,才搞出Emlin来。

Grace Emlin在1127有自己的信箱。有人还真用她的胸牌进过办公楼。在Brian Kernighan的著作中,不止一次向她致谢。《UNIX传奇》里面也致谢了。Gerald Holzman还把Grace Emlin加到了1127中心同事录(https://www.spinroot.com/gerard/1127_alumni.html)。在这份列表中,Emlin的状态是“已移居。证人保护计划。”很扯又符合1127中心一贯风格。

2020年上画的电影Shadow in the Cloud(《云中阴影》)中也出现了gremlin,形象狰狞、凶狠。在影片最后,女主角徒手干掉了一只gremlin,折射出女权主题。

捉弄诺贝尔奖得主

《UNIX传奇》中写道:

“罗伯·派克和丹尼斯·里奇带着十几个人,在专业魔术师潘恩(Penn)和特勒(Teller)的帮助下,戏弄了阿尔诺·彭齐亚斯。”

Dennis Ritchie写了一篇文章(http://www.bell-labs.com/usr/dmr/www/labscam.html)来记录。油管上可以看到当年Penn和Teller制作的视频(http://www.youtube.com/watch?v=if9YpJZacGI)。整个过程是这样的:

Rob Pike假装做了一套语音识别和人工智能系统,邀请Arno Penzias来观看演示。一番表演后,Penzias以为Rob Pike真的做出这套系统,虽然常常辨识错误(实际上就是Dennis RItchie在另一房间操作电脑),但好像勉强可用。Pike说电脑里有一段录像,系统能够从录像中自动截取片段,回答用户提问。其实根本没有录好的视频,当Penzias提问时,魔术师Penn和Teller就在隔壁房间回答,通过摄像机直播给Penzias看。Rob Pike让Penzias叫“录像”里的魔术师表演个节目,Penzias照办。两位魔术师穿过走廊,出现在Penzias面前,假装是从录像里走出来的。Penzias过了半个小时才搞明白,原来语音识别什么的纯属子虚乌有。

原视频长达8分钟,我将其剪为3分来钟的精简版,关键节点配上中文解释,供不便上油管或者听英语有困难的朋友观看。

在视频结尾的字幕上,Brian Kernighan的职务是“灯光师”。Ken Thompson、Dennis Ritchie和UNIX核心开发组成员们也是灯光师,他们创造的UNIX照亮了未来数十年计算机操作系统发展之路。我们这些IT从业者,也要像灯光师,努力照亮自己、照亮他人,用IT创造未来、改变世界。

《Unix传奇》中“消失”的链接

我2020年翻译了Brian W. Kernighan的Unix: A History and a Memoir一书,中文版书名是《Unix传奇:历史与回忆》。原版中有一些网页链接,根据我国公开出版物相关规范,中文版删掉了这些链接。

我把这些“消失”的链接整理如下,供读者参考:

P46 丹尼斯·里奇介绍肯·汤普森对电脑游戏的贡献的短文:www.bell-labs.com/usr/dmr/www/ken-games.html

P61 杰拉德维护的网站 spinroot.com/pjw

P70 贝尔实验室网站丹尼斯主页上他兄弟姐妹的谢词:www.bell-labs.com/usr/dmr/www


P131 2013年公布的摩根泰勒备忘录:www.cs.princeton.edu/~bwk/202


P193 杰拉德·霍兹曼维护的1127中心老同事在线名单:www.spinroot.com/gerard/1127_alumni.html

P207 “实验室欺诈”视频:www.youtube.com/watch?v=if9YpJZacGI

“资料”章节中的链接

贝尔实验室Unix历史短页:s3-us-west-2.amazonaws.com/belllabs-microsite-unixhistory


汤姆·范·弗莱克(Tom Van Vleck)的Multics历史信息库网站:multicians.org


道格·迈克罗伊的《科研版Unix读本》:genius.cat-v.org/doug-mcilroy

The Unix Heritage Society:www.tuhs.org

迈克尔·马霍尼的Unix口述历史:www.princeton.edu/ ̃hos/Mahoney/unixhistory


菲利斯·福克斯的口述史:history.siam.org/oralhisto- ries/fox.htm


布莱恩与丹尼斯的炉边谈话:www.youtube.com/watch?v=EY6q5dv_B-o

丹尼斯·里奇在(诺基亚)贝尔实验室的主页:www.bell-labs.com/usr/dmr/www


柯克·迈克库西克关于BSD的著述: www.oreilly.com/openbook/opensources/book/ kirkmck.html


伊安·达尔文和杰夫·柯里尔的文章:doc.cat-v.org/unix/unix-before-berkeley

布莱恩·克尼汉写给中文版读者的话


(本文是《Unix传奇:历史与回忆》一书作者布莱恩·克尼汉为中文版读者撰写的文章。本书将于近期出版面世。)


1969年,肯·汤普森和丹尼斯·里奇在贝尔实验室创造了Unix系统。五十年后,Unix系统在全世界被广泛应用,多数时候以Linux的形态呈现,在从极小到极大的无数种计算机上运行。无论运行于何种计算能力与架构上,Unix都提供了同样方便、富有表达力和极具生产力的环境,以及丰富的程序开发工具。Unix系统构造优雅,使这些工具很好地结合在一起。

Unix是怎么来的?贝尔实验室是怎样的机构?寥寥数位研究员组成的小团队是如何改变世界的?是什么让Unix成为可能,并推动它进化?

我试图在《Unix传奇:历史与回忆》中回答这些问题。本书不仅写到技术内容,还写了许多幕后故事,写了那些天才人物的个性,以及Unix诞生和发展的独特创造性环境。

韩磊翻译的中文版问世,我倍感欣慰。相信它能帮助中国的朋友和同行了解Unix的历史。衷心希望您能享受到阅读的乐趣。

布莱恩·克尼汉

《Unix传奇:历史与回忆(Unix: History and Memoir)》译者序

Unix的主要创造者肯·汤普森到贝尔实验室面试时,沿计算科学中心走廊漫步,两边办公室上的名牌写满了他听说过的人名。这就是我读这本书时的感受:书中提到的许多名字,早已如雷贯耳。在我心目中,他们全是大神级人物,高高在上,凡夫不可亲近。

全书译完,这些人从神坛走下来,就地现出极客真面目。无论做出什么非凡成果,原来,他们全是不折不扣的程序员。以我之见,程序员的追求就是让机器听话,让工作自动化,让人类生活更美好。昔年Unix核心团队乃至于贝尔实验室计算科学研究中心的一众精英,无疑都是秉承这个初衷,尽展所长,才做出如此辉煌的成就。

几十年过去,“让机器听话”部分演变为“让机器听得懂人话”。人工智能科技进步巨大,在一些领域,机器展现出可观的能力,替代了相当部分人工劳动。在翻译这本书的过程中,我大量使用了DeepL翻译工具。有时,DeepL给出的译文可以用“惊艳”来形容;就算是那些不够出色的译文,七成也能达意。这意味着,对于非文学类作品,自动化翻译工具已相当接近初译的要求水平。即便不能完全替代人类译者,自动化翻译工具在很近的未来也将成为人类译者的亲密伙伴。人类译者也许最终会变做审校者。

另外一方面,机器也在赋能与人。例如,我目前关注的AR(增强现实)领域,已有许多技术可以让人看得见原本看不见的东西。在某个项目中,警员佩戴AR智能眼镜巡逻,三个月内识别出近400个重点管控人员。在另一个项目中,无人机搭载违法识别和车牌自动识别技术,极大地提升了交警处置效率。机器与人共同进化,未来可期。

本书作者认为,宽松的环境、稳定的投入、专业人士是贝尔实验室成功的要素。我翻译的《梦断代码》恰好是这种看法的反例。没有期限、几乎无限量的资本、十几个精英程序员,只换得美梦破灭。世界已经变得不同。开放源代码、远程协作、增长黑客……开发模式与商业模式相互促进,“数据”变得与“代码”和“算法”一般重要甚至更重要。可以预见,计算与连接将遍及万物。生活会更好或更糟?我相信一定会更好。

我的老朋友陈硕认真阅读了译稿,提出许多修改意见。术语方面的意见我几乎照单全收,其中有一些错译或文字不准确是我疏忽,但大部分完全是因为我的知识储备不足使然。至于文本、语句方面的改进意见,我保留了大部分原译。盖此事关乎个人文字风格,见仁见智,留待读者批判吧。算来我与陈硕已有十几年没有见面,各自做着自以为能让世界更美好一点的事情,这大概算是程序员共有的一点小情怀吧。

韩磊 2020年9月

(本书中文版即将面世)

《疯狂的程序员》序

绝影在CSDN Blog上连载《疯狂的程序员》,自2007年12月22日开始,到2008年9月15日全文完成,9个月时间写了35万字。对于专业作家,这也许算不得什么了不起的成就,可绝影只是一位技术工作者,9个月的业余时间,就全搭在这部书上面了。

以文学的角度来看《疯狂的程序员》网上连载版本,缺点和问题比比皆是,但这些瑕疵无法掩盖因其“真实反映程序员工作生活”而焕发的独有光彩(据我所知,印刷版本在文字方面改进良多)。“深入生活”无如“从生活中来”,我不相信有任何专业作家,能比绝影们更有资格写出《疯狂的程序员》这样的作品——看看市面上,有几本描写程序员的小说呢?

现在这部书要出版了,我又从头逐篇看Blog上的连载。越看越觉得,互联网改变出版,实在已经不是一种理论或是幻想。其表现有三:一,互联网让原本不属写作人群的人能够撰写并发布作品;二,互联网上改变了“小黑屋”式的写作,作读互动贯穿于并影响着写作全过程;三,读者评论、作者回应,乃至于包括正文在内的页面表现,构成了某种完整、自足的作品表现形式。对于出版机构而言,互联网变作了有效的“选题筛选器”。当然,在正式出版前,还有很多的编辑工作要做,但至少在写作阶段,已经和以前大有不同了。网上连载与印刷版本有没有冲突呢?如果有,怎样化不利为有利,使之促进印刷版本的销售?在与绝影签约后,出版社没有要求绝影停止在网上连载,这是一种勇敢应对新类型出版的积极态度。

绝影不是唯一、也不会是最后一位在CSDN平台上创作的作者。《疯狂的程序员》正好为其他用户树立了一个典范:程序员也能写书,而且是写出引起大家共鸣的优秀作品。我要恭喜绝影新书出版,更要鼓而呼之,希望更多的绝影涌现出来。

e人谷龙门阵之代码猴

按:上次写了twitter.com的创业史,读者反映还不错。本来准备了资料,打算继续写其他一些网站或创业公司,今天看到登高CSDN个人空间推荐歌曲,突然想起一事,就打个岔先。和本系列其他文章不同,这篇要写一首歌,以及和它相关的事情。好奇吗?现在开始。

2007年3月份,我去硅谷Santa Clara参加CMP的SD West 2007大会,着意听了几场演讲或课程。最令人兴奋的是Robert C. Martin (Uncle Bob)的演讲“Craftsmanship and the Problem of Productivity: Secrets for Going Fast without Making a Mess”。甫一上台,Bob大叔就手舞足蹈唱起歌来,像极了一只焦躁的猴子。当然这只是个暖场的手段,演讲本身之精彩,自不待言,但Bob大叔那夸张到走调的演绎,让我对他唱的歌产生了兴趣。可惜闪念之间,还是觉得听后面的课程要紧,也就抛诸脑后了。

今天想起来,Uncle Bob的歌声仿佛还在耳边回响,趁着中午有点空闲,查了一下。原来那首歌叫做Code Monkey(代码猴子),作者是Jonathan Coulton。此人住在纽约布鲁克林,是个独立音乐人。在相当一段时间(大约两年)里,他每周创作、演唱并在网上循CC版权协议发布一首新歌。拜新科技所赐,从配乐演奏到主唱,Jonathan可以独力完成。Code Monkey就是这些歌曲中较为成功的一首。因为创作歌曲数量之庞大,Jonathan被外间叫做“写歌机器”。

千万别以为做音乐的都是文盲,人家Jonathan Coulton可是正经毕业于耶鲁大学,而且还当过一段时间的程序员,这首Code Monkey,灵感大概也来自当年做程序员的生活。

所谓code monkey,是一个英文习语,粗略而论有两层意思:其一,低水平的编码人员;其二,程序员自嘲。Uncle Bob在演讲中奉劝听众不要做code monkey,是为了提升听众的编程水平;而Jonathan在歌中唱的,可就用了“自嘲”那层含义了。且来看看歌词——

Code Monkey get up get coffee(代码猴子起身喝咖啡)
Code Monkey go to job(代码猴子上班去)
Code Monkey have boring meeting(代码猴子开了个无聊的会)
With boring manager Rob(一起开会的上司Rob也够无聊)
Rob say Code Monkey very diligent(Rob说代码猴子很勤奋)
But his output stink(但做的东西却不行)
His code not “functional” or “elegant”(他的代码“用不了”或“不够好”)
What do Code Monkey think?(代码猴子在想什么?)
Code Monkey think maybe manager want to write god damned login page himself(代码猴子想,上司可能想干脆自己来写那个TMD登录页)
Code Monkey not say it out loud(代码猴子没大声说出来)
Code Monkey not crazy, just proud(代码猴子可没疯,只是有点得意)

Code Monkey like Fritos(代码猴子喜欢吃Fritos薯片)
Code Monkey like Tab and Mountain Dew(代码猴子喜欢喝Tab和Mountain Dew)
Code Monkey very simple man(代码猴子是个直爽人)
With big warm fuzzy secret heart:(心里藏着点温暖的秘密:)
Code Monkey like you(2X) (代码猴子喜欢你)

Code Monkey hang around at front desk(代码猴子在前台混着)
Tell you sweater look nice(说你的毛线衣真好看)
Code Monkey offer buy you soda(代码猴子给你买苏打水)
Bring you cup, bring you ice(还送上杯子和冰块)
You say no thank you for the soda cause(你说谢谢,不用了)
Soda make you fat(因为喝苏打水会变胖)
Anyway you busy with the telephone(你得忙着接电话)
No time for chat(没时间闲聊)
Code Monkey have long walk back to cubicle he sit down pretend to work(代码猴子走回小隔间,坐下假装工作)
Code Monkey not thinking so straight(代码猴子没想通)
Code Monkey not feeling so great(代码猴子感觉不太好)

Code Monkey like Fritos(代码猴子喜欢吃Fritos薯片)
Code Monkey like Tab and Mountain Dew(代码猴子喜欢喝Tab和Mountain Dew)
Code Monkey very simple man(代码猴子是个爽直人)
With big warm fuzzy secret heart:(心里藏着点温暖的秘密)
Code Monkey like you(代码猴子喜欢你)
Code Monkey like you a lot (代码猴子很喜欢你)

Code Monkey have every reason(代码猴子有理由)
To get out this place(离开这个地方)
Code Monkey just keep on working(代码猴子还是留下来工作)
See your soft pretty face(看着你可爱柔软的脸)
Much rather wake up, eat a coffee cake(醒来,咖啡蛋糕做早餐)
Take bath, take nap(洗澡,睡觉)
This job “fulfilling in creative way”(这工作“创意无穷”)
Such a load of crap(真是废话一堆)
Code Monkey think someday he have everything even pretty girl like you(代码猴子以为总有一天会得到一切,包括像你一般好的女孩)
Code Monkey just waiting for now(代码猴子在等待)
Code Monkey say someday, somehow(代码猴子说,总有一天,总会实现)

Code Monkey like Fritos(代码猴子喜欢吃Fritos薯片)
Code Monkey like Tab and Mountain Dew(代码猴子喜欢喝Tab和Mountain Dew)
Code Monkey very simple man(代码猴子是个爽直人)
With big warm fuzzy secret heart:(心里藏着点温暖的秘密)
Code Monkey like you(2X)(代码猴子喜欢你)

上面的歌词,我只是随手译出中文,可能有一些不准确的地方,请方家指正。其中的Tab和Mountain Dew,分别是百事可乐及可口可乐推出的减肥饮料。

嗯,那就是典型的Code Monkey了……朝九晚五干着毫无激情的工作,巴望着能认识个好姑娘,可惜落花有意、流水无情,风流总被雨打风吹去。他每天做这白日梦:坏日子总会过去,我将拥有一切。这首歌在美国软件技术人群中流行一时。虽然许多中国程序员不喝Mountain Dew,但我相信他们听这首歌也会感同身受——这样的生活,什么时候才能熬到头呢?

再咀嚼咀嚼歌词,还是觉得自嘲的意味多过哀叹的意味。这首歌以Creative Common授权发行,有很多人拿来做成MV。最有趣的是一位Adobe程序员做的MV,他用魔兽世界的人物来演绎Code Monkey,既邪恶又幽默。

Jonathan Coulton弹吉他演唱的不插电版本也很有意思,有兴趣的读者可访问http://technorati.com/videos/youtube.com%2Fwatch%3Fv%3D7s8S7QxpjeY。

Dreaming in Code中文版第0章试读

0章:软件时间


那是1975年的冬天。我在终端机房中俯身敲击一台电传打字机,每打完一行,那笨重的机头就会摇头晃脑猛然撞回最左边,开始新的一行。我从几个小时前开始输入一行行黑代码[1],忘记了时间流逝,全然不知已是午夜时分。看门人已经关闭廊灯。我并没有得到许可在纽约大学物理系大楼中流连忘返、使用向高中学生免费发放的计算机账号。不过,倒也无人责难。


那时我年方十五,正迷恋于一个叫做Sumer的游戏,在游戏中,我管理着新月沃土[2]上一座古代城邦。今天的电脑游戏玩家也许会嘲笑其稚嫩:它在一卷纸上逐行打印出大写字母,报告游戏进程。玩家运筹帷幄,分配食用和留种的谷物,然后程序就会告知城邦每年的发展情况。“汉谟拉比陛下,”程序像一个诚惶诚恐的宰相般报告说,“微臣伏启圣鉴……”


没玩几天,我就已经把游戏彻头彻尾玩了个遍。但是,和现在令青少年着迷的大多数游戏不同,Sumer可以让玩家打补丁。谁都能够窥探其内部运行机制:该游戏只是向计算机发出的一系列简单指令,这些指令存储于一卷多行八孔纸带上。(电传打字机旁的塑料盘中堆积的纸带,几乎带来和游戏一样多的乐趣。)纸带像地下出版物一样在朋友间流传共享。只要花几个钟头学点简单的Basic语言,改游戏就会和玩游戏一样容易:将纸带上的指令装载到计算机,然后开始往程序里加代码。


Sumer是个空白画板——历史只是个轮廓,随时准备着让少年的梦想来浇筑。我和朋友们掌握了它简单的构造,开始往里加东西。让玩家可以选择不同的宗教信仰吧!偶尔来一次腺鼠疫,会发生什么事?蛮族入侵者应该很酷。嘿,搞几具弹石机如何?


那天晚上,我倾力于改造游戏中民众造反模式的设计。Sumer只提供粗糙的起义模式;如果你干得太差,人民就会起来推翻你。(Sumer的原作者是个乐天派。)我认为,游戏中的起义模式应该多种多样,所以就创建了一些子程序补丁——让Sumer陷入内战,或是引入一个要争取合法地位的反对派政府。


我不在乎干到多晚。F线地铁整夜运行,可以把我带回位于皇后大道的家。一定得重新设计游戏中的革命模式!


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


四分之一世纪后,2000年五月,我坐在旧金山的一间办公室里,眼睁睁紧盯着一台现代计算机屏幕(高解析度、数百万种颜色)。喝剩的咖啡纸杯胡乱摆在键盘边上。正是凌晨5点。


那时我四十岁,是在线杂志Salon的创始人和总编,此外还负责一个软件开发项目。我们花了几个月精心规划,希望给网站增加动态特性,使之彻底改观。然而,现在我却眼看着项目濒临绝境。


在没日没夜苦干了几个星期之后,主力程序员终于宣告工作完成,自己要飞往夏威夷,度一个全家盼望已久的假期。剩下他的老板,技术副总裁查德·迪克森(Chad Dickerson),独自琢磨为什么存储网站文章的数据库就是不肯与负责显示页面的程序对接。查德两个通宵没合眼,努力修复问题。若是不然,到周一早上,我们的两百万读者就只能看到网站上没更新过的旧闻了。


难道我们以前没做过软件吗?(做过。)是没有全面测试吗?(显然不太充分。)怎么会搞得一塌糊涂?(鬼晓得。)


我吃完了自动售货机里最后一袋饼干,徘徊又等待,却仍是毫无指望。时间还多。还有时间去读那位以新项目的名义准备香槟加蛋糕聚会的倒霉同事的邮件,回复他说:“或者咱们再等等吧。”还有时间去体会身陷困境孤立无援的感受,然后琢磨将系统的中心服务器命名为“卡夫卡”是不是个好主意。


大约早晨9点,我们终于发布了站点“改进版”的第一个版本。又是周一清晨,其他同事相继出现在办公室,他们过了好一会儿才意识到,我们六个人昨夜压根儿就没回家睡觉。


又过了几星期,程序员们修复了最严重的问题,软件运行趋于平静。但后来每当我听说某公司打算“升级其软件平台”、重新搭建一套大型系统时,我总不免暗自担心。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


二十世纪九十年代科技行业的兴盛,给我们带来了“互联网时间”的概念。对该短语含义的理解见仁见智,但多指“快速”之意。数字时代的新时间机制下,一切皆有可能发生——技术产生、公司创立、创造财富——而且速度惊人。这意味着你没时间做到尽善尽美——无须担心,因为别人也一样。


随着投资潮退,“互联网时间”这个短语也风头尽失,很快被其他时髦词所代替。但新词掮客们的确一语中的。在做软件的过程当中,时间似乎确实时快时慢。如果一切顺利,你会沉浸在心理学家称之为“流逝”的状态中,全然忘记了时间。如果事有不谐,你又会陷入困境,四顾茫然、举步维艰。无论是哪种情况,时钟都被抛诸脑后。你用的是软件时间。


 


***********************************************************


 


在使用一门新编程语言时,程序员的第一个程序通常是“Hello World”——输入一系列代码,召唤计算机,命令它打印出这两个词,向主人致敬。在Sumer游戏所用的Basic语言中,这个程序像这样:


10 PRINT “HELLO WORLD!”


20 STOP


“Hello World”程序一无所用,但足可蛊惑人心;它鼓励新手,唤起每个程序员心中乐观的一面。“既然能叫它说话,就能让它做任何事!”计算机协会(The Association for Computing Machinery),计算机领域中的ABA[3]或AMA[4],维护了一张网页,上面列出将近两百种编程语言版本的“Hello World”程序。简直就是程序代码的罗塞塔石碑[5]。


在Java这种商业世界中流行的重量级编程语言里面,“Hello World”看起来高不可攀:


class HelloWorld {


public static void main (String args[]){


System.out.println(“Hello World!”);


}


}


Public static void:无数个Java程序代码块中,都有这串密语存在。这串词有特别的技术含义。不过我常常把它看作一首机器诗篇,在它召唤出的冷宫里面,多少软件项目一开始雄心勃勃,最终却未结善果。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


如果你和计算机编程打过交道,就很难不对它又爱又恨。作为少年游戏玩家,我品味过编写代码的巨大快乐。作为媒体工作者,我见证了软件世界中无数个悲惨故事——无论是跨国公司、政府机构,还是军工大鳄,都曾一头撞上过代码的冰山。而作为一个经理人,我又得对付自己的泰坦尼克号。


这二十五年令人气馁的软件历史,也许不具代表性,但却是我的个人经验。依照硅谷的数字乌托邦理想,事情理应朝好的方向发展。在Salon网站发布失败后的几个月里,理想与现实之间的差异开始对我露出了利齿獠牙。


编程已不再处于萌芽期。我们的世界依赖于无穷复杂的软件。在长达半个世纪的研究和实践之后,为什么还是很难做到按时限、按预算做出计算机软件?为什么还是很难让软件可靠而安全?为什么还是很难把软件做得易于学习使用,且具备按需修改的灵活性?这只跟时间和经验有关吗?是否有出现某种根本性突破的可能?在软件的本质特性(抽象性、复杂性及延展性)上,是否存在某种总能打倒我们的无常之物,将开发者咒入充满不可挽回的延误和根深蒂固的缺陷的世界?


“软件难做,”编程界经典教科书的作者高德纳(Donald Knuth)这样写道。但原因何在?


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


你可能已经注意到,我把本章标为“第0章”。我无意搞笑,只是想指出计算机程序员和其他人的一处小小不同:程序员从0开始计数,而不是从1开始。要解释这种习惯的来源,得从计算机中央处理单元里的寄存器,以及数据队列的结构等等奥义秘辛说起。不过,我发现最直截了当的解释来自于一个网页,该网页试图向大众解释黑客的行为——“黑客”一词的本义是“痴迷的编程匠人”,而非后来衍化出的贬义“数码入侵艺术家”。


为什么程序员要从0开始计数?因为计算机从0开始计数!所以,程序员也训练自己这样计数,以免让他们要指示操作的计算机产生误解。这本也无伤大雅,只是使用计算机的大多数人是从1开始计数,未免令人烦恼。往下到系统层面,在这个层面上,数据被存储和操作——意味着我们的金钱、工作和设想被转换为机器可读的符号——计算机程序及编程语言经常会做小小的偏移操作,即“+1”或“-1”,使得计算机从0开始计数的列表与人类从1开始计数的列表保持同步。


在计算机的二进制数字世界里,所有的信息都被简化为0和1的序列。但是,在0和1 之间有空间存在,在机器计数和思考的方式和人类计数和思考的方式之间也有空间存在。当你寻找软件缺陷、延误和不按设计思路运行的原因时,那原因就藏身于这空间之中。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


在构思本书的那段时间里,我每天要驾车从旧金山海湾大桥(Bay Bridge)上通过。一天早晨,当我的车努力爬上连接奥克兰(Oakland)岸边和桥东段中心较高地带的长长引桥时,我发现,右边有个新物体挡住了海湾碧水和远山绿树:那是一台高耸的红色起重机的顶端,正好超出桥面。它在那儿日复一日地矗立着,突然有一天,又多了12台起重机,在桥北一线齐齐排列,如同挤在食槽旁的机械怪兽,等着倒霉的上班人士送进嘴来。


这工程是要替换双层大桥的北半部分。在1989年的Loma Prieta大地震时,该部分上层一段五十英尺长的桥面坍塌到下层的车行道上。现在,将在旧桥旁边搭建一座更安全、更现代的新桥。


随后几个月,这些240英尺高的起重机,开始将一根根直径达8英尺、长达300英尺的锈钢管打进海湾水底。在清晨时分,从我远在伯克利(Berkeley)山的家中都可以听到敲击声。总共将会有160根这种大管子被打入海底,填上混凝土,支撑新桥的水上部分。整个过程设计精密、执行无误;它分毫不差,完全满足了我们对工程一词的信心。


关于软件缺陷的话题,只要谈上几分钟,必会有人拍案叹道,“为什么就是不能像造桥那样造软件?”


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


和摩天大楼、水坝等永久性建筑一样,桥梁体现了人类对物理世界的技术把握。在过去半个世纪里,软件成为构建这个世界的虽不可见但却深入渗透的人造物。“人类文明运行于软件之上,”广为应用的计算机语言C++发明人比昂纳·斯卓思柯普(Bjarne Stroustrup)这样说道。


初听起来,这像是奇谈怪论或是自卖自夸。即便没有Microsoft Windows,人类文明也会同样延续,对吧?然而,软件并不只是用来发电子邮件或写报告的程序那么简单;它已经不声不响地渗透到生活的每个角落。它存在于厨具里、汽车中、玩具里,建筑中。商业和银行、选举和新闻媒体、电影和交通网、医疗和国防、科研和基础公共服务——人类生存之所需都系于计算机代码这根易断的细线上。


而且我们要为其脆弱付账。根据国家标准和技术学会(National Institute of Standards and Technology )2002年的研究,软件错误每年造成美国595亿美元的经济损失,三分之二的项目明显延误或超出预算,甚至干脆无疾而终。


人类文明运行于软件之上。但是,软件创建艺术却隐于暗处,即便对于专家们也是如此。在历史上,我们从未如此地完全依赖于这样一种人类自己不知道怎么才做得好的产品。在对软件系统的加速依赖和踱着方步学习怎么做好软件之间,有一条巨大且有时叫人恐惧的壕沟。对软件的依赖以指数级增长,而做软件的技能——和应用技能的愿望——却进展缓慢。


你要和程序员说这些,就等着挨批吧。这边厢,有人也许会说,世界从未如此光明:我们拥有了比以往更好的工具、更好的测试、更好的语言,还有更好的方法!那边厢,你又听人家说,自计算机时代的黎明以来,其实并未取得多少进展。计算机先驱莫瑞斯·威尔克斯(Maurice Wilkes)[ 6 ]回忆起1949年他在英国剑桥的情形,在拖着打孔纸带上楼给雏形计算机EDASC装载程序时,他看到了未来:“我强烈地意识到,生命中剩下的好日子,都将耗费在给自己的程序找错误上头。”从威尔克斯的时代直到现在,尽管有那许多创新,程序员却一直陷于调试除错之苦境。工作中只有百分之一的灵感迸发,剩下的是艰难寻找、汗湿重衣;他们的作品永远尚未完成或不够完美,区别仅仅是“问题更少”的程度不同罢了。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


软件就是麻烦一堆。而且我们不能够也不愿意把电脑一关走为上计。给我们带来挫败和束缚的软件,也用更多功能、更快更好的工作与生活方式来引诱我们。无路可回。我们对软件的需要,远甚于对它的仇恨。


所以我们梦想着得到更新更好的东西。在现代软件研究领域多有建树的专家弗里德里克·布鲁克斯(Frederick Brooks)在1987年写了一篇题为《没有银弹(No Silver Bullet)》的著名论文。布鲁克斯在论文中称,无论编写计算机程序是如何地令我们倍感挫败,也永远无法找到一种魔法般的突破——我们只能期待渐次前行。布鲁克斯的观点难以辩驳,但也难以接受;参加计算机业界的一些会议,或是浏览程序员网站时,你总会遇到一些坚称其错的人。


有些人梦想炸毁今天的整座软件大厦,替以某种全新之物。有些人则只一味盼望找到不太顽固、更能响应人类愿望和行为流程的程序员,盼望能得到召之即来、挥之即去的软件,盼望得到足堪依赖的代码。


We dream of it, then we try to write it — and all hell breaks loose.


梦之所寄,行之所为——地狱之门就此洞开。



[1] Black code,指原来程序逻辑中没有的部分,采用类似侵入的手段加进去的代码。


[2] 新月沃土系自中东两河流域及附近一连串肥沃的土地。包括今日的以色列、西岸、黎巴嫩、约旦部分地区、叙利亚,以及伊拉克和土耳其的东南部。由于在地图上形似一弯新月,所以美国芝加哥大学的考古学家詹姆士·布雷斯特德(James Henry Breasted)把这一大片肥美的土地称为“新月沃土”。


[3] American Bankers Association,美国银行家协会


[4] American Medical Association,美国医药协会


[5] Rosetta Stone,1799年法国士兵在埃及发掘出来的象形字黑石碑。也是美国著名的外语教程品牌。


[ 6 ] 1967年图灵奖获得者,他领导建造的拥有内存储程序的计算机EDASC于1949开始运行。


本书将由电子工业出版社近期推出,敬请留意。

代码,梦

今天下午19:00,翻译完Dreaming in Code最后的《结语》部分,这本书算是基本完成了。说来惭愧,去年初接下这个任务时,满以为顶多半年足可交稿。真正开始翻译时,才知道自己低估了任务难度。作者Scott Rosenberg是在线杂志Salon.com的主编,笔下极尽引经据典、推敲字句之能事,夹叙夹议,奇闻轶事和以精论妙谈,300来页一本书,触及软件开发中多个根本大题目,叫人看得心惊肉跳之余,又不由得掩卷长叹。


《大褂还是内裤》一文中,我简单提到Mitch Kapor和Chandler项目。Dreaming in Code在“叙”的部分就是写这个项目的。本书的副标题很长,也很吸引人:Two dozen programmers, three years, 4,732 bugs, and one quest for transcendent software(两打程序员,三年,4,732个缺陷,只为打造卓越软件)。Mitch Kapor和他的程序员们曾经打造过最伟大的软件,现在他们有了近乎奢侈的资源,为了“用代码改变世界”的梦想,共襄盛举。可惜他们遇到了“软件时间”的黑洞,从2001年开始,泥足深陷、举步维艰。Scott Rosenberg从项目一开始就贴身跟踪,记录下Chandler项目开发过程中的点点滴滴。


如果本书仅及于此,就不过是一篇尚可一观的“报告文学”。幸好Scott Rosenberg的主要目标是揭示软件开发中的普遍问题:为什么做软件这么难。在描写Chandler项目进展的段落之间,温伯格、布鲁克斯等大师级研究者,Linus Torvalds和Joel等实践者纷纷“出来”现身说法,还有来自各机构、媒体、作者的大量资料,从“软件时间”入手,兼及各种方法论、积木式编程、软件设计、项目管理,所有这些都是最后一个大话题的铺垫。在《结语》部分,Scott Rosenberg提出了这个大话题:人工智能有没有可能超越人类?在这个问题上,Mitch Kapor打了个20,000美金的大赌。他打赌,到2029年为止,都不可能造出能通过图灵测试的机器。


Mitch Kapor绝非悲观主义者。他本人和整个OSAF团队做梦都想通过软件系统“改变世界”。改变世界的梦想鼓舞过无数程序员,然而最初却不是对程序员说的。在Dreaming in Code书中提到这么一桩轶事:当年Steve Jobs(就是Apple的乔布斯大爷啦)想要说服百事的CEO John Sculley加入Apple,就对John Sculley说,你是想终己余生“卖甜水”呢还是过来造计算机、改变这世界?不过John Sculley加入Apple后不久,就联合董事会把Jobs赶出了公司。


过去几十年以来,计算机软、硬件制造者们一直以他们的努力推动这世界。而他们的每一分努力,因为halting problem(停机问题)的缘故,都注定是未完成的任务。他们是在挑战智慧和精神力的极限,简直是“逆天而为”——所以也难免要遇到软件生而固有的困难。


Dreaming in Code以一个具体项目的进程为例,列出了这些普遍存在而又近乎无法解决的困难。有趣都是,在翻译本书的过程中,每每与朋友聊天,他们提出的一些问题,在书中也都涉及。这本书很快就要出版了,到时一人送一本,他们是软件实践者,看后应该会比我更有感触和启发吧。

《南阳韩氏宗谱》全文

按:此谱得于云南弥勒县弥阳镇,乃我韩氏一脉数百年传承之记载。前数月余曾刊《韩氏世系图》一幅,此后常有同姓询及。特将《宗谱》全文贴出,以供阅检。此谱文辞朴实、叙事简略,若与他谱对照,或可互校漏、误,俾得一更为可信之刊本。余力有未逮,待之以贤者。

又:正文中有括号者,均余所补。读者知之为要。

 

 

始祖讳成
明洪武恩授统兵官。同太祖讨陈友谅,会兵鄱阳湖。兵败,陈贼追急。公服太祖衣冠惑贼,投水靖难。至今人口啧啧,有公替死马家渡之言。后追封侯爵。子孙世袭将军。

一世祖讳春 (配)时氏
公山东济南府籍。洪武中,以荫袭侍卫随沐(英)辟滇。后沐镇云南,公授指挥,领中卫府,相传即今迤东道官署。子孙袭职。遂籍云南。卒,与氏俱葬省城东十余里,地名洋房凹。氏赠淑人。生子旺。

二世祖讳旺 (配)孙氏
荫袭武略将军,指挥使。氏赠宜人。生三子,长冕,次升,三昂。

三世伯祖讳冕
荫袭武略将军,指挥使。氏应,赠宜人。公生一子,讳爵,荫袭武略将军,指挥使。爵生一子,晋,荫袭武德将军职。氏诰赠恭人。晋生一子,禹谟,荫袭武略将军,指挥使。氏应,赠宜人。禹谟生一子,崇高,袭职。崇高生一子,汝松。汝松生一子,陛先。陛先生一子。荫祖,后遂失传。

三世祖讳升 (配)舒氏
官舍。生二子,长伦,次辅。辅配舒氏,卒,继配周氏。在官舍,生一子,讳洗。辅之后与氏俱失传。

三世叔祖讳昂
前皆以武弁从戎,自公出伍业儒。《昆明县志》:昂,中卫人,成化辛卯科解元,戊戍科进士,授顺天府宛平县。氏与后失传。

四世祖讳伦 (配)潘氏
校尉。公之先人,大小二支,皆省卫官宦籍。自公始,迁路南。今之藩衍于路者,皆公裔也。氏孺人。生二子,长淮,次潮。潮在官舍,与后俱失传。

五世祖讳淮 (配)陈氏
云南府学廪生。生三子,长邦良,次邦器,三邦佐。

六世祖讳邦器 (配)蒲氏
邑庠生。生二子,长景琦,次琮琦。

六世伯祖邦良 (配)潘氏
乡饮宾,乏嗣。

六世叔祖邦佐 (配)袁氏
官舍。生二子。长振琦,庠生;次嗣琦,乏嗣。振琦配李氏,生三子,长文灿,配李氏、张氏。邑贡生,学问渊博,屡试不第,精通地理、医术,治家有方。生二子,长名公,次名侯。振琦次子文炳,庠生。生二子,名乡,名臣。振琦三子文烜,庠生。生二子,名仕,名世。名乡、名臣、名仕、名世,四支迁移开化。

七世伯祖景琦 (配)陈氏、徐氏
廪生。生二子。长文烺,庠生。生三子,名彦,名贤,名宰。景琦次子文炽,生三子,名哲,名效,名忠。三房移居易门县。

七世祖琮琦 (配)李氏
生三子,长文辉[换火字边];次文燧;三文焕,庠生。

八世祖文燧 (配)朱氏
生一子,名帅。

八世伯祖文辉[换火字边] (配)李氏
廪生。生二子,名儒,名家。

八世叔祖文焕 (配)俞氏、杨氏
庠生。生三子。长名伯,(配)万氏。康熙甲子科举人,丁卯贵州同考官。初任安宁教,改昆明教,兼成材书院山长。再任登川州。文焕次子名师,廪生。文焕三子名献,廪生。

九世祖名帅 (配)吕氏
生二子,长璟,次瑢。弥东二房。

十世伯祖璟 (配)聂氏
生三子,长起龙,李氏;次起凤,李氏;三起麟,王氏。

十世祖瑢 (配)吕氏
生一子,世业。

十一世伯祖起龙 (配)李氏
生一子,国定。配李氏、范氏。国学生。生一子,耀,(配)杨氏。生三子,长殿元,武生,配田氏;次有光,武生,配赵氏;三殿甲,武生,配赵氏。

十一世祖世业 (配)袁氏
生四子,国富,(配)杨氏,乏嗣;国贵,乏嗣;国宝,夏氏;国材,沈氏。

十一世二叔祖起凤 (配)李氏
生一子,国治,配康氏。生二子,长煋,配陈氏;次熇,配张氏,乏嗣。

十一世三叔祖起麟 (配)王氏
生国鼎,(配)黄氏;国亮,(配)梁氏;国玺,配赵氏;国典。

十二世伯祖国宝 (配)夏氏

十二世祖国材 (配)沈氏
生四子,长炯,(配)王氏;次煦、熹、蒸。

十三世伯祖炯 (配)王氏
生五子,君选,君举,君聘,乏嗣,君用,君任。

十三氏祖讳煦
(配)陈氏。国学生。生一子,福远,(配)李氏。

十三氏叔祖讳熹
配周氏。继配罗氏。周氏生一子,君仁。罗氏生一子,应达,配李氏。应达与氏乏嗣。

十三世叔祖讳蒸。国学生。生一子,应祥,配杨氏。生一子,溥,配许氏。

十四世祖讳福远
配李氏。生三子,长曰灏,次源,三澎,一女从郭门。

十五世祖讳灏
配魏氏。生四子,长曰道昌,次道立,三道恒,四道原,一女从黄门。

十五世(叔)祖讳源
元配杨氏,乏嗣。

十五世叔祖讳澎
元配傅氏,继配胡氏。生一子名道渊,二女。又周氏生一子,名道泉,二女。

十六世祖讳道昌
生于咸丰戊午年八月二十三日未时,殁于民国壬甲二十二年六月初八日酉时。配曾氏,生于咸丰辛酉年七月二十九日亥时,殁于民国辛未年八月十四日己时。生六子,长曰克贤,次礼贤,三聘贤,四亲贤,五思贤,六用贤;二女,长适马姓,次适黄姓。

十六世叔祖讳道立
元配李氏,继配赵氏,乏嗣。

十六世叔祖讳道恒
生于同治甲子年三月十三日戍时。生一子,名见贤。母陈氏,生于同治七年戊辰 月 日 时,终于光绪三世年申辰腊月十三日未时。

十六世祖讳道源
生于同治丙寅年腊月初三日酉时,终于民国辛酉年冬月十四日亥时。配魏氏。魏氏生于同治癸酉年正月十九日酉时,终于民国戊寅年五月初十日午时。生二子,长名择贤,次名尚贤。

十六世祖讳道渊
生于光绪庚辰年六月廿四日未时,终于民国丁卯年正月十六日吉时。配马氏,生于光绪辛巳年七月廿一日未时,终于公元戊戌年正月初四巳时。生二女,长适马姓,次付氏。

十七世祖讳克贤
生于光绪癸未年四月十四日丑时,终于民国庚甲年五月初六日戍时。配邹氏。邹氏生于光绪甲申年十月十八日丑时,终于公元庚子年正月廿一日未时。生一子,名汝贵;一女,适李姓。

十七世祖讳礼贤
生于光绪丁亥年二月初六日子时,终于民国壬子年七月廿九日辰时。配赵氏,生一子,名鑫培,后失传。

十七世祖韩聘贤
乏嗣。

十七世祖韩亲贤
生于光绪十八年壬辰七月二十一日亥时。元配陈氏,继配刘氏。生二子。

十七世祖韩思贤
生于光绪二十七年辛丑七月初六申时。元配陈氏,继配杨氏。生三子。

十七世祖讳用贤
生于光绪三十三年丁未四月初六子时。配苗氏,生于??乙酉年五月十七日寅时。生二子,长子保昌,生于正月二十二日寅时。二子生于癸未年腊月二十五日寅时,配时氏,长子配蒋氏。

十七世叔祖荐贤
配黄氏。丁亥年三月十七吉时。黄氏生二子一女。子生于二月初十亥时,二子生于丁未年八月二十八丑时,女生于九月二十七辰时。

十七世祖,四支称,韩公讳亲贤
元配陈氏,继配刘氏。生二子一女。长子汝祥,次汝发。亲贤生于光绪壬辰年五月十五日吉时,终于公元辛丑年三月十五日辰时。亲贤元配陈氏,生于光绪壬辰年吉月吉月吉时,终于民国戊午年六月二十五日吉时。亲贤继配刘氏,生于光绪甲辰年五月二十一日亥时,终于公元庚子年三月初四日申时。亲贤长子汝祥,原命生于民国戊辰年四月十八日吉时。配张氏,生于民国己未年九月二十五日子时。汝贤次子汝发,原名生于民国庚午年。配王氏建英,生于公元一九三五年五月。汝祥生二女一子。长女生于公元壬辰年八月廿九日申时,次女生于公元乙未年十月初十日亥时,子生于公元戊戍年二月初十日亥时。(本页自此处始行间错乱)。

十七世祖保贤
生于光绪癸卯年吉月吉日吉时,终于公元丁酉年正月十二日寅时。配夏氏,生于光绪辛丑年,终于民国甲申年四月廿六日寅时;杨氏,生于光绪丙午年吉月吉日吉时,终于公元甲辰年二月十二日酉时。

十八世祖汝祥、汝贵(自此处始数字不清晰,稍后补录)

南阳韩氏宗谱世系图

图序

我韩氏一门,自始祖成公以下,凡二十世,宗谱录者,十八世而已矣。以春公始,仅记十七世。而世有更替,嗣见存乏,长房未必袭祖荫而光大门楣,次子或可继香火且世代不绝。数百年间,行旅驻戍之劳苦,悲欢离合之秘辛,仕宦营营之沉浮,庶民碌碌之晨昏,倏而俱往,茫然不可追矣。惟余故纸一十八页,藏于乡间农舍。修谱大事,由一姓之公义,忽变而成一房之私务。国既禁之不及,家亦承之无力,是故谱系湮没,宗族断绝,此非独吾一姓一门之殇也。每念及此,腕为之扼断,酒为之不能下。幸于弥勒县访获《南阳韩氏宗谱》,阅之有所感,遂录毕誊清,条分缕析,得世系图一。图者,文之辅也;既一目以了然,又纲举而目张。族胞同门,有偶见之者,或四顾而有追远之意,则图之为图,尤韩氏之为韩氏焉。十九世孙 磊 焚香沐手撰。

(点击看大图)