C#语言实现类似这样的效果: 3.grams.flour

C#语言实现类似这样的效果:  3.grams.flour
参考 Martin Fowler《领域特定语言》第387页的代码,我做如下实现。
3.chi(), 三尺 转换为国际标准单位制米。

  1. namespace int_ext
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             System.Console.WriteLine( 3.chi() ); // output 0.999
  8.         }
  9.     }
  10.     public static class int_e
  11.     {
  12.         public static double chi(this int arg)
  13.         {
  14.             return arg * 0.333;
  15.         }
  16.     }
  17. }

闭包在DSL中的应用,领域特定语言的笔记

章节名:闭包
页码:第319页 2015-01-16 14:27:41

1.
各种语言称谓不同。
C语言可以用带有 void* 参数存储变量引用的 函数指针实现闭包。

2.问题的提出:用对象作为谓词,语法麻烦。

3.实例:C#2.0 & C#3.0

4.
总结闭包:
4.1 变量引用,而非复制,lexical scope;
4.2 lazy eval;
4.3 闭包的创建、保存、执行。

Fwd: 百度地图坐标偏移的纠正

百度地图坐标偏移的纠正

1. 问题

在使用百度地图开发时,输入经纬度 (用google earth或GPS设备得到) ,会发现坐标显示位置偏移。

比如,已知东北师范大学经纬度 125.3249352, 43.8593245。经纬度可以通过地理科学学院门口的雕塑上查到,可以通过google earth查到,可以通过能显示经纬度的GPS设备,或者用iphone在东北师大拍张照片,然后用带有识别exif的工具比如 google picasa查到。

在下述代码1中,我们发现,标记 125.3249352, 43.8593245 的位置不在东北师大,而是偏移到了南湖里。

-----代码1开始--------

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}
#l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;}
#r-result{height:100%;width:20%;float:left;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>
<title>baidu map demo</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
var map = new BMap.Map("allmap");            // 创建Map实例
var point = new BMap.Point(125.3249352, 43.8593245);    // 创建点坐标

var marker = new BMap.Marker (point);
marker.setTitle ("This is a Marker.");
map.addOverlay (marker);

map.centerAndZoom(point,15);                     // 初始化地图,设置中心点坐标和地图级别。
map.enableScrollWheelZoom();                            //启用滚轮放大缩小

map.addEventListener('click', function(e){
console.log(e.point);
});
</script>

-----代码1结束--------

对于坐标偏移,百度的官方解释是 国家要求 + 百度的二次加密。百度支持把其
他坐标 (google的, gps设备的)转换为百度地图的坐标,这样显示在百度地图上
的标记位置就不偏移了。

2. 解决

使用下述代码,在百度地图上,标记点的位置是正确的。

下述代码抄自网络并修改,最初来源已不可考。谢谢原作者。

代码2在代码1的基础上做了修改,调用了百度的API[http://api.map.baidu.com/api?v=1.4],及[convertor.js]即代码3。

用到了 javascript的闭包和回调。

------代码2开始------

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}
#l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;}
#r-result{height:100%;width:20%;float:left;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>
<script type="text/javascript" src="convertor.js"></script>
<title>baidu map demo</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>

<script type="text/javascript">

var map = new BMap.Map("allmap");            // 创建Map实例

var point = new BMap.Point(125.3249352, 43.8593245);    // 创建点坐标
BMap.Convertor.translate(point, 0, function(point){

var marker = new BMap.Marker (point);
marker.setTitle ("This is a marker");
map.addOverlay (marker);

map.centerAndZoom(point,15);                     // 初始化地图,设置中心点坐标和地图级别。
map.enableScrollWheelZoom();                            //启用滚轮放大缩小

map.addEventListener('click', function(e){
console.log(e.point);})

});
;
</script>

------代码2结束------

------代码3开始------

//2011-7-25
(function(){        //闭包
function load_script(xyUrl, callback){
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = xyUrl;
//借鉴了jQuery的script跨域方法
script.onload = script.onreadystatechange = function(){
if((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){
callback && callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if ( head && script.parentNode ) {
head.removeChild( script );
}
}
};
// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
head.insertBefore( script, head.firstChild );
}
function translate(point,type,callback){
var callbackName = 'cbk_' + Math.round(Math.random() * 10000);    //随机函数名
var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from="+ type + "&to=4&x=" + point.lng + "&y=" + point.lat + "&callback=BMap.Convertor." + callbackName;
//动态创建script标签
load_script(xyUrl);
BMap.Convertor[callbackName] = function(xyResult){
delete BMap.Convertor[callbackName];    //调用完需要删除改函数
var point = new BMap.Point(xyResult.x, xyResult.y);
callback && callback(point);
}
}

window.BMap = window.BMap || {};
BMap.Convertor = {};
BMap.Convertor.translate = translate;
})();

------代码3结束------

4. 完整代码在[http://download.csdn.net/detail/younggift/8334749]。

参考:
1. [http://www.cnblogs.com/funnydavid/archive/2011/03/02/1969244.html]

2. 百度的解释
[http://developer.baidu.com/map/question.htm]
百度坐标为何有偏移?

国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。

如何从其他体系的坐标迁移到百度坐标?

开发者可以使用坐标转换接口进行转换。JavaScript API 、Android SDK、iOS SDK的开发用户可直接调用相应方法进行转换。

3. 百度的手册
[http://developer.baidu.com/map/changeposition.htm]

------------------------------------------------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

网页内联图片 html inline image

不是像这样,

<img src="http://www.nenu.edu.cn/xiaohui.png">

上述代码中,图片是独立于HTML而存在于另一个URL的。

内联是像下面这样,图片是HTML的一部分,这样适合用代码生成,或者javascript改写。

把下面的代码保存为 html 文档,用浏览器打开,可见效果。

参考:

[http://stackoverflow.com/questions/1207190/embedding-base64-images]

[http://www.bigfastblog.com/embed-base64-encoded-images-inline-in-html]

[http://base64image.org/]

-----代码开始-------------

<img alt="Embedded Image" src="data:image/png;base64,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" />

-----代码开始-------------

------------------------------------------------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

发自我的 iPhone

发自我的 iPhone

Fwd: 构建之法,运用之妙,存乎一心:读邹欣《构建之法》

构建之法,运用之妙,存乎一心

1. 构建之法,存乎一心

史学理论与史学史,是把历史自己作为研究对象的学科,前者讨论历史本身所研究的内容,后者讨论历史研究本身的历史。这种对于抽象的抽象的研究,正符合计算 机领域 meta... 这样的思想。当年 xml 刚出来时,不少计算机和图书情报的大学生照本宣科地提到,xml是关于数据的数据,是 meta-data。

史学理论与史学史专家周老师在谈到史学理论的时候说到 (大意) ,学习史学理论与史学史,必先有历史的修养,要努力了解更多的史实,也就是先了解历史所研究的对象,然后才能涉及到以历史本身作为研究。

我想,周老师的意思是,没有"肤浅的"认识之前,先不要着急讲深刻。

一个例子事实与推论的例子。在网上在现实生活中,都有人跟我提到过,我国人民的善良与热爱和平;作为旁证,中国自古以来就没有杀战俘和屠城这样的事。这时,我愿意以一个建议结束讨论,就是请他去读一下五代十国那段历史。如果连基本史实都还缺乏,遽然得一结论过于草率了。

在讲授软件工程类课程时,我也面临这样的难题,正如《构建之法》作者所说,是同学们对此毫无感觉,既不觉得有用,也不觉得有趣。这大致就是夏虫不可语冰的 意思。很多同学在学到软件工程的时候,代码量总计可能不到1000行,单一项目最大代码量不到200行。如果去除语言类或算法课作业,代码量就更少得可 怜。

软件工程所讨论的是当代码量巨大、当涉及人数众多、当项目需求多变时所要解决的问题。而同学们在学习时根本就没有这样的需求。200来行的小程序,没有软件工程思想,也能完成,甚至更快捷。

所以,《构建之法》的作者在教学中,要求学生完成大量的代码,让亲身的经验证实软件工程的手段是必要和有效的。除此以外,别无他法。

在教学中,可能最大的问题还不是学生积累的代码量小,而是教师也是如此。作为实践类课程的教师,你又写过几行代码,读过几本软件工程著作呢。

我的偶像YMH曾经考虑过一个问题,算法课该让哪些老师上呢。我提议:这个好办,找几道ACM题,凡是申请上算法课的老师在线答题,谁答得好谁上。偶像说,那有些老师不会编程序啊。我说:不会编程上什么算法课。偶像大笑。

我坚信,一个优秀的将军,也许并非战场上最勇猛的那个战士,但是至少是合格的士兵。软件工程教学,教师须是身经百战,学生须亲力亲为,否则,玩具性质的项目、几行代码的实验课、走走过场不关心实用的工程,都是耍流氓而已。

实践类课程,理论如何应用,只能以真实案例呈现 (如果需要规模,那就应该有规模),而无法用形成上学的方式推演--否则就意味着工程可以自动化,无须人的创造性参与。运用之妙,存乎一心。

2. 阵而后战,兵法之常

如果工程思想的教学只能依靠师傅带徒弟,口口相授,那么教材和经典著作还有什么意义呢?

如果是这样,面对软件工程书,明白的就是明白了,不明白的还是不明白。已经受过苦的人,有过相同经历的,能会心一笑;没吃过苦没糟过罪的,仍然鲁莽行事, 事后一拍大腿,"哎呀邹欣已经说过这事儿啦,我当时怎么没明白呢,古人诚不我欺啊"。事实上,即使事后诸葛亮,也是亡羊补牢,尤未晚也。我们有多少知识是 本科的时候学了,毕业以后多年才发现,原来在某个意想不到的地方才能用到。与课本相印证,能告诉你,你的失败并非偶然,你的境遇并不孤独,未避免同样的悲 剧再次发生打下很好的基础。

它还会告诉你,所经历的痛苦,可以用更形式化的方法,或者"最佳实践"得以解决。这比你自己另搞一套,闭门苦苦钻研十年,一抬头发现古人早完成了要好得 多。我本科的时候写过一个程序,打印出来,把打印纸抻开,比我还长。用的语言是 BASIC,用行号编辑出来的。随着程序的生长,我越来越为"某些功能在好几个地方用到"感到痛苦--我用的那版本里或者我当时的知识里,还没有函数和过 程。后来我终于艰难地完成了那个程序,在读一本1980年代的书的时候,发现了"结构化程序设计"思想。如遇故人,如蒙大赦。没有先前的经验,固然不会让 我体验这么深刻,如果没有读到前人的总结,我们就不过是一次次重复失败而已。

我们一生,一共也完成不了几个项目。以岳飞之善战,据统计,他一生经历不过几十战役。他的经验或者理论,想来大多是熟读孙子兵法和分析别人的战例得来的。

所以说,阵而后战,兵法之常。前人的总结,现有的理论,适合的技术,优秀的paradigm,能给我们一定程度的行为约束,帮助我们更好地解决问题。技术犹刀也,是我们手臂的延伸,而且那上面还附着前辈杀手的灵魂。

3. 武穆遗书 有多厚

教师在选择教材时,除了受自己学识所限,要考虑学生的专业基础预备知识,还有一个有些无厘头的压力。

就是教材的价格。

领导们说,教材太贵了学生买不起,教材太厚了学生就不看了。图书馆采购的时候,鲜有优秀的国外教材和经典著作,而多是高校教师混成果用的薄册子。问为什么不多买些 o'reilly 这样的优秀作品呢?答:太贵。

同学们也不怎么买书,原因也是太贵。对于抱怨书贵的,侯捷颇有微词,书是用纸张还是用知识来衡量价值。最近,我还看到一个说法,深以为然:你的第一份工作 的薪水,与你大学期间所买的技术书总价相抵。其实一本书能有多贵,一场电影,一顿大餐?这些都是过眼云烟,而好的知识,越早了解,受益时间越长,在你剩余 的生命之中全都可以发挥作用。请邹欣讲一门课程需要多少钱,请K&R当面给你讲讲C语言,请SICP作者给你剖析一下lambda算子构造邱奇数 需要多少钱?上网打游戏感受快乐,你的青春值多少钱?

软件工程经典教材,《软件工程:实践者的研究方法》,还有《代码大全》,都非常厚,《构建之法》相对来说薄多了。我想,这是作者的一个妥协的选择。

作为大学本科的软件工程,不如叫做软件工程导论更合适,因为受课时和此时学生的经验所限,能涉及的知识都是蜻蜓点水,不得深入。导论类课程,到底是应该罗 列完整的概念,这些名词学生们都听说了,从而"知识完整性"得到保证,还是浅显地了解其中的思想 (也许用了完全不同的名字),还是把徒弟领进门,让有兴趣的同学自行继续深入,没兴趣的同学就此止步,从思路上得到此许受益。这种争议见仁见智。

不过如果我是一个学生,我更愿意像读小说或者看电影一样,看到一些故事,以后用于类比,作为模板;而不希望接受高大上抽象的概念,如果能用非常好使,但是正如初高中背政治题,答案很清楚,唯独不知识该用在哪个问题上。

如果教材还要再薄一些,我希望它们是科幻小说。我根本不关心这些方法如何具体实施,理论依据是什么,你就领我去看它绚烂的效果,让我亲眼见到它好使得不得 了。剩下的,当问题横在我的面前,解决问题的迫切会让学习的艰难、参考书搜集、教材的价格、案例什么的,所有这一切困难迎刃而解,不复存在。

这种效果的反面也正是现实,作为教师,你都不会编码,你都不会用软件工程的这些方法,怎么说服你的学生相信你学习你。所谓 learn from, 学生所学习的,不是教师的知识,而正是教师本人。

4. 题外话

从瀚哥开始,每届新同学都会问我一个问题:老师,你为什么这么关心项目的结果。

我知道,言下之意也包括,你为什么不更关心对我们的教学。

因为,我们以真实工程作为教学的工具。这是因为,没有人乐意做假的工程,仅仅为了学习目前还不确定是否有效的知识。这意味着,真实的工程必须存在,才可能 用于教学,而真实工程不同于假的实验的是,如果它失败一次,以后就不会再有真实的工程了。也就不会再有真实的工程用于教学。

训练猎人的时候,要求师傅把猎物捆个结实,为了防止学徒害怕或怜悯它挣扎,还要给猎物打上麻醉剂,再给学徒穿上防磕碰的盔甲防溅血的服装,你为什么不再戴上护心镜和老花镜躲到绣楼里去。

所以,当你要求或接受真实工程训练的时候,你就给了我你的承诺。我把武器交给你,你要像我保护你那样保护你。无论这个承诺有多么的小,一旦你说出来,它就是我的,不再属于你;我有权放弃我的权利,你没有权利背弃你的诺言。

你,你们,背弃对我的诺言,我非常失望。我知道你并不在乎我失望与否,我也并不在乎你给我造成的损失,我在乎的是我所面对的我所关心的,是这样的世界。如果承诺不可信赖,未来还有什么可以期待。

------------------------------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

--

----
杨贵福
计算机科学与信息技术学院

东北师范大学
信息化管理与规划办公室
东北师范大学
--
Sincerely,
YANG Guifu
School of Computer Science and Information Technology
Northeast Normal University
Changchun, P.R.China

重剑无锋,大巧不工。

无不大工。

构建之法,运用之妙,存乎一心 读邹欣《构建之法》

构建之法,运用之妙,存乎一心

1. 构建之法,存乎一心

史学理论与史学史,是把历史自己作为研究对象的学科,前者讨论历史本身所研究的内容,后者讨论历史研究本身的历史。这种对于抽象的抽象的研究,正符合计算 机领域 meta... 这样的思想。当年 xml 刚出来时,不少计算机和图书情报的大学生照本宣科地提到,xml是关于数据的数据,是 meta-data。

史学理论与史学史专家周老师在谈到史学理论的时候说到 (大意) ,学习史学理论与史学史,必先有历史的修养,要努力了解更多的史实,也就是先了解历史所研究的对象,然后才能涉及到以历史本身作为研究。

我想,周老师的意思是,没有"肤浅的"认识之前,先不要着急讲深刻。

一个例子事实与推论的例子。在网上在现实生活中,都有人跟我提到过,我国人民的善良与热爱和平;作为旁证,中国自古以来就没有杀战俘和屠城这样的事。这时,我愿意以一个建议结束讨论,就是请他去读一下五代十国那段历史。如果连基本史实都还缺乏,遽然得一结论过于草率了。

在讲授软件工程类课程时,我也面临这样的难题,正如《构建之法》作者所说,是同学们对此毫无感觉,既不觉得有用,也不觉得有趣。这大致就是夏虫不可语冰的 意思。很多同学在学到软件工程的时候,代码量总计可能不到1000行,单一项目最大代码量不到200行。如果去除语言类或算法课作业,代码量就更少得可 怜。

软件工程所讨论的是当代码量巨大、当涉及人数众多、当项目需求多变时所要解决的问题。而同学们在学习时根本就没有这样的需求。200来行的小程序,没有软件工程思想,也能完成,甚至更快捷。

所以,《构建之法》的作者在教学中,要求学生完成大量的代码,让亲身的经验证实软件工程的手段是必要和有效的。除此以外,别无他法。

在教学中,可能最大的问题还不是学生积累的代码量小,而是教师也是如此。作为实践类课程的教师,你又写过几行代码,读过几本软件工程著作呢。

我的偶像YMH曾经考虑过一个问题,算法课该让哪些老师上呢。我提议:这个好办,找几道ACM题,凡是申请上算法课的老师在线答题,谁答得好谁上。偶像说,那有些老师不会编程序啊。我说:不会编程上什么算法课。偶像大笑。

我坚信,一个优秀的将军,也许并非战场上最勇猛的那个战士,但是至少是合格的士兵。软件工程教学,教师须是身经百战,学生须亲力亲为,否则,玩具性质的项目、几行代码的实验课、走走过场不关心实用的工程,都是耍流氓而已。

实践类课程,理论如何应用,只能以真实案例呈现 (如果需要规模,那就应该有规模),而无法用形成上学的方式推演--否则就意味着工程可以自动化,无须人的创造性参与。运用之妙,存乎一心。

2. 阵而后战,兵法之常

如果工程思想的教学只能依靠师傅带徒弟,口口相授,那么教材和经典著作还有什么意义呢?

如果是这样,面对软件工程书,明白的就是明白了,不明白的还是不明白。已经受过苦的人,有过相同经历的,能会心一笑;没吃过苦没糟过罪的,仍然鲁莽行事, 事后一拍大腿,"哎呀邹欣已经说过这事儿啦,我当时怎么没明白呢,古人诚不我欺啊"。事实上,即使事后诸葛亮,也是亡羊补牢,尤未晚也。我们有多少知识是 本科的时候学了,毕业以后多年才发现,原来在某个意想不到的地方才能用到。与课本相印证,能告诉你,你的失败并非偶然,你的境遇并不孤独,未避免同样的悲 剧再次发生打下很好的基础。

它还会告诉你,所经历的痛苦,可以用更形式化的方法,或者"最佳实践"得以解决。这比你自己另搞一套,闭门苦苦钻研十年,一抬头发现古人早完成了要好得 多。我本科的时候写过一个程序,打印出来,把打印纸抻开,比我还长。用的语言是 BASIC,用行号编辑出来的。随着程序的生长,我越来越为"某些功能在好几个地方用到"感到痛苦--我用的那版本里或者我当时的知识里,还没有函数和过 程。后来我终于艰难地完成了那个程序,在读一本1980年代的书的时候,发现了"结构化程序设计"思想。如遇故人,如蒙大赦。没有先前的经验,固然不会让 我体验这么深刻,如果没有读到前人的总结,我们就不过是一次次重复失败而已。

我们一生,一共也完成不了几个项目。以岳飞之善战,据统计,他一生经历不过几十战役。他的经验或者理论,想来大多是熟读孙子兵法和分析别人的战例得来的。

所以说,阵而后战,兵法之常。前人的总结,现有的理论,适合的技术,优秀的paradigm,能给我们一定程度的行为约束,帮助我们更好地解决问题。技术犹刀也,是我们手臂的延伸,而且那上面还附着前辈杀手的灵魂。

3. 武穆遗书 有多厚

教师在选择教材时,除了受自己学识所限,要考虑学生的专业基础预备知识,还有一个有些无厘头的压力。

就是教材的价格。

领导们说,教材太贵了学生买不起,教材太厚了学生就不看了。图书馆采购的时候,鲜有优秀的国外教材和经典著作,而多是高校教师混成果用的薄册子。问为什么不多买些 o'reilly 这样的优秀作品呢?答:太贵。

同学们也不怎么买书,原因也是太贵。对于抱怨书贵的,侯捷颇有微词,书是用纸张还是用知识来衡量价值。最近,我还看到一个说法,深以为然:你的第一份工作 的薪水,与你大学期间所买的技术书总价相抵。其实一本书能有多贵,一场电影,一顿大餐?这些都是过眼云烟,而好的知识,越早了解,受益时间越长,在你剩余 的生命之中全都可以发挥作用。请邹欣讲一门课程需要多少钱,请K&R当面给你讲讲C语言,请SICP作者给你剖析一下lambda算子构造邱奇数 需要多少钱?上网打游戏感受快乐,你的青春值多少钱?

软件工程经典教材,《软件工程:实践者的研究方法》,还有《代码大全》,都非常厚,《构建之法》相对来说薄多了。我想,这是作者的一个妥协的选择。

作为大学本科的软件工程,不如叫做软件工程导论更合适,因为受课时和此时学生的经验所限,能涉及的知识都是蜻蜓点水,不得深入。导论类课程,到底是应该罗 列完整的概念,这些名词学生们都听说了,从而"知识完整性"得到保证,还是浅显地了解其中的思想 (也许用了完全不同的名字),还是把徒弟领进门,让有兴趣的同学自行继续深入,没兴趣的同学就此止步,从思路上得到此许受益。这种争议见仁见智。

不过如果我是一个学生,我更愿意像读小说或者看电影一样,看到一些故事,以后用于类比,作为模板;而不希望接受高大上抽象的概念,如果能用非常好使,但是正如初高中背政治题,答案很清楚,唯独不知识该用在哪个问题上。

如果教材还要再薄一些,我希望它们是科幻小说。我根本不关心这些方法如何具体实施,理论依据是什么,你就领我去看它绚烂的效果,让我亲眼见到它好使得不得 了。剩下的,当问题横在我的面前,解决问题的迫切会让学习的艰难、参考书搜集、教材的价格、案例什么的,所有这一切困难迎刃而解,不复存在。

这种效果的反面也正是现实,作为教师,你都不会编码,你都不会用软件工程的这些方法,怎么说服你的学生相信你学习你。所谓 learn from, 学生所学习的,不是教师的知识,而正是教师本人。

4. 题外话

从瀚哥开始,每届新同学都会问我一个问题:老师,你为什么这么关心项目的结果。

我知道,言下之意也包括,你为什么不更关心对我们的教学。

因为,我们以真实工程作为教学的工具。这是因为,没有人乐意做假的工程,仅仅为了学习目前还不确定是否有效的知识。这意味着,真实的工程必须存在,才可能 用于教学,而真实工程不同于假的实验的是,如果它失败一次,以后就不会再有真实的工程了。也就不会再有真实的工程用于教学。

训练猎人的时候,要求师傅把猎物捆个结实,为了防止学徒害怕或怜悯它挣扎,还要给猎物打上麻醉剂,再给学徒穿上防磕碰的盔甲防溅血的服装,你为什么不再戴上护心镜和老花镜躲到绣楼里去。

所以,当你要求或接受真实工程训练的时候,你就给了我你的承诺。我把武器交给你,你要像我保护你那样保护你。无论这个承诺有多么的小,一旦你说出来,它就是我的,不再属于你;我有权放弃我的权利,你没有权利背弃你的诺言。

你,你们,背弃对我的诺言,我非常失望。我知道你并不在乎我失望与否,我也并不在乎你给我造成的损失,我在乎的是我所面对的我所关心的,是这样的世界。如果承诺不可信赖,未来还有什么可以期待。

------------------------------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

发自我的 iPhone

八卦一下

八卦一下
计算的本质[http://book.douban.com/subject/26148763/]
书中提到了几种与图灵机等价的模型, lambda算子、部分递归函数、SKI组合子、Iota、标签系统、循环标签系统、Conway生命游戏、rule 110、Wolfram的2,3图灵机。

部分递归函数,可能就是维基百科在递归函数词条中提到的"在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。"

Wolfram,就是著名的Mathematica的发明者之一。他的另一个成果是 Wolfram Alpha 计算型知识引擎。

数理逻辑学家、哲学家、人工智能先驱王浩(1921~1995),我记得也发表过一个图灵机等价模型,似乎是翻纸牌的,可能叫做Tile系统。可 惜似乎由于有位法官同名,在维基百科上的王浩词条不能浏览,而百度百科语焉不详。

王 浩研究自动定理证明,用早期的IBM计算机,几分钟就证明了罗素花十年心血才在其名著《数学原理》中证明的220条命题。王浩是历史学家何兆武先 生的同学 和好朋友,他俩都研究过 哥德尔-艾舍尔-巴赫 这本书。记得何兆武先生有张照片,背景正是书架,书名都被遮挡起来,除了这本很厚的 哥德尔-艾舍尔-巴赫。这本书讨论的内容就包括图灵机,也就是人的计算能力的限制。他们同样也都对罗素感兴趣,刚刚提到王浩证明了数学原理中的命 题,何兆 武先生则翻译了罗素的《西方史学史》上卷,对罗素的史学观也有专门论述。

王浩的工作,维基百科英文上查到了,从图灵机英文词条找过去,在[http://en.wikipedia.org/wiki /Wang_B-machine]提到: Hao Wang (1957), A Variant to Turing's Theory of Computing Machines, JACM (Journal of the Association for Computing Machinery) 4; 63-92. Presented at the meeting of the Association, June 23-25, 1954.

我反对你,正是对你的支持

最近的照片 [http://www.douban.com/photos/album/145506893/],

[http://www.douban.com/photos/album/146651109/],

[http://www.douban.com/photos/album/145962336/].

1.反对并非不支持

昨天中午,有同事要求我评论他们的技术方案。我给出了反对意见,认为不够完善。我理解对于我的负面意见他们的激动,如同XL同学所说,人家风尘仆仆地来了,一腔热情,可能满希望得到肯定,甚至赞叹,结果一盆冷水迎头浇下来。

有的同学可能会说,你委婉一点呗。我试过了,我真的试过了。事关利益或者决策,委婉也不过就是那么回事,利刃杀还是钝器砸还是湿毛巾捂。套一句话,大家都 是成年人,谁还看不出来背后的否定意味吗?或者说,我对那种说法深恶痛绝,类似于“你真的是个好人,但是……”有老师对我说过,“你真的是个好学生,但是 你考我这,我真就是没有名额。”我很诚肯地说,“老师,这个意思就是我不是个足够好的学生,我明白。”这很刺激我,刺激我的,并非我不是好学生这个事实。

一盆冷水,是因为,这是我所理解的,在工作中我们的合作关系就是如此。

同事所希望的,是我的认同;而技术讨论中,我们的认同唯一地只受到自然科学定律的限制。或者说,受到我所认识到的真理的限制。我可能是错的,但是我所能表述的就是――我所学习的知识和训练――不认同你的观点。

但是,这种反对并非恶意。标题换个说法,可能更确切一些: 我对你的反对,是我支持你的方式。

在工程、项目、工作中,对个人的认同从来不是其中的一部分。在这个问题上,只有观点,只有事件,没有人情。

我们往往故意或无意地把对我们的认同与对我们的善意混为一团,对 真假、是非、里外视为同一。真假,是命题或观点或判断是否符合符合事实,与道德和支持哪一方无关。这里的“支持”,特指“我挺你”这个意味,包括我乐意在 你身上花钱,我喜欢在你上舞台或进球的时候鼓掌,而不是“我与你的观点一致”。虚无主义认为,命题无所谓真假,我们可能在将来发现我们此刻认定的真假不符 合后来发现的事实。这并不矛盾。真假,也可以理解为“你所认为的真假”,或者说,我们的观点就是如此,无关对错,不说谎,不曲意逢仰。是非,指的是行为或 观点是否符合公众道德,或者你的道德观,这与我和你是不是一伙(现在流行说一国?)没有关系。我帮助你,可能只是选择和你一起作恶,并不一定我就认同你的 价值观;考试的时候老师抓了学生作弊,不见得是老师就认为你这么做“坏”,可能只是履行他的职责。真假、是非、里外,差别如此,混为一淡的话,我们就会把 不支持我们的,视为“恶”,或者视为“假”。

这种程度的区分,有位劝学生不要早恋的老师解说得非常透彻。他说,“你可以喜欢男生A的帅,但是你不能喜欢帅的男生A”。他把男生A与他的帅视为不同。

当我引用这段话的时候,你是不是隐隐地觉得我反对早恋?请注意,我并没有一点赞同或反对这位老师观点的意思,我只是说,他对于“区分”这种事,看得很透。至于我对于早恋的观点,跟这个话题根本毫不相关。

2.反对以外,还能有更强的恶意吗?

有的同学可能会问出这样的问题,除了反对,你还能(现在流行说 还敢?)表现得恶意一些吗?

当然。爱的反面不是恨,而是冷漠。

我给出反对意见,动机是积极的,是希望他们的方案/事业有更好的结果。我的学生们在我和讨论的时候,下手从来都非常很,不留余地的证明我是错的,并以挑战 成功而高兴。我从不觉得这是一种冒犯,认为理应如此,并为此感到欣慰――他们既对自己的成长负责,也对项目本身负责。

现在,暂时抛开我给同事反对意见这回事,来看看还可以有什么样的恶意。

一次我在GMS超市购物,找不到猫粮,问哪个员工哪个不知道,找了半个小时。终于买到以后,我在出口要求提意见,记录的小伙儿说,你是打错投诉哪位员工 吗?我说,不是,我只想给出意见,你们居然没人知道货位。小伙儿很为难,你不投诉谁,我怎么记呢。我说,我来。我记道: 我投诉经理,他没有对员工足够训练。

事实上,我也不想投诉经理(或者体制),错误就是错误,我只想指出这一点,至于谁该为这个错误负责,那不是我一个顾客乐于关心的。

讲这个故事的真正目的,并不是想说要把人和事分开,而是――冷漠。我一点也不关心某个员工,不关心他的成长,也不关心错误对他的未来/进步/评价所带来的影响。

我在China-pub购书,送来时候包装已经裂了三处,箱子敞着口儿,最大的裂口里,三四本书脊暴露在外。我只在微信朋友圈发了照片,提醒同学们小心。我没有告诉China-pub。

我甚至猜想如果告诉China-pub的话,客服可能会解释“这是因为物流野蛮装卸”“这是因为双十一到了”,甚至可能会说“不可能啊,从我们这出货的时候挺好的啊”。不需要解释,我根本不关心为什么会这样,这不是一个顾客的责任,顾客不需要了解这种知识。

我能设想的最好态度是,“我给你把这一单免费了吧”。不需要,我嫌提供账号收钱麻烦。

我单纯地,都不愿意花费哪怕一秒钟通知China-pub。因为我不关心这个企业的成长和它的未来。它不再值得我关心了。

我愿意花上半小时一小时写这些给你看,但是我不愿意花费一秒钟向China-pub吐槽。这就是冷漠。冷漠,是比“不支持”更强烈的“反对”。这里的支持,不是“我挺你”的意思,而是我愿意为你期待地正面效果而努力。

与“我挺你”相反的,不是“反对”,而是我连反对都懒得吱一声。

3. 你怎么知道“反对”是我期待的,也许,我只是寻求赞同。你以批评为乐吗?

可能有的同学会说,“谁让你发表意见来着,我根本不乐意听,我要做自己!”

当然,你的成长,是你自己的,我根本不应该给出意见,除非你问我。而我的同事,他们邀请甚至要求我发表意见,所以我才说了。我的行为,与360那种不请自来是不同的。

有的同学可能会说,“我邀请要求的是认同啊。”

答案是,你找错人了。

网上现在有卖虚拟女朋友/男朋友业务的。他(她)们可以做到总是在线,网聊中总是捧着你,总是赞同你――因为你付钱了。你付钱买到的就是这个服务,“唉 呀,你真是受委屈了啊,这个社会你的单位你的同事你的同学你的老师对你太残酷了呢。”“你这样,真让人心疼了呢”“XXX了呢。”

有的同学可能会说,“你是说…让我付钱吗?”

你当然可以选择付钱,但是我不出售这些,你找错人了。这就是刚刚的答案。我不出售赞同。我只能赞同我赞同的观点,而不通被收买赞同你赞同的,除非刚好咱们一路。

当你诉求的时候,请略去苦心、情绪等,问问你自己,你想要的

是奴仆,还是将军,是合作伙伴,还是利用对象。

你想从我这里得到的,不一定与我想给的一样。这个时候,你只能由得我,按我给的接受, 或者拒绝,但是你在我这里没有别的选择。此时,合作的方式由我决定的原因是,我并未期待与你合作,我的直接选择就是那不合作好了。

我几年前对同学们(同学们,一般地表述是研究生或学生们。学生这个词,现在被毁得很厉害,所以我平时就称他们为同学们。为与我的同窗相区别,特此说明)说 过,我们不是因为感情而聚在一起,而是各有目的。我明确地对不止一个同学说过,我不爱你们,不像有的老师,她爱所有的同学。“我不爱你们”,这个说法不确 切,应该说,“我没有预期会对同学们产生感情,如果后来我们成为很好地朋友,那是因为时间,而不是我原来就这样计划。”

我没有计划过合作。所以,如果不能接受我指定的合作方式,那就算了。你很忙,我也有的是活儿,扯啥呢这是。

有想得到赞同的,你就得无懈可击。只有我赞同的我才会赞同,所以我的评论才有价值,才值钱。我珍惜由此得到的大家对我的评论的信任。

有个牙医,她失去了我的信任。因为她说,“快了快了马上马上”,结果不是这样。还有,“不疼不疼”,你看“是不是也不那么疼”。我当时心想的就是,你是在利用心理暗示和语言技术令我认同吗,还是在考验我的独立判断能力。

我并不见得按你的期待行事,给钱也不行。事涉自由,非常重要,不能妥协。与研究生同学们的第一次见面其实很有意思。有人说,我想学技术,我一般答,那你得自己练习;有想学知识的,我一般答,那你得自己看。

那我能为同学们提供什么呢?今天,在一顿技术讨论后,我对齐同学说: 其实,我还希望你能明确答复明白了另一个问题,关于责任划分的。这才是你跟随我所能学习到的最重要的东西――技术反倒是其次。我们能一起学习和做项目的时 间很有限,不过几年,希望你能带着对这种观点的了解、就像带着更成熟的技术一样,去过离开我以后的生活和工作。(不是接受,而是了解)

如果我能给你的,恰恰如同你所期待,或者你可以期待到,你可以买个以前轿车里放的那种会点头的绒毛小狗,它很可爱,一捅就点头。或者,给你自己写封信,大 大赞扬一番你的决策英明、知识丰富、果敢勇猛、还有伟光正等等,然后署上某个别人的名字,发给你自己。然后指着信和我的鼻子大喊,“你看,有这么多 FANS都支持我,你怎么敢。”

想得到认同什么的非常容易,何必非得从我这里要,这么难。

笔记:技术的本质

技术的本质:技术是什么,它是如何进化的 (布莱恩•阿瑟)

- page 30

然而,作为人类,我们实际上不应该和技术如此紧密地结合,而是应该和其他什么

东西融合得更为紧密,那就是自然。在最深的层次上,人的存在应该 和自然,和

我们最初的环境,以及最初使我们成为人的那些条件相融合。

==========

- page 36

如今机器被用来生产机器了,同时它又变成了以后同类机器的父母。

==========

- page 43

技术的建构不仅来自已有技术的组合,还来自于对自然现象的捕捉和征服。在

==========

- page 44

技术(所有的技术)都是某种组合。

==========

- page 44

三个基本原理

==========

- page 44

其次,技术的每个组件自身也是缩微的技术。

==========

- page 44

第三条基本原理是,所有的技术都会利用或开发某种(通常是几种)效应

(effect)或现象(phenomenon)。

==========

- page 44

技术组件的集成或组合是为了满足它们的目的。

==========

- Your Note on page 44

motivation

==========

- page 44

技术组件的集成或组合是为了满足它们的目的。

==========

- Your Note on page 44

motivation , difference between the evolution of technology and biology.

==========

- page 49

定义:技术是实现人的目的的一种手段。

==========

- page 49

技术是实践和元器件(components)的集成(assemblage)。

==========

- page 50

将技术作为在某种文化中得以运用的装置和工程实践的集合。

==========

- page 53

装置和流程的确可以归于相同的范畴。

==========

- page 55

技术总是围绕着一个中心概念或原理,如"事物的方法"或者一个可行的核心理念来组建

==========

- page 57

各个子程序就处于不断的相互联系之中,它们不停地"对话",就如同喷气发动机那样。

==========

- page 60

技术的分解随着市场的细分而加剧。

==========

- page 61

一开始的一系列松散地串在一起的零件如果被用得足够多,就会"凝固"成独立的单

元。技术模块随着时间的推移会变成标准组件。

==========

- page 66

一个技术绝少是固定不变的。它会不断地变换结构,当目的改变时,它会去适应并

进行重新的配置,

==========

- page 66

在真实世界中,技术是高度可重构的,它们是流动的东西,永远不会静止,永远不

会完结,永远不会完美。

==========

- Your Note on page 73

theory , principle .

==========

- page 73

现象是技术赖以产生的必不可少的源泉。

==========

- page 75

这个例子阐明了如何应用现象的组合去达到目的。

==========

- page 75

在实践中,现象在能够被应用于技术之前,一定要被"驯服",并且作好恰当的准

备。天然形式的现象很难被利用,需要巧妙的诱导,它们才能令人满 意地运作起

来。它们可能只在很有限的条件下起作用,所以一定要建立正确的支持方式才能使

它们为预设的目的服务。

==========

- page 83

货币系统利用了这样一种现象:只要我们相信其他人会相信一种交换媒介是有价值

的,而且这种信任会在未来持续下去,我们就会相信这个系统。需要 注意的是,

这里的现象不是物理性的,而是行为性的,

==========

- page 83

物理现象。

==========

- page 84

目的性系统(purposed systems)。

==========

- Your Note on page 170

根据原理选择部件

==========

- page 91

科学之所以在这个时候链接到技术,不仅是因为它能对结果提供更多的洞见和更好

的预测,还因为一些新的现象家族开始被开发了。

==========

- Your Note on page 91

简化模型

==========

- page 91

技术人员应用科学思想就如同政客们应用已故的政治哲学家们的思想一样。他们日

复一日地使用这些思想,对其起源的细节却知之甚少。但这并不是出 于无知,而

是因为起源于科学的那些思想会随着时间的推移被消化吸收到技术体自身当中,例

如融入电子工业或生物技术。它们在这些领域中与经验和 特定的应用融合在一

起,创造出它们自己固有的理论和实践。

==========

- page 95

技术是对现象的驾驭,而这很大程度上是由科学揭示的。

==========

- page 100

为什么个体技术要聚集成群?原因之一是它们是分享了现象的族群。但这不是唯一

的理由,技术聚集在一起还因为它们分享了共同的目标:

==========

- Your Note on page 100

共同的假设

==========

- page 100

用来概括和分析数据并实施统计性测试的统计软件包,拥有一个共同的假设前提,

即抽样在总体上应是正态分布的,因而统计软件包工作的基础是共享 了所操作数

据在这个性质上的假设。

==========

- Your Note on page 101

lib

==========

- page 101

一项技术(个体技术)是要完成一项工作,达成一个目标的,而且这个目标经常非

常特殊。而一个域(复数的技术)则不需要完成工作;它仅仅是以一 个工具箱的

方式存在,你可以从中选取有用的元器件或一系列的应用规范。

==========

- page 105

20世纪30年代,人们可以用由水泥制造的、15英尺或更高的巨大的声反射镜去监察

跨越海峡飞往英格兰的飞机。它需要搜集来自20英里远的声 音,然后交由具有超

敏感听力的人进行处理。到第二次世界大战爆发时,雷达被用来实现同样的目的。

==========

- page 107

它可能需要巴贝奇亲自设计设备,组装一台地震波分析仪,并依据爆炸回声进行地

图的渲染。这个机器将是一个奇迹,它也许会带有一个犄角形的听 筒,一个辅助

的铜齿轮和杠杆,以及转盘和着墨的绘图笔。这个设备工作起来缓慢、复杂,而且

它将专门用来进行地震勘测。巴贝奇时代的这些域(机 器、铁路、早期工业化

学)的触角很短,因此所能提供的可能性很有限。

==========

- page 110

事实上,正如口语表达的清晰度不仅取决于语法一样(它依赖于词汇的深层含义及

其文化相关性),技术的清晰表达也不会仅仅依赖于语法。技术的清 晰表达需要

相关域的深层知识,包括:所使用组件的词汇的流利程度;对标准模块、以前的设

计、标准材料、相关技术的熟悉度;

==========

- Your Note on page 110

dsl

==========

- page 110

语法在很大程度上反映了我们对"特定域中自然是如何工作的"这个问题的理解。这

种理解不仅是来自于理论8,也来自于经验积累:

==========

- page 115

可以在不同的域世界中完成同样的任务,但是功效可能会不一样。

==========

- page 117

这暗示着创新不是发明以及对其的应用(例如,计算机、运河、DNA或者芯片的发

明和应用),而是在新的可能世界中,将旧任务(例如,会计、运 输或者医疗诊

断)不断地进行重新表达(re-expressing)或者再域定(re-domaining)的过程。

==========

- page 130

我们要关注的是它和语言的关系,先有意向,然后是完成的方法——组件的恰当组

合。所以,设计即表达。

==========

- page 134

如果你看过任何一本工程手册,你就会发现许多标准问题的解决方案。比如《机械

和机械设备图集》8就给出了"耦合旋转轴的19种方法",以及 "15种不同的凸轮机

构"。另外一个电子类的手册,则图解了5种振荡电器:阿姆斯特朗振荡器、科耳皮

兹振荡器、克拉普振荡器、哈脱来振荡器、 瓦卡振荡器。这类手册提供了标准解

决方案来解决那些重复性的问题,也可以为特定的用途进行修改。

==========

- page 138

标准工程中的每一个项目都会使一系列问题显现出来,每一个解决的结果都是一套

对应的解决方案。可用的解决方案被建构并在实践者中传播,其中一 些可能变成

技术名词,进而变成未来技术的建构元素或模块。标准工程对创新和进化都贡献良多。

==========

- page 141

新技术是针对现有目的而采用一个新的或不同的原理来实现的技术。新技术是在概

念当中或实际形态当中,将特定的需求与可开发的现象链接起来的过 程。

==========

- page 142

新技术的形成(激光打印机、涡轮喷气发动机、计算机)都是源于一个新的或不同

的基本原理。

==========

- page 143

我发现勾勒出这个链条很有用。链条的一端是"需求"或"目的";另一端是能达成需

求或目的的基本"现象"。

==========

- page 144

发明有两大模式: • 肇始于链条的一端,源于一个给定的目的或需求,然后发现

一个可以实现的原理。 • 发轫于链条的另一端,从一个现象或效应开始,然后逐

步嵌入一些如何使用它的原理。

==========

- page 145

将原理转译成工作元件

==========

- page 146

至此,需求已经变成一个被详尽描述的问题。

==========

- page 145

假设这时已经有了解决方案,那么标准技术就足以应付。但现在不行,因而如何定

义问题本身就变成了挑战。那些接受挑战的人会遇到类似需要满足某 个需求或需

要克服某种限制的情况。他们很快会将挑战简化为需求——一个需要解决的技术问题。

==========

- page 153

当你听完斯塔克伟泽的故事后,印象最深的应该是他所面临的选择。每个次生问题

都可能有几种解决方案。斯塔克伟泽选择解决方案、检验它们的可行 性,并努力

从中组成和谐的整体。当需要找到次生或次次生问题的源头时,他就向下拓展这一

梯式递归进路,如果这些问题得到解决或被放弃了,他就 再向上回溯。这个过程

几乎总是很漫长,只有当获得了必要的知识,并且次生技术带来的挑战已被成功地

克服后,才能向前迈一大步。前进的方向总是 沿着运行恰切的版本向前延伸的。

==========

- page 156

莱特兄弟所要做的是解决阻碍原理被转译成可行技术的四个关键的次生问题。

==========

- page 156

基本原理有时会自然呈现,有时会突然出现。困难之处在于如何使原理正确地发挥

作用,这可能需要漫长的努力。

==========

- page 164

科学与数学中的原创和技术中的原创没有根本性的不同,我们不必对此感到惊讶。

这种对应的存在不是因为科学、数学和技术是一样的,而在于三者都 是目的性系统。

==========

- page 164

科学与数学中的原创和技术中的原创没有根本性的不同,我们不必对此感到惊讶。

这种对应的存在不是因为科学、数学和技术是一样的,而在于三者都 是目的性系

统。广泛来说,也可视为达到目的的手段,因此需要遵循同样的逻辑。三者的构成

都始于形式或原理:对于技术,是源于概念性的方法;对 于科学,是源于解释性

的结构;对于数学,则源于真理与基本的公理结构。

==========

- page 170

事实上,开发者经常寻找的并不是更好的部件,而是这个部件恰好能提供的一个现象。

==========

- page 176

当调换部件和结构深化都不能再为提高性能做什么的时候,技术就成熟了。这时

候,如果想取得进一步的发展,则需要一个全新的原理。

==========

- page 177

只要我们能够,我们总是倾向于将感知置于经验、事件之上,创造符合它的变故和

关系。我们对那些不符合这种参考框架的事物往往采取忽视、误解或 否认的态

度。结果是,我们通常能找到我们所要寻找的东西。

==========

- Your Note on page 191

生产工具的变革

==========

- page 191

经济学假设新技术是被 "采用"的,它们被接纳并应用于经济中。对于个体技术当

然是这样。钢铁生产商采用贝塞麦生产过程,他们的生产能力也相应地起了变化。

但这并不能很好地描述 复数的技术的情况,如计算或铁路技术。我更倾向于认为

工业、公司、商业运作等经济要素并不是"采用"了一个新的技术体,而是"遭遇"了

它。正 是由于这种遭遇,才产生了新工艺、新技术、新兴产业。

==========

- Your Note on page 197

统一或分散的动力

==========

- page 196

9在工厂还没有实现电气化之前的一个世纪左右,人们依靠蒸汽机提供动力。每一

个工厂都有这样一个独立引擎,一个足有几层楼高的巨大的家伙嘶吼 着,摇动着

一个由活塞、飞轮、滑轮、皮带构成的组合,驱动主轴的运转,然后再继续驱动工

厂里其他的机械设备。直到19世纪80年代,电动发动 机才作为新的电子域的主要

成员进入了可操作阶段。它们所耗能源成本很低,还可以分解成小单元进行安装。

这样一来,每个需要提供动力的工作机旁 边都可以安装一台电机。同时它们可以

做到独立控制,可以依据需要分别开启或关闭。毫无疑问,电动发动机是更优的技术。

==========

- page 197

新技术要求重新建造工厂。

==========

- page 200

手艺的形式部分可能最终会成为学术论文和教科书,但真正的专业技能部分则很大

程度上藏在它创生的地方,在那里,它被视为理所当然的、共享的, 且无须明言。

==========

- page 210

随着技术数量的增加,组合的可能性也相应提高。

==========

- page 210

威廉·奥格本早在1922年就已观察到这一点:"可用于辅助发明的东西越多,发明的

数量就越大。"

==========

- page 211

他预期物质文化(技术)的增长显示出"和复利曲线的相似之处"。如果他能在今天

进行写作,他会说技术是按指数级增长的。

==========

- page 213

事实上,需求不是一个恰当的词。因为在青霉素或核磁共振还不存在的时候,根本

无法在经济中对它们提出明确的需求。因此不如说我们应该谈论的是 技术的机会

——即技术可以有效地占据的利基。

==========

- Your Note on page 219

新技术可能与旧技术结合,也可能取代。都是利基之处。

==========

- page 219

在实践中,它们其实并不能这样干净利落地前后相继、井井有条,而经常是并行发

生的。

==========

- Your Note on page 223

与非门

==========

- page 223

所有可用的技术只有NAND(不是AND)电路(

==========

- page 226

我们既不能预见会形成何种组合,也不能预见何种机会利基会被创造。由于潜在组

合是成指数式增长的,这种不确定性也会随着技术体的发展而增加。

==========

- page 236

经济以这种方式在暴风骤雨般的变化当中构成或重构自身,包括创新和适应这种新

的制度安排,以及如影随形、互相追逐的机会利基。 让我以一个具体的例子来详

细阐明我的观点。当实用的纺织机械于18世纪60年代在英国诞生时,它提供了一种

替换当时以手工作坊为基础的生产方式。2当时, 羊毛和棉布的纺织都是在家里手

工完成的,属于散工制的组织方式。新机器在刚开始时获得了部分成功。接着,它

需要比家庭手工作坊更大规模的组 织,因此它为更高级的组织安排(纺织厂或毛

纺厂)提供了机会,并成为其中的一部分。工厂实际上也是某种技术,它作为一种

组织手段,反过来需要 另一种手段来实现:工厂劳动力。劳动力当然早已在经济

中存在,但是当时当地并没有足够多的人来支撑这种新的工厂系统,因此需要劳动

力的调集。 由于大多数劳动力来自农村,这就需要工厂附近有居住的地方,工人

宿舍和工人住房建设因此而出现。随着工厂、工人以及他们的栖息地组合而来的是

一个工业化城市的生长,一套新的社会组织方式或说一套新的安排出现了,内含这

种结构的维多利亚式工业经济就此开始呈现。就这样,一个时代的特 征,一套和

超级工业机械相匹配的安排显现出来了。 但是这个过程还远远没有结束。工厂的

劳动者当中许多都是孩子,经常在狄更斯作品中那样的条件下工作,这也引发了强

烈的改革需求,这种改革需求不只是关于 "下层阶级的道德状况"3,还有他们的安

全状况。继而,法律系统需要采取进一步的安排来对此做出回应,劳动法就在这种

情况下被制定出来,以阻 止最坏的恶行发生。然后,新的工人阶级开始要求分享

工厂创造的财富,他们利用一种手段来改善他们的状况,那就是工会组织。工厂中

的劳动力要比 家庭作坊中的劳动力更容易组织,4因此,若干年之后,工会就变成

了一股不可小视的政治力量。 在这种机制下,纺织机械并不仅仅是替换了手工生

产方式,它还为更高一级的制度安排(工厂制度)提供了机会。在这个制度安排

中,机械只是其中的一个组分。新 的工厂制度反过来建立了一个服务于劳动力及

其栖居需要的需求链条。反过来,对这一问题的解决又创造了进一步的需求,所有

这些最终演变为维多利 亚式工业体系。这个过程用了100多年的时间才真正完成。

==========

- page 237

从此,纺纱人不再能在家里转动她的纺轮,织布匠也不能在家里抛动他的梭子,那

种没有任何监督的美好时光从此不再。现在,工作必须在工厂中完成 了,以一种

无聊的、毫无生气的机器所规定的步调,作为团队的一员,要与整体共进退,开

始、间歇、停止——所有这些都在密切监督之下进行,工厂 用道德、经济奖惩来促

使工人勤奋地工作,有时候甚至是身体上的强迫。工厂是一种新的监狱;时钟是一

群新的狱卒。"

==========

- page 239

即将到来的新技术不是仅仅打破静态,比如说发现比我们现在用的产品或方法更好

的新的组合:它需要一系列安置新技术的条件,并解决由此产生的另 外一些新问题。

==========

- page 239

即将到来的新技术不是仅仅打破静态,比如说发现比我们现在用的产品或方法更好

的新的组合:它需要一系列安置新技术的条件,并解决由此产生的另 外一些新问

题。如此一来,又要为新的能够解决这些问题的进一步的技术创造新的机会利基——

接下来又产生进一步的问题。 因此,经济总是存在于永恒变化之中,存在于一种

永恒的新颖性之中。

==========

- page 243

我们的理论始于三个原理:一切技术都是元素的组合;这些元素本身也是技术;所

有技术都利用现象达到某个目的。

==========

- page 243

一旦新技术(单体技术)诞生了,它们就立刻成为可供进一步地建构更新技术的潜

在构件。

==========

- page 250

从占有资源的角度获取国民财富的总量开始不如从占有专业科学及技术知识的角度

获得的那样多了。公司的竞争优势绝大部分是从它们占有的技术专长 而来的。

==========

- page 249

从只实现单一目标功能的流程或机器转换为采用不同组合以实现不同目标的技术。

为了反映技术的这种转换,经济至少在高科技部分更多地表现为更关 注如何聚

集、拼凑事物,而不是如何对现有操作进行完善。

==========

- page 256

他们的星际飞船是虚弱的、有机的,而且必须踢它才能让它运转。这是至关重要

的,他们的技术是人性的。

==========

- page 256

他们没有用人性和技术做交易,也没有使意志向技术投降。技术向他们投降了。并

且由于这样做了,技术也拓展了它们的自然性。

==========

- page 256

已经把技术奴役我们的本性和技术拓展我们的本性之间进行了区别。

==========

- page 254

如果我们仅仅使用自然现象的原始形态去驱动水车或推动帆船,我们对技术就会有

家的感觉,我们的信任和希望就不会那么不一致。但是现在,随着即 将到来的基

因工程、机器智能、仿生学、气候工程学,我们正在开始使用技术(利用自然)直

接干预自然了。对于我们这种灵长类动物,对于我们这种 以树、草和其他动物构

成的生境为家的动物来说,这种感觉极度不自然。这扰乱了我们内心深处的信赖。

这种内心深处的不安会不知不觉地反映在很多方面。我们开始转向传统,转向环境

保护主义,开始回头倾听家庭价值观,我们转向原教旨主义,我们抗议。我们这些

反应的背后的实质,不论合理与否,是恐惧。我们害怕技术将我们与自然分离,我

们害怕技术破坏了自然,破坏了我们的自然。

==========

- page 255

我们害怕技术作为一种有生命的东西将会给我们带来死亡。不是"不存在"这个意义

上的死亡,而是更糟糕的死亡,一种丧失自由的死亡,一种意志的 死亡。

==========

- page 280

技术由人类创造出来,又基于自然最原初的现象,但却开始了疏离"人类与自然"的

进化之旅。

==========

--------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]