浅谈Java:消除对Java的歧视

其实语言本来就没有好坏之分,虽然现在大家对Java的意见都不太好,不管是语言的本身还是其发展前景。但是要去思考Java在二十几年前的时候出现的时候为什么会快速流行起来,它的优势又在哪里?

那么我们就可以看到Java最大的一个优点就是一次编译,到处运行。这里就有一个面试题是这样的,「Java到底是编译性语言还是解释性语言」,正确的回答应该是「一半编译,一半解释」,因为Java在编译的时候其实是生成了class文件,而在这之后还是需要在JVM上解释执行class文件的。

那说到这里,随着其他语言的发展,这个优势变得越来越不明显,因为其他语言也可以做到或者说更容易做到快速部署快速开发软件。这里可以举一个PHP的例子,大家都不喜欢PHP但是它为什么会火起来呢,就是因为web开发在近几年来说越来越火,随着HTML5的完善开发人员也会越来越偏向这个概念的。可以看到的是LAMP (Linux, Apache, MySQL, PHP)这一整套系统的快速部署是非常利于开发的,而与此同时Ruby on Rails也是另外一个很好的选择。

但是我们也要看到Java现在还有一个用途是在写Android,虽然在服务器端软件上面有了其他的选择,就比如在近期,微软宣布为C#系的.NET开发环境进行了开源和跨平台,可以想象的是将来可以在Linux服务器上写C#了,这对Java的冲击实在太大。但是Android上native app的优势还会持续很久,虽然HTML5又会带来web app这样的神器进行另一波冲击。

了解了这么多,那对于个人来说,这门即将被取代的语言该不该学习呢?首先可以先回想一下自己为什么会「讨厌」Java这门语言。

其实最开始我是很想学习Java的,因为我想开发一个手机app,而在学习Android之前是肯定需要学习Java的,但是随着后来我遇到Python之后就对Python这门语言欲罢不能了,学习门槛很低而且能够快速开发出东西,这不得不让刚入门的编程新手兴奋起来。

而在学习Python的同时,微信公众帐号成了那时最热门的话题,我发现一个更容易在手机上实现功能和进行交互的方式,那就是开发一个微信公众号。其实Java就不得不羡慕一下Python快速开发的优势,如果当初的我选用Java去开发微信的话,恐怕遇到的问题会很多然后根本就做不出来,说不定从此与编程这条路无缘了呢。哈哈,别忘记我的初心是做一名会技术的产品经理,快速开发创造出新的产品才是我的第一目的。

那说完了曾经的经历,就会发现我至始至终都没有非常深入得去学习和理解Java这门语言,虽然它有缺点但是它也一定有很大的优点才会让那么多的程序员写出了那么多伟大的产品。那我就需要在真正深入了解Java之后再从自身出发对其进行一个全面的评价,而不是人云亦云说什么「Java正在走向死亡」。

Java系列的其他语言可以说都是在修正Java的一些问题,比如Scala是采用「函数式」思想设计的一门「纯面向对象」语言,保留Java最大的优势(可以运行在Java虚拟机上)的同时加入了很多高级语法特性。这也是我期望学习Scala的一个理由,作为Java的后继者当然不得忽视,并且它在大数据领域还有更大的用途。所以重点是我想在哪个领域有所作为,而在该领域中什么东西是最有用的,为了想实现的目标而去选择适当的工具,而不是局限于一门语言,以语言用途为导向。

步入正轨:如何开始学习Java

我总是比较喜欢讨论一些关于学习的方法论,在学习一门新语言的时候也总有一个比较好的入门方式。最开始学习编程的时候是在大学课堂上,最先接触到和使用的都是C语言,而且由于专业原因C语言在应用上也是偏向于跟硬件打交道的,而在纯软件环境下的程序编写根本就没有,最多也就是在「数据结构」这门巨难巨坑的课程中简单得用C++实现了一些基本算法而已,在那个时候,我应该还是没有对编程这个东西有多大兴趣吧。

最好的编程入门语言绝对是Python,Python相对于C系列语言来说更高级,更符合人的直觉也更接近人类的表达习惯。当一个初学者能够很快得按照自己的想法去实现一些东西的时候,不会遇到一些莫名其妙的语言层面的时候,这对最开始学习编程的人来说是再好不过的了。而离机器更近的C语言的优势其实是在运行速度上,而今计算机的运算速度越来越快,运行速度并不再是开发的性能瓶颈的时候,更快速的学习,开发,部署才是王道。

虽然我也不敢说我对Python有多熟悉,毕竟还有那么多的高级特性值得我去进一步探索,实际情况中对一门语言「科学」有进一步的了解,倒不如去学习和实现这门语言的相关「技术」,Python有着太多的框架和库值得我去学习和使用,能够快速得投入生产和创造才是王道。这也是我很喜欢Python的原因,总有现成的「轮子」让我能够更快得实现我想达到的目标。

但是我现在至少是对编程有了一个入门吧,在ThoughtWorks的培训上有谈到一门编程语言的「三要素」:抽象值/组合方式/基本表达式,这也符合我之前的一些感触。我会根据这个思路来对比Python和Java,通过这样的方式来学习一门新的语言一定会很有意思。还可能会用不同的语言实现同一个功能,相信Python一定会用更少的代码来实现更多的功能的,哈哈,当然我会总结他们的优劣,Python不一定总是好的。

任何程序编写在「思考模型」层面上可以分为:Data & Process,我们从面向过程(P)的语言中进化到了面向对象/类(D),最后发现函数式(P)又回到了过程式的程序思考模型。这一点非常有趣,由此我也会将这个思想时刻嵌入到我对这两门的对比学习当中,分析各自的三种基本「过程结构」:顺序/分支-判断/选择-循环,比较他们的优劣。

随便了解Ruby

在谈到Python的时候总是会联系到Ruby这个好基友,它们简洁的语法总是让人神往。想在学习Java的同时学习Ruby是出于以下几个原因:

  • RoR可以快速开发web应用,这是我想做的一个方向。

  • Ruby本身就很讨人喜欢,简洁的语法和有趣的特性(比如block)。

  • ThoughtWorks内部很崇尚Ruby,并且有相关的RoR项目。

其他一些需要做的事情

练习手速:

https://typing.io

Type Fu

熟悉IDE(Intellij IDEA

1.快捷键

2.集成功能的使用

Quick Start

GitHub/Debug

Java最佳实践

  • TDD
  • Refactor
  • CleanCode
  • Desgin Pattern
  • Reflection

results matching ""

    No results matching ""