精华内容
下载资源
问答
  • 可以对任何文件以十六进制形式输出,包括可执行文件…… 思维过程图里有详细的流程图,用visio看。
  • 提出了一种创造力的综合模型,该模型通过支持领域通用性-特异性对偶性来统一创意是领域通用性还是特定性的争论。 创造性思维过程包括趋同思维,趋异思维和洞察力(原创性)。
  • PMP考试项目管理五大过程思维导图,包括启动,规划,执行,监控,收尾。各个阶段的知识点整理的很详细。
  • 思维的基本过程与解决问题

    千次阅读 2011-09-04 21:58:02
    思维的基本过程与解决问题    一、思维的基本过程  1、分析与综合  分析是在思维中把事物的整体分解为各个部分、个别属性或个别方面;综合是在思维中把事物的各个部分、个别属性或个别方面结合为一个有机...

     思维的基本过程与解决问题

     

        一、思维的基本过程

        1、分析与综合

        分析是在思维中把事物的整体分解为各个部分、个别属性或个别方面;综合是在思维中把事物的各个部分、个别属性或个别方面结合为一个有机整体。

        分析可以使人了解事物的组成部分、属性和方面;综合可以使人了解事物的整体和构成事物整体的各个部分,个别属性和个别方面之间的关系。

        分析与综合是彼此相反而又紧密联系的过程,是同一思维过程中不可分割的两个方面。分析为了综合,分析才有意义;分析基础上的综合,综合者更加完备。

        人与人之间存有分析与综合的能力的差异,同一个人存有不同年龄的分析与综合的差异。例如,有的人善于分析;有的人善于综合;小学生的分析综合能力偏于对具体事物的分析综合的感性水平,中学生则提高到对事物的本质因素和内在联系的分析综合的理性水平。教师在教学中应当根据不同学生的这些特点,加以积极地引导,以促进他们一般思维能力的提高。

        2、比较

        比较是指在思考中确定各种事物的相同点和差异点的过程。

        比较是在分析和综合的基础上进行的。为了比较某些事物,首先就要对这些事物进行分析,分解出它们的各个部分、个别属性和各个方面。其次,再把它们相应的部分相应的属性和相应的方面联系起来加以对比,这其实就是综合。最后,找出确定事物的共同点和差异点。所以比较离不开分析综合,分析综合又是比较的组成部分。

        教学工作中,经常使用的比较类型有两种。一种是同类事物间的比较,又我为纵向比较,或称顺序比较,通过这种比较可以将事物的本质特征和非本质特征区分开来。另一种是不同类事物间的比较,又称为横向比较,或称交错比较,通过这种比较可以将事物的本质特征更加清楚地呈现出来,还可以使事物间的区别与联系更加明确,这样就能有效地防止知识的混淆与分裂。

        比较的原则是比较对象的相应部分或特点,根据同一个标准进行比较。否则,凤马牛不相及的事物或根据不同的标准,是无法比较的。

        3、抽象与概括

        抽象,是指在思考中抽出各种事物的共同属性,并舍弃其它属性。概括是指地思考中把抽象出来的各种事物的共同属性联系起来。

        分析、比较是抽象的基础,抽象又是概括的基础。没有分析和比较就不能抽象,没有抽象就不能概括。抽象、概括使我们的认识从感性认识上升到理性认识,从特殊上升到一般,把思想引向深化,更正确、更全面、更本质地反映事物。

        4、具体化

        具体化是把概括出来的一般认识推广运用到同类其它事物中去的思维过程。    具体化是认识发展的重要环节,它可以使一般认识不断扩大、丰富、深入和发展。在教学工作中应注意引导学生善于运用典型事例,对在学习中获得的一般理论加以具体说明和阐释。同时也应培养学生有独立地运用一般理论来解决具体问题的能力。具体化是真正掌握科学知识,避免理论与实际脱节的重要保证。

        二、解决问题的基本阶段

        解决问题的思维过程,一般说来发为四个环节或四个阶段:发现和明确问题、分析问题、提出假设、检验假设。

        1、发现问题

        思维自问题开始,问题就是矛盾,矛盾时时处处都有,问题也就无时无在。但若真正引起人们的积极思维,大多是“为什么”和“怎么样”一类的问题。发现问题的过程,就是发现矛盾的过程。这一环节的主要任务就是抓住主要矛盾,找出问题的本质,抓住矛盾的主要方面,找出问题的核心。爱因斯坦说过:“提出问题比解决问题更重要,因为后者仅仅是方法和实验的过程,而提出问题则要找到问题的关键、要害。”在人类社会生活的各个领域中,存在着种种问题,但并不是每个人都能发现问题,尤其是发现和提出有重要价值的问题。要做到这一点依赖于下列条件:

        (1)社会的需要。社会的需要是发现问题和明确问题的催化剂的和催生婆。随着人类社会的发展,会出现各种各样亟待解决的问题,它是人们思维的压力和动力。原始社会中,人类狭小的生活空间尚无可靠保证的情况下,不会提出和明确发明宇宙飞船征服太空的问题;在人们钻木取火不知电为何物的时代,不会有人提出制造电灯、电视等电器的问题和设想。有一位各人说过,社会的需要会比一百所大学更能造就人才。

        (2)个体活动的积极性。社会的需要转化为个人的思维任务之后,一说来,个体活动的态度越积极,活动量越大,范围越广,越能发现问题和提出问题。只有具有强烈的社会责任心和高度的活动热情及主动的态度,才能发现常人不注意的问题。

        (3)个体的求知欲。求知欲是人追求某种现象或弄清某个问题的内部动因。求知欲望强烈的人总是能在别人不认为有问题的地方发现问题,总是能在被公认的解释中提出疑问,总是能要求有更深奥的和更亲异的说明。他们往往“异想天开”或产生一些常人看来荒诞不经的想法,寻根问底,究追不舍,把问题搞个水落石出。

        (4)个体的知识水平。知识贫乏可以使人对一切感到新鲜,并刺激提出一些不了解的问题,但往往缺乏深度,让人感到肤浅可笑。一般而言,知识越是丰富,钻研越是深刻,提出问题就会越多,越重要。我国著名桥梁力学专家茅以升考试研究生的一种重要方式就是让学生对读过的书籍提问题,根据所提问题的数量和质量给每个人评定成绩,对我们是一个启发。

        2、分析问题

        分析问题主要是指弄清问题的特点和条件,其依赖的基础是搜集与占有与问题有关的大量材料。问题总是在具体事实上表现出来的,因此,没有大量的与问题有关的有价值的信息,要顺利解决问题是不可能的。中国古代诗人李贺“诗袋”的故事,“韦编三绝”的故事有马克思创作《资本论》,研读了1500本以上的著作,均说明占有大量有关信息的重要性。

        3、提出假设

        解决问题的关键是提出解决问题的方案──解决问题的原则、途径、方法。但这经常不是简单地能够立刻找到和确定下来的,而是先以假设的方式出现。所为假设,是指关于引起一定结果的原因的推测。提出的假设越合理,问题解决的就越快合理假设的提出,取决于两因素,一是对问题的明确程度,二是主体已有的知识检验。对问题越明确,知识经验越丰富,提出假设就越有针对性和广阔性。

        4、检验假设

        检验假设,就是指通过一定的方法来确定所提出的假设是否符合客观规律。检验假设有两种方法,一种是实际行动,即按照假设去具体解决问题;二是智力活动,即进行推论。这种方法用在检验不能用实际行动检验的假设上。如军事行动的方案,重大工程的方案等。但检验假设最终仍是实践,实践是检验真理的唯一标准。    以上四个环节并非截然分分,有时交错进行。目前心理学界对解决问题的环节尚有不同的看法存在。

        三、人们在解决问题的因素分析

        人们在解决问题的过程中受到各种因素的影响:

        1、知觉情境的影响

        解决问题往往会受知觉情境的影响。一般情况,知觉情境越简洁明显,有关的条件越容易感知,问题就容易解决;复杂的隐匿的知觉情境,问题就不易解决。例如,在解决以已知圆半径为条件,求圆的外接正方形面积的问题中,图形画法不同,解题的难度就不一样,显然A图的解决要比B图的解决难度要大。又如,在解决如何连续画出四条线段一次通过所有九个点子的问题中,由于九个点子的整齐排列,极容易使人把它们知觉为一个正方形的整体,于是思维活动被局限在九个点子组成的图形之内,问题始终不能解决。然而,思维活动一旦突破了知觉的束缚,就会立刻转向从九点之外下笔,问题很快得到解决。

        2、动机与情绪的影响

        每个人在解决各种问题时,总会产生各式各样的动机与情绪。动机是促使人去解决问题的动力。没有解决问题的动机,没有动力,问题自然不会顺利解决;但动机过强,同样不利于问题的解决;动机强度只有保持在一个恰当适中的水平上,才有利于问题的解决。研究表明,动机强度与解决问题的关系,可以描绘成一条“倒转的U型曲线”。

        一般地,积极情绪会使问题顺利解决,消极情绪会阻碍问题的解决。但有特殊情况,过度兴奋和过度消极有时反而会阻碍或促进问题的解决。

        3、思维定势的影响

        定势指心理活动的一种特殊的准备状态。也就是说,以前多次运用某一思维程序(方法、思路)去解决同一类问题,逐步形成了习惯性反应,以后仍然用习惯了程序(方法、思路)去解决问题。思维定势对那些简单的只需靠记忆或熟练操作即可解决的问题。它能有积极作用;对解决那些复杂的、创新的问题则起干扰作用和阻碍作用。

       专栏2: 反思维定势

        著名动物病理学家贝费里奇谈到思路问题时曾举过一个例子:为了发现引起羊腐蹄病的微生物,他研究了数年但一无所得。原因是他每一次研究失败之后,又仍然采用同样的方法(他认为是最合理的方法)重新开头,但最后还是没有成功。后来,他采用另外一种根本说明,思维定势既有积极的一面,又有消极的一面。为了克服“思维定势”的消极作用,在科学研究和教育工作中,人们应当自觉采用“反思维定势”的措施─进持反向思维。

        “田熊锅炉”的发明就是反思维定势的产物。过去的锅炉均安装着许多水管,它是用加热水管的办法使热水上升产生蒸汽。但这种结构的锅炉热效率不高。日本的田熊常吉想改革锅炉,但由于他的思考只局限在如何加热锅炉来提高热效应这一点上,结果屡遭失败。后来,他从相反的角度─锅炉吸热的角度思考问题时,便茅塞顿开。他想,管子里加热的水只能上升,这对冷热水交替极为不利,严重影响锅炉的势效率。于是,他把其中一根的热水管加粗,在粗管子中加入一根细的降水管。这一改,外管里的热水上升,内管里的冷水下降,水流和蒸汽得以循环,锅炉的热效率一下子就提高了百分之十。田熊从“加热”的反面“吸热”来考虑问题,从而成功地发明了田熊锅炉。田熊常吉因此而成了日本的十大发明家之一。

        为了克服固定思路的消极面,应当时常问一问自己:“从逆向去思考怎么样?”比如,圆珠笔漏油问题,一般人是从分析圆珠笔生漏油的原因入手去寻找解决办法,得出的结论是要增强笔珠的耐磨性,但漏油问题并没有得到解决。而日本的中田则从逆向去思考,他采用减少笔芯容量的办法解决了原珠笔漏油的问题。    对有些问题还可以大胆地问一问自己:“颠倒一下不行吗?”日本一位叫滨里的人,经常被人邀去练习高尔夫球,可是,在家里练习时,由于没有草坪,就要用带毛的地毯,而地毯价钱十分昂贵。能不能想法使练习少花点钱呢?滨里想:“把地毯上的毛安在球上行不行呢?这样不照样可以产生磨擦力吗?”就这样,长满毛的高尔夫球诞生了,这种球的楼道里练习也就象在草坪上练习一样了。

        反面可以出真理。美国伯纳姆在现代科学管理制度─泰罗制基础上提出了著名的三问,就是反向思路的产物。他认为,对任何事情,都要向自己提出三个基本问题:一、能不能取消?二、能不能合并?三、能不能用更简单的东西来取代?这三个问题对人颇有启发,它不仅曾经一度使美国的工业生产剧到历史最高水平,而且对人们在各个领域的创造,起了开拓思路的作用。

        不利的思路将使你迷入岐途。“发明大王”爱迪生思路开阔,善于创造。他搞科学研究的擅长采用“系统研究法”。他认为电灯只不过是整个一系列发明中的一个,其他还有一系列的东西,如发电机、仪表、开关以及许多零件都应属于电灯这一系统之中。这种“系统思想”曾使爱迪生迸发了持久的创造激情,并获得举世瞩目的一系列发明。无疑,系统思想对于考虑同类性质问题确能取得一定的效果。然而在解决不同性质问题时,却又往往会造成凝固、僵化的局面,成为不利的思维空势。爱迪生在发明电灯以后,花了三年时间研究直流输电线路和输电系统问题。但他不能摆脱习惯了的从直流系统来考虑问题这一思维定势,尽管采取了种种措施,输电距离最远还是不超过三公里。正当爱迪生遇到难以克服的困难时,美国工程师乔治.威斯汀豪斯看出了直流系统的局限性。他看到在意大利展出的采用变压器来升高电压、减少电能消耗的输电系统后,立即买下了这一技术在美国使用的专利权,接着作了一点改进,把从发电机发出的直流电变成高压交流电,取得了远程在规模电大输送问题的圆满成功。

        可以这样说:“思路可贵又可畏。”有利的思路将使你走向成功,不利的思路将使你迷入岐途。当你意识到思维空势的消极作用时,发挥创造性思维,走向成功就大有希望了。

        4、功能固着与变通

        功能固着是指只看到熟悉的事物的通常用途,而看不到它的其它功能,从而干扰了问题的解决。心理学家亚当森的实验可以说明这个问题:要求被试把三去腊烛平行方向固定在木樯上。发给被试的材料有三去腊烛、三个纸盒、火柴和几个图钉。第一组领取的材料分别装在三个纸盒内,第二组领取的材料放在三个纸盒外。其结果,在规定时间29分钟内,第二组有86%解决了问题,而第一组只有41%解决了问题。原因是第一组受了功能固着的影响,具体的解决办法同学们自己变通一下就明白了。

        5、思维的一线性和自束性

        所谓“一线性”就是俗话所说的钻牛角尖,一旦人的思维钻入牛角尖,解决问题就困难了。所谓“自束性”,就是主观上的附加了条件,束缚了自己的思维。哥伦布竖鸡旦的故事,是打破维自束性和一线性的著名范例。

        四、解决问题的思维模式

        模式是由若干元素集合起合的结构。思维模式是指由问题的条件、性质、解题者的个性特点,在解题过程中长期形成的相以稳定的思维类型。

        1、直觉式

        指在解决问题过程中,不经过自觉的、有意识的逻辑推理,而是凭直觉作出判断的解决问题的思维模式。其特点是速度快,正确性较大。直觉式解决问题的思维模式并非神秘莫测。其过程中的许多中间环节都省略了,所以能对问题作出快速的反映和观测。其基础是个人丰富的经验和渊博的知识,以及由此而产生的果断的意志品质,瞬间完成。战争前线的军人,执行公务的公安刑警,抢救病人的医生等,善于运用自觉式思维模式。

        2、分析式

        指在解决问题过程中,对事实材料作充分分析,并进行严格的逻辑推理,最后使问题得到解决的思维模式。其特点是分析周细,推理严格,结论科学。但有时该思维模式的步骤显得繁杂,耗费时间太多,于是实际运用中,人们往往给予适当的简化,以提高时效。

        3、试误式

        尝试错误式的简称。指在解决问题中,不对解决问题的原则、方法等作周密的思考,而用尝试去解决问题的思维模式。其特点是耗时多各成效低,盲目性大,弯路长。不过在对解决问题的方式方法进行大致的分析之后的高层次的试误,会大克服以上缺点。

        4、顿悟式

        顿悟即指突然醒悟明白。顿悟式指在积累了大量材料之后,经过分析、比较、推理而无法解决问题时,偶然的刺激,突然明白解决问题的途径和方法的思维模式。其特点是河预测性、自发性、科学性。其赖以产生的前提一理大量材料的积累,二是艰苦卓绝的思考。

        在复杂的社会生产实践中,人们往往是对几种思维模式综合运用,随着问题的改变而分别有所侧重。教师在教学中应引导学生正确评价每种思维模式的优缺点,逐步分析自己的思维模式,灵活综合运用各种思维模式,从而培养自己解决问题的能力,提高学习效率。
    展开全文
  • 理性思维与感性思维

    千次阅读 2019-05-19 11:22:07
    过程包括对外在世界(包括人自身)的观察,综合,逻辑推理等等,结果就是观点,观念等等。 总的来说,艺术和思想是人类精神活动的两大类,一个涵盖“感性思维”,一个代表“理性思维”,一个传达感情,一个传达概念...

    艺术与思想

    我对艺术的定义简单地说就是:艺术是用来表达我们的感性存在的媒介。而对思想,我的定义是:思想是人思考的过程和结果的总称。过程包括对外在世界(包括人自身)的观察,综合,逻辑推理等等,结果就是观点,观念等等。

    总的来说,艺术和思想是人类精神活动的两大类,一个涵盖“感性思维”,一个代表“理性思维”,一个传达感情,一个传达概念。这两者都有自己的典型代表:代表纯理性类的有哲学,逻辑学,代表纯感性类的有音乐,非主题性绘画和雕塑,意象诗歌(以及其它很多现代诗歌流派)。

    对艺术和思想的混淆,我发现主要来自很多人错误地把人的一切精神活动都认识成“思想”,而没有看到人的精神活动是个总概念,包括了人类的所有的主观活动,如思想,情感,政治,文学,艺术,宗教,等等。其次,这个错误认识还来源于把艺术家的灵感和创作目的统统看成思想的习惯。这,大约是因为大多数人被普通的观念所屏障,看不到一种在一般语言之外的,或者说理性思维之外的纯感性存在。这个“纯感性”的存在,就是一种生命的直接投射(或者可以说是“直觉”),一种超越了观念,主义等的形式。这种纯感性,才是音乐家和很多“纯艺术”家的灵感内涵。对这种纯感性的直接把握,可以说是音乐的全部传统,和现代绘画诗歌的主要追求。

    艺术和思想,也不是绝对对立的,在人类精神活动的很多领域,思想和艺术都可以同时介入。比如文学。由于文字既是思想的媒体,也是感情的媒体,所以文学这个创作方式的涵盖能力最大,可以表达思想,也可以表达感情,甚至可以表达“纯艺术”。另外,电影,戏剧,行为艺术等,都是思想和感情并存的艺术形式。

    所以,更确切地说,艺术这个定义应该有狭义的和广义的之分。狭义的艺术就只包括对生命的感性部分的再现的手法,如音乐,(纯艺术)绘画等;广义的就包括了文学,戏剧和电影之类这种既能表达感情,又能涵盖思想的艺术形式。

    除狭义的和广义的艺术定义之外,艺术这个词还可以有其延伸意义。“艺术”二字,不但可以用来定义这种表达情感的(狭义)和思想的(广义)传达媒介,还可以被理解成为一种对任何领域和专长的精通和娴熟。所以有“思考的艺术”,“爱的艺术”,“打猎的艺术”,“幽默的艺术”(甚至“灌水的艺术”)等等比喻的说法。但此处的“艺术”,非彼处的“艺术”。混为一谈,就犯了混淆概念的逻辑错误。

    非理性思维和感性思维

    总体说来,我发现这些概念一直在人的心目中都是很模糊的,甚至在很多人眼里是可以互换的。这是一种普遍的误解。这种误解我认为是因为一种对词汇的不慎重,对“概念”的不清晰的态度造成的。这种态度,或者说“思维方式”,就是“非理性思维”的方式。

    非理性思维并不等于感性思维。感性思维是一种不经过理性过滤的直觉,或者情感,它是主要发生在我们的右脑的精神活动;而非理性思维则是理性思维的不发达所导致的思维混乱状态。感性思维和理性思维并不冲突,而是互补(一个人可以同时具备这两种思维);非理性思维和理性思维是绝对冲突的,他们之间的关系是互相抹杀(一个非理性的人不可能有清晰的思维,反过来一个理性发达的人不可能思维混乱)。

     

    声明:苏南生 发表于 2019-05-19 11:14:16 ,共计1102字。

    转载请署名:理性思维与感性思维 | www.sunansheng.com

    展开全文
  • 程序员必备的思维能力:抽象思维

    万次阅读 多人点赞 2021-02-12 18:03:28
    若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽。——大卫·林奇抽象思维是我们工程师最重要的思维能力。因为软件技术 本质上就是一门抽象的艺术。我们的工作是存思维...

    若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽。——大卫·林奇

    抽象思维是我们工程师最重要的思维能力。因为软件技术 本质上就是一门抽象的艺术。我们的工作是存思维的“游戏”,虽然我们在使用键盘、显示器,打开电脑可以看到主板、硬盘等硬件。但我们即看不到程序如何被执行,也看不到0101是如何被CPU处理的。

    我们工程师每天都要动用抽象思维,对问题域进行分析、归纳、综合、判断、推理。从而抽象出各种概念,挖掘概念和概念之间的关系,对问题域进行建模,然后通过编程语言实现业务功能。所以,我们大部分的时间并不是在写代码,而是在梳理需求,理清概念,当然,也包括尝试看懂那些“该死的、别人写的”代码。

    在我接触的工程师中,能深入理解抽象概念的并不多,能把抽象和面向对象、架构设计进行有机结合,能用抽象思维进行问题分析、化繁为简的同学更是凤毛麟角。

    对于我本人而言,每当我对抽象有进一步的理解和认知,我都能切身感受到它给我在编码和设计上带来的质的变化。同时感慨之前对抽象的理解为什么如此肤浅。如果时间可以倒流的话,我希望我在我职业生涯的早期,就能充分意识到抽象的重要性,能多花时间认真的研究它,深刻的理解它,这样应该可以少走很多弯路。

    1.1 什么是抽象

    关于抽象的定义,百度百科是这样说的:

    抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。
    实际上,抽象是与具体相对应的概念,具体是事物的多种属性的总和,因而抽象亦可理解为由具体事物的多种属性中舍弃了若干属性而固定了另一些属性的思维活动。[1]

    Wikipedia的解释是:

    抽象是指为了某种目的,对一个概念或一种现象包含的信息进行过滤,移除不相关的信息,只保留与某种最终目的相关的信息。例如,一个皮质的足球,我们可以过滤它的质料等信息,得到更一般性的概念,也就是球。从另外一个角度看,抽象就是简化事物,抓住事物本质的过程。[2]

    简单而言,“抽”就是抽离,“象”就是具象,字面上理解抽象,抽象的过程就是从“具象”事物中归纳出共同特征,“抽取”得到一般化(Generalization)的概念的过程。英文的抽象——abstract来自拉丁文abstractio,它的原意是排除、抽出。

    为了更好的方便你理解抽象,让我们先来看一幅毕加索的画,如下图所示,图的左边是一头水牛,是具象的,右边是毕加索画,是抽象的。怎么样,是不是感觉自己一下子理解了抽象画的含义。 

    可以看到,抽象牛只有几根线条,不过这几根线条是做了高度抽象之后的线条,过滤了水牛的绝大部分细节,保留了牛最本质特征,比如牛角,牛头,牛鞭、牛尾巴等等。这种对细节的舍弃使得“抽象牛”具有更好的泛化(Generalization)能力。可以说,抽象更接近问题的本质。也就是说所有的牛都逃不过这几根线条。

    1.2 抽象和语言是一体的

    关于抽象思维,我们在百度百科上可以看到如下的定义:

    抽象思维,又称词(概念)的思维或者逻辑思维,是指用词(概念)进行判断、推理并得出结论的过程。抽象思维以词(概念)为中介来反映现实。这是思维的最本质特征,也是人的思维和动物心理的根本区别。[3]

    之所以把抽象思维称为词思维或者概念思维,是因为语言和抽象是一体的。当我们说“牛”的时候,说的就是“牛”的抽象,他代表了所有牛共有的特征。同样,当你在程序中创建Cow这个类的时候,道理也是一样。在生活中,我们只见过一头一头具象的牛,“牛”作为抽象的存在,即看不见也摸不着。

    这种把抽象概念作为世界本真的看法,也是古希腊哲学家柏拉图的最重要哲学思想。柏拉图认为,我们所有用感觉感知到的事物,都源于相应的理念。他认为具体事物的“名”,也就是他说的“理念世界”才是本真的东西,具体的一头牛,有大有小,有公有母,颜色、性情、外形各自不同。因此我们不好用个体感觉加以概括,但是这些牛既然都被统称为“牛”,则说明它们必然都源于同一个“理念”,即所谓“牛的理念”或者“理念的牛”,所以它们可以用“牛”加以概括。尚且不论“理念世界”是否真的存在,这是一个哲学问题,但有一点可以确定,我们的思考,对概念的表达都离不开语言。[4]

    这也是为什么,我在做设计和代码审查(Code Review)的时候,会特别关注命名是否合理的原因。因为命名的好坏,在很大程度上反应了我们对一个概念的思考是否清晰,我们的抽象是否合理,反应在代码上就是,代码的可读性、可理解性是不是良好,以及我们的设计是不是到位。

    有人做过一个调查,问程序员最头痛的事情是什么,通过Quora和Ubuntu Forum的调查结果显示,程序员最头疼的事情是命名。如果你曾经为了一个命名而绞尽脑汁,就不会对这个结果感到意外。

    就像Stack Overflow的创始人Joel Spolsky所说的:“起一个好名字应该很难,因为,一个好名字需要把要义浓缩在一到两个词。(Creating good names is hard, but it should be hard, because a great name captures essential meaning in just one or two words)。”

    是的,这个浓缩的过程就是抽象的过程。我不止一次的发现,当我觉得一个地方的命名有些别扭的时候,往往就意味着要么这个地方我没有思考清楚,要么是我的抽象弄错了。

    关于如何命名,我在《代码精进之路》里已经有比较详尽的阐述,这里就不赘述了。

    我想强调的是语言是明晰概念的基础,也是抽象思维的基础,在构建一个系统时,值得我们花很多时间去斟酌、去推敲语言。在我做过的一个项目中,就曾为一个关键实体讨论了两天,因为那是一个新概念,尝试了很多名字,始终感觉到别扭、不好理解。随着我们讨论的深入,对问题域理解的深入,我们最终找到了一个相对比较合适的名字,才肯罢休。

    这样的斟酌是有意义的,因为明晰关键概念,是我们设计中的重要工作。虽然不合理的命名,不合理的抽象也能实现业务功能。但其代价就是维护系统时,极高的认知负荷。随着时间的推移,就没人能搞懂系统的设计了。

    1.3 抽象的层次性

    回到毕加索的抽象画,如下图所示,如果映射到面向对象编程,抽象牛就是抽象类(Abstract Class),代表了所有牛的抽象。抽象牛可以泛化成更多的牛,比如水牛、奶牛、牦牛等。每一种牛都代表了一类(Class)牛,对于每一类牛,我们可以通过实例化,得到一头具体的牛实例(Instance)。 

    从这个简单的案例中,我们可以到抽象的三个特点:

    1. 第一,抽象是忽略细节的。抽象类是最抽象的,忽略的细节也最多,就像抽象牛,只是几根线条而已。在代码中,这种抽象可以是Abstract Class,也可以是Interface。

    2. 第二,抽象代表了共同性质。类(Class)代表了一组实例(Instance)的共同性质,抽象类(Abstract Class)代表了一组类的共同性质。对于我们上面的案例来说,这些共同性质就是抽象牛的那几根线条。

    3. 第三,抽象具有层次性。抽象层次越高,内涵越小,外延越大,也就是说它的涵义越小,泛化能力越强。比如,牛就要比水牛更抽象,因为它可以表达所有的牛,水牛只是牛的一个种类(Class)。

    抽象的这种层次性,是除了抽象概念之外,另一个我们必须要深入理解的概念,因为小到一个方法要怎么写,大到 一个系统要如何架构,以及我们后面第三章要介绍的结构化思维,都离不开抽象层次的概念。

    在进一步介绍抽象层次之前,我们先来理解一下外延和内涵的意思:

    抽象是以概念(词语)来反映现实的过程,每一个概念都有一定的外延和内涵.概念的外延就是适合这个概念的一切对象的范围,而概念的内涵就是这个概念所反映的对象的本质属性的总和.例如“平行四边形”这个概念,它的外延包含着一切正方形、菱形、矩形以及一般的平行四边形,而它的内涵包含着一切平行四边形所共有的“有四条边,两组对边互相平行”这两个本质属性。

    一个概念的内涵愈广,则其外延愈狭;反之,内涵愈狭,则其外延愈广。例如,“平行四边形”的内涵是“有四条边,两组对边互相平行”,而“菱形”的内涵除了这两条本质属性外,还包含着“四边相等”这一本质属性。“菱形”的内涵比“平行四边形”的内涵广,而“菱形”的外延要比“平行四边形”的外延狭。

    所谓的抽象层次就体现在概念的外延和内涵上,这种层次性,基本可以体现在任何事物上,比如一份报纸就存在多个层次上的抽象,“出版品”最抽象,其内涵最小,但外延最大,“出版品”可以是报纸也可以是期刊杂志等。

    1. 一个出版品

    2. 一份报纸

    3. 《旧金山纪事报》

    4. 5 月 18 日的《旧金山纪事报》

    当我要统计美国有多少个出版品,那么就要用到最上面第一层“出版品”的抽象,如果我要查询旧金山5月18日当天的新闻,就要用到最下面第四层的抽象。

    每一个抽象层次都有它的用途,对于我们工程师来说,如何拿捏这个抽象层次是对我们设计能力的考验,抽象层次太高和太低都不行。

    比如,现在要写一个水果程序,我们需要对水果进行抽象,因为水果里面有红色的苹果,我们当然可以建一个RedApple的类,但是这个抽象层次有点低,只能用来表达“红色的苹果”。来一个绿色的苹果,你还得新建一个GreenApple类。

    为了提升抽象层次,我们可以把RedApple类改成Apple类,让颜色变成Apple的属性,这样红色和绿色的苹果就都能表达了。再继续往上抽象,我们还可以得到水果类、植物类等。再往上抽象就是生物、物质了。

    你可以看到,抽象层次越高,内涵越小,外延越大,泛化能力越强。然而,其代价就是业务语义表达能力越弱。 

    具体要抽象到哪个层次,要视具体的情况而定了,比如这个程序是专门研究苹果的可能到Apple就够了,如果是卖水果的可能需要到Fruit,如果是植物研究的可能要到Plant,但很少需要到Object。

    我经常开玩笑说,你把所有的类都叫Object,把所有的参数都叫Map的系统最通用,因为Object和Map的内涵最小,其延展性最强,可以适配所有的扩展。从原理上来说,这种抽象也是对的,万物皆对象嘛。但是这种抽象又有什么意义呢?它没有表达出任何想表达的东西,只是一句正确的废话而已。

    越抽象,越通用,可扩展性越强,然而其语义的表达能力越弱。越具体,越不好延展,然而其语义表达能力很强。所以,对于抽象层次的权衡,是我们系统设计的关键所在,也是区分普通程序员和优秀程序员的关键所在。

    1.4 软件中的分层抽象无处不在

    越是复杂的问题越需要分层抽象,分层是分而治之,抽象是问题域的合理划分和概念语义的表达。不同层次提供不同的抽象,下层对上层隐藏实现细节,通过这种层次结构,我们才有可能应对像网络通信、云计算等超级复杂的问题。

    网络通信是互联网最重要的基础实施,但同时它又是一个很复杂的过程,你要知道把数据包传给谁——IP协议,你要知道在这个不可靠的网络上出现状况要怎么办——TCP协议。有这么多的事情需要处理,我们可不可以在一个层次中都做掉呢?当然是可以的,但显然不科学。因此,ISO制定了网络通信的七层参考模型,每一层只处理一件事情,低层为上层提供服务,直到应用层把HTTP,FTP等方便理解和使用的协议暴露给用户。 

    编程语言的发展史也是一个典型的分层抽象的演化史。

    机器能理解的只有机器语言,即各种二进制的01指令。如果我们采用O1的输入方式,其编程效率极低(学过数字电路的同学,体会下用开关实现加减法)。所以我们用汇编语言抽象了二进制指令。然而汇编还是很底层,于是我们用C语言抽象了汇编语言。而高级语言Java是类似于C这样低级语言的进一步抽象,这种逐层抽象极大的提升了我们的编程效率。 

    1.5 重复代码是抽象的缺失

    如果说抽象的本质是共性的话,那么我们代码中的重复代码,是不是就意味着抽象的缺失呢?

    是这样的,重复代码是典型的代码坏味道,其本质问题就是抽象的缺失。因为我们Ctrl+C加Ctrl+V的工作习惯,导致没有对共性代码进行抽取,或者虽然抽取了,只是简单的用了一个Util名字,没有给到一个合适的名字,没有正确的反应这段代码所体现的抽象概念,都属于抽象不到位。

    有一次,我在Review团队代码的时候,发现有一段组装搜索条件的代码,在几十个地方都有重复。这个搜索条件还比较复杂,是以元数据的形式存在数据库中,因此组装的过程是这样的:

    • 首先,我们要从缓存中把搜索条件列表取出来;

    • 然后,遍历这些条件,将搜索的值填充进去;

    //取默认搜索条件
    List<String> defaultConditions = searchConditionCacheTunnel.getJsonQueryByLabelKey(labelKey);
    for(String jsonQuery : defaultConditions){
    	jsonQuery = jsonQuery.replaceAll(SearchConstants.SEARCH_DEFAULT_PUBLICSEA_ENABLE_TIME, String.valueOf(System.currentTimeMillis() / 1000));
    	jsonQueryList.add(jsonQuery);
    }
    //取主搜索框的搜索条件
    if(StringUtils.isNotEmpty(cmd.getContent())){
        List<String> jsonValues = searchConditionCacheTunnel.getJsonQueryByLabelKey(SearchConstants.ICBU_SALES_MAIN_SEARCH);
        for (String value : jsonValues) {
    		String content = StringUtil.transferQuotation(cmd.getContent());
    		value = StringUtil.replaceAll(value, SearchConstants.SEARCH_DEFAULT_MAIN, content);
        	jsonQueryList.add(value);
    	}
    }
    

    简单的重构无外乎就是把这段代码提取出来,放到一个Util类里面给大家复用。然而我认为这样的重构只是完成了工作的一半,我们只是做了简单的归类,并没有做抽象提炼。

    简单分析,不难发现,此处我们是缺失了两个概念:一个是用来表达搜索条件的类——SearchCondition;另一个是用来组装搜索条件的类——SearchConditionAssembler。只有配合命名,显性化的将这两个概念表达出来,才是一个完整的重构。

    重构后,搜索条件的组装会变成一种非常简洁的形式,几十处的复用只需要引用SearchConditionAssembler就好了。

    public class SearchConditionAssembler {
        public static SearchCondition assemble(String labelKey){
            String jsonSearchCondition =  getJsonSearchConditionFromCache(labelKey);
            SearchCondition sc = assembleSearchCondition(jsonSearchCondition);
            return sc;
        }
    }
    

    由此可见,提取重复代码只是我们重构工作的第一步。对重复代码进行概念抽象,寻找有意义的命名才是我们工作的重点。

    因此,每一次遇到重复代码的时候,你都应该感到兴奋,想着,这是一次锻炼抽象能力的绝佳机会,当然,测试代码除外。

    1.6 强制类型转换是抽象层次有问题

    面向对象设计里面有一个著名的SOLID原则是由Bob大叔(Robert Martin)提出来的,其中的L代表LSP,就是Liskov Substitution Principle(里氏替换原则)。简单来说,里氏替换原则就是子类应该可以替换任何父类能够出现的地方,并且经过替换以后,代码还能正常工作。

    思考一下,我们在写代码的过程中,什么时候会用到强制类型转换呢?当然是LSP不能被满足的时候,也就是说子类的方法超出了父类的类型定义范围,为了能使用到子类的方法,只能使用类型强制转换将类型转成子类类型。

    举个例子,在苹果(Apple)类上,有一个isSweet()方法是用来判断水果甜不甜的;西瓜(Watermelon)类上,有一个isJuicy()是来判断水分是否充足的;同时,它们都共同继承一个水果(Fruit)类

    此时,我们需要挑选出甜的水果和有水分的习惯,我们会写一个如下的程序:

    public class FruitPicker {
    
        public List<Fruit> pickGood(List<Fruit> fruits){
            return fruits.stream().filter(e -> check(e)).
                    collect(Collectors.toList());
        }
        
        private boolean check(Fruit e) {
            if(e instanceof Apple){
                if(((Apple) e).isSweet()){
                    return true;
                }
            }
            if(e instanceof Watermelon){
                if(((Watermelon) e).isJuicy()){
                    return true;
                }
            }
            return false;
        }
    }
    

    因为pick方法的入参的类型是Fruit,所以为了获得Apple和Watermelon上的特有方法,我们不得不使用instanceof做一个类型判断,然后使用强制类型转换转成子类类型,以便获得他们的专有方法,很显然,这是违背了里式替换原则的。

    这里问题出在哪里?对于这样的代码我们要如何去优化呢?仔细分析一下,我们可以发现,根本原因是因为isSweet和isJuicy的抽象层次不够,站在更高抽象层次也就是Fruit的视角看,我们挑选的就是可口的水果,只是具体到苹果我们看甜度,具体到西瓜我们看水分而已。

    因此,解决方法就是对isSweet和isJuicy进行抽象,并提升一个层次,在Fruit上创建一个isTasty()的抽象方法,然后让苹果和西瓜类分别去实现这个抽象方法就好了。 

    下面是重构后的代码,通过抽象层次的提升我们消除了instanceof判断和强制类型转换,让代码重新满足了里式替换原则。抽象层次的提升使得代码重新变得优雅了。

    public class FruitPicker {
    
        public List<Fruit> pickGood(List<Fruit> fruits){
            return fruits.stream().filter(e -> check(e)).
                    collect(Collectors.toList());
        }
        
        //不再需要instanceof和强制类型转换
        private boolean check(Fruit e) {
            return e.isTasty();
        }
    }
    
    

    所以,每当我们在程序中准备使用instanceof做类型判断,或者用cast做强制类型转换的时候。每当我们的程序不满足LSP的时候。你都应该警醒一下,好家伙,这又是一次锻炼抽象能力的绝佳机会。

    1.7 如何提升抽象思维能力

    抽象思维能力是我们人类特有的、与生俱来的能力,除了上面说的在编码过程中可以锻炼抽象能力之外,我们还可以通过一些其他的练习,不断的提升我们的抽象能力。

    多阅读

    为什么阅读书籍比看电视更好呢?因为图像比文字更加具象,阅读的过程可以锻炼我们的抽象能力、想象能力,而看画面的时候会将你的大脑铺满,较少需要抽象和想象。

    这也是为什么我们不提倡让小孩子过多的暴露在电视或手机屏幕前的原因,因为这样不利于他抽象思维的锻炼。

    抽象思维的差别让孩子们的学习成绩从初中开始分化,许多不能适应这种抽象层面训练的,就去读技校了,因为技校比大学会更加具象:车铣刨磨、零部件都能看得见摸得着。体力劳动要比脑力劳动来的简单。

    多总结沉淀

    小时候不理解,语文老师为什么总是要求我们总结段落大意、中心思想什么的。现在回想起来,这种思维训练在基础教育中是非常必要的,其实质就是帮助学生提升抽象思维能力。

    记录也是很好的总结习惯。就拿读书笔记来说,最好不要原文摘录书中的内容,而是要用自己的话总结归纳书中的内容,这样不仅可以加深理解,而且还可以提升自己的抽象思维能力。

    我从四年前开始系统的记录笔记,做总结沉淀,构建自己的知识体系。这种思维训练的好处显而易见,可以说我之前写的《从码农到工匠》和现在正在写的《程序员必备的思维能力》都离不开我总结沉淀的习惯。

    命名训练

    每一次的变量命名、方法命名、类命名都是一次难得的抽象思维训练机会,前面已经说过了,语言和抽象是一体的,命名的好坏直接反应了我们的问题域思考的是否清晰,反应了我们抽象的是否合理。

    现实情况是,我们很多的工程师常常忽略了命名的重要性,只要能实现业务功能,名字从来就不是重点。

    实际上,这是对系统的不负责任,也是对自己的不负责任,更是对后期维护系统的人不负责任。写程序和写文章有很大的相似性,本质上都是在用语言阐述一件事情。试想下,如果文章中用的都是些词不达意的句子,这样的文章谁能看得懂,谁又愿意去看呢。

    同样,我一直强调代码要显性化的表达业务语义,其中命名在这个过程中扮演了极其重要的角色。为了代码的可读性,为了系统的长期可维护性,为了我们自身抽象思维的训练,我们都不应该放过任何一个带有歧义、表达模糊、意不清的命名。

    领域建模训练

    对于技术同学,我们还有一个非常好的提升抽象能力的手段——领域建模。当我们对问题域进行分析、整理和抽象的时候,当我们对领域进行划分和建模的时候,实际上也是在锻炼我们的抽象能力。

    我们可以对自己工作中的问题域进行建模,当然也可以通过阅读一些优秀源码背后的模型设计来学习如何抽象、如何建模。比如,我们知道Spring的核心功能是Bean容器,那么在看Spring源码的时候,我们可以着重去看它是如何进行Bean管理的?它使用的核心抽象是什么?不难发现,Spring是使用了BeanDefinition、BeanFactory、BeanDefinitionRegistry、BeanDefinitionReader等核心抽象实现了Bean的定义、获取和创建。抓住了这些核心抽象,我们就抓住了Spring设计主脉。

    除此之外,我们还可以进一步深入思考,它为什么要这么抽象?这样抽象的好处是什么?以及它是如何支持XML和Annotation(注解)这两种关于Bean的定义的。

    这样的抽象思维锻炼和思考,对提升我们的抽象能力和建模能力非常重要。关于这一点,我深有感触,初入职场的时候,当我尝试对问题域进行抽象和建模的时候,会觉得无从下手,建出来的模型也感觉很别扭。然而,经过长期的、刻意的学习和锻炼之后,很明显可以感觉到我的建模能力和抽象能力都有很大的提升。不但分析问题的速度更快了,而且建出来的模型也更加优雅了。

    1.8 小结

    • 抽象思维是程序员最重要的思维能力,抽象的过程就是寻找共性、归纳总结、综合分析,提炼出相关概念的过程。

    • 语言和抽象是一体的,抽象思维也叫词思维,因为抽象的概念只能通过语言才能表达出来。

    • 抽象是有层次性的,抽象层次越高,内涵越小,外延越大,扩展性越好;反之,抽象层次越低,内涵越大,外延越小,扩展性越差,但语义表达能力越强。

    • 对抽象层次的拿捏,体现了我们的设计功力,视具体情况而定,抽象层次既不能太高,也不能太低。

    • 重复代码意味着抽象缺失,强制类型转换意味着抽象层次有问题,我们可以利用这些信号来重构代码,让代码重新变的优雅。

    • 我们可以通过刻意练习来提升抽象能力,这些练习包括阅读、总结、命名训练、建模训练等。

    [1] https://baike.baidu.com/item/抽象/9021828

    [2] https://zh.wikipedia.org/wiki/抽象化

    [3] https://baike.baidu.com/item/抽象思维

    [4] https://www.sohu.com/a/359915387_260616

    展开全文
  • 思维导图

    千次阅读 2013-07-23 16:59:51
    思维导图是有效的思维模式,应用于记忆、学习、思考等的思维“地图”,利于人脑的扩散思维的展开。思维导图已经在全球范围得到广泛应用,包括大量的500强企业。思维导图的创始人是东尼·巴赞。
    思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具。思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像、颜色等建立记忆链接,思维导图充分运用左右脑的机能,利用记忆、阅读、思维的规律,协助人们在科学与艺术、逻辑与想象之间平衡发展,从而开启人类大脑的无限潜能。思维导图因此具有人类思维的强大功能。
    

    思维导图是一种将放射性思考具体化的方法。我们知道放射性思考是人类大脑的自然思考方式,每一种进入大脑的资料,不论是感觉、记忆或是想法——包括文字、数字、符码、香气、食物、线条、颜色、意象、节奏、音符等,都可以成为一个思考中心,并由此中心向外发散出成千上万的关节点,每一个关节点代表与中心主题的一个连结,而每一个连结又可以成为另一个中心主题,再向外发散出成千上万的关节点,呈现出放射性立体结构,而这些关节的连结可以视为您的记忆,也就是您的个人数据库。


    人类从一出生即开始累积这些庞大且复杂的数据库,大脑惊人的储存能力使我们累积了大量的资料,经由思维导图的放射性思考方法,除了加速资料的累积量外,更多的是将数据依据彼此间的关联性分层分类管理,使资料的储存、管理及应用因更有系统化而增加大脑运作的效率。同时,思维导图是最能善用左右脑的功能,藉由颜色、图像、符码的使用,不但可以协助我们记忆、增进我们的创造力,也让思维导图更轻松有趣,且具有个人特色及多面性。


    思维导图以放射性思考模式为基础的收放自如方式,除了提供一个正确而快速的学习方法与工具外,运用在创意的联想与收敛、项目企划、问题解决与分析、会议管理等方面,往往产生令人惊喜的效果。它是一种展现个人智力潜能极至的方法,将可提升思考技巧,大幅增进记忆力、组织力与创造力。它与传统笔记法和学习法有量子跳跃式的差异, 主要是因为它源自脑神经生理的学习互动模式,并且开展人生而具有的放射性思考能力和多感官学习特性。

    思维导图为人类提供一个有效思维图形工具,运用图文并重的技巧,开启人类大脑的无限潜能。心智图充分运用左右脑的机能,协助人们在科学与艺术、逻辑与想象之间平衡发展。来思维导图完整的逻辑架构及全脑思考的方法在世界和中国都被广泛应用在学习及工作方面,大量降低所需耗费的时间以及物质资源,对于每个人或公司绩效的大幅提升,必然产生令人无法忽视的巨大功效。


    在学习PMP的过程中也设计到了思维导图,下面是一个实例,非常受用:



    展开全文
  • 计算思维

    千次阅读 2019-02-26 12:25:28
    计算思维 &nbsp; Jeannette M....&nbsp;( 翻译:徐韵文,王飞跃 , 校对:王飞跃) ...算过程的能力和限制之上的,不管这些过程是由人还是由机器执行的。计算方法和模型给了我们勇气去处理那些原本无法由任...
  • 二、互联网思维之用户思维

    千次阅读 2019-01-26 06:28:00
    那么互联网思维包括哪些呢,总结包括9种,分别是用户思维、简约思维、极致思维、迭代思维、流量思维、社会化思维、大数据思维、平台思维和跨界思维。那这一讲我们来学习一下第一个思维----用户思维。  用户思维是...
  • 逻辑思维

    千次阅读 2017-09-25 16:05:07
    逻辑思维,又称抽象思维,是人的理性认识阶段,人运用概念、判断、推理等思维类型反映事物本质与规律的认识过程
  • 计算机思维

    千次阅读 2019-03-19 15:33:30
    计算机思维是在学习和应用计算机学科理论和技能的过程中,所体验和获得的思想方法和做事方法。 它分为三个层次:首先是宏观层面,包括对“可计算”这个思想的理解,也就是如何使用计算机这个工具,将虚拟世界处理...
  • 从人类认识世界和改造世界的思维方式出发,科学思维可分为理论思维(Theoretical Thinking)、实验思维(Experimental Thinking)和计算思维(Computational Thinking)3种。其中,理论思维又称逻辑思维,是以推理和演绎为...
  • 它也经常出现在各类会议,演讲过程中,作为讲解提纲使用,可以说由于思维导图的易理解,易上手的优势,它很快就成为了职场必备技能,有的招聘JD中直接要求必须熟练使用思维导图。 目前支持思维导图的制作软件也很多...
  • 感性思维和理性思维

    千次阅读 2018-11-15 05:50:53
    人的思维可以分为两部分∶感性思维和理性思维。感性思维主要是靠自己的经验和直觉,去思考和判断。理性思维主要是靠已经掌握的科学的方法,去思考和判断。感性思维活动包含:感觉、知...
  • 测试思维

    千次阅读 2018-03-15 20:53:39
    思维从图中,体现出我们也应该站在用户的角度,研发的角度来考虑产品的整体规划。用户思维在工作中,一部分测试同行特别是初入者在对待需求时都过于被动,不太会把产品各个模块的业务串联起来,成了因为需求来了所以...
  • 闭环思维

    千次阅读 2019-03-20 11:35:02
    闭环思维 摘要 经常在工作中听到其他人谈闭环思维,究竟啥是闭环呢?我们从互联网和工作生活中分别说下。 0x01 闭环 1.1 闭环思维 闭环思维即别人发起一件事,在一定时间内,不管我们完成的效果如何,都要认真的反馈...
  • 计算思维的学习

    千次阅读 2020-08-04 09:07:36
    从最早的结绳计数,发展到目前的电子计算机,人类思维方式随之发生相应的改变。 计算思维的提出 ...计算思维过程包括以下特点: (1)制定问题,并利用计算机和其他工具来解决该问题; (2)要符合逻辑地组织和分析
  • 计算机思维与数学思维的本质区别

    千次阅读 2019-03-06 21:15:00
    计算机思维和数学思维,都包括了抽象和逻辑。数学的抽象,在于剥离具体。数学研究从公理出发,可以变成纯思维的活动,和具体的的现实脱离关系。数学上的人为"定义",就是为了尽可能...
  • 系列文章解读&说明: 本系列文章主要内容是 思维导图 基础课,旨在帮助更多 热爱学习的伙伴 更...发散思维(Divergent Thinking),又称辐射思维、放射思维、扩散思维或求异思维,是指大脑在思考时呈现的一种扩...
  • 思维导图分享

    千次阅读 2018-08-18 16:19:12
    我使用思维导图已经有一段时间了,也有了一些自己的经验,甚至,在工作和生活中,思维导图已经是我必不可少的一项工具。当智哥问我能不能用一句话解释清楚思维导图的时候,我迟疑了一下,还是没法说清楚(看来要将
  • 当程序员具备了抽象思维

    万次阅读 2021-03-22 14:32:46
    抽象思维是我们工程师最重要的思维能力。因为软件技术 本质上就是一门抽象的艺术。我们的工作是存思维的“游戏”,虽然我们在使用键盘、显示器,打开电脑可以看到主板、硬盘等硬件。但我们即看不到程序如何被执行,...
  • java基础思维导图.xmind

    2019-05-10 11:17:04
    java基础部分思维导图,包括有循环、集合、线程、递归、异常、数组等内容
  • 产品思维的修炼–技术的必修课

    千次阅读 2018-07-25 08:15:38
    作为写了十多年代码的技术表示:产品思维比程序员们想象中重要得多!掌握了产品思维的程序员能力可以double!我把产品思维的养成要点,从我的认知上提炼了下,供大家参考。 理解产品思维前,首先需要了解产品经理是...
  • 因为大多人,也包括我在内,我们这些并没有天生才智的人来说,似乎总认为这是自己不擅长的领域。 这4年前在网上突然出现了一档脱口秀节目,叫做《罗辑思维》,一个姓罗的胖子每次都在视频跟大家分享他刚刚学到的...
  • jvm调优思维脑图

    2017-12-25 08:42:46
    主要包括:java内存结构、堆内存的构成、堆内存参数调整、垃圾收集算法、垃圾收集器选择、JVM参数、java对象的内存分配过程、Tomcat调优并使用Jmeter评测、参考资料等。希望对大家学习jvm有帮助。
  • 思维导图学习总结

    万次阅读 2017-03-22 13:42:26
    思维导图 思维导图又叫心智导图是表达发散性思维的有效的图形思维工具 ,它简单却又极其有效,是一种 革命性的思维工具。思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图 表现出来,把...
  • 设计思维与协作文化

    千次阅读 2012-05-21 03:53:15
    本文来源于我在InfoQ中文站翻译的文章,原文地址是:...来自斯坦福大学设计规划的执行总监Bill Burnett近日谈到了设计思维以及从设计转向设计思维过程中我们需要回答的问题。设计思维是以
  • 程序也是 一种知识,包括事实知识、过程性知识、控制性知识,更多的是控制性知识。这些知识已贮存在大脑内,思维即是搜索这些知识、应用这些知识找到解题算子,来解决当前面临的问题。或者说应用已知程序知识来解决...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,880
精华内容 59,152
关键字:

思维的过程包括