来自:http://blog.csdn.net/mozilla/archive/2007/07/22/1702365.aspx   感觉不错,与大家分享。

这里所涉及到的都是与软件开发有关的技术,感觉很有必要总结一下我从业以来所使用过的开发技术以及所经历过的几次技术转型。

1996年7月-1999年10月3年时间一直使用C语言编写电信协议软件,算作我的C语言时代。其中还使用过一段时间SDL语言和基于SDL的代码自动生成工具(瑞典Telelogic公司的SDT)。
2000年3月-2000年10月7个多月时间使用Perl语言做网站开发,算作我的Perl语言时代。后来转向了使用Java和JSP,用了两个月。
2001年2月-2001年8月6个月时间使用JavaScript做DHTML开发,还使用ColdFusion做网站开发。
2001年12月-2001年6月7个月时间使用C语言做企业级邮件服务器开发。
2002年8月之后做开发一直使用Java语言至今,算作我的Java语言时代,算算已经快5年了。

在我使用过的这些语言中,有3种语言对我的影响最大,那就是C、Perl和Java。当然JavaScript对我的影响也很大,不过对于整体的应用软件开发来说,JavaScript并不是一个主角。

现在我正在经历一次新的技术转型,从Java语言转向Ruby语言和Rails框架。

如果说以前的几次技术转型都是因为工作的变动而导致的,那么这一次技术转型则是我自己主动发起的,因为我感觉Ruby代表着应用软件开发技术(注意限定词 “应用软件”)的未来。Ruby是一种比Java更加先进的应用软件开发语言,最重要的是它能够带来极高的开发效率,而且不会影响代码的可读性和可维护性。

一年多以前我对Java还抱有一些幻想,认为Java社区如果有更好的框架,开发效率一定会追上Rails。今年5月我读了 Bruce A. Tate的《超越Java》这本书,希望从专家那里了解一下Java语言和Java社区到底出了什么问题。这本书打消了我的幻想,让我理解了Java最大的问题在于静态类型对开发效率造成的严重影响。联想到我去年下半年做的那个广告发布平台,我对此深有感触。我当时所采用的框架是Spring MVC+Spring IoC+Hibernate+FreeMarker+SiteMesh,按理说在Java开发领域,这套组合的开发效率应该算是比较高的了。然而实际的开发进度远远低于我的预期,我作出第一个版本的时间差不多是预计时间的两倍。当然因为资金的缺乏,大部分时间都只有我一个人在做开发,什么都要亲自动手,困难确实很多。不过我认为主要的问题还是在于Java语言做Web开发的笨拙。

因为资金的缺乏,我今后要做一些自己感兴趣的东西,注定仍然只会有很少的人参与(2、3个人),Java这样笨拙的语言可能会使我付出双倍的代价。

当然,Java语言仍然在发展和变化,但是它变的越来越复杂,越来越缺乏一致性,最终很可能会发展成为像C++那么复杂的一种语言。Java越来越不适合Web应用的开发了(我说的比较谨慎是因为这个领域是我最熟悉的),是到需要寻找一种新的开发语言的时候了。

Rod Johnson确实很伟大,在参与翻译了《J2EE without EJB》之后,我至今仍然对Rod Johnson对于JavaEE的伟大贡献深感敬意。但是Spring是从企业应用环境成长起来的,它对于面向Internet的Web应用来说,仍然是太重了。而Web 应用的很多重要的需求(例如对Ajax的支持、对REST的支持等等),Spring并没有解决。做企业应用,Spring仍然是很好的选择,然而做Web应用,Spring,甚至是Java语言本身,都不是很好的选择。为何在Web应用开发技术方面,PHP最终占据了第一的份额,这是很值得思考的。

我们以前做网站开发从Perl语言转向了Java语言,主要的原因有以下这些:
1. Perl开发的应用代码量大了之后很难维护。我自己写过一个4、500行的复杂Perl程序,过了两个月后再读居然都读不懂了。
2. Perl这个工具最初是设计用来取代bash、awk、sed等工具的,因为Larry Wall觉得这些工具还不够强大灵活。Perl最初并不是设计用来作为一种全功能的应用软件编程语言的。
3. Perl对面向对象编程支持的并不好。
4. 对于Web开发来说,Perl的资源(开发框架、开发库)没有Java丰富,很多功能需要自己来开发。
5. CGI开发与支持session的Servlet/JSP开发相比太原始,开发难度太大。

所以我们有非常充足的理由转向Java语言。还有一个不大好开口的理由就是,做Java开发当时似乎是成为一个专业程序员的标志,纯粹的面子问题,当然Java程序员的就业前景也要好的多。

但是转向Java之初最强烈的感觉就是Java做一些与文本处理相关的工作非常麻烦,没有Perl快捷,而这些工作对于开发Web应用来说是很常见的。当时 Java核心类库甚至还不支持正则表达式,需要下载学习其他的开发包,直到JDK1.4之后Java核心类库才开始支持正则表达式。不过JSP这样与 ASP、PHP类似的服务器页面技术是比CGI要先进一代的技术,所以开发效率还是比写Perl CGI有所提高。

我做了一段时间JSP 开发,发现全部代码都混在页面中问题很多,于是开始学习Java Web开发的Model1和Model2,并且接触到了当时刚刚兴起的Struts。不过因为工作转换,并没有深入使用Struts。后来我用了半年 ColdFusion之后,就不爱使用JSP了。JSP的开发效率虽然比Perl CGI高一些,但是比起ColdFusion来说还是要低很多。JSP开发后来逐渐转向基于custom tag的开发方式,并且最终出现了JSTL,在我看来是一种对ColdFusion的模仿。Java社区后来出现了n多的MVC框架、n多的IoC框架、 n多的ORM框架。《J2EE核心模式》所提倡的标准的三层架构至今仍然被当作铁律来遵循,过多的层次带来了巨大的灵活性,同时也带来了巨大的复杂性。除了JavaEE之外,我还没有看到其他的服务器端开发技术如此强调三层架构或者多层架构。一般来说,分出MVC就足够了。而JavaEE开发不仅要在 Web表现层中分出MVC,还要在M中再分出业务层和持久层。这个分层的设计,是做JavaEE开发很难实现Martin Fowler在《企业应用架构模式》中提倡的充血的domain model的一个主要原因。另外Java语言本身的静态类型所造成的笨拙和无法避免的重复代码也是一个主要的原因,如果不强调分层,并且真的实现充血的 domain model,那么一个类中包含的代码量会显得太多太复杂了。

Java社区中的一些厂商目前在大力追捧JSF和EJB3,但是我并不认为JSF和EJB3或者将两者集成在一起的JBoss Seam能够拯救JavaEE。复杂性才是JavaEE最大的问题,JBoss Seam成功的关键在于它能否成功地掩盖JSF和EJB3的复杂性,使得学习成本降低到与Rails相当的级别。不过即使它能够做到,将来开发者还是要面对Java语言本身的静态类型所造成的开发效率低下。我并不认为JBoss Seam有机会在开发效率上超越Rails。另外一个值得关注的框架是Grails,它是基于动态语言Groovy的,严格来说不能算是Java社区的框架。不过由于它基于Spring、Hibernate、SiteMesh,所以也可以看作是Java框架的进一步发展。在开发效率方面Grails也不大可能超越Rails。除了开发框架本身,还需要考虑众多外围工具的支持和社区的规模,在这些方面Grails不可能达到Rails的水平。还有一个RIFE呢,虽然我完全不了解它,不过看来它受到的关注很少。一个几乎完全被忽视的框架,成功的前景估计很渺茫。Wicket我认为是不值得考虑的,现在我们应该把目光仅仅投向那些full stack框架上,建造一个更加精巧的Web MVC框架解决不了根本的问题,对开发效率的提升是有限的。Cetia4和Restlet也是两个很有趣的框架,特别是它们能够支持REST开发,代表了 Java Web开发框架的未来。Google的Guice是一个很有可能取代Spring的轻量级IoC框架,前景似乎不错。不过Cetia4、Restlet、Guice这些框架和Wicket一样,并不是full stack框架,对开发效率的提升是有限的。

根据上述分析,我现在对Java社区内部的创新能力已经感到很失望了(很明显我后知后觉了,感到失望的大有人在),这种持续了10年之久的创新能力似乎已经逐渐枯竭。由于动态类型的脚本语言(Python、Ruby、JavaScript等等)这些年来取得了长足的进步,而且在Web开发方面出现了一些killer级的框架,现在是将目光投向其他开发语言的时候了。我的决定就是在今年下半年完全转到Ruby和Rails这个平台上面。从Java转到 Ruby有几个强有力的理由:
1. Rails可以让单个开发者在开发效率方面接近自己能力的极限。我并不是一个完美架构的fans,热衷于不写一行代码,巨细无靡地分析各种架构优劣直到脑神经瘫痪。我热衷的是解决用户真正关心的问题,用技术改善他们的生活,与用户建立起良好的人际关系。
2. Rails框架对Ajax有更好的支持,通过使用RJS模板可以极大减轻一般情况下做Ajax开发的复杂性,提高开发的效率。
3. Rails框架对REST开发提供了最好的支持。REST在Web开发方面会越来越重要,全面支持REST就是未来所有语言Web开发框架发展的方向。
4. JRuby 1.0对Rails的支持已经很好,而且支持直接使用Java开发的资源,所以现在是从Java转到Ruby的一个适当的时机。

我已经读完了《Ruby for Rails中文版》,并且出了一个个人的勘误。《应用Rails进行敏捷Web开发》第2版我已经读了1/3,在一周之内可以全部读完。这两本书读完之后,基本上已经入门了。在入门阶段我只准备读这两本书,然后我会通过开发来熟悉更多的技术。因为我对Perl、JavaScript和Java语言的熟悉,所以学习Ruby和Rails并没有感觉有什么难度。事实上阅读《应用Rails进行敏捷Web开发》第2版要比我阅读《Struts实战》之类的书容易理解的多(同时也更加有趣味,我第一次没有感觉犯困),到目前为止,一切都感觉很自然。Ruby在我看来就是Perl+JavaScript+Java,毫无疑问是一门伟大的语言。很可惜晚学习了整整一年多,否则去年见到Martin Fowler的时候本应该问他更多关于Ruby的问题的。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1702365

转载于:https://www.cnblogs.com/xxcainiao/archive/2007/09/20/899580.html

从Java到Ruby——我的最近一次技术转型相关推荐

  1. JRuby:使Java和Ruby成为一家人

    一. 引言 Ruby是现在编程界讨论得正热火朝天的一种语言.这种语言功能强大而且易于使用:同时Ruby还紧密 绑定到例如Ruby on Rails等web应用程序开发框架中.另一方面,在过去的十年间, ...

  2. 通过drb集成java和ruby环境

    通过drb集成java和ruby环境 通过drb集成java和ruby环境 - fsword's blog 通过drb集成java和ruby环境 Mar 8th, 2012 | Comments ru ...

  3. 比较Perl、PHP、Python、Java和Ruby

    !预览 · 语言的发展趋势一定是动静结合.刚柔并济 · Perl凝练晦涩,Python优雅明晰,Ruby精巧灵动,PHP简明单纯 · 或许优雅正是来自对细节和规范的重视 · (RoR)与Ruby结合之 ...

  4. 为什么说Java是2021年最值得学的技术?

    随着时代的发展,互联网行业越来越普及,想加入这个行业的人也越来越多.Java的主要优势就体现的很明显,可以说Java是2021年最值得学的技术!为何这样说呢?Java到底有哪些优势?接下来,小千为答疑 ...

  5. java webservice报文过长_工作1-5年的Java程序猿到底需要怎样的一个技术栈?

    工作1-5年的Java程序猿到底需要怎样的一个技术栈? 前言: 具有1-5年开发经验的程序员 需要学习的内容其实还有很多很多. 今天跟大家交流一下希望分享出来的对大家能够有帮助,这是我这些年总结出的一 ...

  6. ctp怎么设置java的编码为GBK_GitHub - yuelong2456/java-ctp: java包装的上期ctp,用swig技术实现。...

    java-ctp java包装的上期ctp,用swig技术实现. 2014-4-7 10:09:11 项目已经搭建好,上传到这里方法还不会.时间比较紧,有空上传上来. 2014-7-31 22:43: ...

  7. Java支持latex,基于Java和LaTeX的文档自动生成技术研究

    基于Java和 LaTeX 的文档 自动生成技术研究 ◆尚宝欣 徐 屹 (东北电力大学理学院,吉林 长春 132012) [摘 要]讨论了结合Java与LaTex 自动生成 PDF文档的方法.针 展名 ...

  8. java jdk 8学习笔记,Java JDK 8学习笔记 PDF_源雷技术空间

    资源名称:Java JDK 8学习笔记 PDF 内容简介: ●本书是作者多年来教学实践经验的总结,汇集了学员在学习课程或认证考试中遇到的概念.操作.应用等问题及解决方案 ●针对Java SE 8新功能 ...

  9. Java 后端开发面试总结:25 个技术专题(最全面试攻略)

    另送福利: java 面试准备 准确的说这里又分为两部分: 1.Java 刷题 2.算法刷题 Java 刷题:此份文档详细记录了千道面试题与详解:  !     私信我回复[03]即可免费获取 很多人 ...

最新文章

  1. “几何深度学习”受爱因斯坦启示:让AI摆脱平面看到更高的维度
  2. 时时监控程序运行的方法
  3. WebBrowser 操作(从网上收集)
  4. css3盒模型:IE6混杂模式下的盒模型
  5. 【SDOI2014】数表【莫比乌斯反演】【树状数组】
  6. 简述java的线程_Java多线程的简述
  7. #react 之ant design Pro 学习研究#----启动项目
  8. matplotlib中改变字体的方法
  9. 2021年中国超声波织物切割机市场趋势报告、技术动态创新及2027年市场预测
  10. 数睿数据、艾瑞咨询联合发布《2021年中国企业级无代码开发白皮书》
  11. 硬币找零,最长上升子序列,背包问题等动态规划问题详解
  12. 【IT168 新闻】用友U9 SOA管理软件业标杆吗?
  13. python指南针_Mircopython: 在BPIbit上制作指南针
  14. 一天一个 Linux 命令(27):mkfs 命令
  15. 成功解决windows系统开机时,系统提示此windows副本不是正版
  16. Taylor公式和插值多项式
  17. 00815 计算机基础,国开(山东)00815-计算机应用基础-模块1 windows 7 操作系统——客观题-辅导资料...
  18. 编程要了解的基础知识
  19. dlopen函数使用示例
  20. java 规则引擎 教程_【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-groupsalience...

热门文章

  1. Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏
  2. Android开发笔记(一百三十三)导航视图NavigationView
  3. ulimit限制 新系统_graylog日志分析系统上手教程
  4. Python基础(10) Python创建list
  5. sqoop 把 hdfs 和关系型数据库 (mysql等)互导
  6. iOS uuchart 用法
  7. AS3利用AMFPHP与PHP进行通讯
  8. FreeRTOS内核实现05:支持多优先级
  9. 从xls或者txt等格式的文件中读取编码码率以及PSNR
  10. 数据拟合---使用自定义函数进行非线性拟合 -在Origin。matlab拟合工具箱cftool