语言迁移:探讨Java和Ruby语言迁移时的安全性

  在这篇文章中我们将要探讨Java和Ruby语言迁移时风险预测方面问题

  通常来说“使用Ruby具有风险”是种普遍看法这存在原因使用新语言天生是有风险随着Ruby on Rails逐步进入到主流开发领域中这样风险将会随时间逐渐降低有逐步增长开发者群、组件(或称作gems和plug-ins)相关书籍、以及业务合作伙伴和你沟通交流但同时你也可以听到主流观点指出“使用Java是安全对于这种观点我持有强烈反对意见随着语言膨胀这样风险通常也会增长为了便于理解在目前在这些观点上正发生什么变化投入点精力去研究Java最初应用情况是值得

  新技术采用概况

  许多分析家拥有技术应用所需描述模型其中最为流行模型是定义在RubyWeb开发框架Iowa中用来描述农产品应用稍后在本由Geoffrey A. Moore写作名为跨越鸿沟(Crossing the Chasm)书中被用来描述技术内容在书中Moore分析了技术应用周期中存在着 5个截然区别群体:

  技术专家这个群体倾向于采用新技术任何种有前途技术都会引起这个群体注意

  先行采纳者不管这项技术是否在主流技术中取得成功这个群体都将会采用新技术来提升竞争优势

  实用主义者旦新技术进入主流应用或是有足够陡峭增长曲线来保证技术将得到广泛采用那么实用主义者就会积极采用新技术

  保守派只有新技术成为必须时候他们才会考虑采用新技术

  怀疑论者这个群体可能很晚才会采用新技术或者也可能永远只使用某特定技术

  Moore指出技术应用关键的处在于团队(Team)中是否存在实用主义者实用主义者需要新技术大规模应用这个中间群体希望看到其他务实派在团队(Team)做出承诺的前就使用新技术这是个类似于第 2十 2条军规书中所描述现象务实派们都会相互依赖存在出于这样原因在先行采纳者排列在技术专家的后和务实派的前你会经常在市场接受度曲线中看到种下降趋势Moore将这种下降称的为鸿沟倾向并且这种想法应出于围绕任何新技术风险讨论中心

  Moore解决思路方法是把重点放在跨越鸿沟过程中通常来说你很难通过个巨大飞跃跨过鸿沟你需要有个目标明确细分市场Java技术首先通过Applet进入网络客户端的后转向服务端计算、移动终端、以及其他类似于移动计算以及企业架构应用最终为网络带来强大冲击

  在超越Java书中我认为存在于设计语言的间鸿沟特别严重我们大多数人都认识到在Lisp语言上投入精力将大幅提高生产率但是同时也会导致更难找到合适开发人员、教学资源、类库以及组件等同时我们还将不得不付出更多花费来进行些必要整合工作出于这个原因大众市场只会以大约每十年时间周期更换主流编程语言在服务端编程语言方面可以清晰看到这种趋势存在COBOL和Fortran语言出现于1954年到1961年的间C语言则诞生在上世纪70年代初期C是出现在上世纪80年代中期Java语言则出现在1996年我应当把C#语言算做整合高效Java语言克隆版本虽然这样说法可能会引发些争辩许多其他语言在此阶段中诞生但是上述语言仍旧没有个能够占据统治地位伴随风险是阻碍新编程语言被广泛采用最重要原因

  Java风险概况

  使用Java语言曾经需要克服很大风险当时大多数服务端编程都在使用C语言C门高效操作系统语言非常适用于应用开发C语言家族在这方面表现相当出色客户机/服务器端编程以及用户界面开发需要性能和适应性良好地结合在在当时其他编程语言都无法符合这样要求为了克服伴随采用新编程语言而来风险Java需要以下 3个条件均成立:

  C开发者不得不经历番辛苦学习过程指针存在(由于缺少编译时安全性)导致各种各样难以消除缺陷内存管理使得内存泄漏成为家常便饭C对于大多数开发者来说显得过于复杂这些问题增加了针对于C语言风险评估

  Java需要解决些C语言无法处理工作Java语言所具有简洁、灵活特性以及众多C所不包括类库支持这些要素减少了针对于Java语言风险评估并可以保持开发团队(Team)小型化最终从根本上提高生产力

  Java需要个催化剂随着网络爆炸Applet应用普遍被嵌入在NetScape浏览器中使得C语言开发者不得不转向去开始使用Java语言C和Java语法类似可以简单地进行过渡Java得以迅速获得数量庞大用户群并且在同微软竞争中逐步提升这样过渡

  Java膨胀要比我们以前所见任何次技术浪潮都要迅速同时也可能比我生所见任何技术都要庞大然而Java发展蓝图却直保持清晰为了建立新语言原有语言已不适应开发者需求语言必须要克服原有语言缺陷并最终以某些催化效应迅速聚集起数量庞大用户群

  Java作为Internet应用语言在客户端迅速得到立足借助于灵巧Applet应用由于Java提供了对于应用开发者极有帮助特性使得Java快速转移到服务器端开发这些特性包含有:

  内存管理

  干净继承模型

  更好面向对象功能

  便携性

  Internet类库

  安全

  ……以及其他许多特性在我看来Java直以来都是最为成功编程语言随着Java不断改进使用Java语言变得越来越安全并最终在Internet应用中统领着服务端开发市场商业投资开发者社区各种教育培训开放源代码框架以及各种各样信息发布都使得使用Java开发风险降低上述几点清晰地解释了Java取得成功原因

  旦新开发语言跨越鸿沟开发语言相关风险则会随着市场占有率提升显著减少

  Java则拥有个令人赞叹成功过程但是设计语言没有仍旧停留在不确定技术发展水平的上所有成功语言都会产生技术膨胀它们必须去适应使用者不断变化需求成功编程语言无法像其他语言样快速适应变化他们必须保持定程度上向后兼容来满足逐步增长用户基本需求随着技术滞后和语言膨胀产生种形式风险预测逐步形成为了新风险预测由于风险和开发者高效完成工作能力相关使得风险和市场占有率降低有必然联系

  到目前为止我已经开始关注于新生技术市场风险在Java诞生十周年的际种形式风险评估成为必须就像人月神话死亡的旅人件等许多有影响力书籍中鼓吹那些风险样:

  低下生产力将导致更庞大团队(Team)规模和更长时间周期

  风险随着项目规模而增加

  风险随着团队(Team)规模扩张而增加

  质量风险以Bug数量来衡量随着代码行数增加而增长

  成本增长导致风险增加

  综合成本随着复杂性提高而增加

  随着设计语言或者编程范例使用有了积累相对于技术发展水平语言将会和生产力相关联项目团队(Team)需要增加规模开发者需要编写更多代码来解决相同问题所有这些原因本身就会增加风险所有原因将会导致必然结论

  由于市场主宰地位终止相对于技术发展水平来说生产力风险和开发语言相关性将会增加

  在Java语言范畴中这些情况是否以及如何发生是个将会引起激烈争论话题当然Java仍然是解决整个系列企业问题最佳语言比方说非常大型项目或是比如双相提交或核心对象关系映射等具备特定需求问题针对于Java商业投资从来没有这么强过并且Java社区直是保持持续高涨但是根基中缺陷逐渐开始显现出来

  Java企业级JavaBean框架WS-*风格网络服务以及JavaEE复杂性和宽松度已受到越来越多批评James Duncan Davidsonservlet创始人的曾表示Java不再像从前那样方便易用目前很难给个普通Java开发者讲明白如何解决最编程问题:比如有后台数据库支撑网络应用出现相关证据是已经出现了很多使用其他语言开发框架最为出名就是Ruby on Rails在处理小规模问题时具备极高生产力资深Java开发者James Duncan DavidsonMike ClarkJustin GehtlandStuart Halloway以及其他许多开发者都证明在关键小型项目中使用了Rails的后获得了非常高生产效率:具备后台数据库支撑绿色网络应用当然个人经验也是可以轻松地使用Ruby on Rails构造、部署并维护这样应用

  这些报告将会引起广泛争论就像是早期有关Java生产力那些报告还记得在Java开发广泛普及的前Java首次出现在各式小型应用中开发人员生产力是驱动Java早先增长期重要标准请谨记Moore有关新技术出现理论跨越鸿沟最好方式不是通过次大跳跃而是每次只前进个小阶段

  我坚信复杂性和松散开发效率是使得Java目前正在经历风险原因

  Ruby和生俱来风险

  比起其他新生开发语言来Ruby并没有什么特别的处缺少商业投资有限开发资源还缺少开发经验这都为新生设计语言带来了风险下面是些我遭遇到较大风险

  人才缺乏很难找到熟练Ruby开发人员根据Java发展情况来看这样现状将会很快有所改观但是就目前来说如果你计划在很短时间内组织个人数较多Ruby开发团队(Team)其困难程度远比组建相同Java团队(Team)要大得多

  缺少经验许多LAMP相关语言已经建立了记录跟踪机制Google使用Python;许多主流.COM公司使用Perl或C语言目前仍没有使用Ruby打造旗舰级应用来展示Ruby语言强健可拓展性或是复杂企业级集成我们只是不知道Ruby是否可以解决某些特定类型问题

  部署和配置策略Ruby on Rails已经出现将近时间所以在部署和配置方面经验还不如竞争语言那样丰富

  缺少类库支持Ruby远不如Java语言拥有这么多丰富类库支持

  缺少商业投资你需要花费很大力气才能找到Ruby咨询、培训或承包机会并且这些大多数还并不存在

  还有其他许多类似风险然而你可以有效地降低使用Ruby语言风险比如采取绩效挂钩风险预测虽然开发和部署大型Ruby应用相关知识积累仍然十分有限但是你可以在适当着眼点不断学习新知识对于PHP、Perl和Python等LAMP相关语言业界有着非常丰富知识积累在应用部署机制、Web服务器以及非共享可拓展策略等方面都是

  在考虑参和开发人手时不要低估你通过对员工进行内部培训来建立高效团队(Team)能力对于使用Spring、Eclipse、Hibernate和WebWork进行Java开发新手训练计划常常是为Ruby on Rails开发者指定培训计划 5倍如果你开始使用具有类似于Ruby特性开发语言比方说PerlPython或Smalltalk它们可以帮助你很好地起步如果你打算从零开始培养培养个使用Ruby开发者远比培训Java开发者使用最新大堆各种框架要合算

  想想那些众多类库有多少是你真正需要?如果你需要分布式处理双相提交那么就使用Java编程如果您需要和Microsoft Office宏完美地整合那么就使用.NET但如果你想编写操作系统整合脚本或编写基于数据库绿色Web应用那么Ruby则正是你所需要并且你可以经常编写要用到但手边没有任何我曾协助家公司工作他们在两个星期内编写了自己数据库驱动但仍然比完成项目其他工作所用时间要多我还认识个使用Ruby在 4小时内修补现有代码拓展Oracle支持开发者Thoughtworks在很短开发周期内就发布了RBatis即Ruby版本实体关系映射工具iBATIS

  所以当你站在全局考虑时会感觉到使用Ruby风险往往被夸大了尤其是在Java并没有带给你切所需资源时候自己真正去尝试使用Ruby语言是把这些风险纳入控制范围的内最好思路方法使用Rails开发些实际应用并站在实战角度上发言而不要盲目迷信别人说法

  神话 vs 事实

  Rails是银弹

  人们曾经在Rails项目上失败过并且还将会有更多失败教训如果你在没有具备必须技能情况下使用它你也将可能面临失败命运

  和的类似介绍说明是如果Java语言不是导致失败问题根源那么Ruby将同样不会是你答案大多数软件Software开发问题出现是和特定技术无关如果你正在遭受打击Ruby on Rails采用只能加快你遭受打击速度

  选择Ruby颇具风险你无法预测到

  采用任何新语言最主要风险是你将预测到并且停滞在使用类库的中确是项相当重大风险但是这个问题决不仅局限于Ruby语言的中在Java语言里你需要就主要类库使用做出决定其中任何个都可能带给你复杂臃肿代码你是否会为声明事物选择Spring或EJB 3等技术?Java持久层架构是不是个正确选择或者Hibernate就是最终解决方案?有关Web MVC分层正确选择是什么是逐步衰落Struts框架还是其他更易用框架?

  在Ruby语言的中选择Web开发框架则相对简单许多你将很可能和Rails起工作语言动态特性同样各层的间结构更为简化通过特定约定来使得开发配置比Java实现更为明晰

  为Java项目招募人手总是更为容易

  Java拥有数量庞大开发者群体但是开发社区的间有着巨大分歧如果你想使用个综合Java工具集选择是十分有限即使你选择了像Spring这样流行框架团队(Team)必须还要学会使用针对给定项目所需各种类库在这种情况下Java核心力量过多类库将会给项目带来副作用相反大部分Ruby开发者都知道Rails框架此外你通常需要更多Java开发者去处理类似任务有时招募Java开发人员要容易得多但有时情况也并不是这样

  Rails无法拓展

  Ruby on Rails其实有很好延展性缓存Cache模型非常强大并且非共享架构在LAMP社区中多次被证明是非常有效实际上我们知道Ruby on Rails完全可以适应较大型应用要求我们不知道Ruby on Rails是否可以承受大规模应用部署没有固有架构使我相信这是条死胡同对于典型应用总的潜伏期是存在于数据库端

  Rails整合选项十分有限

  Rails对于基于ReSTWeb服务有着良好支持Ruby同样通过JRuby项目提供对于JVM支持以及提供对于微软CLR运行时支持同时Ruby也提供了良好消息传输支持最后为项目选择最好工具将会帮助你始终处于良好状态优秀开发团队(Team)可以在Java和Ruby项目上同时获得成功

  整理总结:你可以承担什么样角色?

  如果你正在考虑使用Ruby那么在你身边将会有很多有用信息和其他同时在有效使用Java和Ruby开发者交流阅读有关开发框架资料查找从Java到Ruby迁移资料如果你并不想放弃Java只是想寻找轻量级开发体验那么去了解下那些可以为你带来更多相关体验项目比如说RIFE、JMatter或Wicket项目如果你认为Ruby可能是个好选择那么要留心以下建议:

  为项目选择合适工具Ruby on Rails并不是银弹ROR是个针对以数据库为后台高度精简Web应用开发环境和新数据库模式配合较好或者你可以通过变更来适应Rails各种固有优点

  细心计划开发团队(Team)热身阶段你不需要在Monster.com站点投放广告并在 3日的内为项目招募齐全开发人员但你可能需要考虑培训你部分或全部开发者并且招募几个顶尖Rails开发者或是请求某些项目咨询来帮助你把项目启动



  了解你使用传统方式结合点通常项目中最头疼部分是定义和外部系统交互你最初证明概念工作需要和某些接触点交互至少是要明确你在何处对项目感觉到满意

  如果你还是不确定那么做个先行者或是遵从保守派观点缓解风险最佳思路方法总是优秀判断能力

  有关作者

  Bruce Tate居住在德克萨斯州奥斯丁位山地自行车和橡皮艇爱好者同时也是两个孩子父亲Bruce已经撰写了9本编程方面书籍其中包含两本Ruby书籍以及 5本Java相关书籍Bruce还是RapidRed公司创始人公司专注于包含Ruby和Rails在内轻量级开发技术并提供开发、资讯和培训等业务Bruce是位世界范围内广受称赞优秀演说家、员、培训师以及技术顾问



Tags:  java的安全性 java安全性 rubyjava 语言迁移

延伸阅读

最新评论

发表评论