回忆《秦颂》,一半

回忆《秦颂》,一半今天突然就想起《秦颂》里的那首歌了,不是后面始皇帝大典准备的那首雄壮的,而是开头赢政和高渐离一起吃奶时听的那首童谣。我特意找来原声听。前面是古意盎然的配乐,然后,一个女声低吟,"两只小狗,梦见骨头。汪汪汪汪,咬了一宿。咬了一宿,狗毛两口。汪汪汪汪,没有骨头。"然后……我倒是还记得所有情节,不过如果在回忆一番,就太剧透了。自己激情澎湃一顿,怕以后忘了,写两点感想吧。1. 多读大师作品。我怀疑,大师们可能是自娘胎里就是牛人。看姜文、葛优、周迅 (周迅没参演秦颂,顺便一提)
等牛人的早期作品,就已经霸气露得横流遍野了。想不明白为什么有人上手的时候就那么牛,不过似乎是个事实啊。据说《秦颂》的编剧也编了《活着》,并且说过:我以为我们终于开始了,没成想到那是结束。对于那些开始了就结束的牛篇章,更是值得好好品味学习。C语言等也是,光读教材是不行的,还得多读经典著作,及经典系统中的代码。有的同学刚开始会觉得那些代码有点怪。不过,音乐课老师说了,对美的欣赏在一定程度上是一个习得的过程,也就是说不是天生的,得不停地学习正确的东西才能培养出来。所以,那些代码不是怪的,而恰恰就是正常的。再顺便一提,《秦颂》后面大典那段的歌词,我说那么质朴雄浑哪,那就是琅邪台刻石,《史记·秦始皇纪》里记载了的。那些牛人的文学作品也是一样,应该读。优秀的网络小说,就让时间和其他读者替我们筛选吧。2. 勿忘那些本始的理想骨头之于两只小狗也罢,音乐或栎阳公主之于高渐离也罢,天下之于秦始皇也罢,都是一样的不懈追求的理想,或者强烈的欲望。我们喜欢代码喜欢文学,就应该努力持续地追求下去,不及他顾。如果有一天我们发现自己其实喜欢的是花花世界的喧嚣,那就不要有任何掩饰,去追求。所有努力的追求都有值得肯定的方面,无论追求的是什么,那些种种掩饰才是丑的。高渐离毫不掩饰地追求音乐和栎阳公主(仔细看台词,确实有追求的成分),始终如一。高渐离先生是燕人,就是北京地区的人。读到此处,可能你也发现燕和北京是多么不一样的两个地方。倾望楼盘及听着IT界这样的说法,实在想不到跟两只小狗这样单纯的热爱有什么共同点。繁华和各种修饰,把我们本初的理想淹没了。深入代码的本原,不为一城一池的得失所动,眼前的项目都是我们追求代码本原的过程,而不是动机。3. 影子《秦颂》的英文名是 帝王的影子。类似的,安德的游戏系列有霸主的影子,黑泽明电影有影子武士。影子,是个挺有意思的东西呢。--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift]

14条原则 (4) 把大问题划分成小问题

14条原则 (4) 把大问题划分成小问题这条原则的全文是,"把大问题划分成小问题,然后系统地检查每一个小问题,看是不是问题的起因。再大的问题都能按这种方法分成小问题加以解决。"把整体划分成若干局部,这正是两千多年来人类一直在执行的方针,亚里士多德就论述过了,此后也鲜有进步。看起来很简单,但是执行起来非常困难。比如,如何划分一个问题。这一条太难了,我也只能谈几个体会,求过路的牛人们不吝补充事例和给出自己的解释。1. 当前只有一个问题假设我们已经把大问题划分成了几个小问题,那么,重要的是假装当前只有一个问题。然后集中精力去解决这唯一的一个问题。当我做一百个俯卧撑的时候,60以后会变得非常困难,尤其是呼吸和心脏的压力,那个时候最想做的是放弃。我采取的最重要的措施就是关注当前的这一个,调整"它"的动作。下一个?下一个再关注当前的这一个,调整"它"的动作。这样,一个又一个就做完了。传说古代的男人是以打猎作为主要职业的,提供的蛋白质和脂肪(糖份是由女人采摘提供的)大大加速了人类的发展。而打猎中非常关键的一个因素就是:专注。所以,如果我们同时关注很多步骤,很多目标,很多集点的时候,我们就什么也看不清了。直到现在,我们似乎还保留着这种天性没进化完。所以,当我们把自己当成一台机器操作的时候,就应该按它的内在逻辑和性能指标去操作。如果它需要专注并善于专注,那么,我们就应该使用专注的方法。只关注当前的这个问题,假装它是唯一的问题。有的同学可能要问,那如果同时存在两个问题呢,这种事情难道不是真的存在么?答案是:当我们解决了这个唯一的问题的时候,接下来遇到的,是下一个唯一的问题。一个简单的例子,比如在编译的时候,经常有同学大叫,"哇靠,100多个错误啊!"改个地方再编译,"刚刚的错误消失了,但是……200多个错误啦!"如果我们坚信错误只有一个,唯一的一个,那么,所有那么多错误信息,就都是编译系统的愚蠢而已。而事实上,正是如此。绝大多数情况下,只有第一个编译译错误才是有意义的,后面的,可能都是编译器对这个错误所做的愚蠢猜测导致的。比如我们写main() { a = 3; printf ("%d", a); // 其他对a的使用}编译器先抱怨我们没有声明a就赋值了 (即a=3这行) ,然后抱怨了一大堆没赋值就引用。而只要 int a = 3,a就满足声明了,然后后面的所有错误就全消失了。也许我们应该这样规定编译器的行为更好一些:一旦发现错误,就停下来,因为只要有一个错误存在,整个程序就都不可能运行,下面的错误,是没有必要讨论的。就像 a && b && c && d ... 只要a是假的,后面的是没有必要求值的。所以写程序是个需要有洁癖和强迫症的事。只关注唯一的问题,这也大大减少了我们的心理负担。如果知道人生后面还有那么多苦难等着呢,可能要跳楼跳桥的人数会大大增加吧。那些苦难一望无际,但是一个个解决下来,我们也就成长了。所有的RPG游戏,WOW之类的,无不如此。人生也是一样,调程序也是的。2. 说起心理负担,说个题外话。不少人认为程序员都是有点强迫症的,或者更泛化一些,IT男大抵如此?IT女就惨了,有些认为自己有强迫症啊,这多么可怕。其实没啥,不损害国家和社会,对周围人也没有啥负面影响,就无所谓,不妨当成一种可爱的品质接受下来。比如我经常锁了门以后下楼,然后挠头"我锁了呢,还是没锁。"上去看一眼吧,恩,锁了。注意,此处有闹心,好像这么点小事都没处理明白似的。再下楼,再挠头,"我锁了呢,还是没锁。"如是者三,就真闹心了。其实没啥。我们有解决手段的。不然程序员这么精细的生物如何在这个粗糙的世界上生存啊。简单粗暴的手段是,在某次上重重把门关上,用手使劲拧钥匙,让手生疼。记住这个感觉。复杂点的手段是:随身携带相机,拍下来锁门了。照片上都有时间戳的,怀疑自己的时候就拿出来看一眼。综上所述,认真严谨带来的副作用不可怕,可以伴随终生。3. 当问题真的有两个同时有两个问题的情况,一个一个解决。这在前面说过了。要补充的是,在解决的过程中,观察故障现象的变化。经常有牛人修机器调程序的时候,旁边一群观摩的。观摩的人们就发现,牛人修了半天还没修好,但是却一点也没慌。一个可能的原因是:故障的现象一直在变化,牛人正试图找出规律。最可怕的不是故障,或是故障现象一直不稳定,而是没现象。或者你对故障的现象无从解释,即没有一条理论指出现象理应如此。人类倾向于追究问题的原因。古代天打雷了,下雨了,下多了,下少了,祖先都要找出个原因来。然后针对这个原因做点工作,再观察。比如不下雨了,就扔河里几个童男童女。这个时候如果还不下,大家就有点毛了。得给出新的解释或假说来。所以,在每一步里故障现象的变化对于诊断非常重要。琼瑶女士有部作品忘了是什么,还是你们还是小学生时候的。当然,跟现在的路数区别倒是不大。不过统而言之,从诗经到现在,琼瑶读者关注的内容似乎区别也不大。琼瑶剧里一个女的把男朋友惹翻了,很久以后
(我猜顶多几个月,不过片子里似乎是半辈子)又见面。见面以后似乎是吵了一顿。事后女的问她爸,他生气了吗。她爸说:孩子,我看你们算是完了,他气得不行了。女的说:太好啦,这说明他还爱我。这位女士具有成为程序员的潜力,她的依据就是故障现象的变化表明问题。最可怕的不是憎恨,而是冷漠。最可怕的不是天崩地裂,而是没现象。
3. 孤立的原则,分析没现象,就离没救不远了。这个时候,我们要做的就是整出现象来。如果现象不停地变,似乎没有规律,我们要做的就是确定设置与现象之前的关系。以上两种都要求,孤立。每次只检查一个坏部件. 假设其他的都是好的,直到遇到矛盾。这也正是后面的另一条原则。就像肌肉训练一样,孤立有很多好处。只有孤立才能不让有毛病的部分被好的部分掩盖起来。这时需要特意设置一些操作,以验证自己的假设。福尔摩斯,Spock,还有柯南都说:排除所有的不可能,剩下的就是唯一可能。排除所有不可能的第一步,是确定有哪些可能。第二步,是一个一个地单独排除。前者,就是问题的划分,后者,就是孤立的原则。或者说,分析
(相对于综合) 的方法。要确保每种可能
(或步骤)间的节奏,不要混在一起。在处理某种可能的时候,不要试图走捷径把别的可能一起测了。那样,你最终也搞不清楚到底哪个才是问题的原因。可类比的案例不少,比如集中优势兵力,各个击破敌人;比如,在实验室,人工限制约束条件,确定变量间的因果关系。4. 实验计划所以,在实验开始前,要先列出实验计划。你认为都有哪些可能,应该用哪些方法
(根据实验现象)判断这种可能是否就是问题的原因,需要哪些步骤,先什么后什么。这些都要在实验动手前写下来。然后一步步执行的时候标注结果。你猜对了么,为什么,这个猜测是错的么,是什么现象否定了你的猜测。先假设各种可能,然后再做实验。当所有的假设都验证了,没有新的假设,而现象还没有得到解释的时候,就是该停下来的时候。我们打猎的时候是假定那里有只兔子,然后才放箭的,而不是到处放箭,然后跑过去看那里有没有兔子。打哪指哪的效率太低,那么干的都得饿死。虽然你可能看到过那样的事:一抬头,啊呀,这不就是问题的原因么。灵感这种事,不是工程师应该依靠的。类似的,大的项目和大的学习计划也需要拆成小步,不然令人叹为观止的工作量会在我们开始之前把我们压垮。一般四五个小时的就可以称为令人叹为观止,更不用说需要一年半年才能读完的书,或者完成的东西。别以为我们这么大了控制能力就提高了,在这方面,我们仍然是希望在第一时间能检验自己成果的孩子,是希望快速判定这条路线能否成功的原始人。即使你意志坚定,或者说信仰坚定吧,你的老板也一样么?所以,工程师需要掌握的基本素养是:估算和度量。在最初的时候分解任务,估算时间和成本,在每一步骤结束后度量结果。有的同学可能会问,那初学的时候我还没有能力分解,没有能力估算怎么办?我一直面临这一困惑,时时为自己的计划没有顺利执行而痛苦。尤其是新知识结构的书,简直无法预测啥时候能完成。后来为了平复自己,我这么做:去读,去做,啥时候完成啥时候算。不去估算。因为没有能力估算。等到知识结构逐渐建立起来,这一领域的知识丰富一些了,估算的能力也就提高了--估算的能力,正是在一次次的度量之后与最初估算的结果对比后提高的。5. 如何划分问题如何划分问题,依据我们的学科中的那些理论依据。依据我们对世界的理解。这就不是我能讨论的了。
--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift]

在唐山,神奇城市

在唐山,神奇城市单位派我出去讲课。先是北京,阴霾的天空没有太阳,或者到处都是太阳,无论是楼群还是
行人,脚下都没有一点影子。湿热,大家把半袖挽成砍肩,但是汗水仍然一点也蒸发不出去,
因为空气里的水已经饱和了。下一站是唐山。随便找了一趟不知道终点是哪的车,反正,下一站是唐山。到的时候已经入
夜,只看到公路两侧的路灯昏暗,向远处无尽延伸,路灯下面满是耀眼的车灯扑面而来,忽
啸而去。偶尔,立交桥黑色的影子横过同样黑色的天空。坐下来吃了几口东西,抬头看正喝酒的各位,确认已经是唐山了。1. 时光隧道我们住在火炬路,高新区。街道不宽,不过似乎是市中心的主干道之一。站在楼下,看到街
两侧一片灯火通明,各种洗浴、饭店、宾馆。一个叫 "爱大兵馆" 的,我凑过去打算看看是不是军属什么的,原来是招牌上的霓虹灯有几
处故障,全文是"爱乐宾馆"。对面不知哪一家,大喇叭开足马力,放着"伤不起,真的伤不起",这边,放的是"我是一颗小
小的石头"。街上人来人往,说着我完全听不懂的方言,不仅拐弯诡异,而且字词发音都粘结在一起。我
一直以为我能听懂唐山话呢。赵丽蓉在小品里的对白,我都能听明白。想起来前两天跟南方
来看长白山的同学说,"估计长白山区的方言你们不一定能听懂",我说了几段正宗的东北方
言之后,几位得出结论,'原来赵本山他们在小品里还是很有所保留的啊。'看来,赵丽蓉也
很有保留。宾馆里的计算机显示器可以兼作电视用,同时还是音箱。不碰鼠标几秒钟,屏保就出来了,"
严厉打击一切涉毒违法犯罪活动",黑地白字不停从右向左滚动。对了,这段话后面还有个巨
大的叹号。计算机里装了不少音乐和游戏。音乐没有"伤不起",主要是"明天就像盒子里的巧克力糖"这
样的,走廊里别的屋也在放这一首,估计是标配,反映了老板或机器管理员的品味。游戏都是我非常熟悉和亲切的。极品飞车5,我又重温了一下里面暖色的夕阳,因为3D综合
症晕得我一头汗。还有暗黑破坏神II,还有一堆抢滩登陆站各种版本,帝国时代I,II。还
有罗马复兴。还有星际II。上网用的是IE6,访问很多站点都提醒我升下级。我升了,重开机又恢复回去。我突然醒悟
过来--时光隧道!也许从1976年开始,唐山的城市建设越来越快,越来越先进。以至于最后
超英赶美了。但是,咱们得tao光养晦,不能让阶级敌人和美帝苏修啥的了解咱们的实力。
所以,咱们又建设了一个专给外人看的,混杂了自80年代起各种风格的唐山。也许,本意是每个年代各有一个,只是相互之间略有侵扰?2. 腰间盘也许是我太急于向大家报告,而又被发现了,所以第二天一早麻烦就来了。一大早,小雨。我这个高兴啊,几天来的在北京的闷热可以一扫而光了。我没意识到悲剧正
从此开始。早饭,坐车1000米左右到了会场。小雨带来的不仅凉爽而已,我突然发现坐不住了。腰间盘
突出复发了。给不了解腰间盘突出的同学们补补课。这毛病终生携带,基本不能根治。不犯病的时候好人
一个,啥也看不出来。天一冷一阴啥的就犯病,主要症状是不能伸直腰,有时还向一边歪。
我当时的状态就有点类似《猫和老鼠》里那大狗,上半身前倾,两只手dala着,努力仰头,
正好看到前方。彭老师说,你快去买个热贴吧。我也感觉不好,所以毫不推辞,"好"。会议
刚开始,我跑了。打车1000米到了人民购物。买到热贴。当是时也,我已经只能用手撑在柜台上才能站住了。
贴上热贴,好,回去开会。开会结束,我发现快站不起来了。果断不吃午饭,回去躺着。下午,站立还是非常困难,去
买护腰。先查好地图,走了1000多米,药店。"啥?护腰,没有。"说是再走500米,医疗器
械有。我走了500米,看到建设路口。走不动了,打车。非常非常远。我想,应该是又回到当前的时间线了吧。终于,到了一个我也不知道什么地方
的地方,总之,有护腰。我长吁一口气,"得救了。"接下来讲课,我只能坐着。好在一直晴天,腰一点点好起来,现在,已经能直立着站立了。腰突非常疼的时候,我突然想到,这不就是软件工程里提到的健状性么。一个健状的系统,
能在诸多情况下应付自如,稳定输出。而我,对周围的环境依赖和要求越来越强。如同李记
者说的,老了,脆弱了啊。3. 羊羊汤馆这是第二天晚饭我去的地方,名字就叫做"羊羊汤馆",不是"羊汤馆"。我事先在地图上查好
位置,然后才去的,估计我这腰可以承受的距离。一看,是个小店,不知道卫生如何。我又转了半圈,估计自己没能力走更远了,又回去了,
就这吧。一进门,看到五六个汉子分坐在几个桌子边,脸朝着一个方向。都抬着头,眼神直勾勾的,
偶尔低头喝口汤。啥仪式?我又穿越了?顺着他们的眼光一看,那头一个电视高挂在墙上,
大家都看什么节目呢。顾客们的身后,胖老板在玻璃柜子里,黑乎乎模糊的影子,响亮地低吼了一声,"来碗儿羊汤
~~"这不是个问句,不是在征求我的意见,似乎是向同伴通报。我想,这应该是个仪式吧,点
点头,差点应一声,"好嘞~~"我走过去瞅两眼。其实我这眼神,只能看到里面站个人,下面一堆各种颜色的,应该是调料
或肉。走过去及"瞅"的这一组动作,纯粹也是个仪式,表明1.我看着呐啊,别蒙我;2.尊重
人家的劳动,表示一下兴趣。老板估计抬头看看我,"大碗儿小碗儿?""大碗多大,小碗多小?"这也纯是个仪式,我根本没想到跟KFC式的,还有选择的。"一样大。""啊?大腕和小碗一样大?"老板的这句回答让我完全丧失了仪式感,完全不知道该如何继续
对答了。"对。碗一样大,料不一样。"懂了。反正我也不知道料有多么不一样,"大碗的。"我也加入汉子们的行列,坐下来面对电视开始朝拜。整场晚饭,在我犹豫中度过,我一直在
想要不要来二两白酒暖暖腰,又想还是小心点别喝完不小心再伤更重了。最好,灌了半肚子羊汤和饼丝,回去看书,然后倒头就睡。4. 练功的半大老爷子今天下课,我去会展中心广场找单杠去。奇怪,学校里反倒没有。终于找到,原来网上很轰动的会展广场的"运动区"就跟现在的小区门口的运动区规模差不多,
怪不得这么难找。一组单杠,一高一低。还有一个双杠,一对父子正拿它当足球门,练起来
非常不方便,我一荡就容易踢着守门员。还有个把绳子拴腰上可以从地上弹起来那种架子,
坏了。以上,没了。向龙说的,单杠可以拉伸。我在单杠上抻了两下,腰没啥地,手先握不住了。正无聊,一抬
头看到一位半大老爷子,我立马决定不练了。这位老爷子大约五十岁,可能还不到,只能称半大老爷子。精瘦,精肉很多,也很瘦。他个
子不高,需要跳起来才能抓着器械,就是那种器械,顶上很多短的横棍,像卢定桥下面,可
以像猴子那样从这头一点点荡到那端。但是,他并不是正常那种荡法,而是从侧面抓住的。
侧面的横杠,跟我的小腿粗细差不多,手指拢不住,得纯靠指力扣住。半大老爷子不仅抓住
了,还来了个引体向上。不仅引体了,而且一下横杠直到胸口,快到肚子了。然后,又是一
下。我不练了,就站那傻看着,准备半大老爷练完了,给个拇指的手式。旁边一个半大小子,三
角肌还没开始发育呢,朝半空哈地踢了一脚,然后也定那了,跟我一起看半大老爷子引体向
上。小伙的舌头都伸出来了,一个颈舔嘴唇,恨不得把半大老爷子的肌肉扒下来吃了。不过,
看起来半大老爷子的肌肉真的不是很发达,即使用力的时候也看不出来多鼓。但是,他就这么一下一下一窜窜地引体到胸口,完全没有停下来的意思。最后,我实在没意
思,跑一边去继续拉伸去了。也不知道他什么时候停下来的。只知道后来又来了位老爷子,
略微粗壮一点。两人寒喧了两句,似乎粗壮的有点啥问题,半大老爷子似乎说,"就这样",
然后啪一个左右劈叉,大腿简直是砸在地面上,接着站起一半截,啪又一个前后劈叉。站起
来拍拍土,骑上自行车,走了。我看着半大老爷子的背影,拍着自己的腰,想挑大拇指,没敢。5. 羊汤馆今天晚饭,这个店就叫"羊汤馆",不是"羊羊汤馆"。除了羊汤,我还点了个茄子,只有能力吃掉一半。然后坐那发傻。因为我在看面前一个黑小
伙,犹豫着要不要把茄子分给他。这兄弟点了一碗汤,和一大堆面丝面饼,还有一小瓶酒。
汤被他三下五除二就杀剩个底,然后就着面丝喝酒。我想起本科的时候跟师兄于寅虎在泽记吃饭,似乎没有扣肘子,只有似乎一个菜,和酒。一
位不知道哪来的大姐邀请我们和她一起吃,说她的菜反正也吃不完了。她说,她是做美容还
是美发的,说这行有个要求,就是你本人得漂亮。记得师兄说,对啊对啊。我从菜和酒里抬
头看了一眼,心想,恩,记住了。但是,她的脸我一点印象也没有,就像所有的脸都那么相
信。当是时也,包括此刻,对于啥是美啥是丑,我一直有自己独特的见解,并且一直在学习其他
人的观点,虽然他们的观点很难找到什么规律,但是我一般也不深问。当然,这也是个仪式,
假装我也了解。就像在唐山,我假装没有发现这个城市其实在时光隧道的另一端。不然,怎
么某位学员会对我说,'你一看就是外地人,小心别被偷了。'我怎么一看就是外地人了呢。难道,我表演得不够遵循仪式?--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift]

一个程序员眼中的羽毛球让球事件

一个程序员眼中的羽毛球让球事件晚上很多人都不编程序,跑去看奥运会,然后白天的时候讨论一番,借此表明宅男女们仍然是与这个世界同步运行着。我也是。我根本不懂羽毛球的规则,连内边界外边界都不懂,球网多高也不知道。只知道打的时候是这边一组那边一组,把球往对方那拍。能知道这点还是因为小时候看到有钱人家的孩子买了球拍在马路上打,我经常害怕他们把拍子抽我脸上。我所知道的,就是中国队员让球了,没好好打,然后被取消比赛资格了。然后我们的新闻社吧咱们的队员不争气。其余的,都是我不知道的。比如,我不知道根据哪条规则取消队员的比赛资格。1. 规则我们知道很多种语言,C/C++,Java,还有其他乱七八糟稀奇古怪的,比如汉语英语日语德语什么的。这些语言中比较人性化和容易理解的,比如C语言,具有这样的特点,先告诉你个规则,凡是不符合这个规则的句子,就判定为"非法",编译器不予接受。看起来很严厉而不尽人情,其实这是最通人情的方法。因为这意味着,凡是在规则以内的句子,就都是合法的。国际上还有个怪有意思的C语言比赛,专门看你的代码写得有多么地不容易读懂。最难读的,就是冠军。有的同学可能说,你不是说代码可读性非常重要,程序是写给人看的么?没错。这是建设,不是规则。可读性有多好,是由接受者决定的,并非客观规则。一个深谙数学的人会认为某段代码清楚如话,而知识结构不同的另一位,就会觉得写得什么破玩意。类似的,有记者跟风报怨现在的高考题太难了,然后他举了个例子:爸爸每4天休息,妈妈每5天体息,爸妈今天都休息,下一次体息是哪天。他认为这太难了,而你认为他小学算数的最大公倍数部分没学好。除非法律明确禁止的,就是合法的。所以,C++的作者提到,好的编译器应该是什么样的。它应该能禁止所有的不好的行为,而鼓励好的行为。那么,用文档来规范程序员的行为,就是较差的方法,或者说,他对程序员的要求更高。如果凡是被禁止的行为,无法通过编译器,那么任何坏的代码就都无法进入版本中。有好的规则,才会有好的规则之下的产物。听说NBA有个24秒规则,如果你得到球权24秒内不尝试投篮,就失去球权。规则限制你,如果不积极主动,就会有惩罚;而不是如果不积极主动,不足够迎合观众或官员或老佛爷,那么就失去比赛资格。24秒规则听说是始于1950年湖人对活塞那场臭明昭著的无聊比赛,但是据我看到的故事,控球不投篮的队员们收到了满场观众扔来的瓶子,但是没有受到惩罚。很简单,惩罚他们的规则还没有制定下来。所以,我特别想知道,这几位羽毛球的队员是被哪条规则罚下来的。就像,司机被开罚单的时候也一定会问这个问题,而不能接受这样的道理,"你小子开车太不地道了"。道德,可以有时可以用来向别人竖中指,但是不能用来作为少发工资或者罚款的依据。2. 教练团?有的媒体开始呼吁追查教练团了。当然,即使不用大脑只用跛了盖也能想出来,队员是没有胆量和资格自己制定作战策略的。但是教练团真的有责任么,如前文所述,他们只是善用规则而已。那么责任在谁呢。有个孙子 (请勿把"子"读成轻声)杀王妃的故事,大家都知道。吴王给了孙子几个妃子,让演示一下他的训练技巧。孙子后来把王妃杀了两个,然后说"大王现在让她们去打天下都可以了。"这个故事似乎告诉我们,要从严治军。估计项目经理们可能也用这个给同学们灌过脑。但是。但是孙子的完整版不是这样的。孙子在杀王妃的上一次训话前说,士兵不听律令,是队长没带好,队长要注意军规了。然后妃子们又在训练的时候哈哈乐,队长才被正法了。有的同学说,那不就是教练团有责任么。孙子的故事还有个更完整的版本。孙子在上上次训话说,队长没带好,是因为我没说清楚号令,我再说一遍。所以,故事的顺序是:先自责并明确规则,然后要求队长,然后才大开杀戒。所以,自己没有说清楚,然后打仗输了,回来杀士兵的,多么地色厉内荏。所以,国际羽联多么地无耻。当然,经常有人无力控制,却抱怨别人不听指挥,不是么?经常发生这样的事,上级命令经常补充下来,一次又一次修正此前的要求。"这是重要的条款,一定要实施""这是补充条款,更加重要。"或者,就在文档或规范上写上"重要"。当"重要"很多的时候,大家就不去留心了。就像网络管理员要求用户口令符合这样的规则那样的条例,用户不得不遵守的同时,又难以记住,就只好写个纸条贴在显示器旁边。这样,就有了密码管理器和生成器。3. 观众的利益呢有的同学说,那么观众的利益呢?有人花了大价钱买了门票,还有交通费饮料小食品啥的。给报销不?有的同学说,这不符合体育的更快更高更强的精神。问题是,观众具有什么样的权利,观众权利与运动员权利间的契约是如何制定的。问题是,什么是"更快更高更强"。体育的目的包括好看,这是观众到现场和坐在电视前的目的。但是运动员的目标就是胜利,甚至我们作为观众没有权利要求运动员的目标。约束我们的,只有规则。项目经理们,以上这段是说给你们听的。说过权利,我们再来看权力。有权利者,如某联,是不是有权力惩罚?中国好声音 很多人喜欢看,认为传递正能量什么的;非你莫属
很多人极其讨厌,有烦主持人的,也有烦高座之上的老板们的。另一个原因让它们不同,一个是专业而不是权力来判定,另一个,是权力的声音在说话。试想,如果权力的上级,比如股东,辞退了他,他可能就没有机会
(和能力?)再评判别人了;而除了观众没有什么权势能够掩盖同为歌手这样专业人才的声音。如同非你莫属,运动员只是不得不屈服而已。此外,还有同学认为,动运员应该向全国人民道歉。那么问题又来了。如果运动是运动员自己的运动,那么,他们为什么要向不相干的别人道歉;如果运动是属于全国人民的
(有人在想纳税啥的吧),那么运动员只是采取了错误的策略,失败而已,何耻之有。有好结果就感谢全国人民,有坏结果就是运动员自己的责任。我们跟推脱责任的教练团和某联有什么区别。古希腊故事里,连神也要服从规则,比如誓言必须兑现,比如预言一定实现。中国古代传说故事里,长胡子神仙爷爷想让你做啥你就得做啥,比如在公交车上为他假装的老弱让座,不然惩罚一定降临,一般都是杀生命点什么的大手笔。更糟糕的是,老神仙事先还不告诉你他喜欢什么,得你自己去体会观察。所有错误,都是你领会领导意图失误导致的,要被取悦的观众则一贯正确。所以,计算机的世界多么简单,凡没有手册的软件一定是烂的。自己规则不明确却敢抱怨我们的代码的编译器,一定会被删除。我们还是回到自己的世界里去吧。--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift]

名字相关的一些事

名字相关的一些事很多明星从艺之后都要起个艺名,最好能过目成诵的。比如施瓦辛格就曾经给自己起名叫做"斯壮
(Strong)"。这反映了命名中最困难的部分。命名中最困难的部分不是名字容易被忘记,而是名字与那个人的对应更难。凡是初高中背过政治题的同学可能都有同感,答案并不难背,关键这答案是哪道题的呢。题外话。不少同学问我,你咋不整个笔名啥的呢。像"杨贵福"这样的名字,简直比最好的艺名还要好,能真正过目不忘,而且重名巨少,万万改不得。1. 命名的意义所在那么,我们为什么要为万物 (也包括万事)命名呢。命名使我们在讨论对象时更简洁,是一种重要的抽象方法。比如,提到一个地名,"我下午张守备修筑的城墙那开工啊"就很麻烦,如果简称为"张家口"就简单多了。类似的,石家庄、二道沟?这也是为什么程序员要为变量命名的原因。不然,"我打算向内存地址8000写入一个值,恩,作为表达范围0至65535的一个整数42",这确实挺麻烦。于是,我们把这种特别常用的功能抽象出来,起个名字。"unsigned
int a=42;"。8000呢?因为不重要,所以屏蔽了,不让程序员看到,这样更易于集中注意力于真正的业务逻辑。所以,当我们打算再次提到某个变量的时候,就需要为它命名;或者说,当我们意识到将要再次提到某个变量的时候,我们就应该命名它了。2. 名字的变迁使用名字的一个前提,是对话的大家对这个名字有共同的认识。即这个名字对应相同的概念的内涵和处延,不然也挺麻烦。因为俺们计算机学科也是有历史的学科了,好几十年,诸侯纷争,所以也颇有些历史原因的名字了。比如到底啥是"实时"就有好几种观点,大家都说别人是错的。人类历史也挺长的,所以类似的事也不少。比如希腊北面有个国家,叫马其顿。当年马其顿是个巨牛的主儿,打遍当时的"人类"所知的天下无敌手,而且没几年就完成了,只一代人的时间。可能有些同学对马其顿这个名字有点陌生,提一下它的领袖大家一定印象深刻,他们的头目名叫亚历山大。对,就是那个亚历山大。问题来了,直到今天,希腊仍然不承认北面这个叫"马其顿"的国家与历史上那个巨牛的"马其顿"有关系,而马其顿人民当然不这么看。是不是有同学想起了韩国?亚历山大的另一个与名字有关的事。这位大哥当年曾经向波斯王大流士索要过亚洲的主权。注意,不是波斯的主权,而是亚洲的。索要什么东西,对话的另一方自然得是全权所有者。这就让人猜测,亚历山大心里的亚洲,可能就是到印度前的那么大块地方。西伯利亚、中国、甚至印度,可能在他的概念中根本不算亚洲的一部分。至少日本韩国东南亚什么的,可能都不存在吧。但是时值今日,亚洲的概念大家估计都能背下来了。乌拉尔山-乌拉尔河-高加索山-里海-黑海-土耳其海峡,苏伊士运河,白令海峡。程序代码在成长的过程中,也经常发生这样的事。最初以为某个变量、函数是干这个的,过了一段时间发现,其实它是干那个的。如果名字不变,引用它的时候就会觉得非常奇怪,为什么一个叫做
PaintProc 的函数,即不是消息响应函数,同时也 不是/不只是 用来画图的呢?有的时候,我们嫌麻烦,就不改了,留给后人无穷的麻烦。比如 c++ stl中有个 endl。看名字,它的含义再清楚不过了, end
line。但是有一次,刘同学还是王同学,调程序的时候发现,printf ("n") 与 cout << endl
的行为很有些不同。有的同学看到这里可能皱眉头不以为然了,因为你可能看过这两段代码的运行行为,没啥不一样。它们二者相同的,是功能性需求部分,但是非功能性需求方面略有不同。有同学可能以为只是性能不同。不仅是这样。手册说:"Additionally, for buffered streams, endl flushes the
buffer",参见[http://www.cplusplus.com/reference/iostream/manipulators/endl/]。而printf中的"n"可没有flush缓冲区的作用。这就导致刘或王同学发现,在某个时刻,上位机程序读设备时输出的东西不一样。因为printf那个还没有flush,看不到。应对这种需要,"重构"中有一个专用于改名的方法。3. 名字的意义之所以要改名,因为名字除了唯一标识的作用以外,还带有别的意思。比如"杨贵福""霍去病"这样的名字,大家一看便知命名者的意图。改过名字的施瓦辛格后来把名字又改回去了,据说是因为他认为如果真的牛了,观众自然会记住他的名字。我恶意的猜测,可能还有个理由,他的名字对于美国观众而言,似乎具有异国情调。用不同的名字称呼同一个东西,还能标识出一个人的身份
(或者自我认同吧)。比如《中国好声音》中就有人把"小样"称为"demo",后来一期又改为"小样"了。再比如吊威亚,以及所有在汉语流中使用英文的家伙。他们要么是太习惯了,要么是在标明什么。类似的表态包括这样的一些词,它们都在表明,我们不是可啥啥那么俗的东西:理念 (不是哲学) 、举措 (不是措施) 、BL (不是同性恋)
、波希米亚 (不是捷克或者吉普赛) 、披头士 (不是 甲壳虫)。这很重要:) 要不然,韩国也不会把首都的中文译名改来改去,把日本海改名为东海。这些,都体现了命名者和名字使用者的意图。所以,程序代码中的变量命名,是依据用途、意图、动机,其次其次其次才是依据 实现手段。所以,printf 这名字中,print占了主要部分。f是format,也是实现的效果,而不是方法。类似的,puts估计是 put string。回顾一下我们自己在程序代码中的变量名,多少有点向 int_a 靠拢。使用什么名字,有时能表明你的立场,如下;有时,能表明你对学科或项目的的理解。比如,某个同学的项目可能这样命名,"android游戏开发",这一看就是重点在于练习android,或者注意开发平台上与众不同。老师就可能得出结论,这一项目的动机是提高同学自己,而不是解决一个他人的问题。4. 名字空间因为大家都起名字,名字就越来越多了。我们的词汇量都不大,而命名不允许重名,所以,如何命名就成了个难题。需着工程生成,代码里这样的名字越来越多:
list1, list2, list3... list_ok, list_real_ok。这让我想起几件事来。一件是周老师前两天博客里提到的。暖房子改造的时候要求房顶不能有热水器,但是热水器的主人们拒绝临时拆掉,甚至拒绝承认那个热水器是自己的。后来周老师一家家跑,说尽好话,种种麻烦,总算都整好了。周老师很是感叹了一翻。关同学看了我转的周老师博客,第一天很奇,杨老师啥时候变这么温柔了呢,第二天一看,恩,果然,转的博客。我会怎么处理。没有认领的,贴个条,24小时自己拆了。不然直接推楼下扔垃圾堆里。有人认领的,告诉他一个常识,楼顶是大家公用空间,他没有权利独占,24小时自己拆了,不然我拆。如果我住楼顶的话,我可以把楼顶也拆了。类似的,在写程序代码中,全局变量要特别慎重使用。原因无他,那是大家的名字空间,你用了,别人就不能用了。而独占公众资源,必须经过所有人的同意,因为你剥夺了别人使用的权利。zhumao同学提到,在大型一些的项目中,他看到专业C程序员的函数都会声明为static。为什么?因为这样就限制了这个函数名只在这一个文件中起作用。为什么要限制自己,给自己添麻烦呢?为了方便别人。或者说,我们没有权利限制别人的权利,名字空间是大家的。再类似的,小区的绿地为什么不能种蔬菜。因为那是大家的地方,你不能假设大家看着你的黄瓜茄子土豆会心情愉快,尤其有时还有泥土和粪的清香。"你的"黄瓜茄子土豆长在"大家的"土地上,长出来以后随便摘着吃么?我猜有的同学可能会说,"随便啊,大家随便吃。"我想问,我可以不打招呼就吃么。如果那是大家的,为什么必须应该向你打招呼呢。小资们把自己家阳台向外扩出半米的时候,我在他们的脸上看到了几十年前农民把自己家的篱笆向别人家推进一垅沟时的窃笑。还有,以前在电影电视看到过跑步的老外常戴个耳机听音乐,我就想,这玩意不安全呐,有汽车在身后听不到。最近我看到了中国特色的版本,完全避免了这个问题。中国特色的MP3是有外放喇叭的,可以声闻二十余米,根本不需要把自己的耳朵包起来。使用者洋洋得意地放歌的时候忘了,空间是公共的,而不是他一个人的。我热切地盼望着这玩意人手一个,然后大家开始掐架,"你TM地小点声,我的听不到啦!"--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift]

名字相关的一些事

名字相关的一些事很多明星从艺之后都要起个艺名,最好能过目成诵的。比如施瓦辛格就曾经给自己起名叫做"斯壮
(Strong)"。这反映了命名中最困难的部分。命名中最困难的部分不是名字容易被忘记,而是名字与那个人的对应更难。凡是初高中背过政治题的同学可能都有同感,答案并不难背,关键这答案是哪道题的呢。题外话。不少同学问我,你咋不整个笔名啥的呢。像"杨贵福"这样的名字,简直比最好的艺名还要好,能真正过目不忘,而且重名巨少,万万改不得。1. 命名的意义所在那么,我们为什么要为万物 (也包括万事)命名呢。命名使我们在讨论对象时更简洁,是一种重要的抽象方法。比如,提到一个地名,"我下午张守备修筑的城墙那开工啊"就很麻烦,如果简称为"张家口"就简单多了。类似的,石家庄、二道沟?这也是为什么程序员要为变量命名的原因。不然,"我打算向内存地址8000写入一个值,恩,作为表达范围0至65535的一个整数42",这确实挺麻烦。于是,我们把这种特别常用的功能抽象出来,起个名字。"unsigned
int a=42;"。8000呢?因为不重要,所以屏蔽了,不让程序员看到,这样更易于集中注意力于真正的业务逻辑。所以,当我们打算再次提到某个变量的时候,就需要为它命名;或者说,当我们意识到将要再次提到某个变量的时候,我们就应该命名它了。2. 名字的变迁使用名字的一个前提,是对话的大家对这个名字有共同的认识。即这个名字对应相同的概念的内涵和处延,不然也挺麻烦。因为俺们计算机学科也是有历史的学科了,好几十年,诸侯纷争,所以也颇有些历史原因的名字了。比如到底啥是"实时"就有好几种观点,大家都说别人是错的。人类历史也挺长的,所以类似的事也不少。比如希腊北面有个国家,叫马其顿。当年马其顿是个巨牛的主儿,打遍当时的"人类"所知的天下无敌手,而且没几年就完成了,只一代人的时间。可能有些同学对马其顿这个名字有点陌生,提一下它的领袖大家一定印象深刻,他们的头目名叫亚历山大。对,就是那个亚历山大。问题来了,直到今天,希腊仍然不承认北面这个叫"马其顿"的国家与历史上那个巨牛的"马其顿"有关系,而马其顿人民当然不这么看。是不是有同学想起了韩国?亚历山大的另一个与名字有关的事。这位大哥当年曾经向波斯王大流士索要过亚洲的主权。注意,不是波斯的主权,而是亚洲的。索要什么东西,对话的另一方自然得是全权所有者。这就让人猜测,亚历山大心里的亚洲,可能就是到印度前的那么大块地方。西伯利亚、中国、甚至印度,可能在他的概念中根本不算亚洲的一部分。至少日本韩国东南亚什么的,可能都不存在吧。但是时值今日,亚洲的概念大家估计都能背下来了。乌拉尔山-乌拉尔河-高加索山-里海-黑海-土耳其海峡,苏伊士运河,白令海峡。程序代码在成长的过程中,也经常发生这样的事。最初以为某个变量、函数是干这个的,过了一段时间发现,其实它是干那个的。如果名字不变,引用它的时候就会觉得非常奇怪,为什么一个叫做
PaintProc 的函数,即不是消息响应函数,同时也 不是/不只是 用来画图的呢?有的时候,我们嫌麻烦,就不改了,留给后人无穷的麻烦。比如 c++ stl中有个 endl。看名字,它的含义再清楚不过了, end
line。但是有一次,刘同学还是王同学,调程序的时候发现,printf ("n") 与 cout << endl
的行为很有些不同。有的同学看到这里可能皱眉头不以为然了,因为你可能看过这两段代码的运行行为,没啥不一样。它们二者相同的,是功能性需求部分,但是非功能性需求方面略有不同。有同学可能以为只是性能不同。不仅是这样。手册说:"Additionally, for buffered streams, endl flushes the
buffer",参见[http://www.cplusplus.com/reference/iostream/manipulators/endl/]。而printf中的"n"可没有flush缓冲区的作用。这就导致刘或王同学发现,在某个时刻,上位机程序读设备时输出的东西不一样。因为printf那个还没有flush,看不到。应对这种需要,"重构"中有一个专用于改名的方法。3. 名字的意义之所以要改名,因为名字除了唯一标识的作用以外,还带有别的意思。比如"杨贵福""霍去病"这样的名字,大家一看便知命名者的意图。改过名字的施瓦辛格后来把名字又改回去了,据说是因为他认为如果真的牛了,观众自然会记住他的名字。我恶意的猜测,可能还有个理由,他的名字对于美国观众而言,似乎具有异国情调。用不同的名字称呼同一个东西,还能标识出一个人的身份
(或者自我认同吧)。比如《中国好声音》中就有人把"小样"称为"demo",后来一期又改为"小样"了。再比如吊威亚,以及所有在汉语流中使用英文的家伙。他们要么是太习惯了,要么是在标明什么。类似的表态包括这样的一些词,它们都在表明,我们不是可啥啥那么俗的东西:理念 (不是哲学) 、举措 (不是措施) 、BL (不是同性恋)
、波希米亚 (不是捷克或者吉普赛) 、披头士 (不是 甲壳虫)。这很重要:) 要不然,韩国也不会把首都的中文译名改来改去,把日本海改名为东海。这些,都体现了命名者和名字使用者的意图。所以,程序代码中的变量命名,是依据用途、意图、动机,其次其次其次才是依据 实现手段。所以,printf 这名字中,print占了主要部分。f是format,也是实现的效果,而不是方法。类似的,puts估计是 put string。回顾一下我们自己在程序代码中的变量名,多少有点向 int_a 靠拢。使用什么名字,有时能表明你的立场,如下;有时,能表明你对学科或项目的的理解。比如,某个同学的项目可能这样命名,"android游戏开发",这一看就是重点在于练习android,或者注意开发平台上与众不同。老师就可能得出结论,这一项目的动机是提高同学自己,而不是解决一个他人的问题。4. 名字空间因为大家都起名字,名字就越来越多了。我们的词汇量都不大,而命名不允许重名,所以,如何命名就成了个难题。需着工程生成,代码里这样的名字越来越多:
list1, list2, list3... list_ok, list_real_ok。这让我想起几件事来。一件是周老师前两天博客里提到的。暖房子改造的时候要求房顶不能有热水器,但是热水器的主人们拒绝临时拆掉,甚至拒绝承认那个热水器是自己的。后来周老师一家家跑,说尽好话,种种麻烦,总算都整好了。周老师很是感叹了一翻。关同学看了我转的周老师博客,第一天很奇,杨老师啥时候变这么温柔了呢,第二天一看,恩,果然,转的博客。我会怎么处理。没有认领的,贴个条,24小时自己拆了。不然直接推楼下扔垃圾堆里。有人认领的,告诉他一个常识,楼顶是大家公用空间,他没有权利独占,24小时自己拆了,不然我拆。如果我住楼顶的话,我可以把楼顶也拆了。类似的,在写程序代码中,全局变量要特别慎重使用。原因无他,那是大家的名字空间,你用了,别人就不能用了。而独占公众资源,必须经过所有人的同意,因为你剥夺了别人使用的权利。zhumao同学提到,在大型一些的项目中,他看到专业C程序员的函数都会声明为static。为什么?因为这样就限制了这个函数名只在这一个文件中起作用。为什么要限制自己,给自己添麻烦呢?为了方便别人。或者说,我们没有权利限制别人的权利,名字空间是大家的。再类似的,小区的绿地为什么不能种蔬菜。因为那是大家的地方,你不能假设大家看着你的黄瓜茄子土豆会心情愉快,尤其有时还有泥土和粪的清香。"你的"黄瓜茄子土豆长在"大家的"土地上,长出来以后随便摘着吃么?我猜有的同学可能会说,"随便啊,大家随便吃。"我想问,我可以不打招呼就吃么。如果那是大家的,为什么必须应该向你打招呼呢。小资们把自己家阳台向外扩出半米的时候,我在他们的脸上看到了几十年前农民把自己家的篱笆向别人家推进一垅沟时的窃笑。还有,以前在电影电视看到过跑步的老外常戴个耳机听音乐,我就想,这玩意不安全呐,有汽车在身后听不到。最近我看到了中国特色的版本,完全避免了这个问题。中国特色的MP3是有外放喇叭的,可以声闻二十余米,根本不需要把自己的耳朵包起来。使用者洋洋得意地放歌的时候忘了,空间是公共的,而不是他一个人的。我热切地盼望着这玩意人手一个,然后大家开始掐架,"你TM地小点声,我的听不到啦!"--------------------博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com][http://blog.csdn.net/younggift]