转一个自认为不错的帖子

我在邮件列表里找到一个我认为不错的帖子,作者没找到,估计是翻译国外的。跟我的情形很像,从PHP到Zope,也许我永远不会学Java。而且我对PHP4完全没有兴趣,面向对象才是我要学的。如果PHP5不能满足我,那我只有向Python那里跳了, 既有django这种轻量级的,又有Zope这种重量级的东西。

我觉得这个世界上的程序员 可以分为两种:"主动程序员"和"被动程序员"。"主动程序员

"可以自己选择开发方式,开发语言和框架,"被动程序员"被动接受公司指定的语言和开发方 式。其实在现实生活中,这种分类并不绝对,一个程序员可能在不同的时候担当不同的角色,"被动程序员"也可能享有有限的主动权。这么分类并不以程序员本身 的知名度,财富多少,是否自己创业还是受雇于人有关。

  David Heinemeier Hansson 受雇与 37 Signal ,但是仍然可以自己选择建立自己的 Rails 框架来完成项目,他应该算是个"主动程序员"。Firebird 数据库的领导者同时也是 Interbase 数据库的创始人 Jim Starkey 将自己的公司卖给了 Mysql AB 而不得不给 Mysql 干活,从某方面说,他应该是个"被动程序员"。大多数第三世界国家的程序员应该属于"被动程序员",他们编程只是为了一份养家糊口的工作,他们无权选择自 己喜欢的编程语言或者框架,因为这是公司给他选择的,因为如果选了其他,他可能就找不到工作了。曾经有个即将离职的同事让我给他推荐一个比较好的编程框 架,可以很容易完成一个网站的制作,我给他推荐了 Zope, 还有 Rails, 他听我的介绍觉得不错 ,当我告诉他必须学习 python 和 Ruby 编程语言时,他显得很惊愕,"那能找到工作吗?"。这话其实也表达了大多数国内程序员的想法。看看招聘网站就知道,现在最需要的程序员是 Java 程序员,最需要了解的框架是 Struts。如果不会你很难得到面试的机会,所以就算你不会也要在自己的简历中"修饰"一下。

  有些自己创业的人可以自己选择喜欢的编程语言和框架,当然那毕竟是少数。如果我能够选择的话,我肯定不用 Java 来做网站应用。因为它完成一个简单的工作太麻烦了,很难快速适应需求的变化。当然我也不会去用 PHP ,因为我已经习惯了面向对象的编程方式了。 我发现一个奇怪的现象:大多数转向学习 Ruby on rails 框架的人都是来自 Java 阵营的程序员,而转向Python 框架Zope,django 的程序员大多有 ASP,PHP 背景。因为 Ruby 是一个真正的面向对象的语言, 它同时具备了脚本语言的特点,而 Python 首先是一个脚本语言,它具备了一些 OO 的特征。Java 程序员 很难忍受走回头路,所以他们选择了一个比Java更面向对象的语言 Ruby ,而PHP,ASP程序员没有那么重的思想负担,他们选择 Python 可能是因为它的代码更 Beauty ,远比他们以前写的"意大利面条"式的PHP,ASP 代码要干净的多。

  无论是 python, 还是 Ruby 这些非主流程序语言开发的框架,使用起来都异常的简便,他们可谓是真正从程序员角度考虑的框架。为什么 Ruby 一出,搅的 Java 的世界一片混乱,我想原因还是出在 Java 这里,当 Java 程序员想当然地认为程序开发应该如此麻烦的时候,Rails 的出现让他们立刻觉得被这些所谓的 Java 流行框架和 Sun 给欺骗了,这种欺骗是如此之深,以至于他们中间有的人"头也不回"的离开了 Java, 转而攻击 Java 的种种不是。这其中比较有名的人就是 Bruce Tate ,这位老兄写了两本轰动 Java 世界的书,Spring: A Developer's Notebook 和 Better, Faster, Lighter Java (该书可是获得 Jolt 大奖的,恰好我还都读过),随着 Rails 的流行,这位仁兄立刻叛逃出 Java 阵营,写了 Beyond Java 一书,着重介绍了一些非Java 框架,比如 Smalltalk 的Seaside, 和 Rails。

  Java 为什么这么复杂,我想了很久,得出这么个结论:这是因为 Sun 希望它那么复杂。为什么这么说呢?Sun 不是一个好的软件公司,它最擅长做的是制定规范,这很类似Java 编程中的 Interface, 经常编写 Java 程序的人,会发现 Interface 可能是出现最多的一个词汇了,任何框架中都充满了Interface —接口,大多数编程书都推荐面向接口编程(当然这不是Java的错,是设计模式要求的,不过 Java 将此发挥的最好)。首先定义接口,然后针对接口编写不同的实现,至少提供默认的实现。Sun 也是如此,看看 J2ee 的规范包含了多少 J 打头的技术, JDBC,JNI,JCA,JDO,JPA …. ,现在的 JCP 组织更加如此,每隔一段时间,就有大量的规范问世,Draft 的,还是 Final 的,充斥着Java 世界,这是 Sun 希望的, 每定义一个规范,就会有很多厂商来实现它,Java 的软件市场就做大了,这样 Sun 就可以靠授权,认证拿更多的钱,你看 Sun 的股票那么低迷,而却拥有那么雄厚的流动资金,原因再明白不过了,只要 Sun 还拥有 Java ,它就拥有了一切。

  Sun 希望 Java 变得复杂,就如同程序员希望 Perl 代码难看一样,这样做是可以带来好处的。Java 的复杂性也带来了产业链上其他行业的繁荣,比如咨询,在 Php ,Perl 流行 Internet 的年代,网站开发似乎还不需要咨询师,包括 C/S 盛行的时候,企业开发也不需要咨询师,然而随着 J2EE 逐步主宰企业级开发,咨询行业也开始兴旺起来。企业大把大把的把钱投入到开发咨询中,究竟效果如何,不得而知。我想对大多数程序员,尤其是那些有自己想法 的程序员来说,请求咨询公司,还不如自己去了解来得清楚。软件开发咨询师在我看来,有点象是"律师"—"代表贪婪的公司,让这个世界变得更糟糕一些"(中 Alex 的对白)。如果说国外的咨询师是希望通过主观的努力来解决客观存在的开发复杂性的话,那么国内的咨询行业可能把原本复杂的软件开发变得更加复杂了。我不相 信他们,我宁可选择某个软件的培训,而不希望有人来从头到尾指点你如何开发,因为国内咨询师的水平比你从书本上了解的高不到哪里去,公司又何必花费这笔冤 枉钱呢。

  那么如果你是个"主动程序员",你会跟着 Sun 的指挥棒走吗? 我想离开 Java 世界,你选择的机会应该很多,但是前提是:你愿不愿意离开 Java 。因为大多数人觉得改变现状其实并不是个好事情,学习一个新语言和框架意为着你过去所有的经验就消失了,这其中有风险。对大多数程序员 来说,编程其实就是份工作,跟卖盒饭,装机器没什么区别,只要搞好本职工作就可以。试图改变现状的人很痛苦,了解差异的人也是如此,就如同 Neo 在接受红药丸和蓝药丸。

  我在当年学习 Perl 的时候曾经买过一本《Learning perl》,书的作者曾经这么说,学习 Perl 是为了让自己把更多的时间用在去滑雪, PHP 的创始人 Rasmus Lerdorf 也曾经这样表示过,他希望自己能够减少盯着电脑的时间,可是这么多年过去了,他发现自己还是要继续盯着该死的电脑。其实我对选择框架语言也并没什么兴趣, 我只是希望能够以简单的方式完成工作,而把时间省下来去听听音乐,看看电影。实际上我跟不希望改变现状的人没什么不同,他们不希望学习新的东西,因为现有 的东西很熟悉了,学习新框架,还不如把时间放到玩上去,我的目的一样,我学习只是希望自己的工作更轻松一点,这样可以用更多的时间来玩。所以每当我看到各 种技术论坛上充斥着Java, .net , ROR ,Python 之类的争吵,我都觉得很好笑。其实为了维护一个语言而争吵最没有意义。编程语言就和英语,计算机一样,就是个工具,选择它们只是为了尽可能简单地完成工 作,提高生活质量。为了语言而语言,为了框架而框架都是没必要的。"主动程序员"可以选择自己的方式来工作,这是大多数人做不到的。如果有可能,我也希望 做一个"主动程序员"。

激战

在3月7日的时候,我比较期待的一个游戏“激战”公测了。我玩了2天,与我想的还是有点差别。个人感觉主线剧情不是很明确,虽然采用一些特殊的方法来表现。但这些并不能让人满意。也许对网络游戏玩家来说,剧情根本就不重要。

游戏里面对等级和装备这些东西并不太看重,而技能得到了显著的提高。一个好的RPG游戏应该有个好的系统用来展现人物的能力,这点在“激战”中被弱化了。

可能我现在对网络游戏没兴趣,还是什么别的。玩了两天就不想玩了。不知道这个游戏会怎么样。也许我应用把暗黑重新装起来。 

译言这个网站我喜欢

由于每个人的英语手平有限,因而放弃了一些或漏掉了一些对自己非常有价值的文章。现在国内有许多团体翻译国外blog的文章,如:blog中文翻译。让我对这些网站非常感兴趣。用Thunderbird订阅他们的feed,真是一件美事。

今天,我在Nicky's blog上找到了译言网,发现里面的内容还挺适合我的。而且,这个网站还提供英文版本,让老外来了解中国。呵呵,非常值得关注的网站。

对Apollo的一点看法

最近,和在做Flash编程的同事聊Apollo的事情。从他那听到,一些做Flash编程的朋友对Apollo兴趣非常之高。从现在的一些信息来看,这个Apollo到底是个什么?

这里的PDF可以给你更深的了解,Mike Chambers

总的来说这是一个平台,当然也是跨OS的。这个平台的主要技术就是Web+Flex,这里的Web是指的是基于浏览器开发的技术。使用的是WebKit Open Source Engine,是apple基于KHTML的一个分枝为基础开发的,在OSX上面已经大量使用该技术。这是该平台两个主要的特征,Flex对大家来说生疏一些,对这个技术我也不是非常了解,但通过同事的演示来看,是一种类似Flash的技术,但比Flash有更多的控件,适合客户端的开发。

Apollo的功能和API:

  • Offine / Occasionally Connected
  • Applications can run in background
  • Network
    • HTTP
    • XML-RPC / SOAP / Rest based web services
    • Binary and XML sockets
  • File I/O
  • Local storage / Settings API
  • Custom Chrome
    • Shape
    • Alpha
  • more

可以说是非常引人注目的,提供高质量的界形输出是肯定的。

那么,主要的竟争对手是,.Net?Java?

如果用Java开发客户端程序,那个界面真是没得说啦…,如果用Apollo来开发的话,界面就是不是问题。就内存来说,我觉得这两个都是内存大户,也是Apollo更大。就开发效率来说,这方面Apollo更有竞争力,支持多项技术开发,并且都是已经很成熟的技术,Flex稍微例外一些。并且,这个两家伙都跨平台,而且Adobe在手机方面也开始发展,在我看来只有服务器方面没有与Apollo正面冲突。

由于.Net只能在Windows上面运行,那就是说Adobe已经向Windows宣战了。就界面来说,两者差不了太多,Apollo有微弱优势吧。内存方面就不好说了,这方面Apollo落败。开发效率的话,Apollo当然比.Net的少多了。不过在手机方面不知道与微软的Windows Mobile有没有冲突。

也许这三家将形成三足鼎立的形式,是否是这样?那只有在Apollo发布已后,看看市场的反映才能知道了 

最新ZendFramework的Roadmap

0.9版将在这个月的15号冻结代码,这将是ZendFramework的第一个Beta版。并会以两个星期为间隔发布0.9.X版。在0.9版中,所有还在incubator目录中的功能开发暂停直到1.0版。当Beta版足够稳定和完善时,将发布1.0 RC版,依然以每两个星期为单位发布新的RC版。

1.0 RC大约在四月12,1.0大约在5月10号。

大家来华丽的期待吧!Laughing