跳至主要内容

人所不欲,勿施于人

谁说博客也要像论文一样结构清晰、有条理?!

软件卸载

昨天整理自己的本本,卸载了 VMware 7.0 + 深度XP,MS Office 2007 以及 Visual Basic 6.0。我承认这些都是盗版软件,不过剩下的应用程序都是自由软件(freeware)或免费软件(freeware),这下我的计算机“干净”了。闲来无事,我就细数了一下当初装这些软件的原因:

  1. VMware + XP:当初刚买本本的时候,正好在上软件工程实践,紧遵老师的教导“将自己的开发环境随身携带”,自然第一款软件就是装了虚拟机(学校机房里是肆无忌惮地用盗版 VMware),另外上课指定使用 Visio 作图,那也只好一起装了;当然,也有部分原因是因为某些人的计算机装的是 XP,我这边有个 XP 环境也是为了方便问题重现(我的本本预装了 Vista)。
  2. MS Office 2007:在毕设期间,我也还是用 Open Office 和 WPS 2010,但现在公司用的却是 Office 2007(正版)。我这次卸载这款办公软件其实也是在提醒自己:工作的事情要在工作时间里完成!
  3. VB 6:你可能无法想象在我们科班的毕业设计中有多少是 VB6 项目,从大二开始,每逢毕业将至,总会有人来找我帮忙看那些不晓得从哪儿搜罗来的 VB6 代码,经不住软磨硬泡,我总会帮着改改;另一个原因在我自己,我一直下不了决心去学 MFC 等,所以但凡要做 GUI 程序,我都是拿 VB6 来画界面,再调用由 C 语言开发的 DLL 库,不过现在改用 QT,于是 VB6 可以功成身退了。

己所不欲,勿施于人

有些人就喜欢把自己的事全盘交托给别人来做,我一直不明白他们既然有精力去说服别人,为什么就没耐心自己去完成(所以我下面说人和人之间是无法理解的)。既然自己都认为这是无聊的事情,为什么偏偏又假设其他人会愿意无偿地帮你来完成呢?

两千多年前,孔老夫子提出“己所不欲,勿施于人”的观点,但到了今天,我听到关于这句话时的语境普遍是,A说:“那个XX东西你也不要了(或要了也没用),不如就让给我吧?”,B就义正言辞地反对:“那怎么可以!己所不欲,勿施于人嘛。”

己所甚欲,勿施于人

易中天老师在《百家讲坛》讲解诸子百家时提到庄子的思想比起“己所不欲,勿施于人”更进一步:“己所甚欲,勿施于人。”

如果你对此还不甚了解,建议去看看《武林外传》第五十八回:小师妹现身七侠镇,大师姐难解心头愤。故事大意就是小师妹南宫残花是个极端的素食主义者,不顾及营养均衡,一味地强调、推广素食,要求每个人都做到所谓的“天人合一”。一旦有人心存不满,就有如唐僧附体一般地给众人施加压力。这种人就像装在套子里的人——别里科夫一样,固执己见,食古不化,还要将自己的想法强加给别人,不认同这个世界的多元性。也许这种人活在黑白的世界里是最适合的。

现实中将自己喜爱的事物强加给别人的例子比比皆是。中国传统的“子承父业”,有多少人是满心欢喜地从父辈手里接过担子的(就中国这十几亿人口来说,即使是一万分之一那也很大,所以不要真去讨论数量)?父母教育孩子的时候,普遍会将自己年轻时候无法实现的理想强加于孩子身上。

人所不欲,勿施于人

虽然孔老夫子和庄老夫子所言都有道理,但我很奇怪作为大师的他们为什么都只臆断他人的想法。既然问题的关键在于“是否施于人”,那理所当然要考虑他人是否接受了,而两位老先生却一个说“己所不欲”另一个谈“己所甚欲”,都是将自己的想法强加给他人。尤其是庄老夫子自己也会说“子非我,安知我不知鱼之乐?”(《庄子——庄子与惠子游于濠梁之上》),那他也晓得人与人是不一样的,又怎会拿自己的喜恶无衡量他人的想法。

因此我信奉的是“人所不欲,勿施于人”。

不过追根究底,上面两句话也都不是他们两位老人家自己说的:“己所不欲,勿施于人”出自《论语》,而《论语》是由孔子的弟子及其再传弟子编撰而成。其中多少话真的是子曰过的,咱也无从考证了;而“己所甚欲,勿施于人”更是出自当代的易中天老师之口,正是一千个观众眼中有一千个哈姆雷特,这句话是否切中庄子的想法就不讨论了,但终究不是庄子自己说的。

人与人之间无法理解

猫舒服的时候会发出呼噜呼噜的声音,而这种声音在狗看来是威胁对方的一种信号;狗高兴时爱摇尾巴,而猫认为这样做是讨厌什么东西的标志。所以猫和狗一见面就会打架,因为它们相互不能理解对方的好意。而人与人之间又何尝不是这样?就像我爸爸不懂我为什么会学计算机,我也无法想象整天背书的日子有多好玩。

前段时间重温了一下卡通《幽游白书》,小时候光看着他们打来打去,现在才多少有点理解。让我最有感触的人是“仙水 忍”,仙水的个性非常单纯,但天生拥有强大的灵气,最后甚至有圣光气围绕全身(对人类而言,全身被金光包围的就是天使)。他从小斩妖除魔、以保卫人类为己任,直到后来,在一次执行任务的过程中,发现那些富豪们虐待和屠杀小妖来取乐,仙水无法接受自己舍命保护的人类反而比妖怪更加凶残;后来他去偷看了灵界的禁物——黑之章(上面记录了人类所有的恶行),更是分裂出七种人格,从此在矛盾中活下去。

在《千秋英烈传——刺秦》中,荆轲在燕国看到的是哀鸿遍野,满街都是乞丐,百姓生活朝不保夕。而燕太子丹将此归咎于秦王野心勃勃,欲将各国吞并,导致民不聊生,并且施计让荆轲答应去刺秦。等到荆轲来到秦都咸阳,见识到秦王英明神武,百姓生活富裕,街上更是连一个乞丐也没有,荆轲对大秦的升平景象充满赞叹,但势成骑虎,荆轲也只能无奈。

这些故事都是虚构的,但我们的现实生活又何尝不是如此呢:比如我看日本人就像《幽游白书》里人类看到妖怪一样的厌恶,非除之而后快;而那些小日本看我们中国人不也像妖怪看见人类一样觉得是异类?我前些天还傻乎乎地跑去问去过美国的同事:“美国大街上是不是也有乞丐?”好在据同事所言,那儿不仅有乞丐,而且比中国的乞丐嚣张多了。于是我又想起那句话——中国这只绝对不会(周星驰的《国产凌凌漆》)。

严以律己,宽以待人

我从小喜欢看武侠,而老爸要看“领导很忙、中国人民很幸福、外国人民生活水深火热”的新闻联播,他觉得这些古装剧听着就头疼,所以每次都会拿遥控器去换频道。因此我从小就渴望着独立、能有自己的空间,也不晓得是不是经济发展了,总感觉现在父母与子女的关系也是赤裸裸的商业交易:我把你养大,你花我的钱,你就得听我的,我让你好好学习,你就不会辜负我的期望。当然,这些话从来没有哪个父母说过,但周围的环境总让我有意无意地感受到这种压力。所以我要工作,自己养活自己(以后能力强了就回过去养父母),这样就不会有“寄人篱下”的感觉,我的地盘也可以我做主。

如果物质条件真的非常优越,《老子》的小国寡民政策也挺不错,因为大家都能自我满足,彼此不必太相互依赖:我在我的个人空间里可以尽情地看我喜欢的电视节目,永远不必当心老爸过来换台,呵呵。但目前而言,显然无法做到全世界每个人人手一台电脑、一台电视、一间房子……更何况老聃所处的时代,所以老子委曲求全,希望通过降低人民对物质生活的欲望,来实现这个理想,这就有点舍本求末了。

我们目前能实现的就是共享资源(全家人看一台电视),这点倒是很像我们开发并行程序:如果多进程或多线程之间没有任何资源共享(小国寡民,老死不相往来),那编程还算简单的,但往往是需要共享内存等等,就会有同步、脏读等一系列问题。程序上的事情由算法解决,现实生活中的事情,我崇尚“严以律己,宽以待人”。

编程的时候,每个人都会有自己的编码风格(花括号的布置、变量的声明、TAB的大小等),看到别人编写的风格混乱的代码时,就用包容的心去对待即可(尤其是代码格式化工具如此昌盛的时代),只要自己编码的时候坚持使用统一的风格即可。软件的一个好处就是只要你拥有一片属于自己的可用的磁盘空间,就可以将代码 check 下来,然后格式化成你喜欢的风格,而且通常情况下获得一片属于自己的磁盘空间花费会比获取一片属于自己的土地空间要便宜。因此,在计算机的世界里,你能按照自己喜欢的方式生活。

以前有人问我:“你学习为了什么?”我猜问的人也不会答应我很矫情地学周总理说“为了中华崛起而读书”,我的答案是:“学知识是为了让自己生活得更美好!”


评论

此博客中的热门博文

AutoHotKey 新手入门教程

AutoHotKey 真是一个好玩的工具!短短几行代码就是先了“窗口置顶”、“窗口透明”等功能,之前我还特意为此装了好几个小工具,现在都可以卸掉了。闲来无事,就把 Quick Start 翻译了一下,我没有逐字逐句地翻译,有时候我嫌原文罗嗦就用自己的话概括地描述了一下。 原文地址:http://www.autohotkey.com/docs/Tutorial.htm 教程目录 创建脚本 启动程序 模拟鼠标键盘 操纵窗口 输入 变量与剪切板 循环 操纵文件 其他特性 创建脚本 每个脚本都是一个纯文本文件,由一些能被 AutoHotKey.exe 执行的命令组成。一个脚本可能还包含 热键 和 热字符串 。如果没有热键和热字符串,脚本在启动的时候就会从头依次执行到尾。 创建一个新的脚本: 下载 并安装 AutoHotkey。 右击鼠标,选择 新建 -> 文本文档 。 输入文件名并确保以 .ahk 结尾。例如:Test.ahk。 右击文件,选择 编辑脚本 。 输入以下内容:#space::Run www.google.com 上一行的第一个字符 "#" 代表键盘上的 Windows 键;所以 #space 表示在按住 Windows 键后再按空格键。"::" 后面的命令会在热键激活后执行,在本例中则会打开谷歌主页。继续按下面步骤操作,来执行这个脚本: 保存并关闭该文件。 双击该文件来启动它。在系统托盘里会出现一个新图标。 按下 Windows 和空格键,网页会在默认的浏览器里打开。 右击系统托盘里的绿色图标可以退出或编辑当前脚本。 注意: 可以同时启动多个脚本,并且在系统托盘里都会有一个相应的图标。 每个脚本都能定义多个 热键 和 热字符串 。 想让某个脚本开机即启动,可以将它的 快捷方式放到开始菜单的启动目录里 。 启动程序 命令 Run 可以运行程序、打开文档、网页链接或快捷键。请参看以下示例: Run Notepad Run C:\My Documents\Address List.doc Run C:\My Documents\My Shortcut.lnk Run www.yahoo.com Run mailto:someone@somedoma...

好玩的数学——吉普赛读心术解密

好玩的数学——吉普赛读心术解密 redraiment, 2009-11-19 神奇的吉普赛读心术   闲着无聊窜寝室,看到一个同学在玩一个 flash 游戏:吉普赛读心术( http://gb.cri.cn/mmsource/flash/2006/04/10/er060410001.swf )。规则如下: 任意选择一个两位数(或者说,从10~99之间任意选择一个数),把这个数的十位与个位相加,再把任意选择的数减去这个和。例如:你选的数是23,然后2+3=5,然后23-5=18 在图表中找出与最后得出的数所相应的图形,并把这个图形牢记心中,然后点击水晶球。你会发现,水晶球所显示出来的图形就是你刚刚心里记下的那个图形。   咋看之下觉得很神奇,但仔细把玩两三回后你就会发现其中的奥秘: 右边的图标每次都会改变; 9、18、27、...、81 这9个图标永远是一样的。   假设你选择的两位数是 ab(即 ab=a×10+b),其中 1≤a≤9, 0≤b≤9 。按照规则计算就是 (a×10+b)-(a+b)=9×a,结果是 9 的倍数,∵ 1≤a≤9 ∴ 结果为 9、18、27、...、81 中的任意一个。又∵ 这9个图标是一样的,∴ 水晶球神奇地知道你记的图标。 手指计算器   无独有偶,记的小学数学课上老师教我们用手指计算任意两个5-10之间的数的积。   例如 6×8 ,一只手伸出 6-5=1 根指头,另一只手伸出 8-5=3 根指头。1+3=4,4 就是积的十位数;把两手弯曲的指头数相乘得 4×2=8,8 是积的个位数。则 6×8=48。   道理和上面相同:a×b=[(a-5)+(b-5)]×10+(10-a)×(10-b) 神秘的失踪   做这道题一定要的亲自动手才有滋味!否则就会像浮光掠影,印象不深。   将一个正方形分割成 7×7=49 的小方格,并按下图将它们分为“甲、乙、丙、丁、戊”五部分。   然后,甲块不动、乙块和丙块对调、戊块上移、丁块右移。得到新图如下:   经过这样重新组合拼成的新正方形,中间奇迹般地空出了一个洞!   实际上这只不过是一个小戏法,上面的新图形并不是真的正方形。 观察原始图可知 △ABC 和 △AED 是相似三角形 ∴ DE:CB=AD:AC=4:7 ∴ DE=8/7 ∴ EF=DE+DF=36/7 ∴ 上图...

JavaScript中的字符串乘法

JavaScript中的字符串乘法 redraiment, Date 原文 原文地址: http://www.davidflanagan.com/2009/08/string-multipli.html 原作者:David Flanagan In Ruby, the "*" operator used with a string on the left and a number on the right does string repetition. "Ruby"*2 evaluates to "RubyRuby", for example. This is only occasionally useful (when creating lines of hyphens for ASCII tables, for example) but it seems kind of neat. And it sure beats having to write a loop and concatenate n copies of a string one at a time--that just seems really inefficient. I just realized that there is a clever way to implement string multiplication in JavaScript: String.prototype.times = function(n) {     return Array.prototype.join.call({length:n+1}, this); }; "js".times(5) // => "jsjsjsjsjs" This method takes advantage of the behavior of the  Array.join()  method for arrays that have undefined elements. But it doesn't even bother creating an array with n+1 undefined ele...