漫谈哲学与编程

更新日期: 2019-08-25阅读: 2k标签: 编程

谈到哲学,多数人都会直觉性的认为它是很高深的一门学问。实际上大多数情况并非如此,哲学研究的往往是非常简单的一些命题,而这些命题在常人看来可能并没有现实意义。

比如说:到底是先有鸡还是先有蛋的问题;比如说:一个号称只给不能给自己理发的人理发的理发师到底能不能给自己理发的问题。当然本文的目的并不在于讨论这两个问题,我们来聊聊几个稍微简单一些的概念:


哲学中的理性与感性

理性是超越的,本质在于追求无限

超越的意思是说理性本身不依赖任何现实或者经验社会中的任何对象, 无限 实际上就是说理性本身需要达到的某种理想状态。

比方说:「 100%的金」 就是一种无限状态。我们不使用任何经验就可以判断出 100% 的金是必然有的,概念上没人能否定这一点。

但是运用在经验社会中的知识来判断,这个命题就是不正确的,或者说不具有*普遍*的正确性。因为我们知道无论人类的技术如何高超也无法制造出来 100% 的金。即使到 99.99% 逻辑上也没到达 100%。

这个时候人们对于类似的事情就会产生了不同的反应。有的人会因为理想状态达不到而 反向 地认为原来的命题是错误的;有的人内心则有一种说不清道不明的东西指引着他,不会因为到达不到无限状态而肯定整个命题。

这个问题也一直困扰了我很久,因为在现实生活中在你看来很多明显正确的事情忽出现了一个反例,结果就会有一堆人来告诉你你错了。

德国哲学家康德在《 纯粹理性批判 》这本书中给出了一种解释:

理性的调节性是引导经验去追求无限,追求绝对,但是永远也达不到。达不到也有作用 — 它使得经验科学不断的前进,并且有了明确的目的和方向…

类似的哲学观点好就好在一但明白了其中的本质和它阐述的真理以后,它就可以在某种层次上解释经验世界的各种现象。这或许就是大家说的哲学是任何其它学科的奠基,是第一学科的原因。

对应的在编程领域也有一些无限的概念,对于多数前端工程师来讲「实现一个无限级的下拉菜单」似乎也在表达着一种无限状态。当然用户在使用的时候根本不可能用到无限级的菜单,无限级的菜单在交互方面也也是极其反人类的,一步可以做到的事情没人愿意多增加一步。但是为什么程序员们热衷于实现这种类似的无限状态。实际上这就是理性的力量,总有一种说不清楚的力量在引导着你,你也没法解释。

理解了这一点你就会有一个很简单的评判程序好坏的论点,即:程序或者代码是否表现了某种 无限 状态?如果你的程序函数里面只是几个简单的 if else,那你有没有考虑过如果当输入不断的增加或者变化时,原来的代码是否还可以正常返回。或者说在不考虑硬件等客观条件的前提下,你的程序是否存在极限状态。

我们经常在知乎或者其它论坛上争论一些问题,本质上讲大家都没有区分清楚自己对于一个论点的 逻辑认知 和 情感认知 。太多人喜欢用自己的感情认知去否定逻辑事实,以至于争来争去谁也没能说服谁,试图用唯心观点去解释唯物的现象或者相反,这是极其不正确的。

一个典型的问题是我不久之前在知乎上回答的一个问题: 谁能大致说下vue和react的最大区别之处 ?我的回答简单总结就两句话:vue 有一种设计层面追求的简洁感性之美,react 则是一种数学层面的逻辑一致之美。本质上讲没有什么好坏之分。但是诸如些类的一些前端框架问题正在变成一种帮派化的「站队」风气。


编程中的低阶(low-level)与高阶(hight-level)

注意这里讲的 low/hight level 并不是计算机术语中特定的某种形式。

有个笑话是这么讲的:

一个程序员去相亲,程序员自己介绍说「我是做嵌入式C语言底层开发的」,妹子反问「那啥时候做到高层开发呢」?

程序员们内心都有一个做底层开发的梦,因为这才是一个真正的程序员的追求与理想。

但是现实往往相反,大多数程序员每天都在写业务代码(重复的 CRUD)。所以很多程序员得出来一个结论就是:越底层的东西越重要,越高层的东西越肤浅。通常这也会行成一条鄙视链,他们会不由自主地忽略高层的东西。

注意这里有两个问题:

  1. 业务代码有没有价值?

当然有了,业务部分的代码是系统的最终结果。从结果导向上讲底层代码如何优雅、实现如何科学我们根本不关心,我们更关心整个系统层面的稳定与健壮。这是一种领导的高层次视角。

  1. 底层的东西就一定重要?

并不一定,这里说的不一定不是要完全否定底层的重要性。恰恰相反,软件领域一些特别优秀或者说伟大的软件底层并不是那么的如人意。比方说微软开发的 VSCode 代码编辑器。要是从底层去讨论它的构架合理性那确实挺像一个笑话的。因为本质上讲 VSCode 基于 electron,它把编辑器放在了一个 webview 中去运行,但是 webview 是用来浏览网页的,而且 electron 居然把 NodeJS 运行时也整合进去,以至于最小的一个应用解压完也有上百兆。

这感觉就像是上学的时候你很期待一个数学教授教你数学课,但是实际上你的数学课却是一个体育老师带的,这不是可不可以的问题对吧。

然而 VSCode 这样做的结果是:它还真的成功了,而且编辑器的性能比很多原生软件做的都要好,以至于周围所有人都在使用它,VSCode 在 Github 上名列前茅,也改变了很多程序员对于微软的刻板印象。

如果我们再回过头从哲学的角度去思考这个问题,实际上计算机中的 底层 与 高层 正好对应着哲学中的 理性 与 感性 。

  • 底层更注重逻辑严谨,因为这是构建高层建筑的基础,它面向的是理论
  • 高层更注重表现形式,因为高层的部分呈现出来的是一个完整的系统,它面向的对象是人。是人,那需求就是多样化的,因为人的想法总是特别的感性

理性的认知是有对错可以批判的,但是感性的直观是没有对错的,因为即使是同一种声音、颜色对不同人观感都是不一样的。

比如说你在火车上看书,对面的人说话声音太大吵到了你。你说:你们说话小声点可以吗?对方会说:车上这么多人说话为啥就我们吵到你了?你说:因为就你们声音最大。对方说:我咋没觉得?


现实中的主观与客观

现实生活中我们经常会遇到一些对于论点的评价:主观还是客观。但是很多人没搞清楚这两个词的关系。多数人都觉得客观的观点就是好的,主观的就是臆断的。

主观和客观的关系就像是主人与客人的关系一样,有的人会认为应该主随客便,有的人则认为应该是客随主便。

  • 如果一个人表达的观点全是主观的,那我们会认为这些观点是不可以讨论与评判的,不经过讨论批判的观点是站不住脚的。
  • 如果一个人表达的观点全是客观的,那似乎也不对,因为这些观点全是别人的,你可能忽略了自己的意识,最终只能游走在别人的规则中。

任何语言中都有那么一些词语是成对儿出现的,像因果、主客、高低,这些词在被造出来的时候就是成对出现的,缺一不可。没有前者,后者将不会单独存在。它们之间没有绝对性的对于错。如果有,那对方就没有了存在的意义,反过来自己也将不存在。

当有人抛出一个观点的时候我的经验是一定要听清楚对方说的是「我觉得」还是「我认为」。「我觉得」那必然就是人家的主观感受,这种观点我们就没必要讨论了。你应该回复:「嗯,没错,确实是这样的。」。如果对方说「我认为」那你要是有不同的观点就完全可以和他讨论,因为说「我认为」的观点必然是有一些客观事实做为依据的,有事实有逻辑,那就可以有对错。


结语

哲学中的知识并不能完全解释现实中的事物,因为哲学研究的终点是一些没有结论的东西:上帝、自由、灵魂不朽。这些东西并非常人能理解的,但是人们对于无限真理的追求驱使着大家去研究它,很多人会觉得既然研究不出来结果那是不是就没意义了,当然不是。事实恰恰相反,如果我们把所有的事物本质都研究清楚了,那我们的存在也将失去意义。

原文 https://keelii.com/2019/08/25/philosophy-and-programming/

链接: https://fly63.com/article/detial/4926

程序员的笔记,编程写软件学到的 7 件事

如果你真的做出了一些东西,在面对那些令人眼花缭乱的理论知识,或是和你相似甚至比你做的更糟糕的人时大可不必谦虚。在一天结束之时,正是那些在战壕中的开发者——构建、测试和开发了代码的人,真正做了事情。

自学编程的六个技巧总结

这些事情可以帮助新手在他们漫长的旅程中学习编程。我知道我还有更多东西需要学习,并将继续学习如何永远地学习。最重要的事情说三遍,请继续,不要放弃,不要放弃,不要放弃。

谈谈Javascript异步代码优化

Javascript代码异步执行的场景,比如ajax的调用、定时器的使用等,在这样的场景下也经常会出现这样那样匪夷所思的bug或者糟糕的代码片段,那么处理好你的Javascript异步代码成为了异步编程至关重要的前提

编程到底难在哪里?

以买苹果为例说明程序员如何解决问题。程序员需要对问题进行透彻的分析,理清其涉及的所有细节,预测可能发生的所有意外与非意外的情况,列出解决方案的所有步骤,以及对解决方案进行尽量全面的测试。而这些正是我认为编程难的地方。

Blockly - 来自Google的可视化编程工具

Google Blockly 是一款基于Web的、开源的、可视化程序编辑器。你可以通过拖拽块的形式快速构建程序,而这些所拖拽的每个块就是组成程序的基本单元。可视化编程完成

我真是受够编程了

成为伟大的程序员,需要付出许多编程之外的努力。我们的大脑是有限的,每天要应付的问题复杂到足以让人精神崩溃。当工作不顺利时,多少都会有些冒名顶替症候群的感觉。

前端的编程软件哪些比较好用?

推荐8款最好用的前端开发工具供美工或者前端开发人员使用,当然若你是NB的全栈工程师也可以下载使用。Web前端开发最常见的编程软件有以下几种: 在前端开发中,有一个非常好用的工具,Visual Studio Code,简称VS code

如何保持学习编程的动力

学编程现在看起来挺简单,因为网上有丰富的各种资源。然而当你实际去学的时候就发现,还是很难!对我来说也一样。但从某天起,我决定认认真真学编程一年。后来又过了一年,又过了一年又一年……我好像有点感悟。

编程小技巧

命名最好遵循驼峰法和下划线法,并且要清楚的表达变量的意思。相对于驼峰法而言,我更喜欢下划线法。下划线法可以更清楚的看出这个变量表示的意思。比如aBigGreenBanana和一个a_big_green_banana。

CSS并不是真正的编程语言

每隔几个月就会出现一篇文章表明:CSS并不是真正的编程语言。以编程语言的标准来说,CSS过于困难。使用这门语言会很有创造性:事实确实如此,CSS不同于传统的编程,且具有缺陷,同任何标准化编程语言相比

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!