Python基础如何学习Java:如何开始学习一门新语言
浅谈 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 项目。
其他一些需要做的事情
练习手速:
熟悉 IDE(Intellij IDEA)
1.快捷键
2.集成功能的使用
GitHub/Debug
Java 最佳实践
- TDD
- Refactor
- CleanCode
- Desgin Pattern
- Reflection