读 伯罗奔尼撒战争史

读 伯罗奔尼撒战争史战争发生在公元前431年到前404年,27年;我从4月3日读到到7月4日,92天。虽然还没有翻开《伯罗奔尼撒战争史》的时候,我就早已知道雅典会最终陷落,
提洛同盟解体,波斯的阴影重回希腊,但是,它仍然一直吸引我读下去。在每一页纸的后面,修昔底德叙述的声音应该是缓慢而沉重的吧。最初,我只是
想知道作者身为一个雅典人,将怎样面对自己城邦惨败,会如何讲述帝国一步步
由全盛的辉煌走向失败的深渊。后来,我沉浸在各种联想之中。呈现在纸上的,
表面是古希腊的地图,而实际上也是春秋战国;那些操着希腊语的将军们,发出
的是苏秦、班超那样的声音。城邦各怀异志,战事漫长惨烈。起初,底比斯袭击普拉提亚,提洛同盟和伯罗奔
尼撒同盟各支持一方,雅典与斯巴达开始战争。这场战争旷日持久,将席卷希腊
人所知的整个世界。后来,雅典人修昔底德看到了大瘟疫,看到了胜利,也看到
短暂的和平,还有西西里大溃败时抛弃粮食和战友,抛弃一切,也包括了希望。战争是怎么开始的?起初当波斯入侵希腊,各城邦一片失败。兵临城下,雅典人没有放弃,而是断然
放弃了自己的城市和陆地,全体人民都迁移到舰船上,与波斯作海上的搏斗。城
邦们纷纷加入提洛同盟,用船只和金钱支持雅典。雅典的胜利,还全希腊的自由,同时也逐渐形成了雅典帝国。雅典开始像对待敌
人一样对待自己有盟友。斯巴达在战争中的号召力之一,就是重建希腊城邦的自
由,脱离雅典帝国的统治。而值得注意的是,斯巴达的政体,正是少数人奴役多
数人的寡头政体,他们所反对的帝国的核心城邦雅典,正是多数人当政的全民
(成年男性奴隶主)民主。所有的争端,修昔底德只是秉笔直书。仿佛他不是一个雅典人,而是高在云端的
天神在俯视人类的争端,他早就知道这样的争端会一层不变地一再发生,这既不
是开始也决非结束。人类,仿佛就是这样生存,以这种卑微的方式。很多个冬季,很多个夏季都是这样。几百三桅巨舰直驶向深海 (公海),水手和士
兵们准备掠夺伯罗奔尼撒或者亚狄迦,准备解救盟邦,准备攻击他们甚至还不知
道有多么广大的西西里。他们喊,我们应叙拉古的敌人之邀而来主张正义,私底
下已准备好装战利品的舱室,计划好军功章悬挂在哪面墙壁。只是出发的时候,他们都无法预料到真正的宿命。宿命,只有结束了的时候才知
道。而我们甚至无法知道何时才是结束。冬季,然后又是夏季。伯拉西达战死,伯里克利病死,尼西阿斯投降被杀,亚西比得反复无常游走于大
国之间,最后也被大国所抛弃。所有的人最后都死了。我们现在可以知道,即使没有战争,他们也一定会死,而
绝无可能活到现在。就像那些笨重的三层五层水手划桨的舰只,最终都会烟消云
散,要么被击沉,要么被俘获,要么腐烂掉。冬季,然后又是夏季。曾经面对波斯人能放弃首都的雅典人,向同是希腊人的斯巴达乞降。三十人僭主
集团被扶上马,三十人僭主集团被荡平。苏格拉底之死,不过是其间微小的难以
觉察的声音罢了。如果历史就这样终结,我会以为修昔底德打算冷酷地见证的一个文明的衰败,表
征希腊黄金时代的结束。当就要合上书页的时候,我突然想到,之后呢?之后,在希腊一片战争废墟之中,北部的马其顿"蛮人"开始在亚历山大大帝的率
领下征战更广阔的已知的世界,波斯、印度、埃及。再之后,是希腊化时代……乐
曲的终章,直到一千年的罗马帝国灭亡了,还在悠悠地回荡着,并且转调具有了
全新的内容--我们称之为文艺复兴。那些冬季和夏季并没有虚度。我们确实进行了无谓的争斗,一次次焚烧再重建城市,把黄金运进神庙再急切地
取出来作为军资。但是,我们也乘坐着当时的古老技术所能达到的极限,深入到
未知的公海之中。我们知道,总有一天,人类会遍布宇宙的每一个角落,等到敌
人的舰船也跟随我们脚步的时候,我们将在公海的风暴里依托我们登陆过的岛
屿,凭借我们习熟的环航战术,截击所有准备逃回避风港的敌舰。在航向所有人类所未知的领域时,那些冰冷的深夜里摇桨的手,支持过他们的确
实也有贪婪、幼稚,甚至还有恐惧。但是,从遥远的太空,或者透过久远的时
代,我看到修昔底德所描写的,是人类勇敢开拓的雄伟诗篇。伯罗奔尼撒半岛和爱琴海上的英雄一直在唱着战歌,他们从未死去。他们的歌声
在深空,在原子的底层,还将在更深远的世界回响。--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift][http://www.renren.com/268966623/profile#pblog]

作为程序员,你的价值在哪里

作为程序员,你的价值在哪里1. 学生时代程序员以前都是学生,我们从学生时代快结束时讲起。本科毕业论文答辩时的一个笑话。有女同学翩翩然说,"各位评委老师……"提问和
点评的时候,我作为"评委"的第一句话就是,"对不起,这不是选秀节目,我们也
不是评委老师。"坐在下面的那些老师 (与非你莫属不同,不是坐在上面),我们一般称为答辩委员
会成员,作为论文答辩(或项目投标、讨论) ,他们与选秀的评委任务不同。答辩
委员会成员,一般不太在意轰动笑果什么的,所以常问一些一再重复的问题,对
谁都问,有时就被称为套话。这句套话非常之重要,以至于答辩委员会成员经常要求答辩者跳过综述 (你看了
哪些资料,你的工作在学科中的地位,你的工作如何重要等等),而要求直接讲--"你的工作是什么?"当年我本科毕业论文的时候也被问过。我卡卡卡卡讲了半天,我用的这个语言有
前途啊,我从事的这个领域也有前途啊,布拉布拉。是的,我用的语言是HTML,
领域是计算机网络,当时连ASP好像还没出来,可见我选择了多么富有远见的方
向。但是,答辩委员会老师忍了半天,就是如今的刘校长问我,"你的工作是什
么?"我然后就卡壳了。我选择的语言很牛,我选择的方向很牛,又怎么样,那些都是
别人做的,跟我又有什么关系呢?我当时说,我看了这么厚的一本书,英文的,全看完了。然后才理解了啥啥。老
师们非常和蔼地没理我。很多年以后,我明白,作为程序员,你学会了什么并不重要,所花费的时间也不
算作你的工作。在这个世界上,除了你的父母,没有人再会因为你学会什么而高
兴,他们只会因为你用学会的东西做出贡献而高兴。那么,你的工作,你的贡献是什么。2. 最近的一个实例某处前两天网站建设会议,我作为技术人员出席,发言的时候只提了一条与技术
有关的建议,其余那些条都是表达网站建设与技术人员关系不大,更多的是美工
和广义上的政治。唯一与技术相关的那条建议是去除网页上的百度统计,原因是加上它以后网页载
入速度有明显地下降。最初我不知道里面有百度统计,还问过ZHUMAO,你们那个点个网页,怎么载入的
时候会这么慢。会上,作者同学指出了百度统计的优点:1.能统计出哪个链接点
击的人多,有多么多,比例如何;2.能用热力图展示哪个位置被用户点击多少
下,点击多的地方就更红一些,点击少的地方就更绿一些。我为什么认为应该去掉百度统计呢?这个东西固然是好,但是它影响性能,更重
要的是,它不是你做的。那个热力图真的形象,漂亮,强有力,但是那是百度的
工作啊,不是你的工作。你的网站架在自己的机器上,容易获得 w3c log,方便
统计出这些数据。如果你用w3c log 统计呢,这就是你的工作了。而且,你同时
也避免了不必要地向第三方泄漏网站访问数据。你的岗位存在的意义,是选择合适的工具,而不是强有力的工具,去完成任务。
我为什么说"你的岗位"的意义,而不说"你的意义"呢?这可以从一道面试HR乐意
问的问题看出来。HR可能问,"你对薪酬要求如何啊"。一种合理的回答是,"薪
水的多少取决于这个岗位对公司可能的贡献,而不是我的能力。"克拉克还是超人呢,报社也没有多付他一分钱。所以,你的岗位期待你选择合适的工具。3. 什么是不合适的工具合适的工具是什么,是个太大的话题,以后再聊吧,我们不妨先看看什么是不合
适的工具。特强大的,众所周知牛的,干啥都行的,这些基本是不合适的。另一种不合适
的,是本科同学们愿意在答辩的时候说的一句,"我为什么选择JAVA?因为我们
就会这个,这课是周老师讲的,他……""就会这个",可不是一个好理由。同时,也不能逮着啥有名气正流行,就认为它会是好的解决方案。例1,项目课
程里一位同学,打算做俄罗斯方块,或者贪吃蛇。她认为,这一定需要用多线程
来解决。为什么呢?因为你看,方块在起, 同时,还能响应用户的键盘消息。
例2,还是项目课程,另一位同学做扑克牌游戏,觉着需要用access数据库存扑
克牌的当前次序和排序什么的。这些是"过于"强有力,不适合做这种小游戏的工具。用大炮打蚊子不对的原因之
一,是需要携带这么沉的东西,并非"没有必要","没有必要"这种措辞给同学们
一个错觉,似乎这样也是可以的,只是"并非必要"。不是这样,应该明确指出,
用大炮是"错误的"。红白机 (任天堂)时代,CPU都那个水平,里面也没跑操作系统,多线程之类的是
肯定没有的。同时响应这一需求,如果我们还没有学到那些知识的话,我们也可
以猜到,一定有更轻量级的工具可以实现。这个轻量级的工具,就是循环,在每
次循环里读按键,如果不是命令,那么重画方块,在新的位置,这样方块就动了。windows操作系统自带纸牌游戏,从windows 95时代,而且那个时候操作系统里
面肯定不自带access。存序号排序这种事,用链表或数组都容易解决。有同学可能会说,那我用这个项目顺便练练多线程或数据库不行么?我们应该用
项目练习项目能力,多线程和数据库应该单独练习,或者找适合它们的项目练习。合适的工具,就是不多不少正适合这个项目的工具。如果它强大到了干啥都行,
那么如果不是它的子集刚好适合你,那它绝不是你的那盘菜,因为它一定复杂到
难以把握。基于同一原理,穷矮挫不该考虑白富美。3. 什么是不合适的使用工具的方法试想,表演结束,你走回舞台,聚光灯下,下面掌声雷动。你几次谢幕,全场观
众起立挽留。答辩委员会不适时地又出现了。它们还会在你以后的人生中数度出现,投标的时
候,经理质询你的工作进度啥的。答辩委员会里某个亮脑门问,"你的工作是什么?""啊呀",你说,"这个简单。你们看到这有个钮么,它的名字叫做开关。按一
下……"音乐声响起,你继续解释,"这个设备叫做录音机。"如果你的工作只是选了这台录音机,你就只是行政人员。行政人员是不需要专业
技能的,当他们犯了这方面错误的时候也不会受到指责。有同学说,我知道录音机的存在,这算不算工作。算呐,当然算。只是你认为这
样的工作值多少钱呢?满世界的人都可以告诉你的经理,免费的或几乎免费的。
如果你比别人早几年知道录音机,可能会好些,至少好日子可以过到录音机满天
飞。设想另一个场景。还是舞台上,让你再表演的时候,你用自己的手指敲击键盘,
那就完全不一样了。当年杉菜同学 (out了?)就凭这一手震住了高富帅他妈。想
想吧,如果杉同学从衣兜里掏出个mp3接上外放,那会是什么情景。亲自表演意味着两件事。1.你受过长时间的训练,这些训练不可替代,除非替代
你的人也受到同样或接近长时间的训练;2.你当前真的正在表演,这一工作时间
不可替代。这就是程序员的价值所在。这也是所有工程师的价值所在。我们选择一种工具,
然后使用它。讨论观点的时候,大哥以前有个路子,他转引别人的论点,或者说都在这本书
里,你自己回去看吧。如果不是导师指导学生,在面对答辩委员会的时候,这一
招是万万不好使的。如果不你能清楚论述别人的那些观点,并阐述它们与你的观
点及当前问题的联系,是不行的。仅仅说,"子又曰了",只有在高考作文里才有
用。马利同学前两天转引道,"某位哲学家说过,谁谁谁又说了,在中文里,都可以
翻译为 I think。"当年俺们一位外教说过,写作文不要写"I think",因为大家
只关心你的观点,而不是你的态度,你think不think,who care。你能用来说服自己的,是信仰,能用来说服别人的,才是道理。工程师的工作不
是让别人跟随自己的信仰,而是为别人创造价值。如果你借助工具,完成当前项目的目标,你是在使用工具。如果你选择 (或者被
选择)了工具,按了两下鼠标任务就完成了,你不是在使用工具,而是成为了工
具--而且并非你的上级的工具,而是是工具的工具。最后再讲个工具的工具的笑话,网上看来的,不一定是真事。说中国有个教授到
了韩国。韩国人问了诸多问题,类似你们有钢铁么,有飞机么,有泡菜么,所有
问题都集中于质疑我国的生产力和生活水平。中国教授答:中国和韩国一样,什
么都有,只是没有美军。前车之鉴。使用工具的时候,我们该想想,我们自己的价值在哪里,什么是我们
的工作。--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift][http://www.renren.com/268966623/profile#pblog]

我的第一桶金

我的第一桶金今天在车上听广播,里面大家在回忆自己的第一桶金,主持人在总结60后、70后、
80后各自的特色。津津有味地听着,也想想自己的第一桶金。我的第一桶金和邻居同学相比,来得非常晚。小时候家的旁边就是山,或者说,
我的家就在山上。很多同学及学前的朋友们,都认识几种草药,夏秋的时候就上
山去采,然后卖钱。我都只是跟着跑玩,从来没采药卖过。其实我的家境谈不上
好,现在看,小时候家长还是挺娇惯的,再不就是那个时候我已经开始近视了,
所以分不清草和那些现在连名字都想不起来的草药。即使这么多年以后,我认识
的品种也非常有限,比如蕨菜,都是那些与被子植物长相实在差别太大的。而邻居和同学都挺能挣钱的,当然了,全部交给家长。了解我的成长环境,有些
同学可能更容易理解为什么我会对小资产阶级及资产阶级有那么多意见,而对无
产阶级总是那么有感情。同样是这个原因,我对很多人讲自己小时候都充满不
屑,唯独周治国老师回忆录一出,我登时没声,只有佩服。就这样,整个小学,我几乎就只是花钱,没挣到一分。有的同学可能会说,小学么,不就是玩么,怎么还要挣钱呢。我想起前几天看到
的某同学的状态,大意是说,念了这么多年书,交的学费书费给铁道部交车票
钱,我们为社会做的贡献不小啦。我当时想,臭不要脸,那哪里是你的贡献,明
明是你父母的贡献。小学,除了吃喝要各种好东西,惭愧,我完全是个不立世孩子。跟某些同学现在
有得一拼。大概在小学六年级,我第一次干点活--跟我哥卖对联。就在离我小学不远的地方
摆摊。前面提过,我那个小学相当之不错,牛人们的孩子都去,所以,地处市中
心,摆摊效果应该好。但是,还是卖不动,收税收各种费的倒是不少。印象深刻
的是有两小伙子--我那个时候比小伙子还年轻很多--收钱,我问,"这是啥税啊。
"答,"国家不就那一种税嘛。"交了。过了不一会,又两个个小伙子,也是收税。
我说,"刚刚交了啊。"答,"这是不一样的,那个不算。"手捏收据,那个时候我第一次知道,上面写了字的东西,也可以叫做"白条"。按
现在的话说,这非常颠覆世界观的。要知道,我的小学同学们受的是啥样的教育。
比如,我们被教育要把零花钱存起来,班上有银行,存多了可以取出来,可能还
有利息。第一次受到这教育的时候,我在想,什么是"零花钱"。我当然有零花
钱,不过那是每天中午的饭钱。卖对联没收益,剩了不少。我跟我哥就送福字。送福字是个特别惹人烦的活儿。
不是说这个活让我烦,而是它烦别人。送福字,就是赶在大年三十前几天及除夕
当天,敲人家的房门,一进去,"过年好,给你家送福来啦。"人家虽然恨不得吐
你一脸,但是还是掏钱,迷信的说,怎么也不能把福推出去吧。虽然我自己从事过这个行业,不过,我似乎从来没给过送福字的人钱。所以说,
什么的自己受了迫害以后就会不加害别人什么的,在我这里没应验。南方的同学可能不容易想像送福字的艰苦。那个时间段,正是东北最冷的时候,
零下近三十度,而我当时已经开始戴眼镜了,进门啥也看不到,厚厚一层冰 (不
是霜或露) 在眼镜上。要拜年,就没时间擦眼镜,索性啥也不看了。出来把钱给我哥,然后哈气擦眼镜,下一家。这次严格地说,不算第一桶金,所得款项全额上交了。非常小的时候,跟父母讨
论过压腰钱 (压岁钱)的归属权,我妈给我讲了非常清楚的道理,那是他们用给
别人家孩子的压岁钱换来的,所以我无权所有。非常有道理。所以,我记得哪个同学跟我提到父母不让他选自己喜欢的专业,我
撇撇嘴问,"谁出钱。"同学答,"当然是家里啊。"我说,"谁出钱谁有权决定。"
真正我自己挣自己花的第一桶金,得到初三。当时班主任也是语文老师黄晓萍老
师组织我们参加一个作文大赛。名目似乎是叫什么"杯",我就想起这么一个字,
惭愧,不过肯定不是新概念就是了。作文交上去,我都快忘光了的时候,说获了
三等 (?)奖,奖金叁拾元!我把钱交给我妈,我妈乐够呛,说儿子能挣钱了。敢情前面卖对联送福字的不算
呐,我写到这里才想明白。我妈说,"都给你了,拿去买糖葫芦吧。""啊?"三十块钱,能把一个老头的糖葫芦摊包圆了,还能有剩。后来好几年以后了,我总结出来,我妈一想到好吃的或者任何好东西,糖葫芦稳
居第一。估计是她非常喜欢吃 (我问过,她否认非常喜欢) ,所以推己及人了。
不过我从小牙就不好,那玩意实在难以消受。这些钱后来给黄老师教研组的老师们买了一大塑料袋桃子。剩下的……似乎给我妈
了吧,我实在想不起来有什么想买的。黄老师教导我写作文的时候曾经说过,"这个地方如果这么写,看起来就更好了。
"我说,"老师,你不是说写作文要真实吗,它没那么发生啊。"黄老师说,"杨贵
福啊,我告诉你,你这也就是还在学校啊,以后到了社会上,可不能这么说话。
"大约20年后,我听懂了黄老师的教诲。这句话翻译过来的大意是:你这么做是错
的,即使现在,其实也是错的。关于真实,当时另一位语文老师,俺非常之佩服他,只是名字真是一时想不起来。
他教导我说,"杨贵福啊 (这个确实是一般性的开头,不过为了还原语气所以我没
有省略),比如说吧,咱们作文要求语言平实,不过考试作文,还是华丽的得分
多啊。你得想想啊。"20多年以后,姚海军老师说得更直白一些,我终于明白了当年那位语文老师的
话,翻译过来就是:你要是有那个水平吧,你就可以平实,不过呢,你指定是没
那个水平。20多年来,我的语文水平确实有巨大的进步,老师们如果看到此贴,当为我欣慰。
昨天参加图书馆网站建设会议,刘大侠发信时说"最好要有PPT",我就成功地翻
译为"你*得*整个PPT"。实践证明,我的翻译是对的。书归正传,我的第一桶金,30元钱,是写作文挣到的。那天谈到大学当年的同学还有师兄们的性格及他们现在的状况,感叹当年啥样现
在还是啥样,一点也不差。读到上一句,可能有的同学会说,你咋不谈谈师姐
呢?是这样,我本科是在物理系就读,几乎清一色的男生啊,师姐只有三个人。
这种性别偏差,到了我们这届才有缓解,比我们班,男女对等,一班和二班,一
共10个女生左右。而这个物理系,居然是在几乎清一色女生的师、范、大、学。
对比得多么鲜明。当年大学的时候,同学们一般做家教啊,回家坐火车的时候顺便卖个冰棍啊,什
么的。这些都是常态。我一共做过两次家教,其中有一例非常失败,即非常失败率高达50%。原因,以后
再细说。反正,虽然也挣了点钱,似乎每小时5元 (?),但实在算不得一桶金。
那两例以后,再没做。不想卖冰棍,因为铁定以后不做商人。不做家教,我计划以后不当老师 (注:世
事难料) ,因此不必训练教学能力,而且认为家教也训练不出来什么教学能力。有同学说,以后不做商人或教师,也不影响你大学时候试把两下子啊。恩,是这
样,我担心一试之下会爱上那些行业。我多么热爱计算机,怎么会舍此而求他。于是,终于到了大二的暑假,家教的同学,没错,我的同学中做家教的同学,介
绍我去了一家计算机公司。装计算机的公司。事先说好了不给钱,白干长经验。
从此,开始了我的IT生涯。然后,这是一个非常非常非常漫长的故事,长到仅仅开头部分都没法被一篇贴子
容纳下来,只好不写。反正吧,到了某一天,同事说,"臧老师让你上去一趟。"
我知道当时正发工资呢,但是事先说好了没我的份,所以也不做念想,上去估计
就是分配任务呗。结果臧老师给了我四百元钱!这是我第一笔从计算机挣来的钱,但是现在回想,完全忘记咋花掉的了。后来。后来就是很长的故事了。比如,毕业了,第一个月的工资是470元,还没有
我兼职挣得多。比如,我经常一定要在开头对学生说,"这个活是没有钱的",这
个时候,我总是要对比臧老师和那些满嘴跑火车给我描绘各种美好未来的老板
们,然后告诉自己,不要做当年的自己讨厌的人。后来。后来才知道,苦难永远只是刚刚开始,更闹腾的,都在后面等着呢。幻想
破灭,少年开始长大,知道坐办公室穿白领就拿钱啥的都是骗小孩儿的,知道自
己的日子不会比父母现在过得更光鲜,可能比他们年轻时候更艰苦。不过,尽管后来种种或喜或悲或得意或凄惨如何丰富,第一桶金一直铭记在心。--------------------
博客会手工同步到以下地址:<p>
[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]

抛掉重用的幻想,好使就行:用脚本生成脚本的例子

抛掉重用的幻想,好使就行:用脚本生成脚本的例子阿于同学说过,合肥同学不懂什么是"好使",所以,先解释一下。"好使"可能是
东北方言,大意是 可用,能工作,趁手。今天讲的是在用脚本生成脚本中,可以对付到什么程度。当年写用vba自动判卷的时候,某张同学说"这个要是再这么一下,那就更好了",
小韩老师说"唉呀大姐 (我记得是这样说的,小张比小韩要小) ,你是要开发个
工具,不是产品。"韩老师说的话大抵容易懂,而深刻,对我颇有教益,这一句就是。代码可以重用
到什么程度,给用户提供多大程度上的方便 (友好之类的),在工程中,不仅要
看未来和追求,也要视为一个急功近利的短期行为。如果我们在VBA判卷上做得那么完美的话,当年我跟偶像多半个下午判完全部试
卷的传奇故事就不会发生了。我们可能今天还在追求某个完美的细节。我记得当
年李老师质疑过我的判法,"你这么判,要是那么答,不就错了也得分么?"我
答,"是啊,不过换成人判,比如你,就能那么认真了?"写程序,我们要的只是比没程序更好,不是最好。"最"这种事,只存在于当今的
媒体、人民的幻想及文革前后的文革之中。对不起,错了,文革语言不仅是"最
",而且是"最最"。需要补课的同学请自行阅读参考书,这里不展开了。有时候,追求完美的重用--对未来的无比重视--会让我们失去今天。当然,失去
今天也就没有未来了。比如,年轻男女经常讨论的问题,类似于"以后到底谁刷碗"啊这样的。重用这和
这个类似。事实上,以我们的年轻和技术之浅薄,大多时候,因为没有足够的经
验,我们根本无法预测未来会如何发展。重用是什么?重用是在*未来*被自己或
别人*再次*使用。咱们这点破技术,知道未来如何再次使用这些代码么?有同学说,"书里说了"。呵呵。书归正传。用脚本生成脚本,一看这题目,不少同学就会想到编译原理啥的,还
有同学想到了lisp里的宏。我说的不是这些高级题目,而是极其朴素的刚刚能对
付得过去的手段。1. 所谓朴素所谓朴素,就是尽可能不使用和依赖高级的技术。比如,我到C++中的 flow
control的时候,讲到循环执行,给过这样的例子:请输出从1到5的数字。同学们给出的答案都是:for(int i=0;i<5;++i)
{
printf ("%dn", ++1);
}当然,漂亮。我的一个答案是这样的:printf ("1n");
printf ("2n");
printf ("3n");
printf ("4n");
printf ("5n");我看到了,得有超过半个班级的同学对我的写法嗤之以鼻。这代码太烂了,马上
就会有人指出,"要是输出到100呢,要是输出从8到20呢。"我的代码的缺陷,缺乏重用性,数量大了不好改。一,谁说我准备重用了呢?我
们一看到别人的问题,往往就要预想提问者的动机,有时甚至解读过度。中层对
上层的解读,往往如此,下层就受了苦。二,数量大的时候,其实也简单,我可
以在excel按ctrl拉鼠标,得到数字序列,然后再把这一列粘到C代码里。之所以能这么对付,是因为,我也可以假设这段代码只用一次,而且只被我一人
使用。2. 例1,跟牛同学的讨论前几天跟刘同学一起破解了个软件,我的解法暴力而有效,刘的解法更好,极其
优雅。可惜现在似乎还不宜显摆具体内容。不过,后续与牛同学的一些交流可以
在此讨论一下。我为牛同学分配的任务是,把这好几千个文件的名字改成符合某个算法要求的文
件名。文件名的对应关系,一部分在数据库里,一部分是C#代码。你打算怎么实现?牛同学准备写C#程序读数据库。我建议的方案是这样的,一个标准的对付流程。(1) 写C#程序,就是那段算法;
(2) 把数据库里的作为算法输入的那一列复制到C#代码里;
(3) 让段C#程序,输出很多行这样的文字:
mv "源文件名" "目标文件名"以上,用C#生成了shell程序或批处理,然后跑一遍就改了所有文件名。C#本身
并不操作数据库 (人手拷过来的),也不操作文件系统 (由shell程序完成)。如果算法变了呢?如果源文件列表变了呢?如果……所有这些问题的答案都是:重
新跑一遍上面的流程。用人,而不是用程序的可重用性。当鳄鱼冲上来咬你的时候,有一种情况,你绝对不要用刀。那就是,你手头没有
刀的时候。另一种情况,不建议用刀。那就是,你用刀非常不熟练的时候。你可
以抱住鳄鱼的嘴,它的咬合力惊人,但是张嘴的肌肉非常软弱。这个时候,并不
是你训练自己用刀的时候。同样的,当你不熟悉数据库操作,不熟悉在C#里文件系统操作的时候,你应该做
的是 不用它们。项目是用来解决问题的,其原始动机不是给咱们训练技术的--
技术可以在自己练习的时候做。项目唯一能训练的,是工程能力。就像鳄鱼问题
能训练的是随机应变和灵活寻找解决问题的手段。3. 例2我有个top250电影目录,下载的时候不知怎么整的,文件名非常长,而且中文部
分是乱码。一直准备把中文部分都删了,长期拖延,昨天晚上整了。原始的文件名类似于:
Top093.罪恶城市.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
准备改为
Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv这样的文件有250个。这么整的。下面是一个整行$ ls -1 Top* | awk -F. '{ first=$1;
min=length($1)+length($2)+3;max=length($0);print ("mv "" $0 "" "
first "." substr($0,min,max))}'> ren.sh; chmod +x ren.sh然后,执行这个脚本,文件名就都改完了。文件中有 ' 或 ( 的,可能会出错。ren.sh这个脚本,是重定向输出的前半段产生的。这是unix系统管理中常用的一
个手段,用程序A生成一个脚本,用生成的脚本,而不是直接用程序A解决问题。脚本的内容是很多个这样的行,下面也是一个整行:
mv
Top093.罪恶城市.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv4. 例4做等级考试的系统时,要批量ping机器以确定每台机器网络正常。我也使用了类
似的方法,用C生成ping.bat。bat里面是很多ping目标地址,及只ping一次的参
数,似乎还有一个超时设置为半秒的限制;C负责循环IP地址,好象是这样
printf ("ping -n 1 192.168.0.%d", i++);。IP地址的循环,我也用excel实现过。那套方案里,连C也不用。excel的几例中,有
一例是文字"ping -n 1 ",其余几例是IP地址的4个部分,其中最后一部分用
ctrl实现数字的递增。更早,也更朴素的方法,我用记事本复制第一行ping,然后粘贴几次,每次复制
已粘过的,行数翻倍增长;然后再手动修改IP地址最后一段。这些方法都很朴素,但是有效。5. 总结核心思想是,用代码生成代码;在这个过程是,保持注意目标是"小工具",抛开
重用的幻想。关同学前两天提到,我们在既往的开发中,代码最终都没有重用。我想,代码不
必重用,或者说,我们远没有达到那个高级阶段。能够解决问题,并重用解决问
题的手段--设计,就非常不错了。而且,毕竟设计很值钱,而代码够便宜。
--------------------
博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]

遇见高手

遇见高手高手似乎不常见,不过那是因为我们没睁开眼睛。"高手"二字又不是贴在脑门上
的。今天先是见了奇异天象,然后见识了巨牛高手两位。展示天象的这天,是天天得
见,只是不常抬手,这两个巨牛高手也是早就认识,还有一位没事就见,不过未
曾经常一见身手。从净月去应化所,我们坐关同学车里。我用嘶哑的声音大喊,"彩虹!"包师弟
说,"啊,你看到的是玻璃吧。"是啊,大晴的天,之前也没下雨,怎么会有彩虹。
不过二猫妈也看到了,不是我的错觉。关同学说,"我也看到了,在那。"我说,"你
快别看了,好好开车吧,吓死我了,你。"我打小到大没见过这样的彩虹。一长条,非常宽,横在天空里。随着车的移动,
能发现很有一部分藏在楼群的后面。变换了几次位置,始终没有看到全貌。我
想,得有几十公里的长度吧。是谁当时说,"是彩虹桥么?"我想起了赛德克・巴
莱,不过,说话人的意思,也许是以为我在讨论远处的某座水泥桥,叫这个名字。赶紧掏相机,不停地拍。经常有人问我,你老带个相机干什么。我一般答,"万
一哪天遇到UFO。"今天,虽无UFO,然而也派上了用场。晚上检查照片,发现其实那不是彩虹,而是更为宏大。那是日晕的一部分,是双
层日晕的外层。而内层日晕,因为阳光太刺眼,我们几个人都没有注意去看。高手也是这样,不显身手时,你哪里知道这家伙居然如此牛。高手故事之前想起
刘老师讲的一位体育老师,身高一米五几,非常瘦小,但是重达90多斤,练什么
武术的。一次遇到变相劫道的,上去是跟人家握手还是什么,反正一个照面对方
就服了。试想,她就这么往你面前一站,如果不显气场,哪个能看出来这是高手。我常用的座机是x200笔记本,装了Ubuntu 10.04 LTS,dell U2311H显示器。这
一组合的结果是,长期以来,我只能工作在1920x1080的分辨率下,而我的视力
相当不好,只好更贴过去。还有一个后果,因为x200只有vga输出,所以dell显
示器的hdmi及dvi-d接口都派不上用处。这种分辨率下,vga输出的显示器上经常
有条纹慢慢飘过去。高度近视的同学都知道飞蚊症。当年我问医生,能手术不。医生说,你不是还能
看见么,先对付着用吧啊。我说,看着这么闹心可怎么办啊。医生说,调整一下
心态就好了。我明白了,忍一忍吧。后来条纹到是没更重,但是我想,长此以往,眼睛该更完
蛋了。准备忍痛花钱解决一下。花钱,指买点设备,不是换眼睛。以前就跟包师弟谈过。我说:我那机器有点毛病……包师弟说,因为你那是VGA的,它
的分辨率上限就是这个,规范啊带宽啊云云。今天,我又重提这个。我说:打算买个PCMCIA卡。包师弟说:你换个操作系统就好了。我说:我不打算用windows了。包师弟说:那你升级一下呗,原来的东西还都在,我升完了。我说:嗯,不错。包师弟说:其实你用这样的分辨率 (他指着牛同学的大约1024*720说),就不晃
了。我说:我的显示器不支持啊,16:9的分辨率只有这一个,其余的都是4:3,看
着太扁了。包师弟说:那是你的操作系统不支持,不是显示器不支持。如果你的操作系统连
这个分辨率都不支持,你确定它支持PCMCIA。我顿时没词了。我:我打算买个vga转dvi-d。
包师弟指着我的vga口:瓶颈在这里,从这出来的时候就有条纹了。我顿时再次没词了。包师弟说:其实应该能添加定制的分辨率。然后,晚上,我添加了定制的分辨率,结束了长期的小字生涯。虽然由于弱视散
光还是看不清楚,但是总比小字容易辨认很多。再然后,我准备给包师弟发封邮件感谢,发现他已经把一个链接发给我了,就是
如何添加定制分辨率的。可能有的同学说,添加个定制分辨率么,你这么感慨。这跟另一件事非常类似。刘同学替我讲算法与程序设计实践课的时候,选的主题
是用setjump实现C语言的异常捕获。我事后对同学们说,他要讲的并非setjump
函数及用法,这些知识没有多么重要。他要讲的是:如何在一个受限的平台上使
用受限的开发工具,实现原来没有的功能。这正是工程师的一个重要素养,修改原有方法,实现新的功能。包师弟的杰出在于,精确的判断路径。他一语道破,为啥我的那些解决方案都是
愚蠢的。这甚至不必实验,因为我的计划是不符合原理的。我仅知道原理,并认
同,而他看到了由原理导致的结果。高手的特点就是,你只看到了那家伙一侧
身,而高手知道他是准备来个后踢,然后一脚踹他屁股上。下午,见另一位高手,董老师。董老师卡卡讲了半下午,数学、信号系统、电子
学、化学、计算机程序--结论是它们都是一致的。事涉项目机密,具体内容不能
深谈了。总之,牛人说"这个挺简单的",那个时候,他真的觉得那个东西挺简单的,以他
的标准。而当他实现,对他真的很简单。因为我们的那些错误技术路线,他根本
就不会遇到。比如,他使用针对特殊问题采用特殊的方法,他更清晰地看到问题的本质 (什么
是什么,具有什么特性,而不是什么,那个特点一点也不需要考虑;比如包师弟
上午指出:临域均值是一种拟合,使用线性函数,所以平滑不是什么特殊的东西)。还有。当我们看到那个理应简单的电路,结果高手用了相当多的器件;那个应该
非常短的代码,高手写了N长。那正是他们比我们高级的地方。他们的设计能够
在更恶劣的环境工作,能检测更精细的信号。我们的,只有在特定的场合下能测量特定的东西。更糟糕的是,我们可能还不知
道,以为高手们的设计那么多多余的东西。所谓沧海横流,方显英雄本色。我们
平时也挺牛的,沧海一流,我们就成了培养英雄的土壤。有一次修打印不干胶的机器,串口接计算机上,那个串口坏了。我把机器换到另
一个串口,然后把软件设置中的串口也改了过去。因为第一个判断就对了,所以
前后不到半分钟。所以,当时听到"哇,原来这么简单啊。我也会啊。"作为答复,我当时讲了个故事。一个家伙马桶堵了,怎么也捅不开,只好找水暖
工。水暖工来了以后,三下五除二把马桶下面打了个洞,然后就修好了。马桶的
主人也是,"这样也可以啊,我也会啊。"可是,你不知道"这样也可以"啊。这就是画一条线999美元的故事。在不干胶机器的案例中,我当时还有没说的。除了第一方案,我还设想了四五种
可能的原因,如果一击不中,我还有后手的。你也有么?我只是极其偶尔才冒充一把高手。不过道理是一样的,我们见不到高手,往往是
我们自己的眼睛睁得不够大,以为他们与我们相同。那些不同,正是我们无缘或
没有能力见到的,把我们与英雄区分开来。听说海因莱因认为"一个人应该有能力换尿布、策划侵略、杀猪、给轮船掌舵、设
计建筑物、写十四行诗、平衡收支、造墙、接骨、安慰临终之人、写菜单、发布
命令、合作、独立工作、解方程、分析新问题、施肥、写电脑程序、做可口的饭
菜、有效地战斗、英勇地死去。"我除了最后一条能部分实现,其余的,竟无一命
中,真是失败。命中那部分,就是能死,甚至这一条也无法全部满足,因为绝对
无法做到英勇。不过,能遇到高手,也算幸事。是不是还有很多人以为自己一直没有遇到过高手
呢。
--------------------
博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]