2018年《学会学习和思考》结课寄语

课程结束了,大部分同学在技能和理念上的表现都不错。其他技能理念的表现上稍微差一点的那几位,学习努力程度也很不错,而且至少懂得了这个学习方法和思维方式是什么。所以,为大家的表现贺。

经过这个课程的折磨之后,我希望大家看到下面几个词的时候能够想起来一些东西。我把这样的词整理一下。

我们传授的思考方式是:系联性思考、批判性思维、以及各个学科的学科思维方式。我们传授的学习方法是:以学科大图景为目标以系联性思考、批判性思维为基础以概念地图为工具(熟练以后工具可以去掉)的理解型学习

批判性思维表现为:含义不清楚的词意义不明确的句子我不用,没有经过我的理性的考察的东西不能成为我进一步思考的基础,判断论断命题最好都是实验可检验的。

系联性思考表现为:通过思考一个东西和其他的东西的关系来明白这个东西,同时注意分析和综合,也就是需要把一个东西不断地拆分下去来明白这个东西是什么,同时还要注意不断地从拆分出来的下一层回到上面,问整体合起来说明什么。

很多时候,系联性思考和批判性思维合起来,可以体现为WHWM四问:主要说了什么(What),怎么说的(How,例子、逻辑、展开),为什么说这个为什么这样说(Why),我觉得怎么样(Meaningful)。或者,当“我”自己来表达的时候,问:主要想表达什么(What),怎么表达(How),为什么说这个为什么这样说(Why),接收我信息的人会觉得怎么样(Meaningful)。

学科大图景是指:一个学科的典型对象、典型问题、典型思维方式、典型分析方法、和世界以及其他学科的关系。

同时,我还希望你从这门课中学到教的理念和方法:教的更少,学得更多。首先,理念上,我们教的目标是学习和思考的方法、学科大图景、以及对学科的体验欣赏和责任感。为了达到这个目标中的每一条,我们都需要大量的具体知识和具体研究工作的例子。但是,知识和研究工作本身并不是教和学的目标,它们仅仅是达到这个目标所需要的材料。很多时候,只要我们整理清楚了一个学科的大图景,并且把这个学科的概念和概念相互关系搞清楚,例如通过制作概念地图,那么,就可以选择尽量少的具体知识和研究工作的例子,来实现这个教和学的目标。因此,其次,实践上,我们要大概知道如何来设计和实践能够达到这样的目标的课程:学科大图景列出来、概念地图画出来、以大图景为指导精选概念和概念联系,实践过程中注意抓住学生真正困扰的地方(这个时候概念地图做为大脑探测器,也可以发挥作用,就像我上课跟你们的交流一样),然后做好引导,做到忍住——就是不教,但是有作业要完成。顺便,这里也体现另一条教和学的理念:做中学,折腾着学,给学生犯错的机会然后狠狠扒皮。

为什么我们会把学习和思考的方法、学科大图景、以及对学科的体验欣赏和责任感当做教和学的直接目标呢?因为我们相信,人类学习的最终目标是创造知识和创造性地使用知识。而对于这两点来说,没有理解透彻(也就是建立相互联系、概念和生活和实际世界的联系)的没有方向感的知识,仅仅会起到阻碍创新的作用,使得人的脑子更加僵化。为了理解这一部分,请再次阅读一下Whitehead的《教育的目的》以及吴金闪的《教的更少,学得更多》。

希望通过这个课程的学习,大家现在和以后,都能够做到,教的更少,学得更多,学得更累,学得更开心,更具有创造性。

我希望有一天,所有的老师的教学目标所有的学生的学习目标都不再是一个搜索引擎或者一个手机,而是创造者。

这个世界有三种人(见Ken Robinson Ted Talk),不能被改变的人(un-touched),能够被改变的人(touched and moved),和改变者(mover)。具有更多的Mover的希望,就在你们身上了。让我们一起来创造出来更多的创造者,更多的Mover。

再一次分享我的签名档,共勉。
Live to make a difference(活着就是为了搞出点不一样)
Be ambitious, be determined (有野望,持之如初)
World spins on dreamers like you(世界因你的梦想而转)
See through connections(洞澈联系)
Teach Less, Learn More (教的更少,学得更多)
Learning for understanding the world and ourselves(为了理解世界和自己而教和学)
Don’t tell me facts, let me think; Don’t teach me knowledge, let me learn (不要告诉我事实,让我想想;不要教给我知识,让我学习)

工作报告的写作方式

经常需要把ideas、半成品的工作、已经完成的工作整理出来,供后来人使用,就形成了工作报告的一个八股形式。忽然发现,学生没学会,尽管我已经分享过多次这样的报告。所以,整理一下,供学生使用。

  1. 工作报告,首先要交代研究问题。如果有必要也可以对研究问题稍微解释一下,加一点点背景。
  2. 然后,要交代大概研究思路。如果有必要也可以加一点点背景,说一下其他人怎么研究这个问题,做了什么,结论如何。
  3. 接着,在每一个阶段,交代我们做了什么,这个做了的事情能够如何回答一开始的研究问题。
  4. 再接着,要交代下一步做什么,为什么。
  5. 最后,是参考文献和文章草稿。如果有必要也可以附上实验记录和分析程序。

融合学科教育下的大学的形式

上一个帖子融合学科的大学教和学讨论了融合学科教育的必要性和方式。这种教育和通识教育的精神相通,把学科知识围绕着学科大图景分解成各个阶段的普适基础部分、学科基础部分和方向性部分(注意,在更高的阶段后两者可以不断地成为前者,不断推进这个边界),然后,让学习者自己来选择把自己学成一个个的四不像,只要抓住所感兴趣的学科的大图景,也就是典型对象、典型问题、典型分析方法、典型思维方式,以及和其他学科还有世界的关系。绝大多数课程不过就是在各个层次开设的体现大图景的通识课(注意,不是肤浅课,不是知识课,而是只能够用最少的概念和例子来构建的深刻的反映学科大图景的真正的通识课)。

一旦这样的重新梳理和建设完成之后,学校的组织形式是不是就不一样了?我们先来看看学校在功能上的变化。每一门课在全国甚至全世界范围内只要在不同的层次都有几个老师能够讲好,就可以了。需要通过实践和运用来辅助学习的部分,需要讨论和答疑等交互来辅助学习的部分,交给助教老师和学生来完成。当然,这样的话,学生在选择课程的时候,除了多多尝试,也需要一些指导,更需要比较完善的用来了解每一门课程主要介绍什么学科的什么样的大图景的资料。于是,学校大部分时候,就会成为一个提供指导和辅导服务的机构。

除了提供指导和辅导,学校还会承担审批和颁发学位的责任。比如说,物理系可以不管你上了哪些课,只要掌握了和前面提到的学科核心基础课相当的课程,例如四大力学,就可以授予物理学学士的学位。

那么,如果学校仅仅从提供这些功能——指导、辅导、专业学位审批——的角度来说,其组织形式会发生什么变化?

首先,学院不再不负责管理学生,学生直接由学校和学生自己来管理。学院对学生而言,不过就是一个某个特定方向或者学科中提供指导、辅导和学位审批的单位,而不再是一个学生的管理单位。选课、上课等学生的日常行为完全是在和学校打交道,学校只不过刚好选择了或者反过来学院的老师们刚好选择了来开设这样的一门门课程而已。

其次,学院不再负责制定培养方案,仅仅提出来本专业的学位要求(核心课程,而不管学习顺序和学习方式),以及提供一些推荐课程选择模板供学生参考。

接着,学校的层面,也不再区分课程由哪些老师来开设,不管是谁,都可以选择来开设任何一门课程,只要学生有人选,并且教学大纲和质量通过粗糙的审批。例如,物理系的老师也可以来开设《线性代数》而且和数学系老师开设的在满足学位要求和进一步学习要求上,不存在区别对待。反过来,冲着物理专业学位学习的学生也可以去选择数学系开设的相当于《线性代数》的课程,不存在区别对待。只要各个课程的先修课联系和毕业要求规定好。学校甚至可以把大部分的老师,在自由选择的条件下,转成通过审批的网络课程的助教老师,以及指导学生来选课的老师。

最后,全国甚至全球的学校联盟或者专业联盟,可以一起来提炼学科大图景和体现这些大图景的主要概念和例子。当然,每一个教课的老师还会在这个基础上有自己在学科大图景上的侧重点,以及自己的独特的例子。上一个帖子也已经提到,甚至“课程”这个单位也可以去掉,只要能够学习到某个特定的集合的概念和概念之间的关系,学习到这个学科的学科大图景,就行。也就是说,学习的内容和顺序,完全是学生自己选择的结果,受到概念和概念之间的关系的约束,受到这些概念要反映学科大图景的约束而已。

当然,一旦课程这个级别也取消,学校的审批认证就需要更加合理的方式,例如通过在一个学科的概念地图上做高效率的检测和推断——例如,通过考察学生直接关于三个概念的问题来推断学生是否理解好了三十个相关的概念。这个高效的考察方法和高效的反映学科大图景的学习方法一样,都要基于学科的概念地图。这也是我们正在以汉字结构含义网络来当例子开展的研究。如果你想了解一下前期的研究,可以搜索一下BBC的报道“A better way to learn Chinese?”。最近的工作正在缓慢但是持续地开展中。

这个帖子也是长又长,总结一下:在体现和融合学科大图景的教育体系下面,对学生而言,不再有学院有专业的区别,甚至不再有课程这个级别的单位,仅仅受到学科大图景的制约,收到概念和概念之间的关系的制约;从学生的角度来说,学校仅仅起到提供指导、辅导和学位审批的作用;从学校的角度而言,无论开课老师来自于哪里,各个院系甚至网络,只要内容上通过粗糙的审查,则完全没有区别对待的问题。

于是,学校和院系,只不过就是一堆大概来说具有类似的兴趣的研究者的集散地。当然,这些研究者,除了研究,还能够在培养人才上起到指导和辅导的作用(当然,也允许那些主要起到指导和辅导作用,稍微做一点研究的),并且其中的少数还可以成为促进学生理解学科大图景的课程的建设者。

顺便,袁强问,我为什么写这几个帖子。我认为这是能够解决当前的一些问题的思考,尽管有可能有点超前了。并且,我提供这些思考就是为了能够促进其他人思考,至于能不能被实现,那是另一个问题。能够促进思考,就是值得的了。另外,顺便推广一下概念地图和系统科学,也不错。

从编程序看分析和综合,以及用于写作和做报告

最近,不得不来指导一下学生编程序。除了

  1. 给程序加执行参数(例如linux命令cp后面的文件名就是用来满足适于用任何文件的要求,例如ls后面的-a就是用来显示隐藏文件等等)来增加程序的功能而不是完成非常特定的功能,然后每次不得不去修改程序本身
  2. 运行参数包含测试功能的开关,这样测试起来简单
  3. 程序尽量要做到命令行下可执行,不要依赖于集成环境IDE,可以用makefile
  4. 变量名要有意义
  5. 程序要加上说明,看的出来每一行在做什么
  6. 合适的时候,做一下优化,例如用矩阵代替循环之类的
  7. 一般的编程,以及每一种语言,基本上都会有一些风格习惯,要稍微了解和遵循

这些基本的要求之外,最重要的是Divide and conquer的思想,也就是分解和综合的思想:把每一个程序分解成合适的步骤,每一步完成特定的功能。甚至在主程序这样的高等级程序里面,完全不应该有具体的计算,只能有每一段应该完成什么的流程;甚至在比较高级的功能性模块里面,也只能由每一段应该完成什么的流程;仅仅在最底层的程序里面才应该有具体计算,核心计算。也就是程序应该长成这样:

main{
   get some run-time parameters #meaning of every parameter
   to do task1 #what is this task, why it is needed here
   to do task2 #what is this task, why it is needed here
   to do task3 #what is this task, why it is needed here
   testcode #activated when the designated run-time parameter is called
   print results #to serve what purpose
}


task1(parameters){
   to do task11 #what is this task, why it is needed here
   to do task12 #what is this task, why it is needed here
   testcode #activated when the designated run-time parameter is called
   return something back to the calling program
}


task11(parameters){
   Realcode, core code #how this task is done
   testcode #activated when the designated run-time parameter is called
   return something back to the calling program
}

这样的程序,尽管初看起来,会云里雾里,发现,每个子程序都没有在干活啊,就是在调用下一级子程序,好像只有搞懂最底层的子程序,才能看懂这个上一级程序。但是,只要稍微习惯一下,改变一下思考问题的方式,就会发现,这样的程序比把核心程序和流程程序放在一起的,要好懂的多好懂的多。关键的思考问题的方式就是分析和综合,或者叫做Divide and conquer,或者WHWM分析方法(What,How,Why,Meaningful)。具体来说,就是,在看上一级程序例如主程序的时候,每一个子程序只要明白在完成什么功能,这个功能和当前程序的目的是什么关系,就行了。不需要取搞清楚子程序是怎么做的。也就是说,What(完成什么功能)是最主要的,然后是Meaningful(起到什么作用),How(怎么做的)和Why(为什么这样做,为什么做这个)是次要的。只有当真的需要的时候才进入下一级子程序,而且就算进入下一级子程序,还是一样,先搞清楚这个子程序下面的流程,也就是每个子子程序的功能以及它们和这个子程序的功能的关系,而不去管这些子子程序是怎么实现的,有没有更好的实现。当然,这样的阅读依赖于程序员的注释,因此,每一个功能模块,都要做好注释,完成什么功能。

记住:很多细节我们都可以不懂,只要我们懂得这个东西做了什么,在整体中起到什么作用。当然,如果我们真的想搞懂整个问题,那么,自然,底下的How和Why也是重要的。

这样来做还有什么好处呢?方便测试,方便协作。测试的时候,可以单独来针对特定的子程序,而且可以设定一个针对这个子程序具有精确解的情况来测试。协作的时候,每一个贡献者可以只管当前任务的细节,而不去管这个任务之上的子程序和之下的整合,当然,在把任务分解准确以后。

只要做好分解,不断地分解——每一次都只有流程直到不得不写下来核心程序,做好注释,做好测试,无论编程水平(例如语言包的熟悉程度、算法的创造性运用)本身多烂,都能够编出来好程序。

同样,写作和阅读的时候,也是如此:首先是整篇文章想说什么主要信息,为什么说这个;接着把整篇文章分解成一个一个的部分,每一部分说了什么主要信息和整篇文章的关系是什么;再接着,还可以把每一个部分再次分成一个一个的部分,每一步分说什么主要信息和它的上一层关系是什么。也就是在每一个层次上,问What和Meaningful的问题,然后依靠在下一层问What和Meaningful的问题来回答上一个层次的How和Why。

同样,做学术报告的时候,更加要如此:首先是整个报告想说什么,为什么说这个;接着,用什么例子或者结论来展开论证和表达这个主要信息,以及反过来,在介绍这些例子和结论的技术细节的之前一定要让你的听众明白,你为什么将这些例子和结论,它们和主要信息的关系是什么;然后,对每一个例子和结论,做同样的事情,先搞清楚需要用哪些进一步的细节来展开这些例子和结论,在具体进入这些进一步的细节的具体技术细节之前,能不能交代清楚这些细节和这些例子和结论的主要信息是什么关系。不断地重复这个分解的过程、明白起到对上一级的内容什么样的支撑作用、然后才是细节的展开。为什么要这样做?因为你的听众基本上不会一下就明白最底层的细节,每一次的封装都能够降低你的听众的记忆和信息处理负担。

当然,有的时候,这个层次会有交叉。这也是为什么要依靠概念地图——整体是层次结构,但是跨越层次的联系是最重要和核心的联系。这也是系统科学,物理学,或者说科学的核心思想之一——分析和综合。除了学习物理学、系统科学,你还可以通过练习编程来体会这个分析和综合,只要完成一个需要300行以上的程序,你就不得不体会到。任何语言都可以,但是,不要直接就是图形界面的例如VB之类的,试试C、Python、Java等,尤其是Java(接口,而不是具体程序)。

数学和科学、生活

今天这个例子就发生在上一个帖子的作者——一个差不多懂了系联性思考的硕士学生身上。同样非常有借鉴意义。我整理出来,分享在这里。

我用doodle设立了一个投票来确定这个学期的研究小组讨论时间。需要每一个参与讨论的人来参加这个投票,提供对自己来说可以实现的时间,然后,doodle就会做好一张网页表格,把每一个选项放在列上,每一个参与者的选择放在行上。我这个创建投票的人只需要看这张表就可以确定一个对所有人或者大多数人都能够用的时间了。

然后,这个学生选了三个选项。我就很好奇。问:为什么这样选啊?具体选择什么当然我也关心,不过我更好奇为什么这样选,真的只有这三个时间是可行的对这个学生来说?经过一番努力的沟通,发现,这个学生是这样来理解这个投票的。所谓投票就是在一堆选项中选自己最喜欢的,然后,最后,统计每一个选项有多少人喜欢,创建人选择得票最多的就行了。

确实,一般的称为“投票”的东西确实如此。

然后,学生意识到,可能我这么问,则表示这个背后的确定最后的选项的过程可能并不是这样。就说,我觉得可能这个doodle的程序不是这样运作的,得去想想这个程序如何运作。

另两个学生这时候提示,确定讨论时间的运算,实际上是在做集合的交集:把每一个参与者的集合拿过来,计算所有人的交集。

于是,首先,这个程序背后的算法不用去猜的,那就是计算交集,而且这个计算的人,就是我,doodle仅仅提供这张大表而已。

其次,更加根本的问题是,数学描述、数学计算过程或者软件系统背后的算法,都是为了解决某个具体问题的。我们只需要从问题开始思考,而不是从计算过程、软件算法开始思考。如果这个算法或者过程不能解决这个问题,那么,是算法和过程错了,而不是问题错了。

在具体这个问题上,就是你只需要思考确定一群人讨论的时间是什么样一个问题就可以了:由于首先的要求是要找到满足绝大多数人的选项,而不是选择所有人合起来最喜欢的选项,集合的并是最好的数学描述,而不是数票数。当然,如果每一个参与者把自己的喜好完全地揭示出来,则数票数和求集合的并是等价的。但是,一旦参与者用数票数的思路来提供信息——也就是仅仅选择自己最喜欢的选项而不是所有可能的选项(当然,将来还可以做更复杂的赋权),则两者就不等价了。结果上,很有可能这个参与者的最喜欢的选项被完全忽视。

因此,除了没有从问题开始思考,从情景开始思考,而是去猜背后可能的计算过程或者算法,还有另一个层面的问题:套路。当一个学生面对一个叫做“投票”的问题的时候,很可能就会直接套用投票的思路,而不去思考实际问题和情景。套路,真的要不得啊。面对任何具体问题,都要去思考,这个问题中有哪些因素,这些因素决定了我们必须用什么样的计算或者分析,而不是生搬硬套。

后来,我发现,这样来做会议时间投票的人还不少。看来,看不到“数学就是对问题和思考的表达,对问题里面的关系的描述”的人,还是真不少啊。可能大多数人的思考方式,真的是套路——先看看有没有一个自己知道如何应对的相似的,尽管可能仅仅是名以上、名字上相似,而不是关系上相似,问题,然后把这个问题里面的应对方式直接照搬过来。

顺便,关于这个问题,我们正在设计一个实验研究:一个情景A,一个情景B,两者具有一定相似性,但是,如果真的想明白则两者不一样,而且,我们保证实验参与者真的两者都是之前就了解的,甚至教过的学过的,然后我们来让实验参与者做决策。在这里,我们想探讨两个问题,知道(学过的能通过考试的)到能用(能够面对实际情景)的距离,以及基于套路而不是基于理性思考的决策的普遍性。将来我来报高这个研究结果。

用这个例子,来体现什么是数学,以及数学和科学、生活的关系。