苏辩
论辩证逻辑
辩证法是源于古希腊辩论对话的一种谈话艺术,原意是指在辩论中揭露对方内容的矛盾并驳斥这些矛盾的谈话艺术。
比如:克法洛斯说:“最大的幸福就是能够作为一个正义的人变老,既不欠别人的债,也不欠神明的债。” 苏格拉底问:“那正义就是不欠别人的东西,或者欠了就要还吗?” 克法洛斯:“是的。” 苏格拉底:“那我欠了朋友一把刀,这个朋友恰好发疯了,我这个时候还给他,是正义吗?” 克法洛斯:“不是。” 苏格拉底:“所以欠了就还,不是正义,也成立。” 克法洛斯:“嗯。”
我们可以看到,辩证法起源于苏格拉底,英文为 “dialectic”,本意是对话,即辩证法的本意是对话法。苏格拉底的辩证法我们简称 “苏辩”,苏格拉底的辩证法独具特色,被其称为思想的助产术。其对话法的主要目的是启发人们自主思考。
dialectic
n. 辩证法;逻辑论证 adj. 辩证的;辩证法的;方言的
词根词缀:dia-相对,之间 + -lect-诵读(言) + -ic形容词词尾 → 对言的→辩证的,辨明真理的
通过苏格拉底的对话法得出的一个最典型的结论就是对 “正义” 的定义,而 “正义” 这个概念,又是柏拉图《理想国》的出发点(《理想国》号称是最正义的城邦)。
我们可以横向和中国的对话法进行对比,比如孔子的《论语》可以称为 “孔辩”。“孔辩” 的特征非常类似学校里面,学生问,老师回答,然后学生记笔记;或者学生说话,老师点评。庄子的对话法可以称为 “庄辩”,最经典的就是《庄子・秋水》中的鱼乐之辩,“庄辩” 有点类似于偷换概念的狡辩。
孔辩
子路、曾皙、冉有、公西华侍坐。子曰:“以吾一日长乎尔,毋吾以也。居则曰:‘不吾知也!’如或知尔,则何以哉?”
子路率尔而对曰:“千乘之国,摄乎大国之间,加之以师旅,因之以饥谨;由也为之,比及三年,可使有勇,且知方也。”
夫子哂之。
“求,尔何如?”
对曰:“方六七十,如五六十,求也为之,比及三年,可使足民。如其礼乐,以俟君子。”
“赤,尔何如?”
对曰:“非曰能之,愿学焉。宗庙之事,如会同,端章甫,愿为小相焉。”
“点,尔何如?”
鼓瑟希,铿尔,舍瑟而作,对曰:“异乎三子者之撰。”
子曰:“何伤乎?亦各言其志也。”
曰:“莫春者,春服既成,冠者五六人,童子六七人,浴乎沂,风乎舞雩,咏而归。”
夫子喟然叹曰:“吾与点也。”
三子者出,曾皙后。曾皙曰:“夫三子者之言何如?”
子曰:“亦各言其志也已矣!”
曰:“夫子何哂由也?”
曰:“为国以礼,其言不让,是故哂之。唯求则非邦也与?安见方六七十如五六十而非邦也者?唯赤则非邦也与?宗庙会同,非诸侯而何?赤也为之小,孰能为之大?”
庄辩
庄子与惠子游于濠梁之上,庄子曰:“鯈鱼出游从容,是鱼乐也。”惠子曰:“子非鱼,安知鱼之乐?”庄子曰:“子非我,安知我不知鱼之乐?”
惠子曰:“我非子,固不知子矣;子固非鱼也,子之不知鱼之乐全矣。”
庄子曰:“请循其本,子曰‘女安知鱼乐’云者,既已知吾知之而问我……我知之濠上也!”
当然,中国古代的对话法很多,比如孟辩(孟子)和君王的政策辩论。
所以在整个横向的历史上,我们能发现 “苏辩” 是极具特色的辩论法,苏辩的特色是同时包含了质疑和启发,为了启发而质疑,质疑同时促进启发,不断地循环,从而诞生新的思想。
黑辩和马辩
而我们当下最为熟悉的辩证法是黑格尔的辩证法和马克思的辩证法,简称 “黑辩” 和 “马辩”。这两种辩证法实际上并不能归于对话法的本意中,而是从 “苏辩” 的形式中类比而来的,用于描述事物的演变规律。
“黑辩”中最重要的结论是对立统一以及螺旋上升的思想,类似于“苏辩”中两个对话的人,共同讨论一个话题,进而诞生先进的思想。“黑辩”借鉴“苏辩”的对话法,说明思想演化的一个过程。
传统哲学-为生民立命
黑辩研究思想的演化规律主要回答认识论问题,即是人不依靠上帝能否靠自己的力量获取知识。
这个主要是回答怀疑学派的问题和基督教哲学的问题。为了追求幸福,怀疑人能够获取知识,然后信仰上帝,将获取知识的能力寄托于给上帝。但是有个致命的问题,出发点是追求幸福,采取的方法是信仰上帝,但是最终结果是并没有得到幸福。此时要从上帝手上拿回知识权,就要解决一个问题,人能否靠自己的力量获取知识。
“马辩”同样继承了“苏辩”的类比,但和“黑辩”不同的是,马克思是纯粹的唯物主义者,将“思想”的演化推广到社会的演化、历史的演化中。借鉴了“苏辩”的形式和“进化论”的思想,从而得出最重要的结论,即提出对抗资产阶级的对立力量--无产阶级。
从此无产阶级正式作为一股政治力量登上历史的舞台。
“重构”,程序中的“辩证法”
我们可以看到,“苏辩”的这种对立统一,螺旋上升的范式非常类似于编程中的重构过程。
第一遍编写程序代码我们主要关注是否能够实现功能,完成任务;而重构则是在实现代码之后,对代码的整体框架进行改变,但不改变程序的功能。重构后的代码在可读性、扩展性和性能方面都会优于之前的代码。
在重构的过程中,我们就要思考程序的框架。比如我们调用函数的过程会有一个调用链(函数是层层调用的,软件也是分层的),我们就要思考每个函数放在哪一层,调用的时候哪个调用路径最好。这个就是对整体布局的一种思考。例如如下图我们可以并列调用:先调用source再调用Kbeamline;也可以嵌套调用:先调用Kbeamline,然后在Kbeamline里面调用source。
一个例子:XRT 和 shadow 的重构关系
XRT 和 Oasys 均为光学中模拟软件, Oasys 是多人协作写成的,其框架和语言给人一种东拼西凑的感觉,而XRT则是完全用 Python 语言编写的,重构之后环境非常干净,不存在莫名其妙的错误。