怪怪 | Nothing, Everything

"有过一个发疯的时刻,有感觉的钢琴以为它是世界上仅有的一架钢琴,宇宙的全部和谐都发生在它身上." - 狄德罗
随笔 - 151, 文章 - 3, 评论 - 2669, 引用 - 62
数据加载中……

2009年6月16日

我他妈服了这位老兄了!

http://www.bjkw.gov.cn/n1143/n238966/n239049/7072147.html

就是曾经提过的Thompson NFA,看发明人,似乎和原作者没什么关系。

这事办的有点操蛋过头,20年前在美国过期的算法,又跑中国来申请专利。

对这位专利蛀虫,只有国骂相送。也希望咱们的专利审批机构能专业点。

这个专利的算法只有成员性测试的功能,不知道是不是能覆盖所有沾边的?

P.S. 最早的专利是由Ken Thompson(谁听说过?)在68年左右申请的。

 


 

还记得我说的“雾计算”吗?虽然还算不上,不过Opera卖出了第一步。

不过这离真正的雾计算还很远,我的幻想能不能成为现实,还得看。

毕竟,除了当初Cat Chen的理由,还有我最头疼的开放性和置信度的平衡。

这个问题上,哪怕像Opera这样的小公司来解决,也比自发成型容易一些。

所以关键是Opera的眼光有多远,中间的路径是如何设定的。

一步达到根本不可能,中间错一步就可能默默的死亡,这事,不好说。

posted @ 2009-06-16 07:42 怪怪 阅读(858) | 评论 (0)编辑

有关权限和位运算的一点想法

没看海洋和另一个兄弟的设计。

我的想法是对资源应该有统一的ID,先甭管它是什么,真身是什么,存在哪个表里。

有的时候这样的设计不可得,这时可以考虑从权限角度讲,如何能有一种可用的、可扩展的资源定位的方式。

其次是对无差别资源条目的共同操作,可以被抽象和实现到一处。

可以参考的例子有很多(也说了很多遍),比如NTFS上文件管理的Access Control。

类似设计里面存在的一个疑问是,不同的资源操作可能不同,其实这只是一个约定和解释的问题。

这一点不比文件管理复杂,只有一些可以商榷的细节。比如,对于不同资源的不同操作,我们如何编码。

根据目标特征,特殊的编码方式一定会有其自身的好处,不过将会要求我们实现更复杂的动态翻译。

这种复杂将体现在CRUD以及更高层次操作的各个方面,所以还需谨慎。

和这种设计相关的一种具体实现是位运算这种方式,很多系统采用这种方式是有道理的,为什么呢?

我倒是不太赞成说位运算的实现能快多少,即便差别有几十倍几百倍,但至少不是指数级的差距。

(非说效率的话,关键是不同的问题交织在一起时,权限验证所花费的时间是如何被放大的,这个很看具体场景。)

主要是,它通过重新利用废掉的bit,纯粹降低了复杂度(trick本身是好理解的);而且没有真正产生Trade Off。

我们可以考虑,一个xx位的数据,其中大多数bit可能是对当前要验证的(用户、数据、操作)元组没有用的。

这本来是一种冗余,将会带来空间和运行时间的浪费,但这被计算机本身的特点避免了:没有冗余也需要相同代价。

冗余发挥的作用显而易见,一个运算代替了所有的其它设计可能存在的复杂实现,这里就不多说了。

一个讨厌之处在于限制,一个int值有32个位置,long有64个,可权限却可能更多,尤其是每种资源操作不同。

有时候我可以考虑重用位置,比如第二位在资源A上表示一种操作,资源B上表示另一种。

当然这又重新带来了复杂度,比如要求设计时避免将来可能产生的重叠和不一致,需要小心维护它们。

(考虑这将导致对于同一用户,两种资源的两个不同操作权限只能是同步的)

实际上这是因为受限于持久层软件的能力才产生的。可想如果持久层是自己的,那自由度就高很多。

很遗憾这不太可能,尤其是权限系统的独立也不太可能(因为总会存在联合操作的需求,比如某种查询)。

那么使用更大位数的字段或者更多的相同类型的字段(根据数据库软件的特性选择),是一个替代共享的方案吗?

我觉得行,但是没有时间和机会去验证这个。

有一点是可以确定的,即便是1024种操作也不过是32个int,数据量的控制还是不错的。

当然,还有一种方式是干脆用更多的连接表来展开用户、组、资源、操作之间的全部关系,这在关系模型的能力之内。

或者结合设计:对于(资源类别、用户)对,有一个唯一对应的bit组或其他编码形式说明各个操作。

我觉得具体的做法还是需要根据项目来,这似乎是废话,不过实际上思路也是有限几种。

无论是整体设计还是细节,恐怕都不能统一到某一种绝对占上风的方式上,不过还是有些建设性的探索工作可以做。

这就是找出不同的方式和不同场景其特征之间的对应关系。

这才是重用的基础。至于标榜某种做法“优胜”,或者是仅简简单单的说它“够用”,个人不敢苟同。

一些想法,欢迎大家讨论。

posted @ 2009-06-16 00:50 怪怪 阅读(892) | 评论 (3)编辑

2009年6月15日

....

大家跟那吵什么呢?

knuth还真不是一般人,仔细体会了一下LR(k),靠,原来还真没发现,这个算法确实有那么点无懈可击的感觉,尤其是这可是40年前的东东了。

虎书的作者视角也很有趣,今天注意到他的一句话,LR(k)中,DFA是用在栈上而不是输入上的,漂亮的视角。比用DPDA强行理解要好得多。

活学活用还真是不容易,对于我这样的笨蛋,简直就是靠时间堆出来的。什么时候才能跳出框框呢?有点感觉了,但是又好似不太够。

还得再咂吧咂吧虎书作者的那句话。

一方面是更好的体会一下LR,但更多的,是学会这种变换视角的方式。研究阶段快要结束了,希望有个真正的提升。思想的自由真是难得。

由这段历程,再次想到一句别人教育我的话:

“自由是对必然的认识。”

虽然这句话属于我全盘接受的东西之一,不过我心目中最完美的名言是下面这句:

“质量是惯性的量度。”

有点不着边际,是吧? :)

posted @ 2009-06-15 02:15 怪怪 阅读(859) | 评论 (3)编辑

2009年6月5日

还有何时需要注释?

上篇文章中,我强调了注释的非必要性。今天重新反思了一下我设计和实现的过程,发现这篇文章还有一些需要补充的,才算完整。

在此之前,先说明一下在这两篇文章中,那些“真正”属于注释范畴的东西:既提供给作者和修改者看的,和代码放在一起的文本。

对于提供给使用者看的文本,比如上篇文章中提到的接口描述,无论是否采用了注释的形式,一概算作文档,不在讨论范畴之内。

对注释有帮助的情况的个人经验补充

引用一下上一篇文章说的两种情况:

1. 一句或一段代码抽象过了头,也许需要跟业务相关的描述建立一个直观的对应。

2. 因为安排的不够妥帖或者很难妥帖,一段逻辑中蹦出一句为不相关逻辑服务的代码。

实际上除了这些,还有两种场景让我去写注释:

3. 脑袋说的那种对接下来要实现的东西的描述,在我的代码中体现为“//TODO:”。

4. 另外一种情况,我自己认为这里有问题,但是暂时选择了不去修改它,体现为“//CAUTION:”。

这两种情况和上面两种是不同的。

这样的注释,会随着项目的进行和重构,一点一点的消失掉。最终我会Find in Files,确认这两个标记已经不在了。

无论如何,这也是注释,而且它们对我产生了帮助。还有什么是需要注释、或者说注释可以帮助我们的?

有一些代码留下这样的注释:“以下算法实现了论文xxxxxx,时间复杂度是m,另有论文yyyyy,时间复杂度为n”。

这就又多了一种情况:

5. 这种一句话交代背景、指向文档的注释也总是有作用的,它们是一种建立联系的索引。

这种注释和第一种有相似性,但又有所不同。

我相信还有其它类似的经验,希望掌握它们的兄弟为大家提个醒,让这个讨论变成建设性的,而不仅仅是一种辩论。

对上篇文章讨论的一些补充

那种描述逻辑的注释真的有用吗?按照脑袋的体验是有用的,但是我觉得这种经验确实不是放之四海皆准的;同样,注释无用论也不见得适合每一个人。

我个人仅仅是认为,让不写注释的兄弟去照顾写注释的,不像很多人想象的那样理所应当,这个上篇文章基本阐述清楚了我的想法。

对于这个问题,下面再补充一个我个人的经历,有兴趣的可以看看,没兴趣的可以跳过了。

大家可以先看一下这段代码,这是一个简单的使用javascript解析javascript语法子集的例子。当初我将这段代码翻译成python的,一共花费了1天左右的功夫。

在核心函数expression的注释上,我花了3个小时去写和改。按照我当时的认识,我会认为这是因为这段代码的复杂度要求我阐述其逻辑,我甚至举了一个精心的例子来描述其执行流程。

实际上昨天看这些代码(原装的和我翻译的)时,我真正的感受是,这个东西设计的真不咋地。假设当初我看到的是更好的设计和实现,我根本就不会花费那么时间和精力。

如果这段(原装的)代码是我身边的人写的,那么我会要求他去重构,而不是补上注释。事实上正是因为结构设计的不够优良,实现的也不清晰,才导致自己和别人产生理解上的种种障碍。

如果说当初我在翻译版本中留下的注释有什么作用,就是提醒我“这段相对其它内容比较复杂,需要仔细一点”。考虑我对自己原先写下的注释(肯定不是错误的)的反应,我不太相信它们能对其他人发挥什么良好作用。

这段代码的核心是递归下降与算符优先的结合,有人可能注意到了,其作者Douglas Crockford有比注释更详细的文本解释其来龙去脉。更多的内容还出现在《代码之美》之中,我第一次翻译的时候这个中文版就在我手边。

我要说的是什么呢?我不能说这些文本在当时对我一点帮助没有,但是我个人认为,即使如此详尽的文本,对阅读代码而言,也抵不上清晰可读的结构。

况且,对于一个有限的时间,我们能写出十好几页16开的注释吗?

posted @ 2009-06-05 18:56 怪怪 阅读(2121) | 评论 (13)编辑

2009年6月4日

怪怪谈注释

闲话不说,本篇主要讨论注释的非必要性。

以我个人的经历来说:从满篇清晰工整的注释到一字未写的(过于玩具的不提,只谈那些逻辑复杂或者职责分配分散的),上至大牛神作下至身边比Community Server写的还乱的,我从没看过注释。

另一方面,说实话,虽然很多人B4我这样的,但是我仍然要恬不知耻地说,我也基本不写注释;而过去在作为一个管理者的角色时,我从来不要求别人写注释。什么叫做“基本”呢?

就是说以下两种情况例外:

1. 一句或一段代码抽象过了头也许需要跟业务相关的描述建立一个直观的对应。

2. 因为安排的不够妥帖或者很难妥帖,一段逻辑中蹦出一句为不相关逻辑服务的代码。

而这两种情况出现的极少。

当然这和我经历过的几个工作环境有关系:无论是遗留还是全新,我总能自己决定是不是重构或让别人重构;如果我花费了比预期更多的时间读代码的话,我也总能让人相信那就是必要的。

但是可以想象,一个比我接触过的环境更加赶鸭子上架的环境,如果没有把设计和代码整理好的时间,也必然没有做注释的时间。很多人否认这一点,认为加几句话自己以后看也清楚,费什么功夫。

不是这样。

在头脑发热的时候,大多数人只想抓住自己当时稍纵即逝的灵感(无论在哪个水平上),他脑子里怎么想的在当时是非常明白的,而5分钟后就未必了。这时他确实应该整理思路,可List上却有其它更重要的事情。【1】

那么我的观点是什么呢?

要么组织上并不存在资源(时间、人力)不足的情况,这时大多数设计和实现因为足够好而无需注释;要么就根本没时间写注释。这绝对不是作者的错,有时甚至不是组织的;尤其从作者的角度来看,根本没辙。【2】

唯一的办法就是不断增加阅读代码的水平、理解业务逻辑的水平。这两个能力获取的信息相互印证,一点一点往前走。组织没提供给你足够时间怎么办?那不是你的错,也不必为此有愧疚或愤怒,咱也是没辙。

那么什么时候也不需要注释和文档吗?不是,比如库作者必须写明接口如何使用就是一例。但在这个之前,首要的一点是,尽量不要设计的让人深入库源码才能得心应手;需要说明的是,库是如此,而框架却很难做到这样。

也正是库和框架的区别,导致GoF中其中一个在若干年后放弃了框架式的设计。但是大家都有反射ASP.NET源码的经历:至少从我个人来说,即使对它的设计颇有意见,但也从来没有产生“要是有注释就好了”的念头。

合格的程序才是我们想要的,而不是注释。不合格的程序往往也就意味着连写注释的条件都没有:即使不是因为当时的具体情况,而仅仅是因为组织雇佣了一个水平低下且不负责任的人,这也是一个资源问题。

大家知道我很少说人情世故,上面这些话也不是从这个角度分析。

不过有一点,没有什么是我们能要求别人的。我们是擦屁股的人的时候,我们要知道社会认可了那个留下便便的;我们是管理者的时候,我们应该想办法为组织争取更多的资源,这是管理者的一个职责和义务所在。

是不是所有情况下都如此恶劣?当然不是。

比如就一些公司所针对的业务来说,可以以很低的成本就形成越来越多的约定和约束,让程序员可以自由发挥的余地越来越小。但这个过程主要是自上而下的,而本篇的目的是给任何水平层面上“不写注释”的程序员说两句,就不多关注了。

没办法的时候呢? 只能听天由命了。

 


 

P.S. 很多大牛甚至喊出了“注释是有害的”这样的口号;如此看来,我还是不够激进了,惭愧。

注释一:

什么叫更重要的事情?就是说,已经完成的代码做的再完美、文档在齐全,下面这件事不做或做不完,整个项目也会死。

一次完善也许可以说不算什么,但是谁写程序能够只有一处需要完善呢?我们要明白的是,当我们为几处生气的时候,这仅仅意味着我们只见到了这几处。

这样的代码即使不能说值得表扬,但针对具体情况,也许已经不错了:此人当时在其他更必要的地方花费的心血是我们没能体会的。

如果处处都让人生气,这就一定是一个非常严重的资源问题,不属于程序员这个层次,不再赘言。

注释二:

有人可能会说了,你别操蛋了,哦,至少够我写注释的时间,就不够那孙子了?三点:

1. 你面临的情况不同。人无法两次进入同一条河流,这点没法真正彻底的反驳。

2. 你水平比较高,也不过是因为组织掌握资源的状态和能力发生了变化;没人应该因为水平低挨骂。

3. 重申一遍个人观点,如果一个人真有足够的时间写清晰的、很难让任何人误解的注释,他应该把这个时间花在代码上。

多说一句的是,我并不是在说存在即是reasonable,具体问题具体分析。

posted @ 2009-06-04 21:39 怪怪 阅读(2667) | 评论 (49)编辑

2009年6月3日

关于首页上的几个话题

汇编与IL:老赵给的视角非常不错,受用了。

不过关于CLR内幕,我这里有一个问题,这些细节,大多数人知道它干吗?

如果一个项目不under the hood不行了,我肯定滚去使用C/C++了...

我不是提什么反对意见,我是想知道具体场景。

关于算法:回复中支持算法的兄弟们说的都很不错。

实际上,这里头最关键的一点是我们先要明白,算法没多难,也许之后再明白,数学没多难(没做到)。

具体说到大多数从业人员,算法造诣确实不是必需的;不过没有算法你也要有其他的东西。

我们不可能解决所有问题,但很擅长解决某一类,就是我们的特色了。

说到底还是一个(决定自己)价值体现在哪里的问题;尤其是硬骨头,永远免不了。

 


说点自己的事情。

一个对象,你给他什么操作,很多时候确实很难决断。

很早就说过,简单的“主语.谓语”式OO根本搞不定复杂的问题:缺乏有指导作用的建模方法。

存在多种看待问题的视角是很自然的事情,关键在于我们根据怎样的原则在其中挑选。

一些经验:相对于其它原则,代之以层次去决定操作如何在对象间安排。

为什么?因为抽象之前就要回答:关心的是哪个层次。

为什么我又开始说对象呢?因为我降低了函数式的使用程度和深度。

我要开始反思和总结过去一年的函数式热了。

初步体会,关键不在于函数式不能干什么,而在于某一个风格对我们的导向。

当你把一个函数的自变量和因变量其本身设计的足够合适,就会发现纯函数式风格的糖豆未免太少了些。

糖豆不应仅只是方便,也意味着一个更好的说明意图的方式。

切掉高阶函数等从非函数式看是糖豆的东西,在函数式风格上的挖掘又带给我们什么呢?

风潮本身给毫无顾忌的状态使用刹了车,提醒我们习惯之外的合理做法。【1】

我们应该时刻衡量一个状态的产生有无必要性,在空间和时间上有什么影响,尤其是沿什么路径传播的。

空间主要是指状态在数据结构之间,而时间在这里指的却是项目的成长期。

从这个角度来看,函数式的重新兴起是有意义的。

非函数式风格的难题在于交错的状态,反过来函数式风格的关键在于如何安排好数据结构之间的关系。

搭配?其实不是一件非常必要的事情。糖豆级的使用也说不上什么搭配。

一个合理的风格选择的衡量标准,恐怕是可读性。

如果自己读自己的程序,看起来不像一个傻瓜写的,那么也许切换些风格是不错的选择。

毕竟,在KISS面前,没有任何借口。

 


update:

注释【1】:

说点和大家相关的,回忆起以前的贫血模型、静态方法的讨论,不得不承认,在很多情况下这是增一分则多的方案。

我过去使用的方法是退化模型,就是我认为简单的结构是通过更复杂的退化得来的会比较舒服。

但这样在前期似乎不必要的工作量大了一些,相反“进化”在后期又可能痛苦。

上文说“习惯之外”,但这个“架构”恰恰在很多人习惯之内;只是有人总担心它太简单,然后担心又成为了习惯。

说这些不代表我支持某种风格的开发过程;只是这个问题,关乎于学习和实践,值得玩味。

update again:

由此想到,果然多范式运用再加上动态语言(最近用的python)也无法找到我想要的那种感觉。粘合和进化还是两码事情。

只可惜我不能以目前的生存状态一直持续下去,这样在语言设计上的学习、尝试,只能一推再推,不爽。

posted @ 2009-06-03 15:27 怪怪 阅读(472) | 评论 (3)编辑

2009年5月26日

嗯嗯

折腾眼前这个算法已经有一个月了。

本来没想弄这个,也没想到设计一个严肃点的算法或者说算法组合有这么费劲。还是水平低下的原因。

回顾其过程,TDD在这方面起的作用确实不大,这也证实了我一向的看法。

过去曾经说过,在契约编程之前,断言是个不错、又轻量级的方式。当时那么说的时候,其实是没有身体力行的。

后来看到这也是《编程珠玑》的作者推荐的方式;他同时提到我们真写程序的时候往往又抛弃了严谨的做法。

现在我发现在一些工作中,不得不经常性的加入断言了。难怪PERL的作者说:

“你们当中很多人都知道程序员的美德。当然啦,有三种:那就是懒惰、急躁以及傲慢。”

像不像你我:) 偏偏只有这样的人,才会跟程序较真。这不是很奇妙么?

前面的书单,克莱因的两本著作不推荐购买。原因是,这两本都是表达相同观点的,重复内容也比较多。

估计《古今数学思想》(尚未购买)是他的这些观点的集中,那么其他作品就没什么必要阅读了。

《数》这本书里除了一些历史,大多数东西我之前都知道了,但是作为入门科普,枯燥性确实算比较小的。

《证明与反驳》稍微翻了翻,对于学习思维方法应该有所启发;其它的还没看。

我最近的看法是,实际上计算机软件技术,比较核心的一个领域实际上就是对数学工具的一种具体实现。[1]

而相对外围的(不是说价值小),是对领域知识及存在的模式的一种复制,用以取代人类效率不佳的重复性工作。

相对“没价值”的是什么?我个人认为是底层知识及具体技巧。[a]

包括但不限于,比如系统内核、硬件相关、X协议、Y平台等领域中,排除数学之后所剩余的那些东西。

(经验方法论则根本不值一提了,努力往似是而非的哲学观点上靠恰恰是缺乏基础的表现)[2]

当然这些“没价值”的东西也需要聪明劲儿:尤其是考虑到创造力或感情所成就的一批像Linus这样的作者或发明家。

(即便在那些仅仅是*真正擅长摆弄事物*的专家身上,我们也能学到很多东西)[3]

不过,就康德所说,科学的严肃性和该学科内包含的数学成正比;这还是有一定道理的。[b]

缺乏对数学工具的熟练使用,像我现在这样勉力支撑,实在有点痛苦....

 


  Update:

注1:小学算术也是数学,就最单纯的程序员来说,有时候我们可以简单认为,背后的数学多少和工资直接挂钩。

注2:我的一个体会是,听上去很有道理、看似能帮助很多人,和真正简化人类工作之间不同是需要掂量的。

注3:事实上这里隐藏了一个强调:星号括起来的部分,和“熟知某种东西”, 两者之间是有本质差别的。

Update:

注a:在一个紧急时刻卡在这里,有时是糟糕的甚至致命的。在这一点上我也许包含了比较多的个人喜恶。

但是长期来看,专属某一具体工具的知识,其价值肯定是呈一个滑坡的趋势。

注b:也许我给了数学过高的评价,而这正是因为我不懂数学?

从我阅读得到的蛛丝马迹来看,数学领域里不是不存在混乱,数学家的智力也并未明显高于一般人类。

不过,可以暂且认为关注的不是具体的数学,而是数学所代表的对思维方式的认真追究。

posted @ 2009-05-26 00:35 怪怪 阅读(878) | 评论 (0)编辑

2009年5月11日

只有上学的时候没学

最近做一个东西,对一件事体会特别深。程序设计和编写,实际上就是把问题弄明白的过程。这个过程就是学习。

其实世界上大多数事情都当如此,那些不包含这一过程的工作可以说都是毫无价值的;这一点通过对社会的观察也可以看到。

和朋友说这些话,朋友说,没错,干什么都是学习,只有原来上学的时候没学。深以为然。

我说,即便很多好学生,往往也只是填鸭,不是学习。这是来自于一个很有经验的前辈和我说过的话:“不面对问题,学了也不体会。”

不过就我看到的,仍然有一些年轻人极具天赋;他们在上学甚至更早的时候,就在每一件事上实践这个过程了。

也许有人不以为然,觉得自己始终是这样。其实这个门槛没有我们想象中那么低。大多数时候我们所谓的思考,不过是个擦边球罢了。

什么样的商人发财概率大?什么样的“马屁精”升职概率大?

所有这些问题,无论看起来是市集上的还是象牙塔中的,包括我们怎样能真正的实现自我,实际上答案就在这里了。

posted @ 2009-05-11 11:03 怪怪 阅读(1544) | 评论 (2)编辑

2009年4月30日

近期书单

什么是数学:对思想和方法的基本研究(增订版)

证明与反驳:数学发现的逻辑

来自圣经的证明(第3版)

西方文化中的数学

数--计算机、哲学家及对数的含义的探索

后现代思想的数学根源

数学与知识的探求

甘地自传

幸福的方法

具体数学:计算机科学基础(英文版.第2版)

《什么是数学》被人抢走了...,补一本。此书对认为自己不懂数学的人绝对值得一买,比较擅长数学的就价值不大了。因为我属于前者,所以后面半句属于估计。

《具体数学》、《来自圣经的证明》,算是对两位人物致敬吧。虽然其实我不太喜欢Knuth这样的学阀,后面一本也不是Erdos自己写的,不过花这个钱总比麦当劳来的有价值。

其它的业余数学读物就是看着玩玩。关键是我觉得多读读这些能对自己想问题有些潜移默化的影响。

《甘地自传》就不用提了,自选读物;《幸福的方法》是Allen Lee介绍的。

上博客园以来,有两个人对我产生了真正的积极作用,就是装配脑袋和Allen Lee。前面一位让我终于能够开始探讨一些严肃点的计算机科学的问题了,后面一位对我的精神状态完善给出了毫无保留的帮助。

什么叫做贵人,这就是贵人 :)

Update:

居然中了BlackHole Remote Control,想起来可能是半年前手快,点了一个电驴上下的伪装成XX门图片的EXE,以后还是看清楚后缀,而不是图标....。写这个玩意的作者据说还挺仗义,拒绝做成隐藏式的,所以我才用肉眼看出来的。以后把安全策略开最高了。

其实我觉得现在反病毒软件完全没有必要做了,特征码就是屎,启发式如果是全自动的也比较不靠谱。如果是用户自己搞个可执行文件到机器上,难道他还不知道这是干嘛地的?

Vista、Mcafee Policy和Norton UAC才是方向,因为现在正常的程序比乱七八糟的程序还少 -___-。而且,只要清楚地告诉用户什么程序在做什么,是这一次允许还是长期允许,是批量还是眼前这个,其实对使用者是很方便的一件事,完全构不成麻烦~

posted @ 2009-04-30 17:26 怪怪 阅读(1671) | 评论 (4)编辑

2009年4月25日

精彩介绍的推荐:What can compilers do for us

http://www.slideshare.net/jserv/what-can-compilers-do-for-us

嗯嗯,我承认过去对台湾同胞带有偏见,一直以来认为海峡那边无论做高层组织还是底层开发的,也就是研究些流于表面的东西,没人关心核心的软件技术。

看来又得承认错误了....

这个slide里有一句话有点意思:“我不会写Java Code,但是我会写Java VM”,这让我想起Fantasy老兄的面试经历

客观地说,我也不知道是不是能设计真正实用的编译器或者VM就能像Anders一样让Gates把你当宝贝,甚至一定保证有一份不错的饭吃。

但是想必能够这样回答别人的时候,YY的感觉还是相当爽的,呵呵。

posted @ 2009-04-25 06:02 怪怪 阅读(2072) | 评论 (0)编辑