• 2007-06-23

    CSDN的专访

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/6078050.html

    CSDN的专访()(

    被CSDN的人抓住完成了一个采访,大有一种被揭老底的感觉。不过,还是很高兴能和别人分享一下自己对一些问题的理解。出于媒体的需要,我的回答在某些部分被修改,稍微有些不同于我的原意,比如这么煽情的标题就是从我的原文中截取出来的,而意思就是因为少了几个字而变得有些不同,不过,对比于徐X那篇(不过现在已经不是最开始那个极其吸引眼球的标题了),我还是觉得访问我的那个编辑还是不错的。下面是当时的问题和我的回答,有兴趣的朋友可以读一下。因为这里的修改权在我手里,我也把问题修改到让我可以接受的程度。:)

    C:CSDN,D:dreamhead

    C: 用精辟的语言做一个自我介绍
    D: 我,一个热爱编程的程序员。

    C:您的软件开发生涯分了哪几个部分?
    D:我的程序员之路迄今为止经历了三个阶段:
    * 大学毕业之前,初学阶段:大学之前,我对计算机的了解几乎是0。经过四年的学习,我找到了自己真正喜欢的事情:编程,因为用程序解决问题让我很有成就感。于是毕业的时候,我放弃了继续读书的想法,我知道我需要的是更多的实践。
    * 大学毕业后的前三年,实践阶段:投身到实际的项目中,我对软件开发有了真实的体验。起步的时候,我遇到了几个良师益友,让我走上我认为的正确道路。我曾做过一个长达两年的项目,这让我对软件开发的生命周期有了一个相对完整的认识,个人能力也在这个过程中得到了极大的提升:从最开始的负责某个模块的编写,到后来负责整个系统的设计,直到最后基于此设计出一个框架,拿了公司Java大赛的冠军。经过这段时间的实践,我逐渐开始对软件开发有了一些自己的看法,也终于可以写出自己满意的代码。此外,我的blog之路也始于这段时间,并一直坚持下来,不断进行自我总结的同时,也结交了许多朋友。
    * 随后两年时间,提高阶段:我在公司内部做了一次调转,工作内容的转换,让我有机会接触到更多的东西:从图像识别到并行计算,再到多核程序优化,我的技术视野不断开阔,同时,利用业余时间完善着自己的知识体系,将原本零散的知识串在了一起。实际上,我认为自己这段时间做得并不出色,不过,恰恰是这段时间,我开始反思一些东西,逐渐的掌握了一些做事的基本原则,懂得了“踏踏实实做事,也不忘抬头看路“的道理。也正是在这个阶段,我接触到了XRuby,找到了自己的乐趣所在。
    我希望自己在加入ThoughtWorks之后,进入到第四个阶段,贡献阶段,用自己所学为别人带来更大的价值。软件开发不应该仅仅是自娱自乐,更应该是做一些真正对别人有价值的事情。

    C:你的经历对你加入这个项目有怎样的影响?您成长的环境对这个项目又有怎样的影响呢?
    D:我之前的经历对我参与XRuby这个项目并没有什么直接的影响,但正是多年的积累,让我有了足够的知识和能力参与到XRuby中:对编程的热爱,对新技术的关注、软件开发的功底和对计算机技术的理解等等。

    C:平时除了写程序之外还有怎样的爱好?这些爱好对你在软件方面的造诣有何影响?
    D:我的个人爱好是“读书、写字、编代码”。读书,让我学到知识,开阔视野;写字,也就是写一些东西,让我可以不停下思考的步伐;编代码,是我的工作,也是我的爱好,对我而言,分不清,也不需要分清。

    C:现在一起合作的伙伴都是对软件开发有热情的程序员,觉得哪些宝贵的经验可以与大家分享?
    D:我相信,每个人都希望自己能够同高水平的人一起工作,我也一样。能同一些高水平的人一起合作,我感到很兴奋,因为有机会和他们一起合作,才有机会近距离观察他们思考问题,处理问题的方式。代码可以轻松复制,但是代码背后隐藏的思想却不像代码本身那么显而易见。如果不是同这些高水平的人一起工作,很难发现背后隐藏的点点滴滴,而正是这些点点滴滴才让这些人与众不同。
    我接触到的这些许多人眼中的高手,其实都是一些普通人,只是他们对自己所做的事情都很有激情,也能脚踏实地的把事情一点一点地做好。他们通常十分谦虚,不会过分强调个人的工作,这使得大家的交流变得容易了许多,也有益于让事情向着最恰当的方式发展。这些人做事通常都有一定的美感,我很喜欢编程是一种艺术的说法,好的程序员不会允许自己做的事情向着丑陋的方向发展,这是他们做事质量的一个重要保证,这种美感是在日常学习工作生活中不断的思考逐渐养成的。这些人通常思路会比较开放,他们会非常包容的看待一些问题,吸纳别人的优点,不会将一些非技术的界限看得非常清楚。我曾经看到过不少拿“国内“、”国人“来说事的项目,其实,这种提法本身就是对项目没有信心的表现,我自己作为技术人员很清楚,促使我们做出选择的更多是因为技术上的原因。开源项目是没有国界的,它的生命力是由它自身的优点和其参与者的热情决定的。

    C:XRuby现在进行到什么阶段了?对于XRuby的发展规划和目标是怎样的?现在XRuby发展的最大问题是什么?
    D:XRuby目前最新的发布版本是0.2.0,这个版本是我们的一个里程碑版本,已经可以运行Ruby的单元测试框架。有了单元测试框架作为基础,我们就可以大大提高开发效率,我们下一个里程碑版本0.3.0的目标就是通过所有Ruby自带的单元测试,而XRuby 1.0的目标是运行Ruby on Rails。XRuby所做的事情是整合Ruby和Java平台,这样,我们便可以将Ruby的开发效率和Java的丰富资源结合起来。从这个角度来说,我们和JRuby团队拥有着共同的目标,所以,许多人认为两个团队是互相竞争的。事实上,两个团队是在互相帮助。我们会给JRuby团队一些建议,甚至贡献一些代码让JRuby更好的运行,而JRuby团队也会的与我们进行讨论,把他们的一些经验分享给我们。当然,这点在我和Ola Bini之间体现得尤为明显,因为我们都是ThoughtWorker,经常在一起交流。XRuby现在遇到的最大的问题就是就是资源有限:团队规模有限,而且大多数人没有很多时间可以投入,所以,很难快速发展。

    C:当时刚刚加入XRuby时是在一个什么样的背景下?当时这个项目最吸引你的是什么?
    D:加入XRuby时,我刚好在业余时间完成了《Ruby Hacking Guide》几个章节的翻译,对Ruby的内部实现有了一些了解。看到XRuby这个项目时,我感到特别兴奋:自己熟悉的Java、自己喜欢的Ruby、自己想要了解编译器技术。所以,我毫不犹豫的加入了这个项目。

    这些年的工作中,我见到过很多的开源项目,只有XRuby是一个让我真正动心,并投入大量时间去参与其中的项目。抛开个人喜好,我依然觉得XRuby是一个非常不错的项目。首先,当时看来,Ruby on Rails已经让Ruby赢得了更多的关注,只要有足够的关注,多半会有一个不错的发展,现在诸多公司的动作再次证实大家对Ruby的看好。再有,整合 Ruby和Java是一个非常棒的主意,因为程序设计语言的发展历程中,优秀的后来者都提供了比较好的方式利用原有者的优势,而不是直接推翻重来,比如 C/C++提供了整合汇编的方式,Java提供了JNI的方式去整合C/C++的资源,所以,Ruby已经有了整合C的方式,再有一个整合Java的方式就更完美了。当然,这两点并不足以让XRuby与JRuby区别开来,真正让XRuby具有优势的是它的编译方式。谈到编译和解释,人们通常会想到性能上的差异,也就是说采用编译的方式会让程序跑得更快。事实上,JRuby让很多诟病的主要原因就是性能。面对许多新技术,人们首先会质疑的就是性能,当年的 C/C++和Java都曾经历过这样的过程,但是事实证明,只要性能差异在一个可接受的范围之内,就可以消除人们对于性能的质疑。编译会成什么样子呢?这是我感兴趣的,也是XRuby主要的价值所在,事实证明,XRuby可以让Ruby代码在JVM平台上跑得像C Ruby一样快,甚至更快。当然,C Ruby还有很多可以提升的空间。比起当时的JRuby,这就是一个巨大的进步。所以,我相信,作为第一个做JVM上Ruby编译器的项目,XRuby这个项目对整个软件开发社区的发展是有好处的,这也是我愿意参与其中的重要原因。

    很多人对于参与开源项目,尤其是像XRuby这样的编译器项目,第一个反应是我不行,因为我不会这个,不懂那个。实事求是的说,参与XRuby之初,我也只是对语言的实现有兴趣,对编译器的了解也仅限于大学所学过的那点编译原理的知识,没有什么实战的经验。但我还是加入到XRuby中,因为我相信我可以在这个过程中学会这个项目所需要的知识。直到现在,我也不敢说自己精通编译器。随着项目发展,我不断补充着自己的知识,对编译器实现的理解也是越来越深:从最开始的只是贡献一些builtin的代码,到后来重写了这个runtime的实现,再到后来修改编译器的实现。希望我走过的这条路可以那些希望进入 XRuby项目或是其他开源项目的人借鉴。

    C:您觉得开发编译器最大的乐趣是什么?要开发一个编译器应该从什么地方开始?最需要注意的是哪些问题?
    D:从大学时代开始,软件开发中有三个领域一直我所希望有机会从事的,分别是操作系统、编译器和游戏。想把任何一个做好,都需要对计算机有着深刻的理解,而我从小就特别愿意弄清楚事情的来龙去脉。作为一个程序员,像操作系统和编译器的这些知识虽然很少能够直接应用到工作中,但懂得了它们的基本原理,可以让人写起程序来如虎添翼。我对编译器尤其有好感,作为一个程序员,理解程序设计语言背后的东西,有助于我们写出更好的程序,避免因为无知造成的损失。

    说到编译器,大家会想到词法分析、语法分析、代码生成等等这些令人望而却步的词汇。其实,做一个简单的编译器并不难,很多人熟知的龙书的第二章实现一个简单的计算器,涉及到了这本书介绍的几个大的方面。不过,从参与XRuby的经验来看,编译器只是整个开发中的一环,后面的Runtime和数量庞大的 builtin占了相当大的比重,它们是让语言更具生命力的部分。

    同普通的软件一样,编译器的开发首先要弄清楚需求。很多人谈到编译器,就会想到设计一种新的程序设计语言,其实,这个世界最不需要的就是一种新的程序设计语言,当然,这并不能阻挡很多人去设计新的语言。我看到过一些号称很有热情的软件开发者,设计了一些声称全新的语言,实际上,却没有很强的针对性,所以,这些语言注定没有很强的生命力。从需求的角度来说,XRuby既不是第一个在做JVM上做编译器的动态语言,也不是第一个在JVM上做Ruby的,但它做了JVM上的Ruby编译器,这是之前没有人做过的,独一无二的,也是它的价值所在。

    C:现在XRuby的开发团队是怎样的情况?团队是否还会继续扩大?准备达到一个什么样的规模?
    D:XRuby团队现在有大约十几个人的规模,经常性提交代码的只有五六个人。开源项目不同于公司的项目,我们无法预测团队规模如何发展,加入到这个团队完全是依赖于个人对于开源的热情和对技术的热爱。我们希望有更多的人加入这个项目中来,在这个过程中,可以体会到乐趣,还会有许多收获。这个团队欢迎任何贡献,鼓励任何尝试。我们一向欢迎任何对XRuby有兴趣的人加入其中,和我们一起体会开发的乐趣。

    C:Ruby语言最吸引您的地方在哪里?将来的发展趋势又如何呢?
    D:Ruby语言最吸引我的地方是它的优美。对于很多用惯了像C/C++、Java这种静态语言的人来说,初涉Ruby会有一种震撼的感觉,它会让那些我们习以为常的繁琐操作变得异常简单,这也是开发效率大幅度提升的根本,这是许多动态语言的共同特征。随着计算机硬件的不断进步,机器的价值越来越低,人的价值则越来越高,所以,提高开发效率对于从事软件开发的人来或组织来说,显得更加重要。再有,我们知道,程序设计语言是架设在问题领域和解领域之间的桥梁,主流程序设计语言的进步就体现在越来越靠近问题领域,从汇编语言到C,再到C++,再到Java,无不如此。相比于很多静态语言,Ruby更接近问题领域,所以,我们可以更多把自己的精力放在要解决的问题上。UML也是一种向问题领域靠近的方式,不过,在我看来,相对于这种使用于模型的方式,Ruby之类动态语言更容易为程序员们所接受。还有很重要的一点,Ruby语言具有很强的元编程能力,这也是越来越多人关注的DSL(Domain Specific Language)的基础,通过适当的定制,可以让语言更加靠近问题领域,提升抽象层次。从实现角度来说,相对我所了解到其它动态语言来说,Ruby有一个设计良好的对象模型,只要理解了这个对象模型,就很容易对Ruby语言进行整体上的把握。

    从最近一段时间一些公司的动作来看,大家都特别看好Ruby的未来。我相信,Ruby不仅仅可以用在日常脚本或是Web应用上,它会得到越来越广泛的应用,会在越来越多程序员的日常开发中扮演越来越重要的角色。事实上,ThoughtWorks正尝试着让Ruby运用于企业开发,并且取得了不错的效果。另外,公司的重头产品Mingle——一个敏捷项目管理工具——也是用Ruby开发的。我期待着,在Ruby社区和众多软件公司的共同努力下,Ruby会得到更好的发展。
    分享到:

    历史上的今天:

    以终为始 2011-06-23
    引用地址:

    评论

  • 仔细阅读了一遍,你娓娓道来的叙述,清晰地表达出了你的思想。
  • 在CSDN看到了,CSDN编辑的嗅觉还很灵么,呵呵。
    回复Tony Bai说:
    是CSDN先发的,然后,我又发在自己blog上的。
    2007-06-26 17:19:48