云原生时代|程序员底层思维之深入理解逻辑要素?

云原生时代|程序员底层思维之深入理解逻辑要素?,第1张

众所周知,软件设计是从理解问题域开始,而理解问题域的核心是要深入理解领域的核心概念。从而意识到,逻辑思维是帮助我们深入理解领域的关键之一。究其本因,逻辑思维是程序员最底层的思维能力,其本质是判断关系是否合理。就像培根说的——"读史使人明智,读诗使人聪慧,演算使人精密,哲理使人深刻,伦理学使人有修养,逻辑修辞使人善辨。" 实际上,学会明确的定义概念,正确地使用判断,合理地进行推理是逻辑思维的核心。比如,就像《如何阅读一本书》中提到的分析阅读,说的就是如何通过提炼书中的关键字词(逻辑概念),关健句子(逻辑判断),以及关健论述(逻辑推理)来分析一本书的主要宗旨。从而,这十分形象地和非常准确地向我们概述了如何去梳理一本书和一篇文章的逻辑;同时,也向我们阐述了逻辑思维的三个组成要素,接下来我们进入深入的探讨和交流。

概念(Concept),是逻辑思维要素之一,是思维的基本单位。一般主要是指反映事物的本质属性和特有属性的思维形式。在英文词典里特指“Concept“,其意思是“An idea or a principle that is connected with sth abstract.“。主要可以理解为,概念是一些关于抽象事物的思考和定义。这个世界有很多食物是通过我们的思维去揣摩和赋予它们意思和意义,当然也会反复推敲和检验,最后通过语言以及符号的形式呈现出来。当然,这些意思和意义是概橡稿念的思维内涵(内显形式),语言则是概念的外貌长相(外显形式)。可以说,明确概念是我们认识世界和了解事物的第一步,是我们学习,研究,讨论的基础。一般来说,认知水平越高的人,越能体会概念明确的重要性。

判断(Proposition),是逻辑思维要素之二,是推理的基础,也叫作命题。一般一个判断就是一个断言(Asert),它断定一件事情是这样或者不是这样,每个判断只有真或者假的结论。我们需要认识到一点,一个问题没有断言任何东西,因镇如友此他不是判断,而且判断一般都是用陈述句表达,疑问句以及命令或者感叹都不能作为判断的描述。由此可见。判断有两个方面的特征:第一个方面,判断肯定有肯定或者否定之分,即就是肯定判断和否定判断;另外一个方面,判断有真假之分,一个判断要么真,要么假,不能非真非假。从本质来说,判断是概念的展开,没有判断,就不能表达和说明概念;同时,判断也是推理的前提,是正确运用各种推理的条件。所以,准确地运用判断,我们才能够进行正确的思考。

推理(Argument),是逻辑思维要素之三,是研究语句,判断,命题之间的学问,也叫作论证。常用的逻辑推理方法可以分为御槐演绎推理(Deductive Inference),归纳推理(Inductive Inference) 以及溯因推理(Abductive Inference)等。首先,演绎推理宗旨在于阐明前提和结论之间的关系,为演绎评估论证是否有效提供方法,是一个从一般到特殊的过程。常见的“大前提,小前提,结论”的著名三段论形式就是典型的演绎推理。在历史上,演绎推理出现过两种杰出的理论。一种是“古典逻辑”,开创这种理论是古希腊哲学家亚里士多德,主要记录在《工具论》,所以也被称为“亚里士多德逻辑“,主要处理不同对象的类之间关系的论证;另外一种是“现代逻辑”,主要是英国数学家布尔出版《逻辑的数学分析》,建立了“布尔代数”,并创造了一套符号逻辑系统。所以也称为“现代符号逻辑“,就是利用符号来表示逻辑中的各种概念关系等。“古典逻辑”和“符号逻辑“都是研究逻辑的形式,所以也被称为形式逻辑。

其次,归纳推理是以一类事物中的若干个别对象的具体知识为前提,得出有关该事物的普遍性知识的结论的过程。虽然归纳推理可以得到新的知识,但是不能穷举,所以永远也得不到真理。就像基本演绎法一样,可以保真,但是因为结论蕴含在大前提中,又不能产生新的知识,最后只能推导出真理存在即可。我们熟知的科学知识是来自科学归纳法的,真正的科学都是可以被证伪的,一旦科学理论与最新发现发生矛盾时,就会出现一种新的理论进行替换。由此可见,演绎和归纳并不是“割裂”状态,而是彼此相互联系的。一般为了提高归纳推理的可靠程度,都需要运用已有的知识对归纳推理的个别前提进行分析,把握其中的因果关系和必然规律,都会运用归纳推理。同时,归纳推理需要依靠演绎推理来验证自己的结论,需要以一般性知识作为前提。在软件工程建模的时候,建模是一个归纳工作,我们通过抽象问题领域里具有业务的共同特性的类来建立模型。而为了验证模型的可行性和有效性,我们会是使用演绎的方法去推算和演练不同的业务场景,看看软件模型是否满足业务需求。

最后,溯因推理是我们已经知道答案,再去追溯原因的推理过程。简单来说,就是“大胆假设,小心求证“。这也是我们程序员每天都在干的最多的事情,通常说的“故障排查(Trouble Shooting)”其实就是溯因推理,用的手段基本都是假设和求证。综上所述,其实不论是哪一种推理方法,对于我们实际工作和生活来说,都是值得推敲与学习的。

我们都知道中华上下都有五千年的历史文明,至少在社会发展水平如此高速的今天。有许许多多的智慧和道理影响着我们的方方面面。在此之前,看见过一段话,“我们听过那么多的古今道理和至理名言,却为何依旧没有办法过好自己的一生!“看到的时候,我都在想,这个号称处于”最好的时代“的我们是怎么了,为何会有如此多的感概和迷茫?直到看见《我是特种兵》里的“丫头”发了一个视频,说“小庄哥哥抱着的小女孩长大了”,我看了看镜子中的自己,突然意识到,时间只给了我们年龄,其它的一无所有。就像《思辨与立场》一书提到的,学习一门课程应该从理解课程的基本概念开始。结合到实际来说,不论社会现状多么美好,现实多么不尽人意,我们都应该懂点逻辑思维,才能让我们做事有章法,识人断物有条理,才能让自己变得“甜一点”!

比如:对于许多重复的、线性的事物,大脑将独立于编程。我要检查强迫症,反复检查是必要的,比如锁门,我会把锁分为几个步骤,顺序执行,返回结果,因为方法执行起来也不例外,上班时会放心,我只好在这个检查中进行治疗。驾校实习,第二节考试,编译程序,顺序执行,突发情况,分行解决方案,满分。

堵车时,不会想到线程阻塞,算法优化。很多电梯都在运行,程序实现了,思考了一下,等等,总是想着它。

事实上,最重要的是你的思维倾向于只在两个状态,0个和1个,而不是0.5个。例如,一件事是对的或错的,没有对或错。如果有,那么就把对的和错的分出来。

除了上面所说的外 还有以下几个特征

1。过度强迫症、完美主义

职业原因:模糊语义不能在程序中使用,因为计算机不理解“几乎”、“基本”。即使程序中有一点错误,程序也可以编译,但它不能运行。

日常行为:程序员往往过于认真,不让任何小细节,“好奇”,这有时会导致周围的压力。

2。在现实生活中练习快速键

职业原因:程序员应该精通快捷 *** 作。一般来说,按Ctrl-C复制和粘贴从剪贴板粘贴方式说明(具体的编辑器,如vi和Emacs)。

日常行为:这些捷姿粗径在程序员的行为和话语中有时很常见,有时也会造成尴尬。

三.尽力优化任何事情

职业原因:软件开发人员将不断优化代码,使代码更快更高效。常用的方法有多线程处理任务、代码重用等,在任何情况下都可以自动化执行。

日常行为:尽量优化现实生活事件,尽量节省人力和效率,往往被认为过于懒惰。例如,脏衣服往往堆积到一定的范围,在清洁前不能清洗。

4。希望人们和电脑一样。

职业原因:电脑会按照程序设置运行,运行错误,也就是程序出了故障。

日常行为:程序员有时忽略人与计算机不同。人们不能按照逻辑和理性去做事,而且常常跟着感觉走。

5。从0开始计数

职业原因:大多数编程语言中“数组”的初始值从0开始,而不是从1开始。

日常行为:这个协议使程序员经常从迹搭镇0起计算生命。没有编程背景的人很难理解这种计数方法。如果你的程序员朋友祝你在3公里长的运行得到零的地方,你可以偷。

6。永远想想2的力量

职业原因:计算机存储信息的基本单位是位(位)。在二进制系统中,每个0或1是一个位。

日常行为:通常不是在10计算,而是在2计算。有些平凡的日子在程序员眼中也是神奇的。例如,程序员日是每年的第二百五十六天(2·8)。还建议每年使用10月24日作为程序员日枝橘(2?10)。

7。生活方式不健康

职业原因:程序员编写半天程序,没有电脑屏幕的眼镜,甚至在灵感爆发时熬夜。

持续学习,持续开发,是目前主流IT业界程序员的一个生活常规,在现代技术迭代速度非常快的情况下,只有不断保持自我学习和探索才不会与时代脱节。无论是专业的IT从业者还是IT小白,都需要培养自己的算法思维。昆明电脑培训http://www.kmbdqn.cn/发现拥有良好算法思维后的直接好处有:更高的面试成功机会,和更快的日常问题处理能力。

何为算法思维,并不是对一些已经设计好的优秀代码的反复背诵和背板,而是自己对于问题的抽象能力的练习,即从抽象问题到实际进行编码或者设计程序解决问题的一个能力,如果单纯对于一些算法进行卜兄闹背诵的话,我们的思维能力不会得到提升,最多就是熟练的码农而已。所以,当看到别人设计的优秀算法后,我们一定要探寻算法背后那“曲径通幽”的思维之路。只有经历了思维之路的磨难,才能永远占有一个算法,并有可能举一反三,或者是设计一个巧妙算法。

个人认尘饥为,对于提升算法思维的方法,首先我们需要深入思考各种苦恼的问题,例如:

假设我喜欢租车出行,那么对于某一个地方的停车点一般在什么时候有车的机率最大?有车的概率是否与天气,温度等因素有关?

我希望型罩可以在回家之前通过手机APP让家里的空调提前工作起来,但是我非常Geek,不想使用现成的产品而想自己实现一个,和同学吹牛的时候可以更加脱颖而出?

在明确了这些问题以后我们就可以开始思考如何尝试写一个小的程序来帮助自己解决,这个时候如果手头有一个习惯的语言就非常合适了(比如我个人就喜欢Python,有很多库可以使用,而且入门非常容易),如果没有的话,可以去看看各个语言合适的场景,不过对于爬虫、数据分析相关个人认为更加贴合日常生活的项目来看,还是考虑直接从Python3起步比较好,后期如果想用树莓派做点智能家居相关的项目的话Python也是非常合适的。

对于Python的学习,目前有很多非常成熟的课程,可以覆盖各个不同的能力范围,这里着重推荐Coursera  的视频课程,配合本地IPython或者LeetCodePlayground一起调试和练习,可以获得很好的效果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8270319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存