Java的最大优势是保守的设计思想

发表于:2014-11-03 11:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:烟酒茶丶    来源:51Testing软件测试网采编

  一位Java大牛和一位普通Java程序员之间的区别是什么?
  我认为可以把程序员的层次看作一个金字塔,其中可以大致分成3个层次。在最底层的是很勤劳的程序员,但是他们可能对编程本身兴趣不大,他们也能做好工作,但是他们下班之后就不会再想关于编程的事。这是很正常的现象,软件业需要很多程序员,并且这个需求仍然在不断增长。中间层次上的程序员,想再多做一些,他们阅读科技新闻和网站上的消息,他们会跟进下一个版本的进展,他们关心自己的技能,这个层次的程序员很有趣。而最上层的程序员则是时刻对技艺以及技术的本质着迷。当你到达了这个金字塔的最顶层时,你就会开始有反馈环,你可以从自身学习,对技艺的了解也更深刻。但是我认为最难的部分就是如何从第二层突破到最顶层。如果你对你所做工作之外的知识有一丁点兴趣,你就要寻找属于自己的那个点,这个点对于每个人都不一样,一旦发现那个让你着迷的领域,你就可以随着好奇心的驱使深入学习下去。
  关于开源软件有一个说法,一个好的开源开发者必须找到自己的痛点,他们不得不去解决这个困扰他们的问题。这是大多数人对开源软件感兴趣的原因,也是很多人称为Java开发者的原因。你找到了一个让你感兴趣的点,由于不明所以,你一直学习下去,这就是成长的秘密。
  开发者之间始终有关于Java语法过于冗长的抱怨。你认为这是很多开发者和团队不愿意使用Java的主要原因吗?
  我不这么认为。James Gosling有三句话可以解释Java的语言设计,以及为什么Java是现在这个样子。第一句就是英语中所说的“蓝领”语言,蓝领工人是从事第一线工作的人,而白领则代表了办公室以及经理们的工作。Java就是一种蓝领语言,它的设计是为了让工作中的程序员解决真正的问题。Java是实用的语言,它解决的是真实世界中的业务。
  James Gosling在2014年JavaOne大会上谈到了Lambda以及Java的早期版本中没有出现的一些设计,他说:如果我没有找到完成一件事的正确方法,那我就什么都不做。这句话表达了一种缓慢而保守的演进设计思想,要想理解Java是什么,就必须要明白这点。很多人觉得Java老了,编程语言需要改变,但是他们没有搞清楚的是,真正变化的是他们自己。他们在能力上有了发展,他们想看得更远更深,而语言反映出了这一点。并不是语言需要改变,而是提出这个观点的程序员自身发生了变化。Java从过去到未来都是一种设计保守的语言。这也是Java的一大优势。
  当James解释他设计Java的初衷时说:当我在设计的时候,我知道人们想要自动内存管理,人们想要強型式,但是这些功能会吓跑蓝领工人。比如说Smalltalk,这是一门很优秀的语言,但是它太先进了,它和现实中开发者们在构建应用时的思维脱离开来。所以Java继承了其中的一些理念,并将其简化,把这些理念放入一种语言和格式中。这些事解释了这门语言设计的基本动机。
  所以你当然可以说Java是一种冗长的语言,但我认为额外的内容是为了方便阅读。特别是当你还是一位初级或中级程序员的时候,那些看似多余的文字能够帮助到你。人们永远都铭记我们对于生产力的需求越来越高,但是代码仍然是写出来的。所以我不认为Java冗长,虽然我们可以加入一些高级功能,但是有些事永远都无法在一个语言中改变,这很遗憾。当然我们也会进步,但是就像我总说的一句话,人们总是过于关心语法,而不是能用语言来实现什么。
  作为近些年来有趣的产品之一Twitter,如果你观察一下他们的发展你会发现他们最开始用的是Ruby on Rails。三四年前,他们的网站开始出现一个非常可爱的卡通形象,失败鲸。这是一件很尴尬的事,为了弄明白到底发生了什么,他们做了很多调查,在查看了Ruby的垃圾收集之后,他们发现自己无能为力。同时,他们的Java试点项目获得了成功,他们意识到Java能解决他们的扩展性问题。然后在接下来的18个月,他们使用了一些JRuby作为中转站,然后将整个系统改写成Java。最终的效果也很好,他们围绕Java引入了新的服务,新的架构。曾几何时,Ruby被视为企业级软件的未来,但现如今,Ruby只是众多编程语言中的一种。现在应用最广的三种语言是Java,JavaScript,以及C/C++,但是大部分的JavaScript代码都是在客户端,如果把这三种语言去掉,其他语言的市场份额都非常小。
  直到现在,Java应用的虚拟托管模型需要分配给整个x86虚拟机用来托管一个单独的JVM实例,相对来说实例上也托管了单独的Java应用。这样的方法效率很低,但是Java本地并不支持多租户虚拟以及云计算配置。幸运的是,在社区里可以找到一些为了解决云计算问题而产生的多租户Java解决方案,你认为哪个方案足够成熟可以应用到生产环境?
  这里面包含了两件事,把虚拟和云以及多租户混在一起并不完全正确。比如说在QCon上海上有很多分享是关于docker的(docker是一个并不依赖于虚拟化的平台),其中一个精彩的分享来自Chris Swan。他展示了将CPU内存从虚拟环境转移到以Docker为基础的环境所带来的好处,虽然仍不够完善,但是它已经为Java带来了额外的优势,只要在Docker上运行Java你就能感受到。我们应该把云和虚拟的关系梳理清楚。另外,有很多其他你可以做的事,比如你可以建立多个JVM主机。
  但是这个问题真正在问的是多租户。关于这个问题,有一个产品在我心中是当之无愧的冠军,那就是Waratek。Waratek可以把一个单独的非热点JVM分开,并在其中运行主机JVM,在JVM里运行的是Java虚拟多租户JVC,而JVC可以做到很轻量级。我认为Waratek是一个很成熟、可以投入使用的产品,德意志银行刚刚宣布把自己的第一个工作JVM挪到Waratek上,既然德意志银行已经认可了这个产品,那么这个产品应该也值得你花时间研究一下。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号