Category Archives: Software

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,名字,描述,库存等),订单模型等等。通过这些模型连接到各方的人,通过这些模型进行交互。 不光这些我们平常生活中比较熟悉的具体的实体可以被抽象建模,就是抽象的事物也可以被建模。比如电商订单里商家与买家间的交互,其中的退换货退款的申请和处理是相当复杂的过程。单看这些行为的结果,不过是改变订单的状态,也就是说改变订单这个抽象模型里的相关数值。一般来说对模型的值的改变,程序员都是直接封装成指令,但是因为这些交互非常复杂,并且这些交互的方式可能因为业务的更改而经常更改,由程序员直接写在代码里是很容易出错的,也不方便更新。面对这样的复杂性,虽然是抽象的对订单的交互行为,也可以进行抽象建模,用模型来规范和简化操作。 所以可以看到对于简单的系统,我们可以直接的用一些指令的顺序执行去完成,不太需要额外的抽象模型。但是对于复杂的系统,我们往往需要设计更多的抽象模型,这些抽象模型就成为新的生命中心,之前看似很复杂甚至杂乱无章的交互可以围绕这些生命中心来进行。因为这些生命中心的出现,如果用信息系统里熵的概念,可以说复杂的无序的系统变得更有序,实现了熵减,但我们更倾向于使用生命这个词,因为这并不是简单的一般人认为的“顺序”的有序。 在这里我们也可以看到面向复杂的系统,抽象模型是很好的处理复杂系统的方式。其实我们面对很多貌似复杂的问题时,空间思维,或者更核心的,空间感知,才是主要的我们解决问题的方法。所谓的逻辑思维只是空间感知后附带的部分,就好像编程里抽象模型建好后的各个指令(函数)内部的顺序逻辑一样。 软件编程里的KISS(Keep It Simple, Stupid!)原则,可以在这个基础上去理解。即当系统比较简单的时候,没有必要去额外的设计什么抽象模型,那会让软件没有必要的复杂。因为系统很简单,即使没有抽象模型作为交互的中心,人脑也可以直接快速的理解整个系统。或者有更好的简单的模型的时候,不要使用复杂的模型。 … Continue reading

Posted in Software | Leave a comment

From Agile to Life Centers (Draft)

Dijkstra said in the 70s that the irreversible damage is done once we have named this subject “Computer Science”. “…the topic became —primarily in the USA— prematurely known as “computer science” —which,actually is like referring to surgery as “knife science”— … Continue reading

Posted in Software | Leave a comment

Software is Unique

Software is the bridge btw the human world and the physical world. It is the bridge between human science and physical science. It is about giving ideas concrete forms. It is about digitization of life. It is about creating life. … Continue reading

Posted in Software | Leave a comment

Software Management

I am trying to summarize a short list of what I deem the most important for software management. Management is about the right people making decisions. It is about forming the trust and delegate chains. Emphasis on programming skills. Everyone … Continue reading

Posted in Software | Leave a comment

Inner Source Software Development Environment

Inner Source, basically is to bring Open Source inside a company. The Open Source software development platform and process allow programmers across the world to work on the same project at anytime, and produce very high quality software that is … Continue reading

Posted in Software | Leave a comment