Archive for 十二月, 2006

我终于知道了怎么吸引眼球……

星期二, 十二月 26th, 2006
Tags:

一件哭笑不得的事情:
最近两天用Google Analytics看流量的时候,发现访问人数屡创新高(其实也就一天不到100,但已是很出乎我意料了…)。大多数都是New Visitor。
翻到Content Summary,看到访问量第一的是/cn/blog/archives/66,是第二名的n倍,链过去一看,是发的那个小游戏……
然后我心里就开始嘀咕,这是怎么回事……
查Marketing Summary,现在Google能够解析baidu搜索的关键字了,然后发现Top 5 Keywords是这样的:

1.孤胆枪手2
2.zidane
3.游戏孤胆枪手
4.孤胆枪手游戏
5.孤胆枪手2

然后我就更加纳闷了。
随后拿baidu一搜,知道原因了——这个页面竟然排在baidu第一页的第五位……
我记忆中大概高中期间出过一个动作游戏,叫做MDK,翻译成孤胆枪手,我还玩过一阵,对滑翔翼颇有印象——然后,现在那个东西出2了……

我同情那些寻找MDK2的人被baidu带到我的页面时的失望感觉……
于是把那个帖子的标题给改了,加了几个字——”不是MDK2″。
BTW:google没出这个问题,鬼知道为什么我那个页面在baidu排名那么高……

读完了csapp(中文名:深入理解计算机系统)

星期一, 十二月 25th, 2006
Tags:

上个星期终于把csapp看完了。
我买的是中文版的,因为除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里。现在看来,大概不能算是个优点,但是的确能够加快我的看书速度,否则一星期还真不大可能把这书搞定。

对csapp慕名已久,主要在于据说这本书尽量的做到相对实用,不去讲那些和实际编程没多大关系的计算机原理(毕竟是著名计算机院校里面最偏软件的cmu的作品),重点非常得当,像我这种没有本科科班出生又不想去死读些不知道以后有没有用的东西的人来说,最是适合了。感兴趣的东西就可以再加深,不感兴趣的就算了,正好。
在csapp的序言里有个课程列表,其中推荐了几种教学课程,对应使用不同的章节。我参考选用的是ICS+的规划。ICS+的cmu课号为15-213,据说正好和cmu的邮编相同,然后就有了这句“15-213: The Class That Gives CMU Its Zip!”。以这句为关键词,能够找到ICS+的slide。
ICS+的课程基本上涵盖了全书,除了第4章“处理器体系结构”以外。我自己除了跳过这个的确不太感兴趣的章节(太偏硬件)以外,还有第9章“测量程序执行时间”是略略翻过,其他的都是认真读完写完习题的。

书的确是难得的书。我第一次试图读这本书是几个月以前,当时第2章“信息的表示和处理”没看完就放下了,觉得讲了一大堆数字表达方式很没意思……这次稍微坚持了一下,没想到就一口气读下来了……
重点推荐第3章“程序的机器级表示”第5章“优化程序性能”第6章“存储器层次结构”第10章“虚拟存储器”。觉得这四章乃是全书之精华,看得人欲罢不能。

“程序的机器级表示”一章几乎是一种教授逆向工程的方法在讲授,剖析编译器产生的汇编代码,以此来加深对具体代码实现的理解。大量的习题都是根据汇编来猜源程序是什么,有趣极了。这一章还覆盖了缓冲区攻击——但是这点讲得太少了,不解渴,有时间自己弄弄……
讲底层离不了汇编这个有点棘手的东西,我还一度担心自己汇编学得不太过关,会碰到障碍。但这里作者提出一个很实际的要求:以前要求程序员都会写汇编,现在要求程序员都会读汇编。这里以一种“读”的方式教人用汇编,不局限于很多细小的语法,让仅仅懂得C的程序员也毫无障碍。仅仅100多页,不仅初步讲了汇编的语法和使用,还配合大量的例子分析来解读产生的汇编代码,让人理解深刻,实在是技高一筹。

“优化程序性能”是全书最闪光的章节。作者对一个例子不断优化,讲循环效率和过程调用,到讲存储器引用,一直讲到现代处理器的结构,讲到IA32处理器的局限,一路下来,畅快淋漓。还将IA32处理器的优化结果和Compaq Alpha 21164做对比,一目了然的看出哪些优化是处理器相关的,最后讲到profiling(程序剖析)指导优化,可以说平时能够用到的最高技巧(毕竟我还不是编译器开发人员……)和流程走了一边,现实意义相当之高。
这章把能够用到的所有技巧的原理全部讲解得清清楚楚,不做不必要的挖深,结合代码,让人丝毫不觉枯燥,真是佩服得五体投地。虽然章节后对编译器优化还提供了参考文献以及加深的内容,不过我觉得这章的内容已经足够我受用很久了。

“存储器层次结构”实际上可以看作是“优化程序性能”一章的延伸,以及为之后的“虚拟存储器”做铺垫。这章主要详细解释了高速缓存(cache)的工作方式,以及利用局部性使得cache达到最好效果的方法。
“虚拟存储器”(Virtual Memory)则上升到了操作系统层面,详细解析了VM的实现以及Linux系统上VM组织方式。自己觉得最受用的是malloc/free实现的动态存储器分配的具体方法以及对进程中具体存储结构的了解,还有GC的策略。这些让我感觉自己能够做到的事情似乎又多了一点,一直无法理解的valgrind之类软件的原理似乎也有了点眉目。
这两章讲得比较细致,以至于稍微显得有点枯燥。其实我自己喜欢这两章的主要原因是解了我多年来关于存储器的困惑。不过存储器方面的内容实在博大精深,自己这完全是得了点皮毛就沾沾自喜。

其实在学计算机方面我还是挺实用主义的,一直抱着碰到了再去仔细研究好了的态度,所以看书普遍不认真,只是求到时候能够找得到参考。不过这本书我觉得格外有趣,所以也看得格外认真,把每节后的习题都做了,家庭作业则等着过两天复习(计划是这样的……)的时候加深印象。
不过一直没找到csapp的实习手册。其中有个“二进制炸弹”实验非常吸引人,典型的反汇编作业,有点点实现我小时候破解愿望的感觉——希望找到以后不要让我太失望,呵呵。

不过这本书还是有些不足之处。让人感到最大的遗憾是最后三章“系统级I/O”“网络编程”“并发编程”讲得比较简略——自己正好是在这方面稍微熟悉点,觉得少了很多东西,有点遗憾。不过“并发编程”教给我了一个以前我根本不知道的东西——进度图,用来解释为什么会出现死锁以及如何解决实在是好极了(自己也是太孤陋寡闻……)。
另外还有个仔细读了apue2以后还让我非常困惑以至于还得上网查才弄明白的一件事,csapp当头一句话就解决了,那就是csapp写到pthread_detach函数时,说“为了避免存储器泄露,每个可结合的线程都应该要么被其他线程显式地回收,要么通过调用pthread_detach函数被分离”。而apue2关于detach的那段话硬是让我云里雾里,仅仅解释了thread的行为和怎么用,不讲为什么,害得我还得去查……不过apue2的thread部分不是W.Richard Stevens写的,是Rago后加的,的确有质量差别……

想来书也是有轻重之分,csapp的重点还是再讲硬件和软件的结合部,后面系统偏应用级的东西只是做抛砖引玉之用,也是难怪。尽管是这样,csapp有时还是会让人眼前一亮。
这本书另外的问题就是虽然中文翻译还算不错——也是过了个修订版的缘故,但是排版经常出错,尤其是排汇编代码和注释的时候。而且这个书名翻译得特别没劲,愣像是混杂在一堆国产计算机结构书里的东西……
不过还是那句,瑕不掩瑜,csapp的确是我看过的最好的计算机书之一了(本来想不加之一的,不过不加至少有点对不起apue^_^)。

说回来,csapp的致谢里面有这样一句话:

最后,我们衷心感谢伟大的技术作家Brian Kernigam以及后来的W.Richard Stevens,他们向我们证明了技术书籍也能写得如此优美。

UPDATE: 感谢Alan提供CSAPP的实验资料。由于需要的人实在很多,而且我又很懒,所以请这里下载,请善用。不要给我来信索取资料,我会删除所有索取留言,谢谢。

平安夜,推荐一个小游戏

星期日, 十二月 24th, 2006
Tags:

又是从Gaame找来的。
非常简单的游戏,但有着非常好的画风以及非常动听的背景音乐,很适合平安夜的气氛,呵呵。
链接在这里
这是我的记录:

逛了逛食博会

星期六, 十二月 23rd, 2006
Tags:

武汉的食博会又开了,还是老地方——武展(现在名叫武汉国际会展中心……)。门票两元/人,从22号开到25号。
自己对食博会印象最深的就是小时候的某次,拿着牙签走一路吃一路,尤其是吃了一大堆切得薄薄又脆脆的顺风(卤猪耳朵),顺带买下两袋,心情颇是舒畅,呵呵。

今天拉着老爸过去转了转,不过也没有太多打年货的意思,一共买了不到100块的东西……
让老爸感到收获最大的是,买到了某种我根本没见过的东西:皮肚。其实就是油炸肉皮,不过貌似很有讲究。老爸当时是发现有人手上拿着一大堆类似泡沫的东西,然后逮着了问在哪儿买的。先是看到了一家上海的,不过皮肚上有黑点,老爸不满意,又找,找到家无锡的,做得东西真是漂亮,弄了半斤(没怎么能还下价,14元/斤)。不过那么膨松的一大堆的确不太好拿……
老爸说皮肚做汤就很好吃了,一般只有江浙那边才有,武汉很少见。我不知道……等到能够吃的时候再评论好了。

另外的收获包括四川某极品花椒——什么叫做极品?那花椒旁摆的是现磨的芝麻酱,隔着几米远,看样子我以为在磨花椒油……实在太厉害了,摊主明显对货品很有信心,鼓动我们尝一颗,不敢……后来返回去买都是追着气味过去的,其他家的花椒就都看不上了,呵呵。不过这个不便宜,4元/两,不知道当初我在九寨带回来的和这个比如何。
还有就是很便宜(相对超市而言)的鱿鱼干。买了一斤半淡干的鱿鱼干(号称野生),还价到25元/斤。老爸顺便解释了下什么叫淡干——也就是说鱿鱼晒干的时候是在淡水里而不是盐水里,这样就不会含盐太过分,质量上明显更好。淡干的都比较透明,面上残留的盐很少,盐干/咸干的不会是透明的,而且由于含盐,所以分量不及淡干。盐干的才卖18元/斤,可能还能还……想想超市里鱿鱼干都是盐干的,都还是30大几的价格,说这边便宜一点都不过分……我还期望着吃老爸做的鱿鱼干烧肉呢!

其他的都是些小东西了。买了点海蜇头,一斤蒙古酸奶酪(其实太甜了,只是当零食吃吃),还有一点葡萄干,总共没花到100块……今天还真是失败……

最后说说几个印象深的地方:
1、卖的最多的东西就是那几样:菌类(虽然我是菌类的fans,但是实在不敢下手)、腊肉(还有小乳猪)、茶(见到了传说中的茶砖)、蒙古酸奶酪、干海鲜和海藻(鱿鱼墨鱼淡菜之类)、滋补品。其他的就是各种特产了——因为以上所列实在卖的太多了,是不是特产难说……
2、人有点多,不过还能够忍受……位子的确很大,整个一楼全占满了,包括原来的羽毛球场,逛完花了我们差不多4个小时。
3、看到了新品方便装热干面,貌似是大展台里面最火的,不过自己没太多兴趣。看那个架势,可能还能期待一下吧,呵呵。
4、最火热的展台都是能够免费品尝或者有东西吃的。有家做面的把工序直接搬到了现场,一堆人围着看,旁边就是边做边下,别人都是免费品尝,他那里是收钱买面吃,但还是排队;汤逊湖的小田园把鱼丸也弄了过来,免费品尝一次一颗……

要去的快去啊,没两天了。不过估计明天和后天会有甩卖,因为一般外地都不会带货回去的,想着是不是再过去一次,呵呵。

UPDATE:有点很失望的地方忘记说了。没有找到我很喜欢的云南特产——黑金干巴
想这个东西如果到武汉来应该很受欢迎,因为口味的原因,结果竟然发现除了云南就只有上海有专卖店。那批爱吃糖的人懂什么……(不过想来那批爱吃糖的人竟然喜欢吃鸭脖子)
简单的来说,这是一种非常干的牛肉干,干得像柴火,但是味道非常好,很耐吃,虽然口味很重(主要是咸辣味道)。很和我口味,因为现在的牛肉干多半不够干,而且都有甜味,不爽。但每次我只能从云南要老哥带,一年能吃到一次……
曾经想会不会出现在食博会上,还是失望了……估计有点可能是因为这东西太贵,号称10斤牛肉做一斤肉干,一两就要十多块——虽然贵但我还是想买来解馋啊……
想来应该买点鸡枞菌的,结果被满世界的菌子看花了眼,忘了。也没发现牛肝菌,可惜了……

又一个天才神话泡泡破掉了

星期四, 十二月 14th, 2006
Tags:

今天看三表哥的东西,写到了刘志华为什么下马,引用“钱烈宪要发炎”的文章。然后翻过去看看,结果发现了最近极速窜升的一个关键词“吴莹莹”。
有如下三篇文章:
吴莹莹真相
炒作
吴莹莹事件

看完,叹了一声——原来如此……
也不怪当事人了,还是中宣部教育部搞得鬼……
我是说最近两年ACM就交大拿了第一,没听说过北师大有什么队伍啊……但也真怪我太粗心了,没有继续追查下去……

关于《这十三年的程序员生涯》

星期三, 十二月 13th, 2006
Tags:

我为什么要写这个现在被我称为《这十三年的程序员生涯》的东西?
其实我自己对自己的动机也很怀疑。
我不知道这是不是太过私人的东西,是不是对别人有点点作用,还是更多的是写给自己看的。
我在第一篇里面提到的那篇文章的确是导致我想起这么多年过活的引子,不过我没想到我会写到这种程度。
第一、二篇贴出来以后,我曾一度把它设置为个人,不想让别人看到。结果还是被fishy看到了。
于是我索性还是全部贴出来。

我知道自己的写作水平无疑是水准之下,自己看看文章里支离破碎的句子和逻辑就知道了。但是我还是写了这么多。现在的感觉似乎是要来个善始善终。
写我的小学是因为几乎没人能在这方面和我产生共鸣,似乎没人还记得那种似乎是史前的计算机时代——实际上真正的史前我还没经历过:Brooks开发OS/360的时候、Weinberg提到的批处理操作的时候、没有终端只有打卡机的时候……但是看看现在因特网的普及以及电脑的易用,还有程序员满天飞,我几乎有点愤愤不平了……
而对于自己虽然有这样的起步,但没能做出相应的事情,没能好好利用,不免觉得垂头丧气。
而高中时期则是直接培养了我现在的性格和看法,我极为怀念,也大概最能在这里得到共鸣。很遗憾我忘了写我们用塑料卡开计算机组的门、忘了写每天中午5块钱的聚餐(有次Edward和我在这上面还闹了矛盾)、忘了写那最惨痛的一天我们把送给Comars的生日蛋糕自己分吃了、忘了写我们的红警大战、我们的Worms、我们的银河英雄传说和大航海时代、还有没人用的fishy写的的密码保管大师……在高中的计算机组生活的各个小细节,都让我无比的感动——我感谢命运,让我在高中,与这么聪明幽默而又不拘小节的一批人为伴。正是因为和他们在一起,我才会走上现在的这条路。
对于大学的经历,我实在是觉得命运在和我开玩笑。写出来也是对自己的反省。大学,就我来看,应该是用来开拓视野的。但我直到2006年来领悟到这点,才领悟到在这个世界上,很多东西根本局限不了你。实验室的经历让我看清了研究生的教育(或许有点偏激了),而2006年从趋势百万程序大赛、到Google Summer of Code和Season of KDE、到千橡、再到现在的TopCoder(正准备开始,不过不知要准备多久,呵呵),我似乎经历了比我之前2年还要多的东西。而若不是当时一念之差,经过好久心理斗争,在最后3小时里强迫自己去申请Summer of Code,或许我现在会被残酷的就业现实压得透不过气……其实有很多东西要靠发现的,虽然摆在了面前,但是做和不做还是区别太大了。

我依然对于没能够争取到一个良好的环境或者氛围而感到泄气,一想到如果当初如何如何现在就不会这样就不免更加泄气。不过还是那句话,没有Save/Load,人只能往前走;对于我,倒也没选择可说。
而这文章,则可能是我为了证明自己的确做出过努力,而写的东西。
而又因为的确是有点劣根性的存在,想获得认同,才贴了出来。
解剖与反省共存。

大概我会这样为自己辩解:我只是试图看到自己以前没看到的一些东西、试图整理下思维为自己留下些回忆罢了。
欢迎批评,只要不喋喋不休。

这十三年的程序员生涯(三)

星期三, 十二月 13th, 2006
Tags:

在我看来,这样子的上了大学,像是个玩笑。
进华工我就是奔计算机系去的,没想到被丢到了材料成型与控制工程。
本以为再怎么武汉算是自己的大本营,走走关系就能搞定,结果还是被告知教育部正在查转系的,等到大一上学期完一起参加转系考试好了。
军训的一个月,说实话,其实也没准备跟班上的同学混得太熟,因为想着就是要转系的人了。没想到跟辅导员说了以后,顽固的我竟然被辅导员说服了,留在了这个专业!
原因是辅导员开出了一个让当时的我很难想象的条件:把刚上大一的我送到本系某国家重点实验室,专门做软件开发。他又说,既然你的计算机功底已经这么好了,不如兼学两门本事,或者读个第二专业也行,不一定要过去啊……
无论如何,我真在这里呆了下来。

老张的实验室,大概我03年10月份就去过了。其实第一次面谈,我记得很清楚,我没说什么话,而辅导员是当时的骨干limin的同学,借着这层关系推荐我过去的。老张一直在说话,其中对我起了决定性意义的两件事我也记得很清楚:一是实验室曾经在一个项目中发现了Java编译器的一个Bug;另一件则是实验室出去的研究生都是年薪10万。于是我在被吹得昏昏然的情况下同意了留在本系,冲着这个实验室去了。

随后,学校里搞了一个机器人比赛,我很有兴趣,便跑去找老张。他当时说得很慷慨,费用都可以报销;不过他劝我不要急,因为时间太少,不如现在开始准备参加下一次比赛。
结果这个所谓机器人的东西,成了我大学期间最大的笑话——从2003年11月到2004年底,我花了大量的时间在搜寻自制机器人的资料,从头开始学习电路之类,结果直到最后,依然是纸上谈兵,没有任何实际成果出现。想来这也是必然,我一直是搞纯软件,心里的确很想要亲手做出个什么东西,的确也对嵌入式很感兴趣,但是根本没有任何环境,也没有人能够指导,也没有积累,或者也是我自己觉得那个目标太过遥远,无从下手。于是,白白浪费了这么多时间。
而这段时间的我,大概是感觉到自己的无力而继续无所作为了,而也慢慢消失在老张实验室的视野里了。
一个人在旁边郁闷……

在耗费了一年半的时间以后,机会出现了。
当时而言,我只是尽力去抓住这个机会,没想到后来竟然会发展到那种地步。
2005年4月底,由于学校有个“创新基地”的体制,提供给优秀的学生自我发挥的空间,老张的实验室自然也是其中的“基地”之一。我最后由于成绩不够好,没有资格加入“基地”,但是老张为“基地”准备了一个项目(也不能完全这么说,事后我发现他还是对这些本科生不信任,而准备由他的研究生来保底的),完全被我“抢”了。这次也让老张突然发现了我实力的存在,于是他就充分利用了起来。
2005年五一长假的前一天,老张召集”创新基地”的人开会,让我也过去。他在会上说有个项目要做,想要“基地”的人加入进来试试。这就是那个长江航运的MIS项目,原本在2003年有过一个B/S测试版,但是最终由于效果不好被取消了。这次他想做成C/S,使得无线通讯能够更方便的使用。会上分了三个小组做客户端,我和另一位同学做Delphi;他的研究生带两人做vb.net;还有一个小组做Java。而Gao博做服务器端;准备从这三个中择优选用。
后来的事情则肯定是出乎老张意料的。这些本科生里面,会写软件的就寥寥无几,而我则是仗着自己有点Delphi基础,在五一长假的时候加班加点,狂查资料,并且在通讯问题上和Gao博尽力沟通。五一过完,我交出一个Delphi的原型版本。当时我怀着忐忑的心情问唯一可能有能力做了点东西的人,答复却是他没有开始做;而且研究生那边也没有动静……于是,5月11号,Gao博请我吃了顿饭,基本也就确定了这个系统的客户端就是我的了。

当时我是有点欣喜若狂,没有意识到后面这事带来多少麻烦。
开发小组就只有两个人,我和Gao博。自然也就只有我们俩来做系统分析,所以我们就是不断的跑汉口的长航公安总局,去了解客户需求。弄得差不多了以后,7月份我和Gao博在长航的帮助下,去了趟三峡做实地测量(插曲A:发现万州长航公安局的局长竟然和我是高中校友,同是华师一毕业;插曲B:和Gao博在一起,总被不了解情况的人叫做“两位博士”,我解释都不好解释,最后只有极大的满足了个人虚荣心^_^)。最后测试情况非常良好,没有出现丢包的问题,一次通讯错误都没有,我准备的断点续传策略都没用到,大家长嘘一口气……
跟着的那个暑假我一直呆在实验室,回趟家像是探亲的。老张给那个暑假留下来的人发了300块充饭卡(其实全实验室包括”预备人员”都在)。其实7月份拿去测的那个版本就很好了,我们无论怎么折腾都没有出问题,因为之前我几乎花了半个月时间做测试。觉得那方面没什么事了,我开始玩我心仪已久的Linux,装上rh9,折腾了一暑假,最后软件包依赖把我折腾疯了……

不过更让人疯的还在后头。
9月,突然出现客户需求变更。我记不清当时变动有多大了,但是10月份就要直接上船安装了,时间非常紧,我生怕出大Bug,就只有玩命的干。老张发了400块钱,作为补贴。不过同时,自己也开始觉得这样子的写软件,不是办法。
10月份上船安装。我推脱了,没有再去一次宜昌,而是在10月2号去把眼睛做了激光手术——由于从小看电脑看到大,到那时候眼睛已经是左500度右700度了。而恢复没两天(要求是一周内不准看屏幕),我和家人正在汤逊湖玩的时候,被叫去实验室,说加密程序配套有问题。无奈只有过去,戴着墨镜留着眼泪(手术后反应…)把东西弄完了。

对我来说,那只是黑色十月的开始。
实地安装的头一天,一个长途打到我的手机上,Gao博在那边装上了软件却连不上服务器。我当时在寝室,机器在实验室,只有借别人的机器看看,发现一切都正常。想来想去,突然发现似乎是服务器的IP地址变了,而我们写入加密配置文件的是IP而不是域名,自然就连不上了……
这次虽然问题解决得很快,但后来则几乎没几天就要收到短信说出了点什么问题。具体的就不说了,反正10月份我已经出现了心理障碍,听到短信响或者手机响就害怕,就怕接;然后就是突然开始有点脱发的迹象……整个人被压力压得要崩溃,我又特别有责任感,特别不希望自己的东西出事,最后反正是精神高度紧张持续了一个月。
其实最后看来,那一个月一共只发现了一个真正是我程序设计上的Bug。

接下来,我开始慢慢放轻松了——毕竟我还是本科生,我还有课要上呢!以此为契机,我把机器搬出了实验室,随后就采取了尽量少改程序的策略,而且改了我也没时间测,也不想再让自己背这么大的责任包袱。结果这个项目一直改来改去,最后还是加上了通信(也就是收发消息)功能,一直改到来年3月,算是稳定了。老张在2005年底发了1k的年终奖金,不过之后再没有拿到过补贴了。
这个项目基本就这样完了。现在一套软件卖5k,据我所知到现在卖了有30多套了。

在实验室做事的时候还有一个事情对我触动很大。大三上学期的最后一天(似乎是2006年1月),我在实验室和limin一起熬了个通宵。虽然这不是第一次,不过却是让我刻骨铭心的一次。因为Swirl(jsp写的B/S结构的MIS)那套软件就要发布了,我刚考完最后一门考试就直奔实验室,给软件加上了我写的加密狗模块(),然后准备完成最后的打包。不过在打包之前,大家不停的找bug改bug,但是没有用版本控制系统,都是拷来拷去,结果最后大概同时存在着4-5个改过的版本。经常是有人发现了一个bug,改了,没过多久,又发现bug,一看,怎么还是原来那个……我由于是要打包,所以只有最后走,途中打包无数次,每次耗时20分钟,安装测试又耗时15分钟,一测试又发现老bug,完全让我崩溃了,毫无选择只有通宵……
从那以后,我开始努力熟悉版本控制系统。但是由于使用上的原因,还是没能避免后面会提到另一个项目的版本灾难……

2005年12月,我去南京玩了一趟,好久之后再次见到了fishy、Edward、miu还有Wing,玩得很开心。从fishy那里得知他当时所在的趋势要搞一个“趋势百万程序大赛”,他建议我组队参加。回来后我得到了正式的消息,就开始在BBS上大量发贴招人,以为这事很难办的我结果一下招到了十多人(那次华工有40多支队伍参加,居全国之首,不知道有没有我的功劳,呵呵)……我自己加入了一组,做C#.net的,组名为Sylvia,准备在来年3月大展身手。
寒假里,我开始学习C#.net。然后就发现这东西的确好用。5天看完《The Programming Key of C#》,然后就依靠MSDN开始写项目了。其实我自己一直有一个想法想要转化成软件,正好拿来练手。
那是一个被我命名为EliteNote的弹出式记事本,可以通过使用快捷键自动保存剪贴板里的文章和图片,并且文章和图片以Tag分类,且有关联。例如图片和图片的注释就是紧密关联的,但如果两张图片主题相同,也可以被设为关联。我最终想达到能够通过搜索一个特定内容而快速得到与之关联的所有内容,形成类似于一种联想的组织方式(比如MindMap)。后台使用XML存储文件信息,便于管理和编辑。
当时一切都是新学的,但是我还是尽力做到正规。用了SVN做版本控制,尽量的定义好类的结构,写xsd作为xml规范等等。在极度兴奋中花了5天做出了这个东西的原型(至今我都怀念那时候的感觉,之后我基本再没有重现过那种极高效率的状态了),然后又修修改改,等到开学拿给同学们用了用,感觉还行。但是至此以后就没有修改过了,感到是激情耗尽,不想动了……

跟着就是2006年开我的第一个重大事件——趋势百万程序大赛了……

待续……

这十三年的程序员生涯(二)

星期二, 十二月 12th, 2006
Tags:

现在想来,初中是我过得最痛苦的日子。不仅仅是平常学习和生活上,而且我几乎完全无法发挥自己在计算机方面的积累。尽管现在看起来有点可笑,但那时候我真的认为自己很有能力,以至于记得有次在《电脑报》上看到一个关于所谓电脑神童的报导,我自己就被夹在不屑一顾和嫉妒的两种心态之间了。
我开始拼命想弥补这段空白,恰巧当时来了个新的计算机老师,大学刚毕业。我从她那里知道数据结构这种东西,便跑去买了那本绿皮的《数据结构》,想要看懂。我又在媒体上(《电脑报》还是《电脑爱好者》)看到了Delphi被称为是下一代Pascal,于是跑去买碟和相关的书。

当然,大概是为了Delphi(不过貌似也是必然的),家里的机器升级了——486基本没法跑win95。对于这第三台电脑,我记忆最深的就是碰到了序列号为SL2QG的Celeron266。这是第一代Celeron,没有带高速缓存的,但是SL2QG可以超频到400Mhz+!当时是3D显卡刚出风头,Voodoo的效果让人瞠目结舌,nVidia刚刚推出Riva128,TNT还没出现,所以仍不是Voodoo的对手,而且2D显卡的王者ET6000还没有退出江湖——大概是因为要和Voodoo配合。而我当时为了便宜,选择了Trident9500……

在初中,我唯一的一点进步大概就是能够拿Delphi写点东西了。当时觉得VC实在是太过艰深,不敢造次。而唯一参加了一次NOIP,结果也是预赛被淘汰——没东西可写,没有训练,不可能有其他结果的。《数据结构》看得似懂非懂,以为自己看懂了,以为一个初中生能够看到大学教材是非常不得了的事情,心里开始有些无条件的自负出现了。可能是从这时候,噩梦就开始了……

在初中努力学习了4年,终于在考华师一时人品爆发,以全校第二考进了我心目中最理想的学校——那时候,进华师一的感觉几乎就是朝圣,呵呵。那天去华师一办完入学手续的同时,我问了教务科的老师计算机组在哪儿。随后跑到隔壁科技楼三楼去找负责计算机组的孙俊峰老师(DiggerSun)。当时让我大吃一惊的是,他坐在讲台上,一边玩着红警,一边回答我的问题;而讲台下面像破烂似的一个盒子里摆放着一些东西,我仔细一看:一台MD,一条E888耳机——还是金色的……不由#$&(*#&%(*……

那个夏天我认识了很多人。记得第一次见Comars,他就抛来一个Delphi的问题,不过被我解答了,呵呵;第一次见到Ariel应该是在主机房补课的时候,好像DiggerSun还做了介绍;第一次见传说中的“王同学”(fishy哦),穿着T恤短裤凉鞋,走着略带八字脚的步伐,从武测门口慢慢的荡过来——我心目中关于“王同学”美好的形象就这样被破坏了(55555~~~~)。不过实在不记得第一见Edward的情景了——大概是他太过突然的闯了进来。但是印象最深的无疑是第一次见到Wing——离题了,还是不要说了好,呵呵。

整个高中时期,我以为我是如鱼得水。结果性格上自负倾向越来越明显的我开始有点不务正业。高一的寒假,我花了两天时间写了篇关于MD的文章,投到了《电脑报》,拿了500块稿费。当时的兴趣似乎就是泡论坛,随身听和耳机的,那时候这方面无疑让我成了个不花钱进修成的专家,导致DiggerSun觉得这方面和我的共同语言最大……另外就是电脑配置方面,以至于当时的我可以随口报出那段时期的CPU、内存、显卡、硬盘等的价格而差距极小。Edward曾以此讽刺我:计算机系不是学配电脑的。

后来才知道,最开始DiggerSun其实以为我只是去计算机组混着玩玩,所以也没有多在意。高一第一次参加NOIP就拿了二等奖——记得fishy经常拿那次他只拿了三等奖来自嘲,呵呵。这让我感觉极度良好,再加上大家对我评价都不错,于是乎觉得自己就是半只脚踏进省队了。

于是2001年12月8号,也是Comars的生日。我高二,和Comars、Ariel一起第二次参加NOIP。以为进省队是水到渠成的事情的时候,被一道题难倒了。我之前停课了半个学期来做比赛的准备,但最终的结果却让我泪流满面。我根本没有做参加高考的打算,在班上的成绩也是一塌糊涂,再加上当时另外一件事同时发生(有因果关系),生活对我来说变得一团漆黑,整个人完全崩溃了。我死也忘不了那时绝望的感觉。
我一直消沉了半年,感谢Wing把我带了出来,虽然由于她我又消沉了半年……直到2003年一月份我才真正找回学习的感觉,而六月就是高考。那年——2002年,让我过得太痛苦的。

现在,我能够冷静下来分析自己的失败。其实,这虽然被称为是“阴沟里翻船”的一次失败,但是现在在我看来,还是有相当大的自身原因的存在。从初中开始,我变得有些自负,而高中的环境让我的自负不断的膨胀。当时我并没有尽自己最大的努力去确保这个成功,而是认为这个成功应该是属于我的,出错的可能性很小。而心里对自己水平的把握随着自负飘动了起来,并没有去像Comars那样从不断的做题中巩固充实自己。自己当看到自己实力不足的苗头的时候,并没有坦然去面对,而是以一种“打肿脸充胖子”的心态,怕丢脸,怕去面对,强行让自己站在那个高位上。
而当这自负的泡泡达到顶点的时候,也就是它灰飞烟灭的时候。

自此以后,我开始非常谨慎的评价自己,反思自己。当我能够证明自己有这个实力以后,我才敢对自己产生信心。不过貌似有点过了,那次失败对我的自信打击过大,阴影似乎仍然或多或少的笼罩在我的身上。比如2003年的华中科技大学保送生名额,其实我那次由于还是得了湖北省一等奖,是有资格参加保送生考试的。但是,我一直企图让那次比赛的失败远离我的视野,结果连证书都不知道丢哪儿去了,老妈跑了好多地方最终帮我开出了省一等奖的证明,但日期已经过了——这个消息是我最近才知道的。当时另外一个心理则是惧怕保送生考试,觉得自己并没有把握——想想啊,我可是华师一的学生!我为什么会惧怕那个简单的保送生考试!

再后来,参加高考,碰上了10年难遇的卷子,那年省里的重点线只有502分。我本来想考Edward、Wing和miu所在的南京大学计算机系(老妈已经把我的获奖资料寄过去了),但估分580的我信心不足,不敢报考,一头扎堆扎进了华中科技大学,想稳保计算机系。另外还有个情况是我是武汉大学的子弟,二本就能上武大,但是我看不起武大的计算机系,连拿它做第二志愿的考虑都没有。最后的结果是,南大分数线508分,华工537,心高气傲的我547,被丢到了现在这个材料成型与控制专业。

高中大概是我收获人生最大的时期。收获的除了有这样一份惨痛的经历,还有fishy、Edward、Comars、miu等一干由计算机组才认识的好友。对于高中,我对自己能够说的,只有向前看。
觉得生活和游戏不同,没有Save/Load的机会,没有给你重来的余地。难道你想放弃?史铁生说过,上帝在给与人生命的时候就顺带的保证了它的结果,所以不必心急。我其实真的无数次想放弃(在初中以及高中),觉得熬不过去了,但是人毕竟是胆小的,我毕竟还是有点理智的,所以还是慢慢的走了过去。
还有种放弃,是自暴自弃。我也没有脸面去选择。有时,有些事是定在了时间轴上,你最后是必然会面对的。不想面对而把脑袋埋进沙里,也不会对事情有什么影响,只会对你有影响。与其消极的去面对它,不如积极的去面对它,尽力去改变它,虽然会疼得非常厉害以至于难以忍受,但是其实对我而言,别无选择。
我给自己的只有两条路,放弃,或者以你最好的姿态继续下去。
虽然命运总在和开玩笑,不过我依然不打算改变选择。何况,我认为最黑暗的时期已经过去了。

现在虽然很郁闷,很惭愧,但是还有心思来写写这些,足以看出我的心态已经好了许多了。对此我倒是比较满意。

待续…

这十三年的程序员生涯(一)

星期二, 十二月 12th, 2006
Tags:

写这个东西,是看到了这篇”Teach Yourself Programming in Ten Years”的缘故。很有感触。
从我开始写第一行代码到现在,13年了。期间,虽然也一阵一阵的停过,但是觉得这不是现在陷入这种境地的理由。
13年,本来是可以做到很多事情的。但我却不知道这13年到底我做了些什么,导致我现在需要在这里挣扎,需要对付这个材料专业的一切,需要一次次面对笔试面试的失败,似乎根本找不到出路的样子。
13年了,我大概掌握了方法,但却在我最需要环境来发展的时候失去了这个环境。这是我自己的错。但是让我觉得,这13年过得有点冤。我应该可以做得更好的。
我愧对这13年的编程经验。说起来,这就像是上了13年小学。
这大概是花时间买来的教训。
写下我的记忆,作为自省。

要说接触电脑,要从中华学习机开始。
大概是在我小学一年级的时候,家里买了那台中华学习机
我现在对那台机器的印象还是很深。固化Basic语言,但即使是在我系统学了Basic以后,我也很少用过——貌似是因为不能存盘和键盘手感太差;用5寸软驱可以启动一个DOS,但是我弄不清那个有什么用,软驱主要还是用来给我玩赛车;机器还可以连接上磁带机,老爸买了几个很好玩的游戏磁带,但是机器经常在读的时候罢工,我最喜欢的那盘需要两面都读取,要翻面,结果基本上没读出来几次……直到搬家前,家里还有6大盒低密度5寸软盘积压……

而我写程序,开始于1993年的春天。记得那天,我坐在湖北省武昌实验小学一个教室里靠近走廊的位子上,在纸上写出一个已知底和高,求三角形面积的Basic程序。
从那时开始,我感觉到一种从来没有经历过的感觉,几乎是本能的喜欢上了这一行。
在我的眼里,写程序似乎能够达到一种无所不能的地步,所需要的仅仅只是把那些字母数字符号组合起来。这是一种太过奇妙的感觉了。第一次我感觉自己能够做的事情,范围仅仅取决于自己的能力。
不知道过后多久,我就决定,这是我以后要做的事情。

实验小学是当时全市乃至全省小学里计算机水平最高的地方,当然多亏了我们的肖作均老师(现在是校长了)。当时的说法是,在计算机组能待到5年级的顶多只有四五个人,而二年级选拔进去的有20多人。
学校的老机房里面有一台386,五台286,其余的都是AppleII/中华学习机,还有一堆不能用的所谓娃娃机。那几台286都没有硬盘,只有那台386有40Mb。由于对计算机房的环境要求高,里面没有黑板,只有一块投影布。肖老师的讲课就是在玻璃板上写,用投影仪投射给大家看。关于肖老师,我现在还记得他为了避免我们乱用goto,说挑战者号航天飞机失事就是因为一个goto“勾”错了地方。
肖老师曾经的学生里面有个IOI金牌获得者(当然我们都叫世界冠军了)陈杲,曾经在我三年级的一个休息日来过实验小学玩。当时他已经从华师一保送到了清华,我找他要了签名,随后我的目标就变成了——保送到华师一的初中。实际上,本来我的确可以做到的,只是我升初中那年取消了保送初中的政策,除了报考武汉外校的,其余人全划分成区域就近入校……而似乎那年华师一也没有了初中(fishy那届似乎是最后一届初中),只有华一寄宿学校了,需要很贵的学费,我们家又不宽裕,就根本没有考虑——现在想来,如果我当时进华一寄宿的话,早一点开始比赛的准备,估计初中就不会那么郁闷,高中也不会”阴沟里翻船”了……

与老机房的条件相比,我爸科室里面计算机还算更好些——是一台带硬盘的386。二年级到三年级的那个暑假,我在这台386上写了一个四千多行的程序,是带有一个简单的字符UI的四则运算测试软件,用GWBASIC写的。至于为什么会长达四千多行,好像是我不停的拷贝一个比较通用的子程序,然后每遇到一种新情况就改一下,最后就成了那种东西……不过最后老爸把整个程序打印了出来,那厚厚一叠打印纸拿在手里,感觉好极了。^_^

三年级下学期,我们家买了第二台电脑。CPU是Cyrix的486DX50,上面只能看到散热片,还不需要加风扇的——据说当时的Intel80486芯片是连散热片都不用的;硬盘是Quantum的210M,实际容量201M;内存4M;配有5寸3寸软驱各一——当时还没有多媒体,CDROM也是遥不可及,不过5寸盘已经渐渐要退出市场了。当时一共花费是一万多点。现在想起来,真是有些不可思议——1994年的一万多块估计是家里至少一年多的结余了,就给我买了这个玩具……
当时盗版的价格是1张1.44M的3寸盘10块,我最喜欢的“西游记”需要四张盘,就是40块。另外我印象最深的“轻轻松松背单词”,当时还是DOS一统天下,蒋刚的这个名牌产品才刚刚出现没多久——当然我家还是买的盗版。但我真的非常喜欢这个,现在还记得一个小细节:在退出的时候,屏幕上会出现一个小房子,烟囱里冒着烟,好玩极了。拜它所赐,我的英语从设置英语课开始一直是免试。而我的饭后行动频率最高的是去玩“西游记”——但这东西不能存盘啊……

五年级的时候,学校的新机房修好了,在新教学楼的顶层。清一色的486,星型网络布局,操作系统是Netware,大部分是无盘工作站,其余的记不清了。不过五年级的时候,继续在计算机组待着的,的确不超过5人。说起来好笑,记得有次我因为上课似乎没专心听讲,不知道下午有考试,下午继续跑去参加计算组的活动,发现很奇怪只有我一个五年级的在场,不过也没多想,就又在小弟弟小妹妹面前做了两节课“榜样”,然后下来回教室拿书包准备回家的时候,发现竟然都在考试!当时把我吓得……

就在那一年,家里的机器加上了多媒体,也就是有了声卡、音箱和光驱,还把内存加到了8M。一共花了600块。然后我做的第一件事就是买了张垂涎已久的《仙剑奇侠传》(当然是合集,仙剑才27M而已),盗版光盘25元一张。然后还是查阅各种手册资料,捣鼓config.sys和autoexec.bat,配置upper memory,让常规内存保持在600k以上……直到现在我还记得那时最常用的非常用命令是”mem/c/p”。

似乎在小学快结束的时候,武汉有对外营业的上网场所了。在报纸上看到消息,洪山电信开了一个所谓“因特网俱乐部”。我和老爸跑去,学生10元/小时,成人20元/小时。在电信专线的引导下,我第一次接触了网络……还记得不懂拨号,努力的想用电信专线的网络拨上个人BBS;还记得为了玩MUD,抄了一大堆命令地址;还记得自己到处申请电子邮箱……现在看来,那个专线可能是64k的,在全房间没几个人的情况下,速度依然爆慢……

自己从三年级开始拿奖,拿着无数个所谓武汉市一等奖第一名(现在看来,一等奖是没错,不过第一名可能是肖老师唬我的,呵呵)度过了五年级,然后进入区域对口的初中——武汉市第四十五中学。我的编程语言也从Basic转成了Pascal。

其实,我的小学倒是过得基本上挺滋润的。虽然只有5年,但是5年几乎决定了我之后的走向。而且当时我的基础一定是相当好的那种,而且对计算机充满了热情,本来可以乘胜追击,但随后我就开始了让我郁闷又无计可施的初中时期。

待续…

Myers-Briggs人格测试

星期一, 十二月 11th, 2006
Tags:

今天在digg上偶尔看到了一个“Are You a Programmer? Myers-Briggs Personality Type Test”的人格测试,感觉”Myers-Briggs”这个词似乎在什么地方看到过。
不敢确定,找来Weinberg的《程序开发心理学》(1,2,记得是《Code Complete》里面列的软件工程必读书),在第8章”人格因素”的评注里面,找到了我记忆中的来源。

Weinberg:

要是我今天从头开始写作《程序开发心理学》的话,这一章将是内容需要改变最多的,因为在过去的25年里,这正是我通过学习收获最多的一个方面。首先是因为,Isabel Briggs Myers于1980年发表了她的Myers-Briggs Type Indicator(MBTI)理论。在读到这本书后,我放弃了所有其他的人格测试理论,因为将它们应用于程序开发之中实在过于牵强附会。……

……MBTI和Satir关于应对策略的理论,给我在人类行为方面的思维方式、培训以及咨询工作方式带来了一次革命。……

我做了两遍,第二次慎重一些——其实还是有些问题不能确定答复,不过两遍结果差不太远。
第一次ENTJ,第二次ENTP——都是少数派……说只有1.8%的人是ENTJ(倒数第二),3.2%的人是ENTP(倒数第五)。

列举一下,一共是八个相对的指标,每对取一个就有2^4=16种情况:

E = Extraversion
I = Introversion
S = Sensing
N = iNtuition
T = Thinking
F = Feeling
J = Judging
P = Perceiving

我就是最后一个是Judging还是Perceiving判定有疑问,但被判定成外向倒是有点没想到……
大家都来测测,感觉还是很正规的东西——毕竟是影响了Weinberg的东西,呵呵。