2012年4月9日

复杂是个筐,什么都往里装

对作者一个词评论就够了:恬不知耻。

明明是各学科的一些具体进展不断的被她/他们归入“复杂”的范畴,倒好似成了很多研究多么受益于复杂性概念。书中存在严重的不断加深读者(复杂作为单独学科很有用)印象的倾向,但真正能够读出的味道却是,想让别人、甚至她自己相信都勉为其难。

公开在网络上进行人身攻击似乎不那么地道,考虑到作者不认识中国字就不客气了。这样的人如果能被称为科学家那是科学一词的耻辱。

不过如果完全抛开所谓的复杂学科不谈,作为了解其它学科当代成果的科普读物,这本书看起来还有点意思(不过很多别的科普读物也很有意思、还不试图推销狗皮膏药,好久没说这词了呵呵),反正我是看完了。

而把这个学科单独提出来看,除了上述浅薄、粗糙的归纳工作外,基本没什么其它内容或价值可言。若这世界上真的存在严肃认真的复杂系统研究和相应的研究者,那其处境真的是连唐吉珂德都不如。

作者认为他们处于牛顿力学建立之前、缺乏微积分这样的数学工具的阶段,这如果不是作者往自己的饭碗上贴金、至少说明她甚至缺乏对自己在干什么的真正理解。即便复杂性理论真的存在,那它首先也要能够进行简单、正确的抽象。而正是这方面基本不可能成功。

标题是对《复杂》一书的一句话评论。

posted @ 2012-04-09 05:45 怪怪 阅读(153) 评论(0) 编辑

2012年2月25日

关于信息隐藏的感想及其它废话

最近在把数据底层的索引块内查找技巧升级到一个新的版本,所以一直在用C写程序。毕竟是所谓的“低级/半低级”语言,几年来一直想看看C方面有什么书,遗憾(或幸运)的是和所有(除了四处猫腻的C++)语言一样,没找到任何哪怕值得瞎翻一下的书:有文档和互联网就足够了。

看很多人推荐《C语言接口与实现》,本来在买IT八卦书时想顺便买了,但是出于洁癖,下单前还是下载了电子版。作者很推崇类似typedef struct T *T这样的隐式指针类型,以隐藏接口之下的实现细节。其实这个做法也是我一开始就尝试的,毕竟写面向对象程序写惯了,很难摆脱类似的思维:从库作者的角度来看,被用户乱搞始终是心理的一个阴影。

但即使我自己也忍不住这么做,我也不得不再次指出这种所谓的信息隐藏只是一种口味,根本不是一种普适并朴素的实践。除了免不了脱了裤子放屁的嫌疑,它在一些环境中还很有可能添加麻烦。有的时候真的有点怀疑,任何企图越俎代庖、与邻为壑(这里的邻就是用户)的行为都是愚蠢的。

比如一个很具体的麻烦来自于C在这方面的设定。在使用默认的内存管理方式的情况下,如果企图配合“构造函数”返回隐式指针类型,造成的最明显的一个问题就是数据结构所需内存不能开在栈里:因为对于调用者来说,这个结构体根本是未定义的,不知道它的大小(还不提编译器抱怨这个表象)。

为什么有人希望把内存开在栈里?首先,此人肯定知道整个调用链上的内存使用不会造成栈溢出。其次,他想避开malloc带来的用屁股想都知道一定不可避免的overhead。(说白了还是因为C默认内存管理的设计粒度过大带来的【注】。令人惊奇的是,大多版本的C居然提供了在栈内开辟空间的函数alloca,但仔细察看它们就知道仅仅是鸡肋而已)。

考虑到这些,如书中那样(使用指针)设计接口在内存使用的灵活性上就成了问题。这是我们隐藏除大小外其它细节的行为和C的设定混合产生的副作用。在一个副作用出现的时候,很多人会认为这体现了“不能两全”的事物固有属性,我认为绝大多数时候这不过是文青的幼稚想法。

问题的根源往往还在于有人做的不够好:浅层次上往往是环境本身的不足;更多的是思想误区(Linus:精神/心智包袱)。比如有人会认为非要使用栈这是过度优化而完全不顾本来不存在这种限制的事实(这里“不存在”也有两个层次,一个层次是在具体环境中的实践;另一个层次是在当前环境之外更大环境中)。

就上面的例子(C语言中设计接口)而言,解决问题的“最佳实践”是什么?暴露所有信息、加入那些本来是隐式的信息。

我们当然可以在隐式指针类型的基础上将结构体的大小直接或间接(比如通过宏根据明确大小构造抽象类型的内存分配)的告知用户。但为了隐藏某些信息就去增加繁文缛节是毫无必要的(更别提那些限制用户使用的方法了)。如果有什么不想让别人动就写上“别动”难道还不足够?

我要说的另一个例子与编程无关,但也很说明问题。我有块7200.11的硬盘,幸运没碰见固件门,但却开始产生坏道。经过简单的查询,我知道只要把坏道全部找出放入p-list即可解决问题(因为坏道多了g-list会满)。问题是seagate可能出于不让用户调出隐藏空间的目的,并没有给出这个接口,最终它和我都要为此付出成本。

有很多显而易见直白做法处理这些问题,比如:所有坏道都可以放入一个更大的g-list并和保留空间交换,引起的性能下降告诉用户就行了;比如,放入p-list与向后扩展使用保留空间以保证硬盘容量不变不要绑在一起,用户可以容忍一定的空间损失;设计更直接的方法阻止用户取用非法地址,而不是通过隐藏;等等。更少的麻烦更低的成本。

写点读后感。

最近买了本书叫《复杂》,《GEB》的徒弟写的。首先说明的是与《GEB》相似,我当然可以通过阅读学习很多东西,但我仍然忍不住要说:又一个伪装成理科生的文科生;又是名头很大(“亚马逊十大科学图书”)、又是草根评价很高(“作者现在成长为该领域的权威”)。事实是这这本书瞄准的内容涵盖比《GEB》还广,可作者说话却更罗嗦更不精确。

科普读物看多了让我觉得某些“科学家”有一个共同之处,就是社会影响力比真正踏实做事的人要大得多。就写作而言,科普作家的水平也是越来越低了(霍金,至少早期的霍金是个例外)。当然书还是要读下去,谁叫她毕竟比我懂得多些呢,不过给人的感觉也就是仅此而已了。

本来还想写点关于“可变静态类型”的思考、结构抽象与过程抽象之间的匹配,一说远了没思路了。这两个问题前者思考了一段时间了;后者也是在具体工作中体会到的:当前的主流语言基本就是结构与过程的配合完成工作,这里存在的不一致性常常让事物不能按照最精确的方式工作(虽然大多数时候我们不在乎)。改天吧。

回到最初提到的那本书,显然该书作者没有真正认真的考虑这类问题;又粗略浏览了其它内容后,鉴于我不放心作者的认识水平,最终我就放弃了这本书。说实话这本书写的煞有其事,比如它会提到和面向对象的相似性、也会引用其它文献。但是我怀疑,这种努力达到的“专业性”充其量也仅仅是一种伪装而已,迷惑性大于实际意义(无论作者主观如何)。

如今这样的专家太多了,他们在互相之间传播未经消化的信息,然后再普及到大众。

比如可以看到,将实现隐藏在接口之后在面向对象中更多的是为了方便(也仅仅是方便、而不是必要条件)实现多态;而本书使用信息隐藏的大多数使用场合并不涉及这个问题。而以这种方式设计接口的调调贯穿了全书始终。最可怕的是,这些作者往往以一种专家平静的口吻叙述他所知道的,好像一切都是自然而然的事情。

这又涉及到我长期强调的自学和独立思考的能力。说到认真的出版物肯定不能没有,没有怎么入门呢?但除了参考类书目和少数如Knuth这样的权威的作品(可以发现的是,他们的书很少涉及方法论),我越来越觉得至少咱们这个行业,对于已经入门的选手,真的是信书有害了。

 


 

注:还是我过去提到过的,有的时候大家都以为自己在抽象,其实不过恰恰是在制造一个万金油式的怪物实现或做些除了添加麻烦毫无必要的无聊事情。通过观察可以知道,世界上大多数库和工具都有类似的问题。当然,可以自己做自己的工具和行为约定去解决一些具体问题;但我们做这些事的时候最好避开相同的误区。

posted @ 2012-02-25 05:54 怪怪 阅读(168) 评论(0) 编辑

2012年1月10日

由铁路订票系统联想到的

作为一个互联网初哥这样级别飙升的流量,居然还能让大把的人定到票,可想而知:要么是所谓的高流量网站技术太简单;要么是铁道部信息技术中心太NB。真相到底是什么呢?我个人以为,两边都沾着那么一点。

中国铁路是世界上最复杂的铁路(很可能没有之一),其业务规则也是庞博繁复,如果你以为从书上抄几个加权的最短路径算法就能对付过去,那可是大错特错。比如一个装着某些货物X的车皮Y从A到B,中间的顶点和边都是什么、如何计费,那是由多种因素、甚至临时性突发情况决定的。这样的问题其实用屁股想也知道少不了。

另一方面对于铁路信息系统,若由我个人就自己私下的一些粗略了解给它一个评分,肯定不会是高分;因为它和我对这种系统应该如何设计实现的品味完全不相符合。不过我必须承认,如果如某些跳梁小丑所说,铁道部IT部门“不专业”,那么全国所有的专业IT企业,包括淘宝在内,就IT技术所处理的对象而言不过是小儿科了。

从这个角度看去,也许只有沃尔玛全球物流集团有资格B4铁道部。我想这个例子对我们真正做活儿的开发人员、工程师和程序员是值得细细品味的,尤其是那些自己的任务恰恰是和业务逻辑有关的同学们。如果单纯的把铁道部看作一个乡巴佬,我想最后真正被打脸的只能是那些为“如何构建某类系统”定下标准的国内外大仙。

说到12306肯定是不能让人满意,明显缺乏甚至一般站长都有的经验。但它毕竟还算是承受住了;即便这活儿明天就让那些急不可耐的丁书苗们飞速抢走,我们也可以自己估计下它在铁道部手里会不会因为技术原因始终无法改善甚或最后轰然倒塌。

从这里我们就可以看出大多数高流量网站技术大拿价值几何和成为熟手的速度/成本究竟是多少,在这里存在不存在什么不可或缺的关键技术?以前我们总在听着谁谁怎么怎么NB的传奇;现在一个大家都在骂的、不专业的、毫无经验的家伙在干了。结局究竟是事实证明做大的门槛很高、还是流量神话最终白菜化?让我们拭目以待。

我这篇算技术相关的文章吗?还是应该删掉?扯掉遮羞布直说了吧,我就是想轰大家都去研究点真正深入的计算机科学相关问题,别整天弄些不值钱的工程实践沾沾自喜。

就这个方向从管理到具体技术的任何领域,如果一辈子没机会接触真正复杂的系统、看着它成长并真正深入到它的改造中去,那就是所谓大牛其思考也未必比铁道部一个提起大牛会竖大拇指的小菜更有价值。反过来说,这个方向上水也很浅:任何有机会接触某一类系统的人,无论他是否遵从某一种方式方法,他最后总能成功。

回到上面的“品味”,像铁路系统这样的设计一个(甚至是可视化的)语言来定义规则集是我主观上的正途。(至于高流量网站,其本身没什么技术含量;结合业务本身特点做到成本最小化倒是个工程类的饭后甜点)。

posted @ 2012-01-10 13:14 怪怪 阅读(213) 评论(0) 编辑

2011年11月17日

检讨和一些对C的新看法

我不应该在这个博客里说无关的事情,其实我真正的动机是保证发文章的频率。我对技术以外的事情,除了一些愚蠢的人类的欲望和心里反应还在,其实理智上是早已放弃的。

最近研发工作很不顺利,就越发关注不相干的事情;结果效率就越低。这真是太堕落了。随着年龄的变大,未来精力肯定会衰退,以我的目标而言,在这么耽误时间是绝对要不得的。

即便以这个博客本来可以对其他人的价值而言,我也太浪费了。没得说就不发文章就好了,何必去提那些根本不值得关心的事情。大家来和我交流也不是为了这些垃圾事情。

以后基本上只写我自己技术上的总结。我应该变成一个纯纯粹粹的技术人,最多再加上对技术修炼如何提升自身社会价值的思考。包括自身状态上,抛弃掉无用的东西,轻装上阵。

--------

最近一个实践的小技巧是:几行代码的实现了一个利用C++ lambda的资源管理对象(省得写free/delete的同时,防止异常带来的资源泄漏),比老的方法又少了些繁文缛节;推荐。另一个感受是C/C++还是不够灵活,即便是只看纯C其语言本身的假设也太多。

从这个角度看,原来被灌输的“C不是高级语言”的看法就不那么成立了。它并不像想象中那样贴近机器/系统本身的模型,而只是自动化管理的机制和其它东西较少,多放了一些权罢了。内存分配的方式是一个例子。一个问题是选择限制为两个:函数签名中暴露外部不关心的细节以利用栈(说穿了是已经开好的并由运行时管理的一块内存),或者开在堆里给外部一个指针(抽象的说就是引用了)。

这表面上看起来是个取舍问题:提供机制越多越方便,同时承受代价。但深层次的看事情未必这么简单。我觉得这些语言自动化机制本身是不可定制的,这才是根源所在。比如上面他提到的资源管理的小技巧,它本身是一些语言提供特性的组合,这是一种可配置性;但更根本的,这些语言特性本身却是死的。这个有用加这个、那个有用加那个,一个机制中正面负面还都得照单全收,什么时候才是个头呢?

元编程的概念还应该继续深化,并且如果提供元编程的特性,它应该至少在一些关键性的地方可以自我配置,且它的工作层面应该完全贴合在更底层的硬件/系统模型之上,更好的是只表达底层模型的知识和它们形成的限制与模式。编程应该变成纯粹的新知识表达、已有知识重复利用的过程而尽量减少其它限制。比如现有自动化机制给的,是“已有知识重复利用”;如果这个现有的不是最贴切的,应该可以让程序员自行安排并被其它人利用。

产生这些想法的根源在于,我个人工作中总是存在着选择上的摇摆。A也是鸡肋、B也是鸡肋;两个鸡肋中选择最好的一个,需要的各种考虑其量却是巨大的。相比让用户自己创造(虽然也要花费大量时间),这是完完全全的浪费。

说白了继承我原来的思路,不但面向对象一类的高层次方法论映射到语言具体设计中是毫无必要的、过程抽象的当前这种具体实现也是(当然函数式也跑不了)。这些软件构建方法的甜头归根结蒂在于提供各种模子,在不存在物理限制的领域这太落后了(都这样是reasonable的,但未必仍旧是合理的)。

其实现代软件开发的这种瓶颈,观察C++的话是再明显不过的。从语言设计的所谓“演进”、到STL库的各种设计,复杂性成快速增长;但这种增长却并未很好的切合用户需求。比如我曾考虑结合allocator定制和placement new解决std::vector安放在内存什么地方的问题,可是这个方案也太蹩脚了一些,也还存在种种限制。

真正的程序员(不考虑单纯用现有技术完成需求的开发人员)必须从这种种桎梏中解放出来,软件质量的提高才有指望。看看这些垃圾的软件吧,从操作系统到外壳到应用软件,本来一切都该更好的。更不要提那该死的火星探测器了。

posted @ 2011-11-17 22:05 怪怪 阅读(291) 评论(3) 编辑

2011年10月31日

关于异地高考引发的又一次舆论攻势

很简单。不是应该放弃户籍制度,而是应该让大学们搬走十之七八。这才是真正的教育资源的平等。不但大学应该搬走,政府部门也应该争取在未来20年搬走至少一半;这样企业也会跟着走人。

我个人认为“精英”们不会成功:物理条件目前还不以人的意志为转移。比如我们不得不考虑沉降中的华北平原和大城市基本告罄的各种资源。假设他们成功了,无论是一大步还是一小步,中国社会离他们嘴里的平等就更远了一步;假设他们成功了,他们自己也就离理智更远了一步:因为这成功是掠夺来的、也必将被掠夺走。

若种种限入门槛真的因为某些群体营造的舆论压力而取消了,只能遗憾的说,这是一个短视的决策。而未来为了儿孙福而高举各种正义大旗试图去恢复户籍制度的必然又是现在正嚷嚷着的这些只顾自己的人;区别只是屁股的位置变了。

其实从合法性的角度来看(即便认为没有原住民),难道自己去大城市打拼的人其儿孙过的比留在老家的同辈的儿孙好,不是老移民的权利?大家都明白当年老爹去大城市服务的隐性合同里包含着儿子的福利;老爹死了、老了、没用了,于是合同作废?只有我们承认已有契约,我们才能在未来同样的保护自己的权益。

另外“分低倒上好学校”的说辞真TM恶心人,一副人家的孩子智商低、不学习的样子。难道承受了大城市的精神污染而不可能一天读12个小时书的孩子就活该被高考淘汰?你高考能考XXX,那你得还给那些不能考XXX的同学和你同样的环境;无论是自然的还是人文的、物理的还是精神的。

只因为他们的受害是隐性的,就不应该得到应有的照顾?当然现在这种补贴是一种不公平行为,因为既然只用课堂学习知识、考试作为衡量标准,那么除了补贴的太多,另一种可能性是补贴的根本不够!你从小就泡在大染缸里成长的么?你想过这对人的一生发展有多大影响么?

“既得利益者”的叫法也一样恶劣。某些人已经比大城市和农村同辈获得的多的太多,而他们却还在高声讨要;也许这个群体中一部分人还不好意思否认“得到是用减法求出的”这一基本常识,就玩起了挂羊头卖狗肉或者指东打西的勾当。

比如他们所谓“用事实说话”的一个现象,“大学里农家子弟越来越少”,其根本原因是大多数农民不重视教育;这些农民兄弟忙着挣哪怕一点小钱哪有兴趣出来说话?恰恰是一些人在眼前享受了农民工带来的城市进步之后,因为担心这些红利不能持久,之后又把手伸向无能的城里人。

优胜劣汰是他们的潜台词,可他们却忘记了真正公平的竞争从来不是兔子高喊取消乌龟先跑的特权;人家乌龟还没要求比游泳呢好吗。这正是后继乏力、对自己缺乏信心的表现:看哪些还可以直接拿来而不是接着用双手创造。

任何涉及分配的问题必须讲规矩:对于有限的物理资源比如公厕,从来都是先来后到排队。不能说你比你爹能干就非得马上翻身、比同辈掌握更多话语权就鹊巢鸠占;这是文明的倒退。反而就现状来讲大家都有得有失,没有根本性的不公平存在(只是这现状让包括外地人本地人在内所有人都特别不满意)。

我们不应该牺牲一批人去成全另外一批人。“人人生而平等”是指别人和我们具有一样的权利;而不是说因为我自觉的挨欺负了、或者我自认为胜人一筹,好位置就应该换我占了,别人不配活在这里可以滚蛋。普世价值难道就是狭隘评价标准得出的“强者”逻辑?

且长期看来谁属于优势群体也是在家族间轮转的,唯一的解决办法只有逐步分散社会资源而不是一部分人从另一部分人手里掠夺。如果本地衰退导致我孩子将来考不上大学在本地找不着工作,总体看是好事。其实特别不想说这个,公开说发表这种意见可能伤害感情甚至耽误前途,为此我忍了非常久。

可当前舆论简直就是赤裸裸的法西斯。跟同胞争夺生存空间的同时还想占据道德制高点?这也太贪了点。老规划不适应新形势的错误不应该由任何群体单独承担,这难道不是最基本的道理吗?

-----

就异地高考问题本身,如果我没理解错它指的是在北京读书回去考试所带来的种种问题。别说什么不得以,我的朋友和同学中就有父母纯赤贫在老家把孩子送进大学的。我个人倾向于认为,这些考生的父母已经在孩子的前途和自己的眼前的生活之间做出了再明确的不过的选择。

posted @ 2011-10-31 09:36 怪怪 阅读(250) 评论(0) 编辑

2011年10月29日

拿到了乔布斯传

摘要: 不是我自己买的,因为用屁股想就知道基调已经定了,实在不想买。翻了100多页,其目的就是看看和我15年前看过的乔布斯传及20年来各种披露有何不同。看到现在让人踏实的是,连段子都没有什么新的。作者树碑的方式并不是构造虚假的现实,比如Woz还是那个创造Apple的人,比如施乐还是第一个实际作出今天我们所见的这些电脑的人。作者的办法是在承认事实的基础上,尽量给主角涂脂抹粉、同时轻描淡写真正的功臣。之所以说“踏实”,是因为这也是我事先想象的唯一可行的写作方式。不过其中吹捧还是超过了我的预计,方法也略显幼稚;换一个好莱坞文青写的话这本来是多好的题材啊!而现在却更像一部写给低素质领导人士的成功学指南。Job阅读全文

posted @ 2011-10-29 17:08 怪怪 阅读(430) 评论(2) 编辑

2011年10月6日

媒体啊媒体

摘要: 怎么一个伟大的电子消费品大师就成了推动IT界发展的创新源泉了?IT界每一个真正的进步一直都是踏踏实实的工程师文化推动的;其它类型的人物就是再伟大,最多起一个对任何行业都无差别的服务性质的作用。媒体是我们这个时代最重要的东西,恐怕没有之一;不过它所创造的氛围却总是好坏参半。比如IT界的工作者、学习者很容易被引导到错误的方向。媒体行业的性质决定了从业者对任何一个其它行业来说都是外行。这可以理解,但我总觉得非常好笑:越把他们耍得团团转、在他们眼里就越杰出。不过说实话我也很可笑:这种事情与我何干,就不顺眼了发牢骚,唉。阅读全文

posted @ 2011-10-06 20:20 怪怪 阅读(251) 评论(2) 编辑

2011年9月26日

不要让橄榄枝从我的手中落下

摘要: 《教父》里老头子:“我伸出了友谊之手,但你却往上面吐吐沫”。可人家老头子有实力,而标题这句话的背后的人民...弱势民族苦难多啊。阅读全文

posted @ 2011-09-26 05:08 怪怪 阅读(276) 评论(1) 编辑

2011年9月14日

最近的一些想法和总结

摘要: 最终放弃了做一个python版的简易数据库,而是最终转向了C++实现;没有指针计算做这种事情简直就是隔靴搔痒。当然,两个星期是不可能了,两个月都快有了吧。这个过程中产生了一些想法。首先是关于C和C++的选择,最终是主要用C,局部实现中偶尔用一些C++。这有两方面考虑:首先从外部来讲,C的接口是最通用的二进制接口;其次从内部来讲,这一块实际上没什么和方法论相关的东西,指针和数据布局同时既是最大的抽象,也是最具体的细节。事实上也很难发现mongo的代码因为用了对象而比任何其它类似项目的代码漂亮。这个和mongo作者们的选择形成了一定的反差。就我估计他们作出采用C++的决定恐怕只是“顺理成章”,而没阅读全文

posted @ 2011-09-14 17:45 怪怪 阅读(407) 评论(4) 编辑

2011年9月13日

王绍光:历史的逻辑与知识分子命运的变迁

摘要: 王绍光,现为香港中文大学政治与公共行政系教授,英文学术刊物《The China Review》主编,1990年-2000年执教于美国耶鲁大学政治系。《 南风窗》(以下简称“《南》”):对于五七年反右,有很多种不同的理解:有的学者认为,毛.泽东搞的是“阳谋”,先“引蛇出洞”,后“聚而歼之”,反右早在计划之中;有些学者又有不同意见,他们认为原先只是整风,后来情势发生逆转,才演变为反右的——我想知道,您对五七年反右持什么样的看法。王绍光(以下简称“王”):“阳谋”是毛.泽东后来自己讲的,但是开始就是要“整风”。我一般讲毛.泽东跟别的领导人不一样,他老想改革自己一手创立的制度,1949年之后他有三次大阅读全文

posted @ 2011-09-13 02:15 怪怪 阅读(355) 评论(2) 编辑