在这篇文章中
![](/icons/89381dou.gif)
我们将要探讨Java和Ruby语言迁移时风险预测方面
![](/icons/89381de.gif)
问题
![](/icons/89381dou2.gif)
通常来说
![](/icons/89381dou.gif)
“使用Ruby具有风险”是
![](/icons/89381yi.gif)
种普遍
![](/icons/89381de.gif)
看法
![](/icons/89381dou.gif)
这存在
![](/icons/89381yi.gif)
定
![](/icons/89381de.gif)
原因
![](/icons/89381dou2.gif)
![](/icons/89381yinwei.gif)
使用新
![](/icons/89381de.gif)
语言天生是有风险
![](/icons/89381de.gif)
![](/icons/89381dou2.gif)
随着Ruby on Rails逐步进入到主流
![](/icons/89381de.gif)
开发领域中
![](/icons/89381dou.gif)
这样
![](/icons/89381de.gif)
风险将会随时间逐渐降低
![](/icons/89381dou.gif)
![](/icons/89381yinwei.gif)
有逐步增长
![](/icons/89381de.gif)
开发者群、组件(或称作gems和plug-ins)相关
![](/icons/89381de.gif)
书籍、以及业务合作伙伴和你沟通交流
![](/icons/89381dou2.gif)
但同时你也可以听到主流
![](/icons/89381de.gif)
观点指出“使用Java是安全
![](/icons/89381de.gif)
”
![](/icons/89381dou2.gif)
对于这种
![](/icons/89381de.gif)
观点
![](/icons/89381dou.gif)
我持有强烈
![](/icons/89381de.gif)
反对意见
![](/icons/89381dou2.gif)
随着语言
![](/icons/89381de.gif)
膨胀
![](/icons/89381dou.gif)
这样
![](/icons/89381de.gif)
风险通常也会增长
![](/icons/89381dou2.gif)
为了便于理解在目前在这些观点上正发生什么变化
![](/icons/89381dou.gif)
投入点精力去研究Java最初
![](/icons/89381de.gif)
应用情况是值得
![](/icons/89381de.gif)
![](/icons/89381dou2.gif)
新技术采用概况
许多分析家拥有技术应用所需
![](/icons/89381de.gif)
描述模型
![](/icons/89381dou2.gif)
其中最为流行
![](/icons/89381de.gif)
模型是定义在Ruby
![](/icons/89381de.gif)
Web开发框架Iowa中
![](/icons/89381dou.gif)
用来描述农产品
![](/icons/89381de.gif)
应用
![](/icons/89381dou.gif)
稍后在
![](/icons/89381yi.gif)
本由Geoffrey A. Moore写作
![](/icons/89381de.gif)
名为
![](/icons/89381smhl.gif)
跨越鸿沟
![](/icons/89381smhr.gif)
(Crossing the Chasm)
![](/icons/89381de.gif)
书中
![](/icons/89381dou.gif)
被用来描述技术内容
![](/icons/89381dou2.gif)
在书中
![](/icons/89381dou.gif)
Moore分析了技术应用周期中存在着
![](/icons/89381de.gif)
5个截然区别
![](/icons/89381de.gif)
群体:
技术专家
![](/icons/89381dou2.gif)
这个群体倾向于采用新
![](/icons/89381de.gif)
技术
![](/icons/89381dou2.gif)
任何
![](/icons/89381yi.gif)
种有前途
![](/icons/89381de.gif)
技术都会引起这个群体
![](/icons/89381de.gif)
注意
![](/icons/89381dou2.gif)
先行采纳者
![](/icons/89381dou2.gif)
不管这项技术是否在主流技术中取得成功
![](/icons/89381dou.gif)
这个群体都将会采用新
![](/icons/89381de.gif)
技术来提升竞争优势
![](/icons/89381dou2.gif)
实用主义者
![](/icons/89381dou2.gif)
![](/icons/89381yi.gif)
旦新
![](/icons/89381de.gif)
技术进入主流应用
![](/icons/89381dou.gif)
或是有足够陡峭
![](/icons/89381de.gif)
增长曲线来保证技术将得到广泛采用
![](/icons/89381dou.gif)
那么实用主义者就会积极采用新
![](/icons/89381de.gif)
技术
![](/icons/89381dou2.gif)
保守派
![](/icons/89381dou2.gif)
只有新技术成为必须
![](/icons/89381de.gif)
时候
![](/icons/89381dou.gif)
他们才会考虑采用新
![](/icons/89381de.gif)
技术
![](/icons/89381dou2.gif)
怀疑论者
![](/icons/89381dou2.gif)
这个群体可能很晚才会采用新
![](/icons/89381de.gif)
技术
![](/icons/89381dou.gif)
或者也可能永远只使用某
![](/icons/89381yi.gif)
特定技术
![](/icons/89381dou2.gif)
Moore指出
![](/icons/89381dou.gif)
技术应用
![](/icons/89381de.gif)
关键的处在于团队(Team)中是否存在实用主义者
![](/icons/89381dou2.gif)
![](/icons/89381yinwei.gif)
实用主义者需要新技术大规模
![](/icons/89381de.gif)
应用
![](/icons/89381dou.gif)
这个中间群体希望看到其他务实派在团队(Team)做出承诺的前就使用新
![](/icons/89381de.gif)
技术
![](/icons/89381dou2.gif)
这是
![](/icons/89381yi.gif)
个类似于
![](/icons/89381smhl.gif)
第 2十 2条军规
![](/icons/89381smhr.gif)
书中所描述
![](/icons/89381de.gif)
现象
![](/icons/89381dou.gif)
![](/icons/89381yinwei.gif)
务实派们都会相互依赖
![](/icons/89381de.gif)
存在
![](/icons/89381dou2.gif)
出于这样
![](/icons/89381de.gif)
原因
![](/icons/89381dou.gif)
在先行采纳者排列在技术专家的后和务实派的前
![](/icons/89381dou.gif)
你会经常在市场接受度曲线中看到
![](/icons/89381yi.gif)
种下降
![](/icons/89381de.gif)
趋势
![](/icons/89381dou2.gif)
Moore将这种下降称的为鸿沟倾向
![](/icons/89381dou.gif)
并且这种想法应出于围绕任何新技术
![](/icons/89381de.gif)
风险讨论
![](/icons/89381de.gif)
中心
![](/icons/89381dou2.gif)
Moore解决思路方法是
![](/icons/89381dou.gif)
把重点放在跨越鸿沟
![](/icons/89381de.gif)
过程中
![](/icons/89381dou2.gif)
通常来说
![](/icons/89381dou.gif)
你很难通过
![](/icons/89381yi.gif)
个巨大
![](/icons/89381de.gif)
飞跃跨过鸿沟
![](/icons/89381dou2.gif)
你需要有
![](/icons/89381yi.gif)
个目标明确
![](/icons/89381de.gif)
细分市场
![](/icons/89381dou2.gif)
Java技术首先通过Applet
![](/icons/89381chengxu.gif)
进入网络客户端
![](/icons/89381dou.gif)
的后转向服务端
![](/icons/89381de.gif)
计算、移动终端、以及其他类似于移动计算以及企业架构
![](/icons/89381de.gif)
应用
![](/icons/89381dou.gif)
最终为网络带来强大冲击
![](/icons/89381dou2.gif)
在
![](/icons/89381smhl.gif)
超越Java
![](/icons/89381smhr.gif)
![](/icons/89381yi.gif)
书中
![](/icons/89381dou.gif)
我认为存在于
![](/icons/89381chengxu.gif)
设计语言的间
![](/icons/89381de.gif)
鸿沟特别严重
![](/icons/89381dou2.gif)
我们大多数人都认识到在Lisp语言上投入精力将大幅提高生产率
![](/icons/89381dou.gif)
但是同时也会导致更难找到合适
![](/icons/89381de.gif)
![](/icons/89381chengxu.gif)
开发人员、教学资源、类库以及组件等
![](/icons/89381dou2.gif)
同时我们还将不得不付出更多
![](/icons/89381de.gif)
花费来进行
![](/icons/89381yi.gif)
些必要
![](/icons/89381de.gif)
整合工作
![](/icons/89381dou2.gif)
出于这个原因
![](/icons/89381dou.gif)
大众市场只会以大约每十年
![](/icons/89381de.gif)
时间周期更换主流
![](/icons/89381de.gif)
编程语言
![](/icons/89381dou2.gif)
在服务端编程语言方面
![](/icons/89381dou.gif)
可以清晰看到这种趋势
![](/icons/89381de.gif)
存在
![](/icons/89381dou2.gif)
COBOL和Fortran语言出现于1954年到1961年的间
![](/icons/89381dou2.gif)
C语言则诞生在上世纪70年代初期
![](/icons/89381dou.gif)
C
![](/icons/89381jiajia.gif)
是出现在上世纪80年代中期
![](/icons/89381dou.gif)
Java语言则出现在1996年
![](/icons/89381dou2.gif)
我应当把C#语言算做整合高效
![](/icons/89381de.gif)
Java语言克隆版本
![](/icons/89381dou.gif)
虽然这样
![](/icons/89381de.gif)
说法可能会引发
![](/icons/89381yi.gif)
些争辩
![](/icons/89381dou2.gif)
许多其他
![](/icons/89381de.gif)
语言在此阶段中诞生
![](/icons/89381dou.gif)
但是上述语言仍旧没有
![](/icons/89381yi.gif)
个能够占据统治地位
![](/icons/89381dou2.gif)
伴随
![](/icons/89381de.gif)
风险是阻碍新编程语言被广泛采用
![](/icons/89381de.gif)
最重要原因
![](/icons/89381dou2.gif)
Java
![](/icons/89381de.gif)
风险概况
使用Java语言曾经需要克服很大
![](/icons/89381de.gif)
风险
![](/icons/89381dou2.gif)
当时
![](/icons/89381dou.gif)
大多数服务端
![](/icons/89381de.gif)
编程都在使用C
![](/icons/89381jiajia.gif)
语言
![](/icons/89381dou2.gif)
C
![](/icons/89381jiajia.gif)
是
![](/icons/89381yi.gif)
门高效
![](/icons/89381de.gif)
操作系统语言
![](/icons/89381dou.gif)
非常适用于应用
![](/icons/89381chengxu.gif)
开发
![](/icons/89381dou2.gif)
C语言家族在这方面
![](/icons/89381de.gif)
表现相当出色
![](/icons/89381dou.gif)
![](/icons/89381yinwei.gif)
客户机/服务器端编程以及用户界面开发需要
![](/icons/89381chengxu.gif)
性能和适应性良好地结合在
![](/icons/89381yi.gif)
起
![](/icons/89381dou.gif)
在当时其他
![](/icons/89381de.gif)
编程语言都无法符合这样
![](/icons/89381de.gif)
要求
![](/icons/89381dou2.gif)
为了克服伴随采用新编程语言而来
![](/icons/89381de.gif)
风险
![](/icons/89381dou.gif)
Java需要以下
![](/icons/89381de.gif)
3个条件均成立:
C
![](/icons/89381jiajia.gif)
开发者不得不经历
![](/icons/89381yi.gif)
番辛苦
![](/icons/89381de.gif)
学习过程
![](/icons/89381dou2.gif)
指针
![](/icons/89381de.gif)
存在(由于缺少编译时
![](/icons/89381de.gif)
安全性)导致各种各样难以消除
![](/icons/89381de.gif)
缺陷
![](/icons/89381dou2.gif)
内存管理使得内存泄漏成为家常便饭
![](/icons/89381dou2.gif)
C
![](/icons/89381jiajia.gif)
对于大多数
![](/icons/89381chengxu.gif)
开发者来说
![](/icons/89381dou.gif)
显得过于复杂
![](/icons/89381dou2.gif)
这些问题增加了针对于C
![](/icons/89381jiajia.gif)
语言
![](/icons/89381de.gif)
风险评估
![](/icons/89381dou2.gif)
Java需要解决
![](/icons/89381yi.gif)
些C
![](/icons/89381jiajia.gif)
语言无法处理
![](/icons/89381de.gif)
工作
![](/icons/89381dou2.gif)
Java语言所具有简洁、灵活
![](/icons/89381de.gif)
特性以及众多C
![](/icons/89381jiajia.gif)
所不包括
![](/icons/89381de.gif)
类库支持
![](/icons/89381dou2.gif)
这些要素减少了针对于Java语言
![](/icons/89381de.gif)
风险评估
![](/icons/89381dou.gif)
并可以保持开发团队(Team)小型化最终从根本上提高生产力
![](/icons/89381dou2.gif)
Java需要
![](/icons/89381yi.gif)
个催化剂
![](/icons/89381dou2.gif)
随着网络爆炸
![](/icons/89381dou.gif)
Applet应用普遍被嵌入在NetScape浏览器中
![](/icons/89381dou.gif)
使得C语言开发者不得不转向去开始使用Java语言
![](/icons/89381dou2.gif)
C
![](/icons/89381jiajia.gif)
![](/icons/89381yinwei.gif)
和Java语法
![](/icons/89381de.gif)
类似
![](/icons/89381dou.gif)
可以简单地进行过渡
![](/icons/89381dou2.gif)
Java得以迅速获得数量庞大
![](/icons/89381de.gif)
用户群
![](/icons/89381dou.gif)
并且在同微软
![](/icons/89381de.gif)
竞争中逐步提升这样
![](/icons/89381de.gif)
过渡
![](/icons/89381dou2.gif)
Java
![](/icons/89381de.gif)
膨胀要比我们以前所见
![](/icons/89381de.gif)
任何
![](/icons/89381yi.gif)
次技术浪潮都要迅速
![](/icons/89381dou.gif)
同时也可能比我
![](/icons/89381yi.gif)
生所见
![](/icons/89381de.gif)
任何技术都要庞大
![](/icons/89381dou.gif)
然而Java
![](/icons/89381de.gif)
发展蓝图却
![](/icons/89381yi.gif)
直保持清晰
![](/icons/89381dou2.gif)
为了建立新
![](/icons/89381de.gif)
语言
![](/icons/89381dou.gif)
原有
![](/icons/89381de.gif)
语言已不适应开发者
![](/icons/89381de.gif)
需求
![](/icons/89381dou.gif)
新
![](/icons/89381de.gif)
语言必须要克服原有语言
![](/icons/89381de.gif)
缺陷
![](/icons/89381dou.gif)
并最终以某些催化效应迅速聚集起数量庞大
![](/icons/89381de.gif)
用户群
![](/icons/89381dou2.gif)
Java作为Internet应用语言在客户端迅速得到立足
![](/icons/89381dou2.gif)
借助于灵巧
![](/icons/89381de.gif)
Applet应用
![](/icons/89381chengxu.gif)
![](/icons/89381dou.gif)
由于Java提供了对于应用开发者极有帮助
![](/icons/89381de.gif)
特性
![](/icons/89381dou.gif)
使得Java快速转移到服务器端开发
![](/icons/89381dou.gif)
这些特性包含有:
内存管理
干净
![](/icons/89381de.gif)
继承模型
更好
![](/icons/89381de.gif)
面向对象功能
便携性
Internet类库
安全
……以及其他许多特性
![](/icons/89381dou2.gif)
在我看来
![](/icons/89381dou.gif)
Java
![](/icons/89381yi.gif)
直以来都是最为成功
![](/icons/89381de.gif)
编程语言
![](/icons/89381dou2.gif)
随着Java不断
![](/icons/89381de.gif)
改进
![](/icons/89381dou.gif)
使用Java语言变得越来越安全
![](/icons/89381dou.gif)
并最终在Internet应用中统领着服务端开发
![](/icons/89381de.gif)
市场
![](/icons/89381dou2.gif)
商业投资
![](/icons/89381dou.gif)
开发者社区
![](/icons/89381dou.gif)
各种教育培训
![](/icons/89381dou.gif)
开放源代码
![](/icons/89381de.gif)
框架
![](/icons/89381dou.gif)
以及各种各样
![](/icons/89381de.gif)
信息发布都使得使用Java开发
![](/icons/89381de.gif)
风险降低
![](/icons/89381dou2.gif)
上述几点清晰地解释了Java取得成功
![](/icons/89381de.gif)
原因
![](/icons/89381yi.gif)
旦新
![](/icons/89381de.gif)
![](/icons/89381chengxu.gif)
开发语言跨越鸿沟
![](/icons/89381dou.gif)
开发语言相关
![](/icons/89381de.gif)
风险则会随着市场占有率
![](/icons/89381de.gif)
提升显著减少
![](/icons/89381dou2.gif)
Java则拥有
![](/icons/89381yi.gif)
个令人赞叹
![](/icons/89381de.gif)
成功过程
![](/icons/89381dou2.gif)
但是
![](/icons/89381chengxu.gif)
设计语言没有仍旧停留在不确定
![](/icons/89381de.gif)
技术发展水平的上
![](/icons/89381dou2.gif)
所有成功语言都会产生技术膨胀
![](/icons/89381dou.gif)
![](/icons/89381yinwei.gif)
它们必须去适应使用者不断变化
![](/icons/89381de.gif)
需求
![](/icons/89381dou2.gif)
成功
![](/icons/89381de.gif)
编程语言无法像其他
![](/icons/89381de.gif)
语言
![](/icons/89381yi.gif)
样快速
![](/icons/89381de.gif)
适应变化
![](/icons/89381dou.gif)
他们必须保持
![](/icons/89381yi.gif)
定程度上
![](/icons/89381de.gif)
向后兼容
![](/icons/89381dou.gif)
来满足逐步增长
![](/icons/89381de.gif)
用户基本需求
![](/icons/89381dou2.gif)
随着技术滞后和语言膨胀
![](/icons/89381de.gif)
产生
![](/icons/89381dou.gif)
另
![](/icons/89381yi.gif)
种形式
![](/icons/89381de.gif)
风险预测逐步形成
![](/icons/89381dou2.gif)
为了新
![](/icons/89381de.gif)
风险预测
![](/icons/89381dou.gif)
由于风险和
![](/icons/89381chengxu.gif)
开发者高效完成工作
![](/icons/89381de.gif)
能力相关
![](/icons/89381dou.gif)
使得风险和市场占有率
![](/icons/89381de.gif)
降低有必然
![](/icons/89381de.gif)
联系
![](/icons/89381dou2.gif)
到目前为止
![](/icons/89381dou.gif)
我已经开始关注于新生技术
![](/icons/89381de.gif)
市场风险
![](/icons/89381dou2.gif)
在Java诞生十周年的际
![](/icons/89381dou.gif)
另
![](/icons/89381yi.gif)
种形式
![](/icons/89381de.gif)
风险评估成为必须
![](/icons/89381dou2.gif)
就像
![](/icons/89381smhl.gif)
人月神话
![](/icons/89381smhr.gif)
、
![](/icons/89381smhl.gif)
死亡的旅
![](/icons/89381smhr.gif)
和
![](/icons/89381smhl.gif)
人件
![](/icons/89381smhr.gif)
等许多有影响力
![](/icons/89381de.gif)
书籍中鼓吹
![](/icons/89381de.gif)
那些风险
![](/icons/89381yi.gif)
样:
低下
![](/icons/89381de.gif)
生产力将导致更庞大
![](/icons/89381de.gif)
团队(Team)规模和更长
![](/icons/89381de.gif)
时间周期
风险随着项目
![](/icons/89381de.gif)
规模而增加
风险随着团队(Team)规模
![](/icons/89381de.gif)
扩张而增加
质量风险
![](/icons/89381dou.gif)
以Bug
![](/icons/89381de.gif)
数量来衡量
![](/icons/89381dou.gif)
随着代码行数
![](/icons/89381de.gif)
增加而增长
成本
![](/icons/89381de.gif)
增长导致风险
![](/icons/89381de.gif)
增加
综合成本随着复杂性
![](/icons/89381de.gif)
提高而增加
随着
![](/icons/89381chengxu.gif)
设计语言或者编程范例
![](/icons/89381de.gif)
使用有了积累
![](/icons/89381dou.gif)
相对于技术发展水平
![](/icons/89381dou.gif)
语言将会和生产力相关联
![](/icons/89381dou2.gif)
项目团队(Team)需要增加规模
![](/icons/89381dou.gif)
开发者需要编写更多
![](/icons/89381de.gif)
代码来解决相同
![](/icons/89381de.gif)
问题
![](/icons/89381dou2.gif)
所有这些原因本身就会增加风险
![](/icons/89381dou2.gif)
所有
![](/icons/89381de.gif)
原因将会导致必然
![](/icons/89381de.gif)
结论
![](/icons/89381dou2.gif)
由于市场主宰地位
![](/icons/89381de.gif)
终止
![](/icons/89381dou.gif)
相对于技术发展水平来说
![](/icons/89381dou.gif)
生产力风险和开发语言相关性将会增加
![](/icons/89381dou2.gif)
在Java语言
![](/icons/89381de.gif)
范畴中
![](/icons/89381dou.gif)
这些情况是否以及如何发生是
![](/icons/89381yi.gif)
个将会引起激烈争论
![](/icons/89381de.gif)
话题
![](/icons/89381dou2.gif)
当然
![](/icons/89381dou.gif)
Java仍然是解决整个
![](/icons/89381yi.gif)
系列企业问题
![](/icons/89381de.gif)
最佳语言
![](/icons/89381dou.gif)
比方说非常大型
![](/icons/89381de.gif)
项目
![](/icons/89381dou.gif)
或是比如双相提交或核心对象关系映射等具备特定需求
![](/icons/89381de.gif)
问题
![](/icons/89381dou2.gif)
针对于Java
![](/icons/89381de.gif)
商业投资从来没有这么强过
![](/icons/89381dou.gif)
并且Java社区
![](/icons/89381yi.gif)
直是保持持续高涨
![](/icons/89381dou2.gif)
但是根基中
![](/icons/89381de.gif)
缺陷逐渐开始显现出来
![](/icons/89381dou2.gif)
Java
![](/icons/89381de.gif)
企业级JavaBean框架
![](/icons/89381dou.gif)
WS-*风格
![](/icons/89381de.gif)
网络服务
![](/icons/89381dou.gif)
以及JavaEE
![](/icons/89381de.gif)
复杂性和宽松度已受到越来越多
![](/icons/89381de.gif)
批评
![](/icons/89381dou2.gif)
James Duncan Davidson
![](/icons/89381dou.gif)
servlet
![](/icons/89381de.gif)
创始人的
![](/icons/89381yi.gif)
![](/icons/89381dou.gif)
曾表示Java不再像从前那样方便易用
![](/icons/89381dou2.gif)
目前很难给
![](/icons/89381yi.gif)
个普通
![](/icons/89381de.gif)
Java开发者
![](/icons/89381dou.gif)
讲明白如何解决最
![](/icons/89381yi.gif)
般
![](/icons/89381de.gif)
编程问题:比如有后台数据库支撑
![](/icons/89381de.gif)
网络应用
![](/icons/89381dou2.gif)
出现
![](/icons/89381de.gif)
相关证据是
![](/icons/89381dou.gif)
已经出现了很多使用其他语言
![](/icons/89381de.gif)
开发框架
![](/icons/89381dou.gif)
最为出名
![](/icons/89381de.gif)
就是Ruby on Rails
![](/icons/89381dou.gif)
在处理小规模问题时具备极高
![](/icons/89381de.gif)
生产力
![](/icons/89381dou2.gif)
资深Java开发者James Duncan Davidson
![](/icons/89381dou.gif)
Mike Clark
![](/icons/89381dou.gif)
Justin Gehtland
![](/icons/89381dou.gif)
Stuart Halloway以及其他许多开发者都证明
![](/icons/89381dou.gif)
在关键
![](/icons/89381de.gif)
小型项目中使用了Rails的后
![](/icons/89381dou.gif)
获得了非常高
![](/icons/89381de.gif)
生产效率:具备后台数据库支撑
![](/icons/89381de.gif)
绿色网络应用
![](/icons/89381dou2.gif)
当然
![](/icons/89381dou.gif)
我
![](/icons/89381de.gif)
个人经验也是可以轻松地使用Ruby on Rails构造、部署并维护这样
![](/icons/89381de.gif)
应用
![](/icons/89381dou2.gif)
这些报告将会引起广泛
![](/icons/89381de.gif)
争论
![](/icons/89381dou.gif)
就像是早期有关Java生产力
![](/icons/89381de.gif)
那些报告
![](/icons/89381yi.gif)
样
![](/icons/89381dou2.gif)
还记得
![](/icons/89381dou.gif)
在Java开发广泛普及的前
![](/icons/89381dou.gif)
Java首次出现在各式
![](/icons/89381de.gif)
小型应用中
![](/icons/89381dou2.gif)
开发人员
![](/icons/89381de.gif)
生产力是驱动Java早先增长期
![](/icons/89381de.gif)
重要标准
![](/icons/89381dou2.gif)
请谨记Moore有关新技术出现
![](/icons/89381de.gif)
理论
![](/icons/89381dou2.gif)
跨越鸿沟最好
![](/icons/89381de.gif)
方式不是通过
![](/icons/89381yi.gif)
次大
![](/icons/89381de.gif)
跳跃
![](/icons/89381dou.gif)
而是每次只前进
![](/icons/89381yi.gif)
个小
![](/icons/89381de.gif)
阶段
![](/icons/89381dou2.gif)
我坚信复杂性和松散
![](/icons/89381de.gif)
开发效率是使得Java目前正在经历风险
![](/icons/89381de.gif)
原因
![](/icons/89381dou2.gif)
Ruby和生俱来
![](/icons/89381de.gif)
风险
比起其他新生
![](/icons/89381de.gif)
开发语言来
![](/icons/89381dou.gif)
Ruby并没有什么特别的处
![](/icons/89381dou2.gif)
缺少商业投资
![](/icons/89381dou.gif)
有限
![](/icons/89381de.gif)
开发资源
![](/icons/89381dou.gif)
还缺少开发经验
![](/icons/89381dou.gif)
这都为新生
![](/icons/89381de.gif)
![](/icons/89381chengxu.gif)
设计语言带来了风险
![](/icons/89381dou2.gif)
下面是
![](/icons/89381yi.gif)
些我遭遇到
![](/icons/89381de.gif)
较大
![](/icons/89381de.gif)
风险
![](/icons/89381dou2.gif)
人才
![](/icons/89381de.gif)
缺乏
![](/icons/89381dou2.gif)
很难找到熟练
![](/icons/89381de.gif)
Ruby开发人员
![](/icons/89381dou2.gif)
根据Java
![](/icons/89381de.gif)
发展情况来看
![](/icons/89381dou.gif)
这样
![](/icons/89381de.gif)
现状将会很快有所改观
![](/icons/89381dou.gif)
但是就目前来说
![](/icons/89381dou.gif)
如果你计划在很短
![](/icons/89381de.gif)
时间内组织
![](/icons/89381yi.gif)
个人数较多
![](/icons/89381de.gif)
Ruby开发团队(Team)
![](/icons/89381dou.gif)
其困难程度远比组建相同
![](/icons/89381de.gif)
Java团队(Team)要大得多
![](/icons/89381dou2.gif)
缺少经验
![](/icons/89381dou2.gif)
许多LAMP相关
![](/icons/89381de.gif)
语言已经建立了记录跟踪机制
![](/icons/89381dou2.gif)
Google使用Python;许多主流
![](/icons/89381de.gif)
.COM公司使用Perl或C语言
![](/icons/89381dou2.gif)
目前仍没有使用Ruby打造
![](/icons/89381de.gif)
旗舰级应用
![](/icons/89381dou.gif)
来展示Ruby语言强健
![](/icons/89381de.gif)
可拓展性
![](/icons/89381dou.gif)
或是复杂
![](/icons/89381de.gif)
企业级集成
![](/icons/89381dou2.gif)
我们只是不知道Ruby是否可以解决某些特定类型
![](/icons/89381de.gif)
问题
![](/icons/89381dou2.gif)
部署和配置策略
![](/icons/89381dou2.gif)
Ruby on Rails已经出现将近
![](/icons/89381yi.gif)
年
![](/icons/89381de.gif)
时间
![](/icons/89381dou.gif)
所以在部署和配置方面
![](/icons/89381de.gif)
经验还不如竞争语言那样丰富
![](/icons/89381dou2.gif)
缺少类库支持
![](/icons/89381dou2.gif)
Ruby远不如Java语言拥有这么多丰富
![](/icons/89381de.gif)
类库支持
![](/icons/89381dou2.gif)
缺少商业投资
![](/icons/89381dou2.gif)
你需要花费很大
![](/icons/89381de.gif)
力气才能找到Ruby
![](/icons/89381de.gif)
咨询、培训或承包
![](/icons/89381de.gif)
机会
![](/icons/89381dou.gif)
并且这些大多数还并不存在
![](/icons/89381dou2.gif)
还有其他许多类似
![](/icons/89381de.gif)
风险
![](/icons/89381dou2.gif)
然而
![](/icons/89381dou.gif)
你可以有效地降低使用Ruby语言
![](/icons/89381de.gif)
风险
![](/icons/89381dou.gif)
比如采取绩效挂钩
![](/icons/89381de.gif)
风险预测
![](/icons/89381dou2.gif)
虽然开发和部署大型Ruby应用
![](/icons/89381de.gif)
相关知识积累仍然十分有限
![](/icons/89381dou.gif)
但是你可以在适当
![](/icons/89381de.gif)
着眼点不断学习新
![](/icons/89381de.gif)
知识
![](/icons/89381dou2.gif)
对于PHP、Perl和Python等LAMP相关语言
![](/icons/89381dou.gif)
业界有着非常丰富
![](/icons/89381de.gif)
知识积累
![](/icons/89381dou2.gif)
在应用部署机制、Web服务器以及非共享可拓展策略等方面都是
![](/icons/89381yi.gif)
致
![](/icons/89381de.gif)
![](/icons/89381dou2.gif)
在考虑参和开发
![](/icons/89381de.gif)
人手时
![](/icons/89381dou.gif)
不要低估你通过对员工进行内部培训来建立高效团队(Team)
![](/icons/89381de.gif)
能力
![](/icons/89381dou2.gif)
对于使用Spring、Eclipse、Hibernate和WebWork进行Java开发
![](/icons/89381de.gif)
新手
![](/icons/89381dou.gif)
我
![](/icons/89381de.gif)
训练计划常常是为Ruby on Rails开发者指定培训计划
![](/icons/89381de.gif)
5倍
![](/icons/89381dou2.gif)
如果你开始使用具有类似于Ruby特性
![](/icons/89381de.gif)
开发语言
![](/icons/89381dou.gif)
比方说Perl
![](/icons/89381dou.gif)
Python或Smalltalk
![](/icons/89381dou.gif)
它们可以帮助你很好地起步
![](/icons/89381dou2.gif)
如果你打算从零开始培养
![](/icons/89381yi.gif)
个
![](/icons/89381chengxu.gif)
员
![](/icons/89381de.gif)
话
![](/icons/89381dou.gif)
培养
![](/icons/89381yi.gif)
个使用Ruby
![](/icons/89381de.gif)
开发者
![](/icons/89381dou.gif)
远比培训Java开发者使用最新
![](/icons/89381de.gif)
![](/icons/89381yi.gif)
大堆各种框架要合算
![](/icons/89381de.gif)
多
![](/icons/89381dou2.gif)
想
![](/icons/89381yi.gif)
想那些众多
![](/icons/89381de.gif)
![](/icons/89381hanshu.gif)
类库
![](/icons/89381dou.gif)
有多少是你真正需要
![](/icons/89381de.gif)
?如果你需要分布式处理
![](/icons/89381dou.gif)
双相提交
![](/icons/89381dou.gif)
那么就使用Java编程
![](/icons/89381dou2.gif)
如果您需要和Microsoft Office
![](/icons/89381de.gif)
宏完美地整合
![](/icons/89381dou.gif)
那么就使用.NET
![](/icons/89381dou2.gif)
但如果你想编写操作系统整合脚本
![](/icons/89381dou.gif)
或编写基于数据库
![](/icons/89381de.gif)
绿色Web应用
![](/icons/89381dou.gif)
那么Ruby则正是你所需要
![](/icons/89381de.gif)
![](/icons/89381dou2.gif)
并且你可以经常编写要用到但手边没有
![](/icons/89381de.gif)
任何
![](/icons/89381chengxu.gif)
![](/icons/89381dou2.gif)
我曾协助
![](/icons/89381yi.gif)
家公司工作
![](/icons/89381dou.gif)
他们在两个星期内编写了自己
![](/icons/89381de.gif)
数据库驱动
![](/icons/89381chengxu.gif)
![](/icons/89381dou.gif)
但仍然比完成项目其他工作所用
![](/icons/89381de.gif)
时间要多
![](/icons/89381dou2.gif)
我还认识
![](/icons/89381yi.gif)
个使用Ruby在 4小时内修补现有代码
![](/icons/89381dou.gif)
为
![](/icons/89381chengxu.gif)
拓展Oracle支持
![](/icons/89381de.gif)
开发者
![](/icons/89381dou2.gif)
Thoughtworks在很短
![](/icons/89381de.gif)
开发周期内就发布了RBatis
![](/icons/89381dou.gif)
即Ruby版本
![](/icons/89381de.gif)
实体关系映射工具iBATIS
![](/icons/89381dou2.gif)
所以当你站在全局考虑时
![](/icons/89381dou.gif)
会感觉到使用Ruby
![](/icons/89381de.gif)
风险往往被夸大了
![](/icons/89381dou.gif)
尤其是在Java并没有带给你
![](/icons/89381yi.gif)
切所需资源
![](/icons/89381de.gif)
时候
![](/icons/89381dou2.gif)
自己真正去尝试使用Ruby语言
![](/icons/89381dou.gif)
是把这些风险纳入控制范围的内
![](/icons/89381de.gif)
最好思路方法
![](/icons/89381dou2.gif)
使用Rails开发
![](/icons/89381yi.gif)
些实际
![](/icons/89381de.gif)
应用
![](/icons/89381dou.gif)
并站在实战
![](/icons/89381de.gif)
角度上发言
![](/icons/89381dou2.gif)
而不要盲目迷信别人
![](/icons/89381de.gif)
说法
![](/icons/89381dou2.gif)
神话 vs 事实
Rails是银弹
![](/icons/89381dou2.gif)
人们曾经在Rails项目上失败过
![](/icons/89381dou.gif)
并且还将会有更多失败
![](/icons/89381de.gif)
教训
![](/icons/89381dou2.gif)
如果你在没有具备必须技能
![](/icons/89381de.gif)
情况下使用它
![](/icons/89381dou.gif)
你也将可能面临失败
![](/icons/89381de.gif)
命运
![](/icons/89381dou2.gif)
和的类似
![](/icons/89381de.gif)
介绍说明是
![](/icons/89381dou.gif)
如果Java语言不是导致失败
![](/icons/89381de.gif)
问题根源
![](/icons/89381dou.gif)
那么Ruby将同样不会是你
![](/icons/89381de.gif)
答案
![](/icons/89381dou2.gif)
大多数软件Software开发问题
![](/icons/89381de.gif)
出现是和特定技术无关
![](/icons/89381de.gif)
![](/icons/89381dou2.gif)
如果你正在遭受打击
![](/icons/89381dou.gif)
Ruby on Rails
![](/icons/89381de.gif)
采用只能加快你遭受打击
![](/icons/89381de.gif)
速度
![](/icons/89381dou2.gif)
选择Ruby颇具风险
![](/icons/89381dou.gif)
![](/icons/89381yinwei.gif)
你无法预测到
![](/icons/89381cuowu.gif)
![](/icons/89381dou2.gif)
采用任何新
![](/icons/89381de.gif)
语言
![](/icons/89381dou.gif)
最主要
![](/icons/89381de.gif)
风险是你将预测到
![](/icons/89381cuowu.gif)
![](/icons/89381dou.gif)
并且
![](/icons/89381cuowu.gif)
停滞在使用
![](/icons/89381de.gif)
类库的中
![](/icons/89381dou2.gif)
这
![](/icons/89381de.gif)
确是
![](/icons/89381yi.gif)
项相当重大
![](/icons/89381de.gif)
风险
![](/icons/89381dou.gif)
但是这个问题决不仅局限于Ruby语言的中
![](/icons/89381dou2.gif)
在Java语言里
![](/icons/89381dou.gif)
你需要就主要类库
![](/icons/89381de.gif)
使用做出决定
![](/icons/89381dou.gif)
其中任何
![](/icons/89381yi.gif)
个都可能带给你复杂臃肿
![](/icons/89381de.gif)
代码
![](/icons/89381dou2.gif)
你是否会为声明事物选择Spring或EJB 3等技术?Java
![](/icons/89381de.gif)
持久层架构是不是
![](/icons/89381yi.gif)
个正确
![](/icons/89381de.gif)
选择
![](/icons/89381dou.gif)
或者Hibernate就是最终
![](/icons/89381de.gif)
解决方案?有关Web MVC分层
![](/icons/89381de.gif)
正确选择是什么
![](/icons/89381dou.gif)
是逐步衰落
![](/icons/89381de.gif)
Struts框架
![](/icons/89381dou.gif)
还是其他更易用
![](/icons/89381de.gif)
框架?
在Ruby语言的中
![](/icons/89381dou.gif)
选择Web开发框架则相对简单许多
![](/icons/89381dou2.gif)
你将很可能和Rails
![](/icons/89381yi.gif)
起工作
![](/icons/89381dou2.gif)
语言动态
![](/icons/89381de.gif)
特性同样各层的间
![](/icons/89381de.gif)
结构更为简化
![](/icons/89381dou.gif)
通过特定
![](/icons/89381de.gif)
约定来使得开发配置比Java实现更为明晰
![](/icons/89381dou2.gif)
为Java项目招募人手总是更为容易
![](/icons/89381dou2.gif)
Java拥有数量庞大
![](/icons/89381de.gif)
开发者群体
![](/icons/89381dou.gif)
但是开发社区的间有着巨大
![](/icons/89381de.gif)
分歧
![](/icons/89381dou2.gif)
如果你想使用
![](/icons/89381yi.gif)
个综合
![](/icons/89381de.gif)
Java工具集
![](/icons/89381dou.gif)
你
![](/icons/89381de.gif)
选择是十分有限
![](/icons/89381de.gif)
![](/icons/89381dou2.gif)
即使你选择了像Spring这样
![](/icons/89381de.gif)
流行框架
![](/icons/89381dou.gif)
你
![](/icons/89381de.gif)
团队(Team)必须还要学会使用针对给定项目所需
![](/icons/89381de.gif)
各种类库
![](/icons/89381dou2.gif)
在这种情况下
![](/icons/89381dou.gif)
Java
![](/icons/89381de.gif)
核心力量
![](/icons/89381dou.gif)
过多
![](/icons/89381de.gif)
![](/icons/89381hanshu.gif)
类库
![](/icons/89381dou.gif)
将会给项目带来副作用
![](/icons/89381dou2.gif)
相反
![](/icons/89381dou.gif)
大部分
![](/icons/89381de.gif)
Ruby开发者都知道Rails框架
![](/icons/89381dou2.gif)
此外
![](/icons/89381dou.gif)
你通常需要更多
![](/icons/89381de.gif)
Java开发者去处理类似
![](/icons/89381de.gif)
任务
![](/icons/89381dou2.gif)
有时
![](/icons/89381dou.gif)
招募Java
![](/icons/89381de.gif)
开发人员要容易得多
![](/icons/89381dou2.gif)
但有时
![](/icons/89381dou.gif)
情况也并不是这样
![](/icons/89381dou2.gif)
Rails无法拓展
![](/icons/89381dou2.gif)
Ruby on Rails其实有很好
![](/icons/89381de.gif)
延展性
![](/icons/89381dou2.gif)
它
![](/icons/89381de.gif)
缓存Cache模型非常强大
![](/icons/89381dou.gif)
并且非共享
![](/icons/89381de.gif)
架构在LAMP社区中多次被证明是非常有效
![](/icons/89381de.gif)
![](/icons/89381dou2.gif)
实际上
![](/icons/89381dou.gif)
我们知道Ruby on Rails完全可以适应较大型应用
![](/icons/89381de.gif)
要求
![](/icons/89381dou2.gif)
我们不知道Ruby on Rails是否可以承受大规模
![](/icons/89381de.gif)
应用部署
![](/icons/89381dou2.gif)
没有固有
![](/icons/89381de.gif)
架构使我相信这是
![](/icons/89381yi.gif)
条死胡同
![](/icons/89381dou2.gif)
对于典型
![](/icons/89381de.gif)
应用
![](/icons/89381dou.gif)
总的
![](/icons/89381cuowu.gif)
![](/icons/89381de.gif)
潜伏期是存在于数据库端
![](/icons/89381dou2.gif)
Rails
![](/icons/89381de.gif)
整合选项十分有限
![](/icons/89381dou2.gif)
Rails对于基于ReST
![](/icons/89381de.gif)
Web服务有着良好
![](/icons/89381de.gif)
支持
![](/icons/89381dou2.gif)
Ruby同样通过JRuby项目提供对于JVM
![](/icons/89381de.gif)
支持
![](/icons/89381dou.gif)
以及提供对于微软
![](/icons/89381de.gif)
CLR运行时
![](/icons/89381de.gif)
支持
![](/icons/89381dou2.gif)
同时Ruby也提供了良好
![](/icons/89381de.gif)
消息传输支持
![](/icons/89381dou2.gif)
最后
![](/icons/89381dou.gif)
为项目选择最好
![](/icons/89381de.gif)
工具将会帮助你始终处于良好
![](/icons/89381de.gif)
状态
![](/icons/89381dou2.gif)
优秀
![](/icons/89381de.gif)
开发团队(Team)可以在Java和Ruby项目上同时获得成功
![](/icons/89381dou2.gif)
整理总结:你可以承担什么样
![](/icons/89381de.gif)
角色?
如果你正在考虑使用Ruby
![](/icons/89381dou.gif)
那么在你身边将会有很多有用
![](/icons/89381de.gif)
信息
![](/icons/89381dou2.gif)
和其他同时在有效使用Java和Ruby
![](/icons/89381de.gif)
开发者交流
![](/icons/89381dou2.gif)
阅读有关开发框架
![](/icons/89381de.gif)
资料
![](/icons/89381dou2.gif)
查找从Java到Ruby
![](/icons/89381de.gif)
迁移资料
![](/icons/89381dou2.gif)
如果你并不想放弃Java
![](/icons/89381dou.gif)
只是想寻找轻量级
![](/icons/89381de.gif)
开发体验
![](/icons/89381dou.gif)
那么去了解
![](/icons/89381yi.gif)
下那些可以为你带来更多相关体验
![](/icons/89381de.gif)
项目
![](/icons/89381dou.gif)
比如说RIFE、JMatter或Wicket项目
![](/icons/89381dou2.gif)
如果你认为Ruby可能是
![](/icons/89381yi.gif)
个好
![](/icons/89381de.gif)
选择
![](/icons/89381dou.gif)
那么要留心以下
![](/icons/89381de.gif)
建议:
为项目选择合适
![](/icons/89381de.gif)
工具
![](/icons/89381dou2.gif)
Ruby on Rails并不是银弹
![](/icons/89381dou.gif)
ROR是
![](/icons/89381yi.gif)
个针对以数据库为后台
![](/icons/89381de.gif)
高度精简
![](/icons/89381de.gif)
Web应用开发环境
![](/icons/89381dou2.gif)
和新
![](/icons/89381de.gif)
数据库模式配合较好
![](/icons/89381dou.gif)
或者你可以通过变更来适应Rails
![](/icons/89381de.gif)
各种固有优点
![](/icons/89381dou2.gif)
细心计划开发团队(Team)
![](/icons/89381de.gif)
热身阶段
![](/icons/89381dou2.gif)
你不需要在Monster.com站点投放广告并在 3日的内为项目招募齐全开发人员
![](/icons/89381dou2.gif)
但你可能需要考虑培训你部分或全部
![](/icons/89381de.gif)
开发者
![](/icons/89381dou.gif)
并且招募几个顶尖
![](/icons/89381de.gif)
Rails开发者
![](/icons/89381dou.gif)
或是请求某些项目咨询来帮助你把项目启动
![](/icons/89381dou2.gif)
了解你使用传统方式
![](/icons/89381de.gif)
结合点
![](/icons/89381dou2.gif)
通常
![](/icons/89381dou.gif)
项目中最头疼
![](/icons/89381de.gif)
部分是定义和外部系统
![](/icons/89381de.gif)
交互
![](/icons/89381dou2.gif)
你最初证明概念
![](/icons/89381de.gif)
工作需要和某些接触点交互
![](/icons/89381dou.gif)
至少是要明确你在何处对项目感觉到满意
![](/icons/89381dou2.gif)
如果你还是不确定
![](/icons/89381dou.gif)
那么做
![](/icons/89381yi.gif)
个先行者
![](/icons/89381dou.gif)
或是遵从保守派
![](/icons/89381de.gif)
观点
![](/icons/89381dou2.gif)
缓解风险最佳
![](/icons/89381de.gif)
思路方法总是优秀
![](/icons/89381de.gif)
判断能力
![](/icons/89381dou2.gif)
有关作者
Bruce Tate居住在德克萨斯州
![](/icons/89381de.gif)
奥斯丁
![](/icons/89381dou.gif)
是
![](/icons/89381yi.gif)
位山地自行车和橡皮艇爱好者
![](/icons/89381dou.gif)
同时也是两个孩子
![](/icons/89381de.gif)
父亲
![](/icons/89381dou2.gif)
Bruce已经撰写了9本编程方面
![](/icons/89381de.gif)
书籍
![](/icons/89381dou.gif)
其中包含两本Ruby
![](/icons/89381de.gif)
书籍以及 5本Java相关
![](/icons/89381de.gif)
书籍
![](/icons/89381dou2.gif)
Bruce还是RapidRed公司
![](/icons/89381de.gif)
创始人
![](/icons/89381dou.gif)
公司专注于包含Ruby和Rails在内
![](/icons/89381de.gif)
轻量级开发技术
![](/icons/89381dou.gif)
并提供开发、资讯和培训等业务
![](/icons/89381dou2.gif)
Bruce是
![](/icons/89381yi.gif)
位世界范围内广受称赞
![](/icons/89381de.gif)
优秀演说家、
![](/icons/89381chengxu.gif)
员、培训师以及技术顾问
延伸阅读
最新评论