心目中的编程高手(ZT)



Joy.Colloquium.png Bill Joy, 前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据说他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD的前身。当然是传说了,但足见他的功力。另一个传说是,1980年初的时候,DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了,拒绝把BBN TCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了,端的是一箭封喉,很快就写出了高性能的伯克利版TCP/IP。当时BBN和DARPA签了巨额合同开发TCP/IP Stack,谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿T-shirt不象现在,还是相当散漫的哈)。只见BBN问:你怎么写出来的?而B伯伯答:简单,你读协议,然后编程就行了。最令偶晕倒的是,B伯伯硕士毕业后决定到工业界发展,于是就到了当时只有一间办公室的Sun, 然后他就把Sparc设计出来乐象这种软硬通吃的牛人,想不佩服都不行的说。据Bill Joy的同事说,一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处,B伯伯发言,直切要害,提出漂亮的构想,让同事们彻底崩溃。对了,他还是Java Spec和JINI的主要作者之一。

John.Carmack.png John Carmack,ID Software的founder和Lead Programmer。上个月和一个搞图形的师兄聊天,他竟然不知道John Carmack, 也让偶大大地晕了一把。不过也许搞研究的和搞实战的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞个小动画都能让人惊叹一番的时候,J哥哥就推出了石破天惊的Castle Wolfstein, 然后再接再励,doom, doomII, Quake…每次都把3-D技术推到极致。J哥哥的简历上说自己的专长是"Exhaust 3-D technology",真是牛人之言不我欺的说。做J哥哥这样的人是很幸福的,因为各大图形卡厂家一有了新产品就要向他“进贡”,不然如果他的游戏不支持哪种卡,哪种卡基本就会夭折乐。当初MS的Direct3D也得听取他的意见,修改了不少API。当然,J哥哥在结婚前十数年如一日地每天编程14小时以上,也是偶们凡人望尘莫及的。对了,J哥哥高中肆业(?!),可以说是自学成才。不过呢,谁要用这个例子来为自己学习不好辩护,就大错特错了。那Leonardo Da Vinci还是自学成才呢(人是私生子,不能上学)。普通人和天才还是有区别的。对了,其实偶们叫“达分奇”是相当不对的,因为Vinci是地名,而Da Vinci就是从Vinci来的人的意思。换句话说,Leonardo Da Vinci就是“从Vinci来的Leonardo”的意思。叫别人“Da Vinci”就不知所谓乐。嗯,扯远了,打住。

David.Cutler.png David Cutler,VMS和Windows NT的首席设计师,去微软前号称硅谷最牛的kernel开发员。当初他和他的手下在微软一周内把一个具备基本功能的bootable kernel写出来,然后说:"who can’t write an OS in a week?",也是牛气冲天的说。顺便说一句,D爷爷到NT3.5时,管理1500名开发员,自己还兼做设计和编程,不改coder本色啊。D爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。:-) 日常交谈F-word不离口。他面试秘书时必问:"what do you think of the word ‘FUCK’?",让无数美女刹羽而归。终于有一天,一个同样火爆的女面对这个问题脱口而出:"That’s my favorite word"。于是她被录取乐,为D爷爷工作到NT3.5发布。

Donald.E.Knuth.png Donald E. Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,学数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知到Anders Hejlsberg,或者学Linux不知道Linus Torvalds一样,不可原谅啊。:-) 为了让文章完整,就再罗唆几句吧。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给别人时收一两千美元,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过,学者本色的说。想想那可是60年代初啊,高爷爷写编译器写多了,顺带就搞出了个Attribute Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比赛(有Alan Kay得众多高高手参加)总是第一,写的Tex到86年就code freeze,还附带2^n美分奖励等等都是耳熟能详,偶就不饶舌乐。顺便说一下,高老大爷是无可争议的写作高手。他给Concrete Mathematics写的前言可谓字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,而且没有学究气,不失轻快跳脱。记得几年前读Concrete Mathematics,时不时开怀大笑,让老妈极其郁闷,觉得我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那完全是高爷爷的功劳。说到写作高手,不能不提Stephen A. Cook。他的文章当年就被我们的写作老师极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,总是面带谦和的微笑,颇有仙风道骨,正好和他的仙文相配的说。高爷爷其实还是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走,但他捐献了好多作品,都可以在网上看到,比如著名的Mathematical Writing,MMIXWare,The Tex Book等,更不用说足以让他流芳百世的Tex乐。

Ken.Thompson.png Ken Thompson,C语言前身B语言的作者,Unix的发明人之一(另一个是Dennis M. Riche老大,被尊为DMR),Belle(一个厉害的国际象棋程序)的作者之一,操作系统Plan 9的主要作者(另一个是大牛人Rob Pike, 前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。1969年还是计算机史前时代,普通人都认为只有大型机才能运行通用的操作系统,小型机只有高山仰止的份儿。至于用高级语言来写操作系统,更是笑谈。Ken爷爷自然不是池中物,于是他和DMR怒了,在1969年到1970间用汇编在PDP-7上写出了UNIX的第一个版本。他们并不知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把Unix用C重写,于是C在随后20年成就了不知多少豪杰的梦想和光荣。Ken爷爷还有段佳话:装了UNIX的PDP-11最早被安装在Bell Lab里供大家日常使用。很快大家就发现Ken爷爷总能进入他们的帐户,获得最高权限。Bell Lab里的科学家都心比天高,当然被搞得郁闷无比。于是有高手怒了,跳出来分析了UNIX代码,找到后门,修改代码,然后重新编译了整个UNIX。就在大家都以为“这个世界清净了”的时候,他们发现Ken爷爷还是轻而易举地拿到他们的帐户权限,百思不解后,只好继续郁闷。谁知道这一郁闷,就郁闷了14年,直到Ken爷爷道出个中缘由。原来,代码里的确有后门,但后门不在Unix代码里,而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码,就自动生成后门代码。而整个Bell Lab的人,都是用Ken爷爷的C编译器。

Rob.Pike.png Rob Pike, AT&T Bell Lab前Member of Technical Staff,现在google研究操作系统。罗伯伯是Unix的先驱,是贝尔实验室最早和Ken Thompson以及Dennis M. Ritche开发Unix的猛人,UTF-8的设计人。他还在美国名嘴David Letterman的晚间节目上露了一小脸,一脸憨厚地帮一胖子吹牛搞怪。让偶佩服不已的是,罗伯伯还是1980年奥运会射箭的银牌得主。他也是个颇为厉害的业余天文学家,设计的珈玛射线望远镜差点被NASA用在航天飞机上。他还是两本经典,The Unix Programming Environment 和 The Practice of Programming 的作者之一。如果初学者想在编程方面精益求精,实在该好好读读这两本书。它们都有中文版的说。罗伯伯还写出了Unix下第一个基于位图的窗口系统,并且是著名的blit终端的作者。当然了,罗伯伯还是号称锐意革新的操作系统,Plan9,的主要作者。可惜的是,Plan9并没有引起多少人的注意。罗伯伯一怒之下,写出了振聋发聩的雄文 Systems Software Research is Irrelevant,痛斥当下系统开发不思进取,固步自封的弊病。虽然这篇文章是罗伯伯含忿出手,颇有偏激之词,但确实道出了系统开发的无奈:开发周期越来越长,代价越来越大,用户被统一到少数几个系统上,结果越来越多的活动是测量和修补,而真正的革新越来越少。就在罗伯伯郁闷之极的时候,google登门求贤来乐。如果说现在还有一家大众公司在不遗余力地把系统开发推向极致的话,也就是google乐。随便看看google的成果就知道了。具有超强容错和负载平衡能力的分布式文件系统GFS(现在能够用100,000台廉价PC搭起一个巨型分布系统,并且高效便宜地进行管理的系统也不多哈),大规模机器学习系统(拼写检查,广告匹配,拼音搜寻。。。哪个都很牛的说),更不用说处理海量并行计算的各式google服务了。Rob在System Software Research is Irrelevant里萧瑟地说现在没有人再关心系统研究的前沿成果了。想不到他错了,因为google关心。google网络了大批功成名就的牛人,还有大量初生牛犊般博士做开发,显然不是没事耍酷,而是因为它们的开发总是试图吸取系统研究的最新成果。想必Rob Pike在google很幸福。愿他做出更棒的系统。

Dennis.M.Ritchie.png Dennis M. Ritchie 既然Ken Thompson是我的偶像,新闻组上人称DMR的Dennis M. Ritchie自然也是,毕竟两人共同缔造了UNIX,而Dennis几乎独力把C搞大(当然,C的前身是B,而B是Ken Thompson一手做出来的)。J D两人1983年分享图灵奖,是有史以来少数几个因工程项目得奖的工程师(本来是唯一的一对儿,但Alan Kay才因为SmallTalk得奖,所以就成了唯二的乐)。一个人一生能做出一个卓越的系统已经不易,DMR的C和UNIX长盛不衰近30年,至今生机勃勃,DMR此生可以无憾的说。D爷爷也算有家学渊源:他老爸在AT&T贝尔实验室工作了一辈子,并在电路设计方面卓有成就,还出了本颇有影响的书The Design of Switching Circuits,据说在交换理论和逻辑设计方面有独到的论述。当然,D爷爷和他老爸是不同时代的人:他老爸的研究成形于晶体管发明之前,而D爷爷的工作离了晶体管就玩儿不转乐。:-D不要看D爷爷搞出了C,其实他最爱的编程语言是Alef,在Plan9上运行,支持并行编程。Alef的语法和C相似,但数据类型和执行方式都和C大大不同。说到语言,D爷爷对后来人有非常中肯的建议:抱着学习的目的来开发你自己的语言,不要冀望于它被众人接受。这个建议不光对语言开发有用,也适用于其它大型系统的开发。别的不说,DMR后来领导自己的团队在1995年和1996分别推出了Plan9和Inferno操作系统,又用多少人知道呢?其实,D爷爷当初也没想过C会风行世界。他开发C的初衷和Eric S. Raymond在Cathedral and Bazaar里阐述的一样,就是要消除自己对现有工具的不爽之处。谁知D爷爷无心插柳,C竟然受到众多程序员的狂热拥戴,连D爷爷自己都大惑不解。在一次采访中D爷爷说大概那是因为C的抽象程度碰巧既满足了程序员的要求,又容易实现。当然C一度是Unix上的通用语言也是原因。但不管怎么说,D爷爷对编程语言出色的审美意识奠定了C广为流传的基础。最后八卦一下。D爷爷的业余爱好和NBA大牛Karl Malone一样:开卡车。不过D爷爷更喜欢开NASCAR,而KM独爱巨无霸。J D爷爷自称心中不供偶像,如果一定要说一个,那就是Ken Thompson了。现在Ken爷爷退休当飞机教练去了,而D爷爷当了贝尔实验室系统开发部的头,整日忙于开支票。他俩合作20年,屡屡创造历史。这段令人神往的佳话,也就长留你我心中乐。P.S.,很多人都以为Brian W. Kernighan是C的作者。其实BWK只是写了那本经典K&R C。据D爷爷说,他,Ken和Kernighan三人中,Kernighan最能写文章,他次之,而Ken写得最少;但说到编程,Ken爷爷才是当之无愧的老大。

Edsger.Wybe.Dijkstra.png Edsger Wybe Dijkstra 对,就是E.W. Dijkstra. 一提到EWD,很多人就会想起找最短路径的Dijkstra Algorithm,就好像一提到Sir. Tony Hoare,就想起Quick Sort一样。其实这些个算法不过是两个牛人在他们职业生涯中最琐碎的贡献。比如Dijkstra算法,无非是戴爷爷在1956年为了展示新计算机ARMAC的计算能力,初试身手的成果,属于他的算法处女作。据戴爷爷自述,他搞出最短路径算法的时候连纸笔都没用。当时他和他老婆在阿姆斯特丹一家咖啡厅的阳台上晒太阳喝咖啡,突然就把这个算法想出来乐。而且当时的算法研究还比较原始,牛人们忙着用计算机搞数值计算,对离散算法不屑一顾。那时连一个象样的专注于离散算法的专业期刊都没有。戴爷爷于是推迟发表这个算法。直到1959年,他才把这个算法发表在Numerische Mathematik的创刊号上,权为捧场。:-) EWD在多个领域牛气冲天,端的是理论和编程两手硬的高手。只不过他的很多工作比较深刻,学校的老先生们觉得本科生接受不了,不给本科生讲而已。戴爷爷大概因为最短路径算法一战成名,于是有人请他参加另一台计算机X1的设计工作,并且把设计实时中断系统的任务派给了他。现在看来实时中断也许不算什么,但要知到,X1前根本就没有实时中断的概念。实现它简直就是一场豪赌。戴爷爷起初还不情愿,但经不住项目负责人Bram和Carel的轮番“吹捧”:我们知道实时中断让您工作变得非常困难,但象您这样的牛人肯定能做出来的说。结果戴爷爷被糖衣炮弹彻底击穿,接下了这个烫手山芋。两三年后,他不仅搞出了实时中断,还围绕这个写出了自己的博士论文,顺利戴上博士帽。让戴爷爷真正成名立万的还是在X1上开发的Algo60,最早的高级语言之一。戴爷爷没日没夜地工作了8个月,就搞出了Algo60,也因此获得了1972年的图灵奖。因为Algo60,戴爷爷发表了一篇石破天惊的文章:Recursive Programming,于是人们才知道,原来高级语言也可以高效地实现递归,原来从此以后,所有程序员都不可避免地和戴爷爷发明的一个词(应该说是概念)打交道:堆栈。而且Algo60还让戴爷爷深入地思考多道程序设计的问题,最终发明了每个系统程序员都绕不开的概念:semaphore。当然,戴爷爷总是把他发明的概念严格形式化,极具科学家本色的说。和这些成就想比,他提出的吃饭的哲学家问题,也就没什么好说的了。说来好笑,当时的大学(忘了哪所了)还是觉得戴爷爷没有受过正统的数学训练,也不是专门搞数值分析的,所以最后不太情愿地给了他一个教职。这种小挫折并不能妨碍象戴爷爷这样的牛人创造历史。他一边教数值分析(:-D),一边开始开发一个新的操作系统,并培养计算机科学家。几年后,THE Multiprogramming System横空出世。THE是第一个支持松散耦合,显式同步的进程并由此使得严格证明系统没有死锁变得容易的操作系统。可惜戴爷爷任职的系不识货,还强行解散了他的研究小组(1972年戴爷爷给他的系主任说他得了图灵奖,系主任的第一反应是你们搞计算机就喜欢乱发奖)。这让戴爷爷相当郁闷,得了抑郁症。在极度郁闷之中,戴爷爷决定用写作来治疗自己的抑郁症。于是经典就诞生乐:Notes on Structured Programming。戴爷爷从此被尊为结构化编程的奠基人,而且他的抑郁症也被治好乐。EWD太牛,结果他的故事也太多。先到这里吧。1973起,他的故事就在美国发生了。

Anders.Hejlsberg.png Anders Hejlsberg,微软.NET的首席架构师,编程语言设计和实现的顶尖高手。他一手做出了Turbo Pascal,也是Delphi, J (尤其是WFC),C#和.NET的主要作者。这些作品的名字足以为他立传。作为一个程序员,我在这样的大师面前实在无语。生子当如Anders的说。李维的《Borland传奇》里已详细讲述了Anders的传奇故事,我就不用费舌了:http://java.mblogger.cn/iexploiter/posts/1505.aspx。Artima上有Anders谈C#的系列访谈。MSDN上有一段Anders导游的录像。有兴趣可以去看看牛人的丰采。


Dear 2007, Bear 2008

2008-1-1

2007好像逝去了很多,比如四年的大学生活,惬意的济南城还有那无拘无束的青春。

得到了些什么?一台笔记本,一硬盘的音乐,一个欧冠奖杯,一张北京的门票和一张更加迷惑于未来的脸。

2007。平凡的数字,不是素数,更不是偶数。

2008。吉祥的数字,代表奥运,更代表未来。

2008-1984=2007-1984 1=2*12=72/3=30-6=24.

2008起,就要面对那可怕的数字人生。

数字是时间的传教士,你可以讨厌他,但你却不能忽视他。

IT魔咒

2007-12-30

百度CFO也挂了……

天灾,人祸,都全了。

不禁感慨IT短命魔咒,不管工作累死还是度假爽死,总有一死,而且总比期望的先死……

怎么办?

找了个十大IT危险生活方式…… 居然10条全占了。一直再想其他,不料不经意间生存都成了问题。睡觉。


危险方式1:极度缺乏体育锻炼。在932名被调查者中,只有96人每周都固定时间锻炼,68%的人选择了“几乎不锻炼”。这极易造成疲劳、昏眩等现象,引发肥胖和心脑血管疾病。

危险方式2:有病不求医。调查显示,将近一半的人在有病时自己买药解决,有三分之一的人则根本不理会任何表面的“小毛病”。许多上班一族的疾病被拖延,错过了最佳的治疗时间,一些疾病被药物表面缓解作用掩盖而积累成大病。

危险方式3:缺乏主动体检。932人中,有219人从来不体检。

危险方式4:不吃早餐。随着工作节奏加快,吃上符合营养要求的早餐已经成为办公室白领的奢求。被调查者中,只有219人是有规律、按照营养要求吃早餐的。不吃早餐或者胡乱塞几口成为普遍现象。

危险方式5:与家人缺少交流。有超过41%的办公室人群很少和家人交流,即使家人主动关心,32%的人也常抱以应付的态度。在缺乏交流、疏导和宣泄的情况下,办公室人群的精神压力与日俱增。

危险方式6:长时间处在空调环境中。在上班时,超过7成的人一年四季除了外出办事外,几乎常年窝在空调房中。“温室人”的自身肌体调节和抗病能力下降。

危险方式7:常坐不动。被调查者中,有542人的工作习惯是一旦坐下来,除非上厕所,就轻易不站起来。久坐,不利于血液循环,会引发很多新陈代谢和心血管疾病;坐姿长久固定,也是颈椎、腰椎发病的重要因素。

危险方式8:不能保证睡眠时间。有超过6成的人经常不能保证8小时睡眠时间,另有7%的人经常失眠。

危险方式9:面对电脑过久。31%的人经常每天使用电脑超过8小时。过度使用和依赖电脑,除了辐射外,还使眼病、腰颈椎病、精神性疾病在办公室群体中十分普遍。

危险方式10:三餐饮食无规律。有超过1/3的人不能保证按时进食三餐,确保三餐定时定量的人不满半数。

回头

时间就如同留声机,读写头走得越快,声音就越是刺耳。

总是在试图掌控时间,总在想,活着就是要思考,要回溯,即使白驹过隙,抽时间想一想临近的过往也能活的坦然,如果过往充实,则嘉勉而行,如果过往碌碌,则鞭策而行,于是,一切都尽在掌握中。听起来很美,却总是输得一无是处,因为一切的一切都是基于那个赤裸裸的前提。但是生活充实就好?

一切还是要从那堆文档说起,压抑了许久,思绪都快压霉了。

每天总是以文档开幕,并以不了的文档闭幕。

昨日依旧。

晚上下课回来就在写,一直写到1点,一直写到身体受不了。

1点多爬上床便开始用手机看电子书,郭小四的<<悲伤逆流成河>>,一看看到三点半。矫情的文字,单调的线索,不顾亲情的纵生……抄袭男奢靡生活后的闲暇文字也竟看了几个深夜,看得我郁闷顺流入海。想想大四也经常这么打法日子,周遭静悄悄,浅色的光把文字映入睡眼,直到睡眼朦胧……只是那时不用考虑近在咫尺的明天,因为明天和今天没有什么两样,如今,文字已不允许映入眼帘,因为现实不允许眼睛入眠。

一觉睡到9:00,早晨与晚上无二,文档已然成了全部。11:30,火箭的比赛,适逢午饭时间,无二,午饭抛到云霄之外。两个加时,一直打到了3:00,无二,一如既往的输,唯一的好处是,输总是让人消沉,消沉容易让人饥饿感全无,于是文档一写写到5:00。5:20,阿远、箱子来叫上自习,犹豫了一会,最终还是决定不去,与其坐在自习室胡思乱想,不如在宿舍三心二意。

吃过饭,继续写,一直写到11:00,写得身心俱疲,于是走到超市买了点吃的,买了瓶可乐。可乐,记得在家时,电脑前总是放一杯可乐,午夜后总是喜欢品一口,爸妈睡觉前的一句话总是“别睡得太晚。”,但又总是在出去逛时,带回来一桶2L可乐,爱与爱总是交织不清。没有什么要买的,却在超市瞎逛了20分钟,仿佛把超市当作清新的野外一般,头昏脑胀的只想深呼吸。可是,宿舍总是要回,文档也总是要写,此刻,可乐成了一种寄托……

又是一个无眠的深夜,有如上周一般,窗外路灯廖然,没有行人,没有车灯,那一抹暗黄俨然成为一种摆设,斜对面的C座还有两颗两点,也许他们也跟我一样?

夜很深,深的漫无边际,甚至伸到了不远的明天。

明天。又是忙碌的一天,8:00就要起,去物业那排火车票……

以前总是不理解镜头里的人为了火车票而争得头破血流,现在才有所了解,每一个在异乡漂流者,总有一抹心酸的回忆,而家是他们支撑信念的唯一。

我想回家,可是还要静等一个月。

一个月,不长不短,可是如果每天都像近日一样,那还不如时光静止。清楚的记得,每次回家爸妈的第一句话总是“怎么瘦成这样了,赶紧在家补补……”,伴随着的是关切的眼神,眼神驻留了许久。我不知道现在比刚来的时候瘦了多少,面容萧条了多少,唯一可以肯定的是,现在与他们相见,眼神会驻留更久……最近,家人总是发短信问什么时候放假,我每次都说还不一定,还不知道考完试老板让不让走,其实,早就了解到老板肯定让走,而且明天也打算订23号的票,为什么每次都说不一定,连自己都不知道……

文档写到2:30就知道,今天肯定还是写不完了,折磨依旧,明天还会睡这么晚吗?

明天是什么样,我不知道,后天是什么样,我不愿去想,也许我已经等不到后天……

绝望。人在绝望时总是寻求一种解脱,正如<<悲伤逆流成河>>结局一般,可是自己的解脱却让自己的亲人一辈子得不到解脱,人不能这么自私,因为宿命的十字架已经刻的很深,人不是为了自己而活着。生活的意义到底在于什么?不顾一切的向前?安逸祥和的天伦?我选择后者,至少今晚如此……

亲情最重要,身体更重要,因为经验表明,身体的沉沦是亲情的热焰迸发的根源……

但是,我感觉,身体在一点一点的下沉,意志在一点点的消沉,仿佛在走远……

回头。

学习遥遥无期

结果真的很重要。

6点,颠吧颠吧,跑去上自习,找到一无人教室,大喜。8点半,发现自习室竟然还是自己一人,失望,于是颠吧颠吧跑回宿舍,一路上不时的安慰自己,有个Turing机读书报告,还要做,还要做……正如某日,在宿舍呆到失望,于是,8点半颠吧颠吧跑去自习,发现自习室人竟是如此之多,望众人奋笔疾书之神态,观自己萧索颓败之鬼态,不免若有所思,此时进去不免遭人鄙视,于是又颠吧颠吧的跑回宿舍,不同的是20min前的失望之情已是荡然无存……

有点讽刺。上午听罗大牛开小差似的讲到21世纪的教育,说到了“终身学习;以学生为中心;教育的国际化。”,听得为之一振,并在那一瞬间,立誓要好好学习,把至少要把有限几年时光放到正经事儿上;然后罗导又开大差似的讲到了外语学习,讲到他学习外语时的铁血柔情,并不时的把外语教学体制鄙视一番,想到这些年外语学习的举步维艰,不由得志上心头…… 于是一个个美妙的模糊的场景映入眼帘,看得我心旷神怡。

说白了就是个Vision跟Action的关系问题。不禁再次感慨罗导,不经意间他已经把两者的关系阐述的清晰异常,他提出的Use-Case driven不仅是SDP的principle,同时也是生活的principle,如果一切Vision都可以规格化,可以文档化,实践和反思工作岂不是简单异常?可是我这辈子最讨厌写文档…… 于是规划总是遥遥无期。

我是回来写Turing报告的,又冒出了一堆废话,活脱脱的weirdo。

Eager For Porcine Snow

大自然总是向往着平衡,过高过低,过浓过稀,过冷过热,过静过吵,都不是其本意。人亦是如此,内心火热就渴望着适度的降温,因为如果持续火热就意味着升华,化学的升华,升华到消失不见……

可是这终究不是好的解决办法,温度只能影响体温,而体温与心脏总是相隔很远,即使影响,也只是微不足道,如果火热的过分剧烈,温度也只能反复而已,波峰,波谷,而且后面的波谷甚至比前面的波峰还要高出一大截,将物理学中波的本意抛在脑后。

于是,有人提出从根源入手,毕竟万物追溯到本源都平凡的让人难以想象。可惜追溯的过程却是如此的复杂,以至于我们总是不经意的停在一个中间的节点就以为看清了事情的本质。

正如芸芸众生一般,无聊的我也总是在闲暇之际若有所思的追溯。幸运的是我追溯到了中间节点也追溯到了本源,不幸的是中间节点是如此的显而易见,本源却是如此顽固的难以改变。

火热,终究是有原因的,而且原因很是简单,正如wize所说“问问你自己,你比谁都清楚。”可惜清楚是一码事,而清楚的结果却不是那么清楚,正如本文的行文表达,晦涩并且无趣。

恩,比谁都清楚,但是清楚并不意味着平衡,因为奇怪的是,越是清楚,内心的温度却越是火热,于是追溯成了唯一的手段。

追溯确实是一个良好的学习过程,不经意间竟学到了许多许多。我清晰的看到大脑右半球遍布着无数的几何形状,无尽的感情和数不清的想像出的场景,事实清晰的表明,自己一直生活在胶结的情感之中,不能自拔,有人说“左撇子实际上是人类中的弱者”,对此深信不疑,因为如果人只能靠想象度日,那还有什么生活可言,碧落?也许特例而已,正如痴等了许久的中国队也能偶尔去趟世界杯一般。可这只是零星的一片,更大一片却在内心安静的躺着。Carl Jung说过:有一类人,他把他的心理能量向内释放,兴趣所在不是外部世界而是自己的内心世界,即他自己的观点、思想、情感和行为;而Freud更是对这类人给出了一个精确定义:具有精神病的倾向的人。大师就是大师,结论总是一针见血,令人敬仰,可是有一点他们却并未提及,那就是这类人是的行动极端Solid,即使内心的情感盘旋许久,意念坚定不移,他的行动却是如此的豁然,如此的Solid,以致于每当事后回头看看,都会看着自己那张失败的面孔情不自禁地笑,恩,嘲笑。乐观的人总是倡导一种环境改变论,正如Mom所说“如果小时候多带你出去就好了。”“出去锻炼几年就好了”,每当听到这种论调,我总是深信不疑,然后事后唏嘘不已,因为经验使我深信环境改变不了一个顽固的基因,因为它总是在试图改变环境抑或寻觅适合的环境。我在想是不是每个人冥冥中为一个神所支配,而支配我的那个神恰巧在榻安睡,恩,睡觉确实是最好的解释,因为熟睡的人总是沉浸在梦里,即使在梦里想做一件事,回到现实他也很难去做,因为他实在记不得梦里到底发生了什么。这类人讨厌经历斗转星移,也许星座也是一直很好的解释,也许我应该早来一天,那样的话,还会总写这种无聊的文字?天知道,那个熟睡的神更是知道,因为历史总是寻觅着一种巧合:也许他正巧是在23号那天睡下,因为之前的一个月他玩的太疯了……

人不能总凭空思索,如果没有任何结论总会有所不妥,Plato? 有人把他秉为思想家,有人却把他叫做YY男,当然,我是后者,也许只有我这么称呼……但是结论是什么?抓到本质后,通常会让人一头雾水,因为从逻辑学的角度,本质是剥掉了一切外衣一切修饰的东西,没有修饰支撑,人们通常不知所云,因为人的行动都是修饰后的情感驱使。但是有一点确是显而易见的,本质虽不能改变,却可以添加修饰,修饰多了可能本质就变了,正如肥仔所说“尝试改变嘛~~”。不过仔细想想,我确实是在修饰,过去在修饰,现在也在修饰。过去修饰着真实的感受,修饰表现在生活的点滴中。MSN,QQ经常弄上三个号挂着,一个公共,一个私人,一个自己……,04年底就在写blog,写到05年,就全删了,溢满的情绪孤芳自赏?空洞无趣。现在也是在修饰,至少第三个号基本上不登陆了,原来放在幽闭角落的文竟也会发在bokee,bokee也会留着QQ上;Space曾经用过,后来发现能提醒就没再用,所以用另外一个号建了一个Space,俨然是一大进步。只是每次一小步,也许乌龟可以战胜兔子,但是,生活不会偷懒,因为生活不是兔子。但是结论是什么?把生活改造成兔子,还是把乌龟转化为兔子?我不傻,因为我不是兔子,但是一切都需要时间,就向人生规划一般……,纵使你看不到,我也一直在改变,一直在明确……

说了这么多,不知道自己在说什么,正像自己一天到晚不知做什么一样。一边写日志,一边写Boss要求的总结报告,一边看Turing机要求的论文,看来左右脑确实同等重要。只可惜后两者都有Deadline,而前者却连Milestone也没有,也许真该好好规划一番,至少有些东西是需要好好Check的,不然整个Life 就是Crash了。突然感觉人生像极了软件工程,而我现在只停留在Requirement阶段,纵使内心有着数不尽的Scenario,却无法将Use case 付诸于Coding,甚至Design也没有,Deployment,Running? 过分遥远,不想也罢……

今天是北京的第一场雪,喜欢在风雪中无遮盖的独行,纵使曾经被Dinger bs为“这哥们脑子进水了,傻冒。”,也执着不悔,湿漉漉,凉嗖嗖的感觉,真好。可是,为什么雪不来的大一些呢?

PS: 再写就比总结报告的字数多了。读完竟想删,不过敲了半天也不容易,也许能意味着一些东西,留着。

PS: 简约使人进步,空洞使人退步。为什么一直在退步……

PS: 总结终于写完了。

还要多久?

生活就是Sisyphus的“奋斗”史,周而复始,单调无常。然而情节发展总能推理出一群逆天者,他们不甘于现状,他永远背对着常理,有人把他称之为勇者,有人则称之为逆子。在Sisyphus的山上也有这类人,他们被人们看做是虚度年华者,他们的行动总容易被人们所概括,并将之用一个优美的词语所代替,那就是颓废。

环顾四野,这类人不在少数,有人颓废得直白,有人颓废的隐讳,有人颓废的豁达,有人颓废的颓废,有人知道自己正在颓废,有人却在笑看别人的颓废。很不幸,我竟全是后者。

人总是在风暴之后,大脑才能无限清醒,仿佛被洗涤了一般。于是,我看清了一切。

新的环境总是能让人改变很多,思想的盲从总是能让人萧条许多,所以很多人有了沉沦的理由,并且堕落得理直气壮,我竟又是其中的一个。到现在为止,没有看清前方的一切,并且还假借思考而放置所有,虚伪得可悲,虚伪得可叹。

现在的我,总是喜欢顺着一条路走下去,即使周遭尽是阴霾,我要看着它们做作地笑,笑得分不清方向,笑得分不清是非,还要笑多久?笑到肌无力,还是笑到脑死亡?

镜子前的自己完全如暑假般萧索,混完一天,然后留下入梦前的的几分钟用作忏悔,然后明日依旧,忏悔依旧。可如今,时空紧缩,我却连忏悔的时间也腾不出,于是颓废占据了全部,没有动力,没有思考,没有了曾经的片刻的信仰。就像青春逝去般的可怕,总是在消失的一瞬间让人感到绝望。

总是试图用理智来指引行走的方向,可是又总是在某一瞬间,欲望背叛了理智,然后等到那一瞬间消逝后,再用理智提醒自己需要理智,周而复始,永无宁日。

掰开手指算了算,三个月已经过去了,还要多久?三年,抑或五载?再或者潦倒的一辈子?

总是尝试着改变,但却始终处于尝试中,或者说处于规划尝试中。规划的心满意足,于是在心满意足的回到了过往,于是规划了很久,失望了更久。

怎么了?迷惑费解充沛心智,曾经是一个理智的人,任何事都要仔细地揣度一番,然后在适当的场合做着适当的决定,于是一切一如想象,走得平稳,走得踏实,走得很接近既定的方向。如今,表情依旧,内心却不如昨。浮躁,奢华,纵欲占据了四野之三,整个人如同驱壳一般,能够行走到任何方向,但是指引他的却是遍布体内的Evil。

垮了,看不到任何希望。喜欢在迷离的和弦中思索,于是思绪被卷入音律中,顺着它的旋律走,消失在茫茫的尽头。我有时在想,我现在听的是BritPop,如果有一天我改听Gospel,那改如何?

整整编了一周的程序,历史遗留的程序,身心俱疲。传说中的爆炸性新闻后,自己突然清醒了许多。于是一口气写了很多,唯一不明白的是我的路在哪里,学计算机愁煞人,越法不想学这个专业,虽然有时编个程序,研究技术有些许意思。可仔细推敲,那都是心智超群的支配者玩弄的游戏,泛泛之辈涉足的话,只会身心俱疲。

平淡真好。

关于Jblooming

简单的了解了一下JBLOOMING。看管了Struts Spring 之类的 xml 配置驱动的框架,第一次知道原来JSP也可以进行配置,不免有些新奇,看过官方简陋的说明文档也大体了解其工作原理,但就Web层来说,这儿只是将web访问的状态封装了起来(SessionState,PageState,ApplicationState),然后在view部分进行简单处理。仔细想想设计的动机竟是如此简单,只不过其view部分的封装的彻底性导致其代码结构看起来有些恐怖异常。没有学过Tapestry,

看到这种封装,也大抵猜出T的事件驱动开发原理,无非是组件封装,事件封装以尽其OO之所能。
不过,说实话,JB关于ajax和view component的封装实在是太纯粹了(代码看起来有点ft),优化一下简直一个appfuse。

加油加油,早日编出一个属于自己的框架,一切尽在YY中。

Struts学习随笔(4)

  1. <html:base/\>
  2. 统一资源标识符(URI) 是一个简短的字符串,用来标识在Internet 或
    者其他网络中的资源。资源可以是一个文档,图像,下载文件,电子
    邮箱,或者其它东西。一个 URI可以对应一个服务器文件系统的路径,
    但通常也有一个别名。Strtuts应用中的许多URI都是Java类或者Action
    的别名。
    因为路径是在配置文件中定义的,你可以随时改变你的主意而不用触
    及到JSP源代码。如果 你更改并重载了配置文件,改变会在页面下次
    渲染时生效。
  3. <html:errors/\>

  4. 认识到了struts 导航的威力,所有的操作都要通过controllor,浏览器不留
    任何的书签…., ForwardAction体现的MVC的一大精髓,这种导航机制实在
    不错,client看不到任何的物理成分,牛

Struts In Action ChapterIII 终于看完了,收获颇丰……………….

Struts学习随笔(3)

对于一个框架,它至少应该具备以下三个部分:

####外部配置文件
提供开发人员不想嵌入源代码中的实现细节。

####中心控制器
提供一种方式,将HTTP 请求排入一个易于管理的队列。这种设计有时叫前端控制器
模式(Front Controller [Go3])

####外部表现系统
让不同的人同时工作在同一应用的不同部分。如, Java 工程师可以工作在和中心控制
器相关的类,而页面设计者则专注于JSP。除了JSP,其他表现系统,如Velocity Templates或者 XSLT, 都可以和Struts 一起使用。

####框架有时分为两极标有白盒和黑盒的统一体
白盒框架严重依赖于面向对象的语言的特征,如继承和动态绑定。黑盒框架则注重定义可插入组件的接口,然后基于这些接口提供基本的起始组件。接口和基本组件通常提供热点(hotspot)方法,这个方法可以直接使用或者重写后提供特别的行为。

Design Patterns 中的MVC 例子称为通知/订阅者(notify/subscribe)协议和观察者(Observer)模式的使用。

结合使用 JSP和 servlet 开始被称为Model 2 (单独使用JSP 称为Model 1)

层模式在一个复杂应用中,这可以在添加组件时,防止依赖关系呈指数增长。在设计远程应用时,分层是一个核心模式。

分层的web 应用使用一种比传统MVC 模式更加“扁平”的模式。控制器被夹在表现层(View) 和应用逻辑 (Model)之间。
每个组件的主要职责并没有改变。流程有轻微改变,即查询状态和改变通知都必须通过控制器。另一个改变是,当视图,或者表现层需要渲染动态页面时,它使用从控制器传递的数据而不是直接来自于模型层。这种改变去除了View 和 Model 的耦合,允许控制器选择数据和显示这些数据的视图。

Struts 通过提供一个控制器Servlet 实现了Sun 的 Model 2 架构,这个控制器可以用来管
理JSP 页面和其他表现设备之间的流程。Struts 通过使用ActionForward和ActionMapping
来保证表现层之外的控制流决策来实现 MVC/层 模式。JSP 可以引用一个逻辑目标。控制器组件在运行时提供准确的URI。
类 描述
ActionForward 用户指向或者视图选择
ActionForm 状态改变的数据
ActionMapping 状态改变事件
ActionServlet 控制器,接受用户请求和状态改变,以及发出视图选择
Action 控制器的一部分,与模型交互,执行状态改变或状态查询,以及告诉ActionServlet 下一个选择的视图

ApplicationResources.properties 存储本地化信息和标签,以使应用可以国际化
struts-config.xml 存储控制器对象的缺省配置,包括模型支持的用户指向,状态改变,状态查询

标记库描述符 目的
struts-html.tld 扩展HTML Form的JSP标记
struts-bean.tld 扩展处理JavaBean的JSP标记
struts-logic.tld 扩展测试属性值的JSP标记

IMPORTANT

实践中,控制器与视图的交互通过请求,会话以及Servlet 平台提供的应用上下文进行。
控制器和模型的交互通过文件和数据存储系统完成 (比如装入XML 文档或者属性文件),或者通过其他服务,如TCP, 创建一个到JDBC 数据库的连接。

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

当ActionServlet 收到一个请求, 它通过一系列的流程处理locale, mapping, form bean, 最
后是Action 来运行这个请求
当ActionServlet 收到一个请求, 它通过一系列的流程处理locale, mapping, form bean, 最
后是Action 来运行这个请求。这里某些步骤只在Struts 1.1 应用才有:
􀂄 处理多部分请求. 如果请求是个多部分(multipart)请求 (比如,一个表单加上一个MIME
附件), Servlet 用一个特殊的句柄包装这个请求,避免处理错误。
􀂄 处理路径 ActionServlet 首先检查这个请求路径是否是一个应用模块。如果是,相应模
块的配置被选中。[Struts 1.1]
􀂄 处理场所.(local) 默认下,ActionServlet 会检查是否有一个标准的locale 对象在用户会
话的上下文当中。如果没有, ActionServlet将放入一个。这个对象将为每个用户提供
本地化表现。
􀂄 处理内容和缓存 默认的MIME 类型和可选的请求头将加在响应之上。
􀂄 处理映射( Mapping) ActionServlet检查ActionMapping,是否有注册的路径符合正处
理的请求。如果没找到,ActionServlet 转发到默认(或 “unknown”) Action(如果设定有
默认或未知Action),否则,产生一个 “bad request” 错。如果找到相关映射,将被放入
请求之中,供后面引用。
􀂄 处理角色. ActionServlet 检查是否用户被授权可以访问action. [Struts 1.1]。
􀂄 处理ActionForm. ActionServlet 检查是否mapping 中指定了一个ActionForm.。如果是,
servlet 检查是否已经有一个存在于特定的范围之内(默认是会话)。如果不存在,
ActionServlet 创建一个。
􀂄 处理组装. ActionForm的 reset 方法被调用,然后通过反射机制被自动组装。匹配
ActionForm属性的参数将被使用。其他参数和属性被忽略。
􀂄 处理验证 ActionForm的 validate 方法被调用。如果方法返回false, 控制传递给
ActionMapping的input 属性标明的路径, Action 未被处理。
􀂄 处理转发和包含 如果ActionMapping 标明forward 或include 属性,控制被传递给其
他资源。否则ActionServlet 将请求委托给一个Action 对象。
􀂄 处理 Action. 如果mapping 标明一个Action 类型, ActionServlet检查是否已经有一个被
实例化了。如果没发现, Action 对象将被实例化。每个类只能有一个Action 对象
(Singleton 模式),它通过多线程处理所有对它的请求。Servlet调用 Action的 perform
或 execute 方法,传递请求, 响应, mapping, 以及form bean。
Action 执行要求的行为,可以包括:
􀂄 访问数据系统,比如JDBC 数据库
􀂄 在请求中创建被视图使用的对象
􀂄 如果需要,在会话中创建对象
􀂄 根据需要更新会话对象,比如用户的场所
􀂄 执行需要的业务功能
􀂄 处理以外和其他错误条件
􀂄 发送一个直接发送一个响应,或者返回一个ActionForward 给servlet
这里某些行为,象访问数据库,通常由Action 调用的业务对象来处理( Business Delegate
模式)。 Action 处理一些web 特定的任务,可以放在业务对象中的代码都应该放入业务对
象。Action 是一个控制器类,不应该用来处理业务的核心逻辑。

通常, 动态数据在JavaBean 中传递到请求上下文中的页面。这就是熟知的视图助手(View
Helper )模式
ps: struts in action 真是通俗易懂啊….