`

你真的精通Java吗?

阅读更多

 

简历和自我介绍上经常能够读到“精通Java”这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点、不能给自己加分了。可是事实真是这样吗?

对于语言的学习,我有一种观点,一是纵向,即要选择一门自己认为合适的语言学到有相当的深度。二在于横向,即要学习不同类型、不同历史和不同门派的语言:

  1. 既有底层的语言,也有高级语言;
  2. 接触一些动态语言、函数式语言;
  3. 了解一些不同语言的编程范型和编程方式,比如基于原型编程、面向切面编程、命令式编程等等;
  4. 最好能关注一门年纪尚浅,甚至小众的语言,了解一门语言的发展。

横向类比能够带来对一门语言的不同认识,但是,有广度而没有深度的专家是可笑的,深入地学习一门语言是不可缺少的。就以Java为例,依我看来,至少有这样几个递进的过程:

语法语义

这是最基础的部分,都说Java简单,语法容易学习,但是,真要细说起一些细节来,也真够我啰嗦了。我见过一些所谓的“精通Java”的人,他们却不知道strictfp关键字,说不清volatile和transient的作用,不知道怎么去定义一个注解(@interface)。你觉得这些要求苛刻吗?对这些以“精通”要求自己的人。

熟悉语言的应用范围

不同的语言有不同的擅长应用领域。就像想用Java去写操作系统或底层代码是多么不靠谱一样,在这个过程中应当熟悉语言的优势劣势,这里你自己会提出自己的见解。譬如Java最NB的地方在哪里?

  • 跨平台?可是很多语言都可以跨平台;
  • 开源?那开源的语言多了去了;
  • 高性能的虚拟机?包括先进的编译解释优化技术;
  • 还是那么多用Java实现的类库、框架呢?

把那些用Java实现的类库和框架脱离出Java语言本身来归类,未必是恰当的。熟悉Java就必须阅读许多类库和框架的源码。

学习语言的实现机制

就像精通Java的程序员需要了解Java虚拟机一样,也许不需要对虚拟机规范一清二楚,但是起码要知道CAFE BABE吧?起码要了解JIT的机制吧?起码要明白垃圾回收策略中的CMS吧?起码要能尝试自己编译一把JDK吧?起码要能去定位那些无响应的Java程序问题吧?在这个过程中,从了解一门语言,将逐渐进化到去了解一门语言所处的平台

整理语言发展的历史

为什么学习编程语言也要关注它的历史?因为去了解一门语言的发展历史(比如这篇关于Java多线程编程的历史),可以明白在这过程中碰了什么壁、犯过什么错、有哪些大的变更,学过别人家什么东西……这对于分析现今这门语言与其他语言的碰撞、展望一门语言的未来大有益处。在这个过程中,会不由自主地将其和不同时期的其他语言比较。如果给你一次重新设计这门语言的机会,你一定能够提出不少改善的意见来。

我从来不相信精通Java是一件容易实现的事情。有一股风潮,说搞底层研究的人看不起搞上层业务的人,写C的人认为写Java的人没水平,做后台的人觉得做前台的没技术含量……我说,何必呢?

技术无贵贱,只是专注的领域不同而已。

文章系本人原创,转载请注明作者和出处(http://www.raychase.net

注:本博客已经迁移到个人站点 http://www.raychase.net/ ,欢迎大家访问收藏,本ITEye博客在数日后将不再更新。

25
8
分享到:
评论
31 楼 usiboy 2012-10-17  
我觉得,无论是什么样的编程语言,还是什么样的技术,这些只是你去实现一个目标的工具。最重要的是你运用这些工具能达到一个什么样的结果,正如楼主所说,“不同的语言有不同的擅长应用领域。就像想用Java去写操作系统或底层代码是多么不靠谱一样”,我也想补充一点,多点创新,多点思考,比你精通一门语言有益的多,但不是说不去精通他,而是这个过程需要如何的经历。这个世界没有绝对的,如果你是一个打工的,你必须得有一技之长,当发展目标需要明确,这决定着你如何去接收各种各样的知识,甚至是你的思考方式。而对于创业的人,那么看的问题已经不是仅仅能够精通一门语言来看待了。我还是比较赞同楼主的观点。支持一下
30 楼 javaroom 2012-10-04  
没别的意思,讨论嘛,各抒己见,对LZ的观点,我还是赞同的,奈何国情如此,悲哉
29 楼 anyasir 2012-10-03  
不知道怎么说
我就是从不写精通的
大学主修java编程
工作也三年多了 真不敢说精通java 简历也从不写精通java 甚至从没提到过“精通”二字 结果是很明显的:面试被刷掉的概率很高;进了公司你会发现,周围的同事有的在编程方面跟你差不多 而有的甚至不如你 可你的薪水就是没别人高
28 楼 ywblove1024 2012-10-03  
个人觉得有点钻牛角尖了~只是个人看法
27 楼 ssy341 2012-10-03  
很赞同作者某些观点,但某些观点也偏激了,学习了,谢谢,还有你的另一个窝打开的速度不是很快开始以为宕了
26 楼 w156445045 2012-10-03  
javaroom 写道
1、不写精通,简历筛选都过不去,能得到面试机会吗?
2、知道这些关键字的区别,就是精通吗?
3、请教java的优势在哪里?



其实你写了精通,结果面试的时候 你就蛋疼了。

其实,写熟练掌握比较好,

他们却不知道strictfp关键字,说不清volatile和transient的作用
这些 我也不知道。
25 楼 ray_linn 2012-10-03  
只要精通C#自然就精通java ,包括未来的版本
24 楼 javaroom 2012-10-03  
thinkaboutit 写道
都说技术无贵贱,专注的领域不同而已。何必因为不明白volatile和transient而说别人是新手呢。不是每个程序员都会用到这两个关键字的。

顶你!
23 楼 林晓盼 2012-10-03  
百年之后,谁又会去在乎当年说了啥话呢?生活不容易啊。
22 楼 PetriNet 2012-10-02  
一般写略懂一二,至今无面试机会
21 楼 风过后 2012-10-02  
[img][/img]
20 楼 johnson_x 2012-10-02  
kj


19 楼 337240552 2012-10-02  
wjm0729 写道
轻言精通的其实都是新手...
不过现在大多的HR都是外行,
不这么写还真连面试的机会都可能没有。
难为了我们的码农们

+1 大公司很少会招个初级程序员就要求精通的  只有xx公司喜欢招个初级java程序员就要求精通, 大家只好这么写了。。
18 楼 findjar 2012-10-02  
看小松说, 中国自古文人相轻, 谁也看不起谁。。。
17 楼 hfkiss44 2012-10-02  
是不是还需要了解下java是怎样用c++实现的呢  ?需不需要自己写个jdk才算精通呢?  能干事就行
16 楼 theoffspring 2012-10-02  
有几个人敢说真正精通,都是熟悉某一领域罢了,而且也没有必要熟悉每个点,因为你根本用不上。
15 楼 thinkaboutit 2012-10-02  
都说技术无贵贱,专注的领域不同而已。何必因为不明白volatile和transient而说别人是新手呢。不是每个程序员都会用到这两个关键字的。
14 楼 wjm0729 2012-10-01  
轻言精通的其实都是新手...
不过现在大多的HR都是外行,
不这么写还真连面试的机会都可能没有。
难为了我们的码农们
13 楼 zhangzhaoaaa 2012-10-01  
关注你啊!!
12 楼 penwei 2012-10-01  
精通了又如何。没有大神。。

相关推荐

Global site tag (gtag.js) - Google Analytics