Category Archives: Software Education

Software Programming, What to learn?

Current only in Chinese. However, you can try Bing Translator to read it in English: bing.com/Translator 本文讲讲编程学习的内容设计。 编程需要掌握的知识或技能,总的来说: 建模,机器,数学(依据某领域的数学来做新的软件),UI,工具,生态。 除了工具有必须熟能生巧的成分和各软件生态的熟悉需要一定时间外,其他都可以通过建模思维去快速学习,数学本来就是建模。 编程中的抽象建模的对比与运用 变量,函数和数据结构与抽象建模 编程中无处不是抽象建模。变量,函数和数据结构都是抽象建模,都是模块化的方法。 函数当然是在建模,把一些功能封装成指令,这样你有一层层的分层的指令。所以封装也不是随意的封装,如何封装的好,就是建模的思维,包括建模里分层的原则。 变量和数据结构也是建模。其实传统的教这两个概念的方法都不太对,都涉及机器了。其实他们的本质就是抽象建模。 “对比与运用” 好的教法,就是“对比与运用”,让学生去体验抽象建模带来的差异。 对比就是把无数的小的例子做出来,让学生自己去对比研究。并且要和实例结合起来,这样学生可以具体真实的感受到不同写法带来的变化。对比需要是有意义的对比。如果是对小孩子,那就对小孩子越有意义的对比越好。 这里的关键词是:实例,改变/对比,感知,探索,总结。总结就是创造自己的知识。 如果能够做好这些,其实学生甚至都可以自己去总结定义什么是变量,什么是数据结构,函数等等。因为这些说穿了,不过是软件编程里的封装或者说抽象建模的方法。 传统的编程教学与机器绑定的太紧密了。机器是编程学习里的一个大块,但是编程学习不是脱离了机器就不能学习。编程就是不同层次的封装,完全可以封装到与机器无关的层面。编程就是在建模,建模与机器无关,或者我们可以把机器当做一种特定的模型,用开放的眼光去看它。但很多人对机器不感兴趣的,就没有必要非要为了学编程就去学机器,并且一开始就涉及到机器的概念,所有编程的初始学习都摆脱不了机器的概念,所有的编程概念都要绑定着机器来讲,这其实也是对编程缺乏本质的认识造成的。 对编程有极大的热情,有志于成为编程的高手甚至大师的人,可以去熟悉了解机器,研究机器的模型是怎样的,甚至设计新的机器。 但编程学习与机器是可以脱离的。 自主探索的玩地而非盲目练习 传统的现代教育或者说旧教育范式里,强调大量的练习。往往强调练习而忽略了感知和探索。这其实反而是很多人成绩上不去的原因。(虽然我们认为应试教育从评估方法上是有根本的很严重的问题的。) 上面我们讲到的做出很多的可以对比的小例子,让学生去自主的探索,对比研究它们的代码的不同,效果的不同,自己去感知,去总结,这就成为了一个可以自主探索的玩地。有了这个基础,自己能感觉到什么是重要的,需要练习的,才会找地方去练习。这时候如果有可供练习的内容,才是有意义的,没有损害到自主学习的能力。 实际上,现代教育或者说旧教育范式了的很多方式,不是说其就一定不对或者说没用,我们要从是否损害了学生的自主学习能力上去评估。 基本指令的学习 建模是建立在已有指令基础上的。在以上建模学习中,都同时包含对相关指令的学习。 抽象建模思维之一,就是把大的东西分解成各个独立的个体,然后对这些独立的个体分别弄清楚。 … Continue reading

Posted in Software Education | Leave a comment

Variable and Data Structure are abstract modeling

编程里的变量,往往是初学者很难理解的概念。 我们说编程里最核心的是抽象建模的能力。实际上变量设置就是在抽象建模。通过变量的设置,我们就有了问题领域的抽象模型。 通过变量,我们把一个复杂领域分离出来了变化的部分和不变的部分,或者说我们识别出来了其中的生命中心。比如distance, speed这样的变量,就是这些领域的生命中心,代表那个不变的抽象模型,虽然它们的值是可以变化的。正是通过把变化中不变的部分识别出来,我们完成了对该领域或问题的抽象建模。 程序员写一个程序,要创造很多自己的变量。优秀的程序员往往在对这些变量的设计包括命名上有卓越的能力,也懂得花费心思做好变量的设计与命名工作。会起名字的都是高手! 不仅仅是在编程领域,可以说在很多领域都是如此,比如音乐领域里窦唯就是有名的会起名。命名的过程,其实就是感知和创造生命中心的过程。 编程里的不同数据类型,同样是在抽象建模。比如字符串代表了我们这个世界里各种物品的名字或者语句,而数字则代表了可以计算的数值。这就是在对我们这个世界进行建模。更复杂的数据结构,如列表,是进一步的对我们这个世界进行抽象建模。 编程,就是这样的在不同的层面进行抽象建模的工作。我们必须感知我们的世界,获得本质的认识,并把这些认识转化为抽象模型。 所谓的本质的认识,正是我们上面说的,找到变化的世界里那些不变的东西,也正是建模的过程。 所以我们经常说编程是什么,或者讨论所谓的编程思维,其实就是对空间的感知能力和探索能力,掌握建模的方法,如何通过实验的方式去验证获得反馈并进一步改进,从而达到对世界的本质的认识。 这其实,也就是学习的过程。 而知识,其实就是我们大脑里的抽象模型,我们每个人都在基于我们感知到的重要体验去总结我们自己的知识,创造我们自己的知识模型。 所以,编程的技能,与学习的能力是完全一体的。也是我们说“学会编程,学会学习!”的一个重要原因。

Posted in Software, Software Education | Leave a comment

Programming is to build

Paracraft的编程学习是从搭建开始的。很多人会纳闷,为什么学习编程要从搭建开始?我们的回答很简单,编程就是搭建! 编程其实就是用很多的指令搭建出一个很大的软件出来,就像在Paracraft里用方块搭建出一个大的建筑出来一样。大家看这段条块式编程的截图,就很形象的可以看出来许多的指令搭建出来一段程序。另一幅截图里则搭建出了两段代码,如同Paracraft世界里搭建了两个建筑一样。 图1:指令的搭建 图2:两个程序的搭建 熟悉Paracraft的小朋友都知道,如果有什么经常需要使用的建筑模块或者角色,可以使用方块进行建模,生成可以重复使用的BMAX模型。比如说建筑里的斗拱,或者屋顶的瓦片,可以用方块搭建出来可以复用的模型。房间里的桌椅也是一样,我们可以用方块搭建出来桌子或者椅子,然后重复的放置在不同的房间里。这跟编程里把重复使用的功能模块包装成指令或者函数是一样的,需要能够识别和提取通用的功能,并进行抽象建模生成可以重复使用的模块,这样的抽象建模能力正是编程里的核心能力。 图3:使用Paracraft制作的动物Bmax模型 图4:学生使用Paracraft方块搭建的坦克Bmax模型 指令的封装,也是一种模块化。其中有些指令是更底层的,被上层的指令反复调用。这就需要学生具有很强的抽象提取能力。而学生也可以去创造新的指令,可以是更底层的可以被很普遍的调用的通用指令,也可以是上层的更方便的做某些事情的指令。这些不正是搭建吗? 而这些底层的指令则代表了对那个层次的理解,或者说那个层次的抽象模型。就好像斗拱屋瓦等代表了对中国建筑的理解一样,或者说是中国建筑的抽象模型。你可以看到,从外在形式到内在实质,编程不就是搭建吗? 图5:使用Paracraft搭建的中国特色建筑 当孩子们需要去搭建一个相当大型的场景的时候,就需要学会如何拆解,如何抓住主要特征,如何迭代的分层的去完成,如何再组合不同的模块构成完整的作品,这些都是软件编程里的核心能力。 孩子们之所以热爱Paracraft,正是因为他们热爱搭建,通过搭建去创造复杂的生命。看看孩子们创造的各种过山车或者跑酷游戏,或者充满各种机关和故事的解密游戏,或者他们回忆校园生活的再现宏伟的校园建筑且饱含深情的动画电影,等等,无不是充满生命的作品。 图5:一个9岁孩子搭建的跑酷游戏 图6:一个9岁孩子搭建的跑酷游戏 而软件编程,正是创造生命。同物理世界的很多东西不同,没有哪个软件不是在创新。因为如果哪个软件不是在创新的话,我们可以直接复制之前的同样功能的软件即可。软件的复制/再生产的成本是0。所以软件一定是在创新的,不会重复的造轮子,程序员无时不刻不在创造新的生命,或者探索和思考可以创造什么样的生命,对他人有用的生命。所以创造完整的作品对于程序员来说,有着至关重要的意义。 Paracraft,正是以创造生命作品为核心,哪怕是年龄很小的孩子,也都有可以去创作的作品,并且在Paracraft里,孩子们可以创造完整的作品。随着技能的增长,他们可以逐渐创造更加复杂和有挑战性的作品。在创造复杂性和有挑战性作品方面,Paracraft可以说是没有上限的。 软件编程是通过搭建的方式去创造复杂的生命作品。 这就是我们对编程的理解。在软件行业里,我们发现优秀程序员应有的素质是普遍缺乏的,这些素质,简单的讲,其实就是搭建创造生命作品的能力,比如如何做抽象建模,如何拆解,如何抓住特征,如何分层,如何迭代,这些都需要很强的空间感知能力和与复杂空间交互的能力。这些素质的欠缺,正是我们传统的编程教育的狭隘片面造成的。传统的编程教育缺乏对软件编程的核心本质的理解。Paracraft编程教育,正是要解决这个问题,实现真正完整的编程教育。正如Alan Kay所说,认为软件编程就是逻辑是普通人对编程的严重误解。 所以,编程就是搭建!一切从搭建开始!

Posted in selflearning, Software, Software Education, Uncategorized | Leave a comment

Paracraft, Software Education 3.0

关键词: Paracraft,编程教育,青少年编程教育,Logo小海龟编程语言,Scratch,终身幼儿园,Alan Kay,皮亚杰,建构主义教育,克里斯多夫亚历山大,生命中心,探索式学习,抽象建模,复杂系统,空间感知,空间思维,理解,创造,艺术与科技的交融,生命教育,生命发现,生命表达,走向未来的人工智能 简介 本文介绍编程教育的历史发展脉络,计算机软件先驱们对编程和编程教育的本质的思考,介绍Paracraft帕拉卡作为编程教育3.0的平台给编程教育带来的革命性改变,以及编程教育对教育的普遍意义,中国编程教育的现状和我们希望做出的改变。 注:本文行文高度浓缩,信息量很大,其中很多地方,一段话其实就是一篇文章。阅读时建议放慢速度,仔细体会前后句之间的逻辑。 编程教育 LOGO(小海龟)编程语言是编程教育的1.0,Seymour Papert发明的LOGO语言,承载了计算机先驱们关于编程教育的理念和期望。 图:Seymour Papert与LOGO语言 Scratch是编程教育的2.0,作为Seymour Papert的学生和思想的继承者,Mitch Resnick创造的Scratch以图形化编程的方式让编程对儿童更形象有趣,其提出的终身幼儿园让计算机先驱们关于编程教育的理念更容易为大众所理解。 图:Scratch创始人Mitch Resnick Paracraft则是编程教育的3.0。Paracraft的3D动画编程通过空间的搭建和丰富好玩的作品的创造,让青少年们真正接触到编程的核心思维,真正做到了丰富的玩,丰富的学,学会高效的思考,高效的学习。 编程教育的意义:学会编程,学会学习! 从1.0到3.0,其一以贯之的核心思想都是“学会编程,学会学习!”。这里包含了两个层面的理解: 1. 软件编程是思想的工具,是通过编程去操作个人对世界的感知。 1. 编程与学习有高度一致性。 软件的先驱,Small Talk的作者Alan Kay认为编程是去操作个人对世界的感知。注意,这里Alan用了感知这个词,而不是思想。用感知这个词是非常准确的,说明Alan是把编程看作是根本的思考,而不是一般的思考。在编程里,基于对世界的感知而形成的抽象模型是思考的基础。 图:Small Talk作者,软件先驱Alan Kay 小海龟(LOGO)编程语言的作者Seymour Papert,与Alan Kay有很多的合作,也有着非常类似的理解。他认为计算机或者软件编程的核心力量来自于两个方面,其一是表达(representational capacity)世界的能力(在Paracraft教育里,我们把这个能力理解为建模的能力),其二是即时改变这种表达的能力(responsiveness )(在Paracraft教育里,我们理解为验证模型,获得反馈,并改变模型的能力,也就是debug的过程)。 由此,我们看到编程的的两个特征,一是编程一定是基于理解的,再就是编程一定是导向创造的。 基于理解,是因为编程首先的就是要对某个领域进行抽象建模。抽象模型代表了我们对那个领域的理解。并且编程提供了做实验来验证这个理解或者说抽象模型的方式,可以快速获得反馈,形成更好的理解,进行改进。 另外,软件总是在创造的。软件创造的本质是对每一个新的领域进行数字化。数字化以后,就能够突破自然的物理局限,比如时空的局限,造成连接。所以新的软件总是带来根本的突破性的创新,让整个行业突然发生巨变。这就是为什么技术能够改变世界推动历史进步的背后的原因。比如我们看到的软件对商业的改变,对新闻的改变等等。这就是数字化进程。所以,我们看到今天软件无处不在,并且以更快的速度渗透到我们生活的方方面面,其实这背后在进行的就是数字化过程,其核心,这里再重复一遍,就是对更多的领域进行数字化建模,变成数字化的软件,人们可以通过软件去操作这些数字化模型,从而实现了人与人之间基于这些模型的连接与交互。 比如现在我们大家都熟悉的电商网站,各种商品被数字化,并且按照不同的类别展示在网站上,每个商品都有可以详细查看的细节,包括图片。还有其他客户的点评也被数字化并展示在相关商品下面。商家也被数字化,可以查看商家的其他商品,向商家咨询。自己购买下单的过程,被数字化成了订单,商家与买家通过订单进行各种交互,如退换货退款等等。买家下单后库存数减少。商家可以进货增加更多的商品。买家还可以查看自己所有的历史订单。这些是大家现在都已经很熟悉的电商网站。我们看到电商软件需要对商品买卖做数字化,这个数字化就是要对商品买卖有好的理解并且用模型表达出来,比如商家模型,买家模型,商品模型(如sku,名字,描述,库存等),订单模型等等。通过这些模型连接到各方的人,通过这些模型进行交互。 不光这些我们平常生活中比较熟悉的具体的实体可以被抽象建模,就是抽象的事物也可以被建模。比如电商订单里商家与买家间的交互,其中的退换货退款的申请和处理是相当复杂的过程。单看这些行为的结果,不过是改变订单的状态,也就是说改变订单这个抽象模型里的相关数值。一般来说对模型的值的改变,程序员都是直接封装成指令,但是因为这些交互非常复杂,并且这些交互的方式可能因为业务的更改而经常更改,由程序员直接写在代码里是很容易出错的,也不方便更新。面对这样的复杂性,虽然是抽象的对订单的交互行为,也可以进行抽象建模,用模型来规范和简化操作。 所以可以看到对于简单的系统,我们可以直接的用一些指令的顺序执行去完成,不太需要额外的抽象模型。但是对于复杂的系统,我们往往需要设计更多的抽象模型,这些抽象模型就成为新的生命中心,之前看似很复杂甚至杂乱无章的交互可以围绕这些生命中心来进行。因为这些生命中心的出现,如果用信息系统里熵的概念,可以说复杂的无序的系统变得更有序,实现了熵减,但我们更倾向于使用生命这个词,因为这并不是简单的一般人认为的“顺序”的有序。 … Continue reading

Posted in Software Education | Leave a comment

Software, Life, and Education

我们说软件的数字化,其实就是在数字化生命,是一个不断识别生命创造生命的过程。所有的我们能够识别的东西都可以数字化。所有的我们能够识别的东西都是生命。 软件就是生命,软件不断的创造生命。不光最终的软件或者产品是生命,软件开发中的建模本身就是识别生命创造生命的过程,建好的抽象模型就是数字化的生命,这个生命是动态的,还会继续的变化,根据实践中获得的反馈不断的改进,甚至演化出更多的层次。 所以软件编程可以说是一个识别我们物理世界或人类社会中的生命并将这些生命数字化的过程。软件就是数字化的生命。 那么什么是人工智能呢?人工智能是能够识别生命创造生命的数字化生命。这就是我认为人工智能应该有的定义。如今的人工智能还只是计算,谈不上对生命的识别。所以,人工智能的发展,首先应该是对生命或者说对生命中心的识别。有了这个最基础的能力,其他复杂的能力如解决问题能力,思辨能力,复杂系统诊断能力,学习能力,甚至创造能力都能发展出来。 我常说人生/每天只有三件事可做:玩,学习,创造!这就是生命的过程。可以说生命只做这三件事情。 正是因为软件编程就是这样的一个生命过程,我们可以看到编程其实就是一个玩,学习和创造的过程。编程中的抽象建模,就是要找到一个领域里的基本的积木或者说组件,让人们可以去搭建出来各种复杂的建筑或者其他的复杂生命体,如各种网页或者各种电商平台等等。找到基本的单元(学习),让人们可以玩起来(玩),用来搭建各种复杂的东西(创造),这个过程就正是学习,玩,和创造的过程。 真正的玩,一定是同时包含学习和创造的,我们小时候不管玩什么总是期待能学到新的东西,如果学不到了,我们就会换一个东西玩。我们在玩的过程中也总是在尝试去创造,能够让我们大量创造的东西我们会觉得太神奇太好玩了。编程正是这样一个不断的学习新东西,去创造好玩的大家都可以用来创造的东西。并且这是一个实践,交互,获得反馈,不断改进的循环迭代的过程。这就是生命的过程,和我们每一个人的成长是一样的,必然包含了玩,学习和创造! 所以,编程教育从来就不应该是只教编程的教育。程序员都需要大量的学习,学习许多不同的领域。并且编程里的学习,必须是非常高效的学习。编程教育就是要教大家如何学习,实际上是引导大家回归小时候每个人或者说每个生命都有的学习能力,也就是在玩中自然学习的能力,并通过编程对这样的学习形成抽象的系统的认识且能有意识的高效的运用。所以编程教育是重建人类教育的教育,编程教育必然是生命教育。下面这段我们还会继续阐述这点。 编程教育也是重建艺术与科技的桥梁的教育,因为软件编程就是艺术与科技的桥梁,是人文学科与自然学科的桥梁,是人类世界与物理世界的桥梁。由机械化生产和机器大生产催化的现代化进程,也是人类逐渐变得机械化和机器化的进程,为机器化大生产服务的教育尤其如此。 当你只需要在某个行业做操作性的工作时,你是不需要学习的,你只需要存储一些记忆,比机器高级一些,能够记住该行业很多的术语和操作步骤,成为高级的机器就可以了。我不是只指工厂里的工作,那个时代大部分的工作都是如此。但是软件编程这样的需要对人类生活和物理世界的方方面面进行数字化的工作,需要不断的进行新的领域的学习或者做更底层的抽象的理解,是需要很强的学习能力的。由软件催生出来的人类的数字化时代,创新成为重要的生产力来源,所以学习重新成为人类社会的重要需求。 被现代化教育人为割裂以方便人们记忆的分门别类的学科重新需要互联互通。艺术与科技也绝不是鸿沟,更不应该让科技发展压制艺术与人文的发展,那是非常危险的进程。通过生命空间的感知,我们让科技成为艺术和人文的一部分,已经停滞多年没有重大突破的科学也会重新迎来发展的春天。 人类逐渐机械化机器化,不光是我们的教育深受影响,我们的科研也深受其害。这一方面是因为现代化进程中形成的现代教育扼杀人的学习能力和创造能力(用剥夺玩的方式,以所谓的“学习”的名义。名为学习,实为培训,培训高级机器人。),连爱因斯坦也说很庆幸自己没有被现代教育给扼杀掉。当然,爱因斯坦受教育时还在现代教育形成之初。到了今天已经相当成形的现代教育可能已经把所有的爱因斯坦扼杀光了。另一方面是因为催生现代化的人类近代自然科学,在当时可谓是光芒四射,取得了巨大的突破。人文科学开始普遍的采用自然科学的研究方法,尤其是非常生硬的要把所谓的人的主观完全排除出去,这样其实也就把人类的感知也排除掉了。提出生命中心的克里斯多夫亚历山大指出笛卡尔的主客观分离是现代科学发展的基础,也造成了现代科学的缺陷。他提出生命中心,正是要重建主客观的正确关系,在新的科学里将它们重新统一起来。作为建筑师的亚历山大对软件编程的发展影响极大,他对软件业的期待也非常大,认为程序员是真正能够实现他的思想的人。其实现代科学的发端,来自于文艺复兴里对艺术和人文的全面的追求和探索,科学作为这个探索的有机组成也蓬勃发展起来。但人类的进程,资本逐利的力量,在现代化进程中,让艺术人文与科技逐渐割裂开来,对生命的感知被广泛的忽视,在各个不同的领域,我们都可以看到生命的感知是如何被忽略的。比如大家普遍的把数学,物理,甚至编程这样的学科认为是需要很强“逻辑思维能力”的学科,所以很多人会很快的认为自己不擅长这些学科是因为自己的“逻辑思维”不强,自己更擅长艺术方面的学习。我最近看一本满是逻辑思维题的书,翻下来发现所有的题其实都是建立在空间感知基础上的,空间感知解决了80%甚至90%以上程度,然后最后一点就是他们说的所谓的那种线性的“逻辑思维”。这本书讲解的解题答案基本上是最后那百分之十几的逻辑部分,搞得好像这个思维很难,但是如果被忽略的空间感知和思维被采用,所有的题目都很容易。这种艺术与科技的分裂,正是现代科学的发展逐渐变得停滞多年缺少重大突破的一个重要原因。改变这个状况,就需要重新把对生命的感知带回来,重新建立艺术与科技之间的桥梁。软件作为数字化的生命,作为关于生命中心的科学,正是被亚历山大赋予厚望的原因。科学的进一步的飞跃,必须回到文艺复兴时期那样的艺术与科学的充分融合,我们需要我们这个时代的诸多的达芬奇。 当然,诞生于机器化大生产时代的计算机科学自身也深受其害。发明最短路径算法的Dijkstra说:太糟糕了,我们取了个这么糟糕的名字,计算机科学,就好像把脑科学叫做刀子的科学一样。所以今天的大学的计算机科学专业培养出来的大量的是不合格的程序员。在软件日益进入我们生活的方方面面的今天,对优秀的程序员的需求是个巨大的缺口。大学计算机专业培养的学生大多只能像普通工人一样完成些比较小的既定的任务,探索能力,设计能力,创造能力都很差。大量的行业需要的产品设计,项目管理人员竟然不是计算机科学专业毕业的,几乎没有写过一点代码,遑论对软件有好的理解。现代化教育的学科割裂在软件行业也制造了无数的灾难。 所以,编程教育首先要改变的是自己。而改变的路,就是向更广大的普通人群普及编程的教育。编程教育本身应该是素质教育,在向普罗大众科普编程的过程中,我们才能改变它被命名为计算机科学以后带来的种种错误的公众形象,找到它真正的实质。首先,编程的学习可以很简单。 只要让人们能够玩起来。现在的编程学习是人为的被弄的太难了。其次,每个人都需要学习编程,但不是每个人都需要成为职业的程序员,每天大量的写代码。软件行业有大量的职位,产品,设计,管理,学点编程都能帮助你1000倍的更好的做这些事情。 我们前面说软件就是生命,催生了以大量创造生命为特征的人类数字化时代,从而带来了改变现代教育的社会基础时代基础,现代化进程中形成的教室教材教师三位一体的现代教育到了不得不改变的时候。本身需要大量学习的编程,通过编程教育,也将开启重建人类教育的进程。从改变编程教育开始,人类百年来的自主教育积累下来的丰富经验,将会被数字化,形成更为本质和系统的理解,这些软件会成为未来教育的基础设施。这些才是我们需要的教育软件!在编程教育中,人们将接触到学习的实质,如何通过抽象建模去学习,并将学习获得的理解变成可以用于搭建的好玩的抽象模型,甚至编程本身就是学习本身,通过编程去学习各个领域的知识,学科的隔阂都会被打破。 对生命大量数字化的编程,也让我们对生命有了更本质的理解。这些理解,会帮助我们做好编程教育,在理论上和软件基础上,成为未来教育的基石,帮助教育回归生命本身! 对生命大量数字化的编程,逐渐让人类走进以丰富生命为目标的时代。现在我们还只是在数字化普通的生命,还未能数字化出来能够识别生命的生命能够创造生命的生命,那将真正开启人类的人工智能时代。今天我们做的编程教育,就是在为之做的大量的准备工作。让教育回归生命,构建关于生命的理论体系,都是基础的准备工作。当人工智能能够识别生命创造生命时,人类创造生命的进程会大大加速,我们可以去探索宇宙的一切奥妙。作为逆熵而生的生命,从一开始我们就开始了对抗宇宙熵增的进程。这场抗争,发展到高级生命的人类的今天,似乎仍然是无可避免的走向失败的宿命,宇宙最终还是会毁灭的。除非我们创造生命的能力,已经可以创造宇宙!谁说那又是不可能的呢?也许生命能够逃避最终归于混沌的宿命,成功的完成对抗宇宙的使命!

Posted in selflearning, Software Education | Leave a comment

Paracraft for Self-Directed Education

This is the slides we use to give workshops at Hong Kong last December and this January. Here we share it with the public. You can view and download it. After downloading it, you can view the notes in it … Continue reading

Posted in selflearning, Software Education | Leave a comment