杀不死的人狼——我读《人月神话》(三)

<<= 上一节 三、《人月神话》是预言了未来还是控制了未来? 事实是:我们现在的很多工程知识,——无论是从书上看到的,还是从实践中体验到的——大多未曾脱离《人月神话》之所言。 我在开篇中说《人月神话》“是一本可怕的书”。然而我认为真正的可怕之处在于:如今只要论及工程(且不要让人认为是离经叛道),那么所讲述的一定是Brooks的这样的经验以及由此推出的观点,或者在不违背这些经验和观点上的一些具体的实作方法!我们全然不顾书中所言是现象,还是本质的推论,或者只是现象归结的一个(未必正确的)答案。 ...

杀不死的人狼——我读《人月神话》(二)

<<= 上一节 二、哪些是现象,哪些是答案,而哪些才是本质? Brooks在1961年至1964年间,主持与领导了被称为人类从原子能时代进入信息时代标志的IBM/360。十余年后,在1975年,他将历年来所写的有关软件工程和项目管理方面的文章汇集成书,这就是《人月神话》。无疑的,《人月神话》是Brooks十年中对IBM/360与操作系统OS360等项目的不断反思的结果。 而在我看到Brooks这些言论的时候,我并没有为它们所震惊。我所叹服的是Brooks在30年前便具有这样深远的思想。可以想见,对于30年前的黑暗时代,这些思想无疑是明灯和烛火。 (你有否打算用十年来思考一个问题呢? ...

杀不死的人狼——我读《人月神话》(一)

前言 在这与这段文字之前,我已经阅读过种种关于《人月神话》的文字。评论者既有刘天北这样的美食家,试图在书页中夹点胡椒面以慢慢品味,为了表现食客特有的风格,他的书页都比别人数得仔细。也有marktsen这样的速食者,试图几句话就打发了自己或者读者那漉漉的饥肠。 阅读这些文字给我带来的收获是:面对《人月神话》,除了表示五体投地的诚服,你既不能做正面言论(那是多余),也不能做负面言论(那是找事)。 这是一本可怕的书。 我大概花了三周的时间来细读这本书——也许很多人会说我应该花更多的时候或者读更多遍——不过,这不是重点。我在书中印证和找寻思想,并为这本书写下了数百个注释。 ...

煮饭婆

太阳光,金亮亮,雄鸡唱三唱~~ 昨天周六,老公这头猪在雄鸡唱三唱的时候才睡下,鸡都要进窝了才起床,MSN上朋友约着打球,晚上一起飚餐,可这家伙晕头涨脑的,最终也没去成。 昨晚上临睡前诱惑他,如果在鸡叫前睡的话,今天我就给他煎黑胡椒牛扒吃。哼哼,还算听话,的确是天没亮时悄没声地钻进卧室了。 今天的阳光好极了,正午十二点,我准时把卧室门打开,小猫周饭桶毫不迟疑地窜进去跳上床,对着他的头就是一顿猛踩,我看踩不踩得醒你,哼~~ 起床后逼他去发廊把头发收拾收拾,又乱又长象野人,平日里忙得觉都不舍得浪费时间睡, ...

关于做PDF的FAQ(一)~(四)

年前曾给在VeryCD活动的任真兄说过,要做一份文字来教大家做PDF。其中最主要的是做PDF的书签。现在07年的春节快过完了,想想这份文字不能再耽搁着,便决定来写写。 但是,我可能不能写成一份教材,因为那太费时间。因此,我决定写成一份FAQ。我想尽可能写得简单写,简单到你一做即会。——但要不要期望知道原理与过程,因为这份文档只是一个FAQ。 在开始之前先做一下说明,后文中的acrobat是指adobe acrobat。它是专做pdf的一个编辑工具,目前已经发布到acrobat 8。而后文中的reader,则是指读pdf文件的阅读器,并没有编辑功能,也已经发布到了reader 8。 ...

也说读书

常去周筠老师的博客上看,有时候便感叹啊:找到一个好的博客,比找到一个好的书店更有价值。因为什么呢?因为好的博客不但有好的文章,也有好的推荐。 我自己的博客里,少有推荐,便是自认没有荐者的眼光。所谓千里马常有,伯乐不常有。我做不成伯乐,便不去随便指认马的好劣。但周老师显然是好伯乐,因为我常常在她那里读到好文章。 今天读到的,是关于读书的文字。有文有荐。 读的时候,我却在想了,我实在不是读书人。周老师上千本的书是读了的,我呢,不算课本的话,百本怕也不到。 ...

从表达式到变量:一行scheme代码之所见

下面这行代码在scheme中是可以执行的,其结果值为12: ((if #f + *) 3 4) 在scheme中,一对括号表明过程调用。括号中的第一个参数是过程名,其余的则是过程参数。 那么,我们先看内层括号中的代码: (if #f + *) if是一个过程名,而不是语句。该过程相当于JavaScript或C中的三元表达式,或者其它语言中的一个if语句(的效果)。试以javascript来描述它的效果(以下语句中的字符串定义,只是语义上的含义,并不表明它是字符串): var q = '# ...

怪现象

郁总今天出差北京,于是乎昨晚上兴师动众纠集我们一起出来胡吃海塞,整得象~病鸟一去兮不复返~似的。 地点很没创意地仍然在置地广场附近,只是饭店不得不换了,原来那家陕西菜馆被郁总吃跑掉了,据说拆迁后搬去了静安区。唉,天知道远离了郁总生意还会好吗。 人物倒是有了点小创意,除了我们几个老掉牙的老面孔死党外,加了名新成员XG进来。XG也算得上是挨踢界的小牛叉人,加上挨踢小混混三K党Kiki,挨踢虐驴抽疯飘移Alex,玉树临风的Aiming和人见人爱的葵花公主麦秸儿,在挨踢苦力郁总率领下,一票人杀进蒙古王酒店,包了个五平方的小鸽子笼包间,挤在一起大块吃肉大口喝酒。 由于最近立志要将淑女伪装到底,所以我尽量多吃肉少出声。没料想我假装斯文的形象三K党同学有点接受不了,这个烂瓜仔大声揭发我网络背后的彪悍本质。 ...

Qomolangma.V1.0的发布说明

一、Qomolangma 1.0 Final 一年以来,Qomo团队都在一种迷茫的、看起来没有方向的状态中工作。因为Qomo看起来缺乏必要的设计,以向每一个关心它的人解释以下的问题: Qomo到底是什么 Qomo有什么用 此前我已经说过,Qomo项目源出于另一个名为WEUI的商业项目。WEUI有着自己完整的架构和方向,由于需求决定设计,因此事实上WEUI的原始设计也是面向它原本的方向与需求的。我当然知道这样的需求目标和方向,但也同样知道:WEUI与Qomo有相似但不相同的方向。 所以,我无法把WEUI的架构搬到Qomo中去,也无法用WEUI的方式来解说Qomo的架构。我必须Qomo的前期工作中解决一个问题:如何让WEUI变成Qomo。 既然不能让一个旧架构为新目标服务, ...

Qomo项目中代码的一般性约定

一、变量声明的一般性方法 Qomo约定在全局空间进行变量声明时,应用var关键字来声明,而不应当省略(尽管语法上讲能这样做)。声明时的代码格式尽可能使用如下形式: var v1 = 1234; v2 = 'abcd'; 或为每行声明都保留var关键字,例如: var v1 = 1234; var v2 = 'abcd'; Qomo约定在函数内部声明局部变量进,使用var关键字时可以用如下省写形式: var v1 = 1234, // < ...

如何使用Qomo的Builder系统

1. Qomo的Builder系统 Qomo在Beta2之后,主要解决的一个问题就是Builder系统。在设计上,Qomo对Builder系统提出了非常严格(甚至是苛刻)的要求,其中包括: 使用Qomo自身的框架来实现 使用JavaScript来实现,而不要第三方的应用(例如.exe的压缩程序) 对既有的和将来的Qomo项目透明,无影响 深入到Qomo内核的、分层的、可分解的模块定制 编译的结果代码,与使用中的调试版本无差异 这些要求所主要表现的,就是Qomo的Builder可以定制,而且对使用者来说公开、透明。 由于JavaScript是解释执行的脚本, ...

2007年的几件事

一年前写了篇“2006年的几件事”(在这里),一年了,也该盘点一下,看看成绩,想想过失,规范一下07年的几件事。 06年的8件事,原本以为第一件第到四件可以松松搞定: 1. 把《石像的忆述》这篇小说写完,或者续写一部分。 2. 去西藏两次了,每次都没有游记出来。如果再不写,西藏的印象只怕是要沉淀到记忆里,再也浮不出一个泡了。有机会应该把《藏行路上》写出来。 3. 把澄心聊天室的代码改出来, ...

Qomolangma框架库(三):处理池与处理机

一、框架库:处理池与处理机 严格地说,Pool被译成“池”即可,只是在Qomo的TPool类中,所有放在“池”中的对象都是处理机(Machine),因此这个TPool被称为“处理池”类。 Pool的出现早在WEUI的时代,其目的是处理同步的、缓存的XmlHttp对象。因此,Machine也就在事实上只实现了“THttpGetMachine”。这个HttpGetMachine也能处理POST类型的HTTP请求,所以,严格地说,它应该名为“THttpMachine” ...

Qomo V1.0 final 发布~

终于写完了 V1.0 的全部代码~~也顺道整理了整个框架~终于可以发布final了。 ^.^ 正式版中的重大改进,包括: 新的命名空间和路径算法,终于可以声称支持“命名空间”了 完整的builder系统。支持连接(link)和压缩(compress)代码了 (体验版本的)组件系统及其系统 完整的性能分析和测试框架,载入器($import)的性能提高 在Qomo.js中, ...