"
如何做一个优秀的
java
程序员,一个优秀的软件人才
"
,这是一个让人迷惑的问题。
essential java
或者
thinking in java,
它们可能需要你经常去翻看;各种
java opensource
project
,这些容易让人着迷,往往你能从其中学到很多实用技巧;大型企业级系统,你能获得技术以及技术以外的知识;志趣相投的软件人才间的心得共享,开拓着你的视野并纠正着你潜在的错误。
首先,我们得成为一个合格的
java
程序员,面对明确的开发目标,编写出高质量的代码。开发高质量代码,这是一种态度和习惯。
1
)好的编码习惯,你的代码
是否看起来排列整洁,可读性强?
Google
一下
"java coding standard"
,选择适合你的编码习惯,很多
IDE
也能对你的代码进行修饰,比如
eclipse
下的
"correct Indent" and
"code format"
等等功能。
2
)避免不适当的
coding
,首先我们可以借助工具,比如
PMD
,
findbug
等,另外,不断积累经验,比如
null
的判
断,资源的释放,
threadsafe
的访问等等。
3
)高效
coding
的小技巧,读读
jdk
源码或者首先看看别人的实现
(opensource
项目提供
了很多
)
,能够不断积累我们的高效编程小技巧,比如
stringbuffer
代替
string
间的
"+"
,使用连接符
"##",stringbuffer
和
string.split
方法形成不定长的
string[]
,
system.arraycopy
方法替换循环赋值等等。
4
)理解你的编程对象和接口,一
般通过读
java doc
和看实例掌握,比如基于
JSTL
开发
web
,你得首先掌握常用
tag
的用法和用途。
5
)重构你的代码,不要出现大块代码
copy/paste
的情
况,编写复用性高的
util
类是个好的实践。
6
)规范的
java doc
和最核心的
junit testcase
的编写,它是其他人了解你代码的最直接方法,从开始就做好,如果你想分享你的代码。很多优秀的
java IDE
都对
5)
和
6)
提供了很多的操作支持,常用,你会发现你的
code
越来越简洁漂亮,这时,我想你已经是位合格的
java
程序员了,你已经为自己提升
成高级的程序员打下了坚实的基础。
接下来,你开始研究设计模式,开始学习优秀的
opensource
项目,你的思路大大的扩宽,你的创造也被大大激活,这也是你兴趣最大,提升最快的一个阶
段。
Apache commons
提供了很多实用的
util
类,
struts
提供了
MVC
架构,
Spring
提供了
Ioc
容器,
JBoss
展现了最前沿的中间件技术,
Ofbiz
提供了企业级应用重要的参考,等等。你可以从这些项目中获得大量的实用技能和设计思路,它们是你能力提升的重要财富。另外,一些工具的掌握,也
让你不断提升效率,我很喜欢
eclipse,
它的插件库
http://www.eclipse-
plugins.info/eclipse/index.jsp
是如此的丰富,熟悉掌握它们,有时对你的工作事半功倍,比如
team code review
用途的
jupiter
,编写
resourcebundle
的
resourcebundleeditor
等等,试试评价最好的那些。有时候,对
于个别的功能,你也得花花时间对比一下各种
IDE
的易用性,比如基于
XSD/DTD
编写
XML
时,我发现
Jdev10g
比
eclipse
要爽很多。在众多
的
opensource
中,我最钟爱的是
spring
,我在
03
年下半年有幸读到了
Rod Johnson
的《
J2EE
设计开发编程指南》,它对我的影响是最深刻的。在大家学习
spring
这个高可配置性和扩展性架构时,我希望能够认真阅读一下
这本书,知道作者创造
spring
的思路和设计理念,这个可能更加具有启发性。当你很好的掌握了实用工具和设计模式后,你的
java
能力一定有了质的进
步,你已经自信是位高级的程序员,而此刻,支撑你的就是兴趣和激情。
你已经可以独立设计并领导一个小团队进行
java
项目开发了,你感到你已经距离
J2EE
架构师很近了,但是你还得去提升自己的能力。你的架构有分布式考虑吗,你的性能测试是否开始了,你的代码是否有安全性的考虑,你的功能哪些需要在下一期实现,你的
UI
目标如何,如果已经购买了昂贵的商业应用服务器或者数据库,你如何利用,等等。如果你的系统是分布式的,你可能更会使用基于
annotation
的
ejb3.0
,而不是
spring
。性能测试越早做,你的架
构风险代价越低,
JVM heap size
和
gc
,
oracle db
的
AWR
和
ADDM
,
AS JMX
性能参数(
thread pool,conn pool,cache,JMS
queue
等等)是必须掌握的内容。如果你的登录使用
SQL "select count(1) from users where username=? and passwd=?"
来实现,那么当用户输入
admin--
以及任意密码,那么他就可以登录,你的网页是否可以应对基于
buffer
overflow
的攻击,这些安全的内容是否已经考虑到
test case
中?如果你的软件考虑了以后的
license
法律问题,那么你也需要第一时间考虑你所引入的第三方开源项目,
Apache
,
BSD
此类是商业友好的,而
GPL,LGPL
等存在潜在的
license
使用问题,你需要认真把握。当系统稳定性已经满足,系统的可扩展性和增值服务成为下一期实现的目标,所以良好的可扩展性保障了系统的长期增值开发。千万不能疏忽对于
UI
技术的调研和设计,
Web2.0,AJAX,JSON,XRE
等等技术日新月异,根据你的实际情况选择和设计,至关重要。我们总是希望能够开发跨数据库,跨应用服务器的系统,但是,有时候这是不明智的,如果设计好接口,针对不同的数据库和应用服务器完成各自的实现并充分利用它们的优势,你会获得更高的性价比。总之,在这个阶段,需要了得知识更多更深,往往需要各方面的专家来完成一个适当的架构;如果你认真学习了一个大型的企业级应用,你的知识面就能上升到另一个层次,它所考虑的内容和采用的技术策略都是你的重要财富。作为架构师,你需要根据用户用例选择你的开发策略,熟悉基于的平台并和平台专家进行交流,如果有性能要求,第一时间确定性能目标并在设计过程中充分考虑,提供高效的核心模块
(
包括安全,审计,异常处理,全球化方案,基础接口以及功能
demo)
。此时,你的严谨求实决定了架构的成败。
总之,不论你处于什么阶段,你都需要不断学习,交流和实践;现在不是个人英雄的时代,共同进步才是真正的进步。借着
blogjava
,表达自己的想法和心得,分享并学习着,从这一步开始
…