2010年10月13日 星期三 12:38
推荐个很幽趣的文章
原文出处: http://blog.sina.com.cn/s/blog_5ef5148d0100fxy6.html
作者: http://www.zeuux.com/home/yuanliang/
---------------------------------
我们这个世界正在经历一个伟大的时代的转变。这个变化就是由大规模的物理产品的生产转换到
大量的社会产品的自发生产
。 我们知道中国正处在一个工业化的阶段。这个工业化,英国400年前完成,美国200年前完成。中国现在应该说还在工业化进程中,(以工业化和市场化导致大 规模的在市场上的交易,由于大规模交易的发生而导致社会的变化。)很多制度上仍待完善。这个工业化,就是大规模的物理产品的生产。
但美国正在经历一个时代的变化。在美国,已经没有什么制造业。它的生产已经不是大规模的物理产品的生产,而是社会产品的生产。所谓物理产品,就是吃的穿的等物理上的产品。
社会产品
是 精神上的产品,如音乐或社会需求。社会需求是多层次的,需要多种多样的社会产品的满足。在大规模物理产品的生产时代,只有有大规模需求的物品,才会被生 产,所以对社会各层次的需求的满足是极其缺乏的。然而随着互联网降低交易成本及连接大众,社会产品的生产处于上亿规模的爆炸式增长。我们将看到在精神领域 和社会需求领域,大量的新的“产品”将会被创造出来。这是一个非常大的空间,以前我们对这个领域的满足几乎是空白,而在社会产品的大生产时期,这个空白会 逐渐被填补。
比如说独立音乐家,艺术家,他们如何实现自己的艺术,同时能够靠自己的艺术很好的养活自己。他们如何与其他领域的艺术家自由合作。比如说音乐家和的摄影家 合作,直接制作唱片,在网上发布。比如说如何解决老年人的相对的孤独问题。或是如何扩大年轻人的交际范围,年轻人更容易找到志同道合的朋友一起追求共同的 事业。或者一个公司内部如何实现更好的合作或成为学习性的组织等等。这些都是社会需求。
而促使这些社会产品的有机生产成为可能的,则是软件和网络的发展。这里我们需要理解软件(和网络)的本质,理解软件的发展,我们才可以理解我们这个时代,并明白如何更好的去创造这个时代。
什么是软件?
计算机科学不是仅仅关于计算机的科学,它是
人类世界和物理世界的桥梁
。
Edsger Dijkstra 说这门学科因为被错误的贯以“计算机科学”的名字而使整个事业受到了极大的伤害。“计算机科学”的叫法,就象是把外科手术称作“刀子科学”一样。而这个概念深深的扎根于人们的意识里,人们认为“计算机科学”就是关于这些机器和它们的周边设备的科学。(“...the harm was done: the topic became known as ‘computer science’---which, actually, is like referring to surgery as ‘knife science’ --- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment”)
我在高考填志愿时碰到一个问题,就是要选择文科还是理科。大几岁的兄长问我是更喜欢人的世界,还是物理世界。(当时我想,人怎么可能只去关心物理世界,那 还不会疯掉吗?)我家是理工科背景,我也一直理工科成绩很好。但我自小对文科就有很大的兴趣,喜欢阅读。所以很难取舍。选了理科的很大一个原因是觉得文科 没有太大的必要去作为一门专业去学。上了大学,第一次上计算机课,第一次编程,却开始对计算机一见钟情。发现其实计算机科学是人类世界和物理世界的桥梁。 编程就是给你大脑中的思想给一个具体的现实的形式(Bill Joy said that software is to give ideas a concrete form.)。从我的阅读里,我知道这世界上几千年以前的人就有很好的想法,但是不能实现,因为历史条件的限制。现在社会里很多学文科的人有很多想法,但 都是在脑子里,没有经过检验。而编程,却是对思想最好的检验。你要把思想用数学的模式表达出来,要能在机器上运行,还要大家都喜欢用。这就是对思想最好的 检验。看着思想能够转化成代码在机器上跑,运行出结果来,真是非常美妙的事情。
Python 编程语言的创造者Guido说编程在未来将成为一个新的文盲的标准。因为编程是一个更好的表达思想的工具。一个成功的程序,就是一个人在某一领域的经验的 表达。通过使用和阅读程序,就是对这些经验的学习。所以相对于文字写作,编程是更好的表达,存储和分享知识的工具。所以Guido说要设计一个每一个人都 会用的编程语言。(对每一个人都能编程,应该有一个修正,就是如果你有某一领域的经验,并且能够逻辑的数学的表达你的思想,经过很短时间的训练,你就应该 能够编程,用程序来表达你在这一领域的专业知识。)现在我们可能还不能完全达到,但这应该成为软件工程人的目标。
如何设计好的编程语言能够很好的表达人的思想帮助解决人的问题,这里有很多可以讲。这里不展开。只简单的说,经过这么多年的实践,我们走了很长的路,取得 了很大的进展,慢慢学会了如何更好的用软件表达人的思想,以及如何处理人类社会上亿级的复杂度的问题。这条路,包括从汇编语言到对象化编程,到Agile Programming (敏捷编程)和Dynamic Languages。 开源运动和Web2.0也应该在这个背景下理解。
Agile Programming 和 Web2.0 可以说是编程人员经过数年的实践,摸索出如何写 与人密切相关的软件 的方法。虽然软件有主要是以操纵机械为目的的软件,但是因为软件是人类世界和物理世界的桥梁,软件的核心应该是解决社会问题,比如说教育问题。与人密切相关的软件有高度的复杂度,一直是软件人员的难题。这些难度有以下几点:
*一般来说,技术人员不懂社会问题(虽然我认为他们应该懂,而且他们的职业也要求他们懂。这大概就是Dijkstra说的已经造成的harm吧)
*即使是社会学家,对这些社会领域也不是真的理解。社会学科,在很大程度上是个笑话。比如说教育,看学术界的教育理论是浪费时间。所以软件人员在做这一类软件时,找不到好的理论作指导。他们唯一的办法是用软件去模索这些社会领域,尤其是通过让用户参与这个过程。
*社会领域很复杂。经常涉及到很多人的集体的问题。所以用户的参与就很重要。
*易变性,需要软件的弹性大,能够跟的上变化
*需要照顾到的人群很大,用户要求会有很多不同
*量大,需要有海量的内容才能检验软件的效果,比如说教育软件
总的来说,社会领域是充满着生命力的。所以社会软件(社会软件就是用软件去解决社会问题)必须是有机的,探索性的,有用户一起参与的。Agile Programming 和 Web2.0 就是经过多年实践摸索出来的行之有效的在这些社会领域编程的方法。它们包括的许许多多方面的技术和经验,许多人试图从其他一些角度去理解这些技术和经验。但你如果把他们理解成如何写与人密切相关的软件的方法就很容易理解。
Zeuux © 2024
京ICP备05028076号