工作报告的写作方式

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

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

硕士研究生第一学期总结——史惠泽

以下是学生做的过去这个学期的总结,很有借鉴意义,发在这里:

硕士研究生第一学期总结

史惠泽

四个月时间过得还蛮快的,研究生的这一小步就这么迈过来了。相比早就开展工作的很多同侪来说,我的进展可以说是乌龟一样了。但是,慢性子也有慢性子的步调。一个学期结束了整理一下这个学期学到的和思考的,以供后来人参考。

首先,我本科阶段的基础不是特别好,再加上有些散漫。所以没有能在本科是有构思的工作在研究生阶段可以接续实现的,所以目前选定的博弈论方向是来到这边读研之后决定的。选定这个课题也是在读了吴老师推荐的《科学研究的艺术》启发来的,作为科研的入门人,需要选取一个能够不挫败自己,较快做出成果的工作方向。所以我想到自己是数学出身,遂选择了博弈论作为目前的切入点(不过后来发现完全跟自己想的不是一回事儿……),这一点之前跟李克强老师也谈到过,假使作为一个目标是硕士毕业的人,订一个高水准的工作是不太切实的,三年时间要锻炼出的,应该是一整套的发现问题、提出解决方案、分析整理结果的能力。至于问题有多么有深度,其实窃以为是另一个层面的问题。当然,也不排除有着做出高水平工作的科研雄心,从而选择高起点的工作方向或者切入点的可能。这样的学生自然是系统院乐于见到的。

其次是师生相性的问题,我比较散漫,但是吴老师是一个很严谨、很有激情的老师,自然风格上很push。这种push并不是说天天盯着你要结果,更多的是吴老师非常关心学生思考问题的方式是否正确。看到树就只知道他是个棵树,转而聚焦于树上有多少叶子,树皮什么纹理,却忽视了整片森林的思考模式在我们这里是过不了关的。所以刚开始的时候免不了被老师数落(事实上我也还停留在这一阶段),但是我还是认同老师的教学的,所以希望可以在老师这里得到锻炼。所以,如果要选择吴老师的话,心态一定要好。虽说有教无类,但不同之类也需要要不同之教,吴老师东西整理更新得很勤,要想了解是否与老师相合,可以搜索一下老师建的工作站点,通过阅读发布的文章了解一下老师的思想和工作成果。事实上,对于任何一个老师,这个方法都是可行的。

再具体说一下,这个学期阅读的东西,主要是前期的准备工作,首先是《How to Read》和《教的更少,学得更多》,两本书包括上面提到的《科学研究的艺术》都是属于方法论的书籍,如何阅读聚焦的是在有限时间内何在无限时间内如何提炼书中的知识纳入自己的体系;第二本则是介绍如何利用“概念地图”这个工具建立知识与知识的联系,而不是把学到的东西简单的堆砌在一起。其实这些都是跟“既要见树木,也要见森林”的思想一脉相承的。书跟书之间是独立的个体,但书中承载的知识却是互有联系的,如何在书与书之间找到联系,如何把有联系的知识纳入到自己的知识网中,给出一个回答这些问题的范式,这就是准备工作的意义。即是不是做科研工作,我认为这样的思考也是非常有意义的。单纯的堆砌知识电脑就可以帮你办到了,空有知识不会处理实际面对的问题,举一不能反三的人即是在工作中也是落后于人的。第三本是属于为科研工作者所专门准备的了,著者是生物学界有名的学者,以一个过来人的身份系统的谈了谈科学家所应具备的品质,是入门人非常好的读物,对于我来说,印象比较深刻的就是谈到实验和有关数学的论断。科学的发展就是实验和假说的更新发展,所以任何的科学家都应该有提出假说、设计实验的能力,这也是作为研究生所要锻炼的方面,由假说设计实验、由实验验证假说,科学就是在这样的循环中不断更新完善自我,发展出一套理解世界的体系的。我也是亟待在接下来的工作中,磨炼试验能力的。还有就是对于数学的理解,数学是一个逻辑工具,只要不存在书写错误,上一步的算式或推理完全决定了接下来的结果和推论。当然有些艰深的内容也并不是那么“显然”。我们要做的就是利用好数学这件工具,建立有力的说理。这就需要我们真正懂得写下的算式,所谓理解并恰当运用。数学固然为我们带来不了新的突破,但是为了理论的地基能够打得足够坚实,数学基础一定要牢固。

研究方向的准备工作是视频课的教学,主要用的是耶鲁大学博弈论公开课和台湾国立王道一的实验经济学。一般老师会要求学生阅读文献,但实质上目的是差不多的,通过阅读综述或者相关领域有价值的文章,了解一下这个领域发展的状况和突出的理论成果。但是还是树木与森林的关系,如果缺乏对大图景的认识,单纯的阅读文献很容易陷入局部。有视频的话,对于我来说可能更友善,这种形式的教学比单纯的文字更生动,而且由于是课堂的形式,老师的语言可能要比书面的更生动一点。而且,从不同的老师身上,都能看到他们的大图景的介绍。即使他们没有把这种名词挂在嘴边,但是在教授的过程中,时刻都体现着对于整个博弈论领域系统地论述的特色。尤其是在我前后看了两次之后,第一次学习是在开学不久,平行着学校开设的博弈论课学习的视频,第二次是期末又重新温习了一遍。发现之前在视频中没能联系起来的东西,再次观看时就能看到他实际上阐述的知识都是存在联系的。这大概就是重复学习,理解更深一步所造成的效果。只有逐步建立知识间的联系,并且把对数学化表述的理解不断加深,才会发现慢慢发现所做的工作是大图景中的哪一部分,然后在这个局部上线索是如何串联的,研究方向应该是怎样的。

整理起来,这个学期,为了学到系联性思考和理解型学习并且通过关系和大图景来定位研究工作,我主要做了:

  1. 阅读《How to read》和《教的更少,学得更多》,写读书笔记、做概念地图,并且在组会上报告。目的:了解理解型学习的含义和具体方法,应用在学习和阅读当中
  2. 阅读《科学研究的艺术》,写读书笔记、做逻辑地图,并且在组会上报告。目的:对科研所要具备的能力和品质、以及可能遇到的问题做大概的了解;结合理解型学习,加深在研究性学习中,怎样提出问题、提出解决方案并且反省整理。
  3. 观看《耶鲁大学公开课:博弈论》和《王道一实验经济学》视频课程,整理课程笔记、做逻辑地图,并且在组会上报告。目的:了解博弈论领域的经典框架。初步接触在具体领域中需要的思想方法。明确当前领域的发展方向,对自己开展工作提供指导