如何评估个人的软件开发能力
从基本的来看,应涉及到以下几点:
1. 读程序的能力
很多的软件开发工作不一定会从头开始,这就需要开发人员有良好的阅读程序的能力,能在尽可能短的时间里了解软件整体的架构,理解该软件初始的开发思想,能迅速并有效地参与到项目开发中去。
2. 编码能力
这点会涉及到开发人员对所用语言的熟练程度,和该开发人员的编程风格。是否拥有良好的编程习惯,能遵循通用的编程规范,并作好注释,对该开发人员所开发代码的易读性和易维护性有很大的影响。
3. 调试和测试能力
现代的软件行业中,代码的调试和测试时间并不比编码时间短,甚至会超出,当然,很多的调试和测试工作并不都是编码人员完成,但测试工作是很多软件开发人员的必经之路。
4. 软件的维护
似乎维护谈不上需要什么能力,因为这时更多需要的是开发人员的耐心。记得曾经看
过这样的话(大意):你的程序就是你的孩子,在你产生了他们之后,还需要你的呵护才能成长和成熟^^
前面讨论的都是实际动手能力,是一个软件开发人员的基本功。而评估一个开发人员的软件开发能力,除了评估他的编程能力外,还应考虑到其他的一些很重要的能力,如
1. 需求分析的能力
一个项目,最初就需要做需求分析,了解该项目的目的,对系统的需求,对功能的要求,并对其进行分析,作好项目规划和说明
2. 建立软件框架的能力
建立一个良好的软件框架是这个项目成功的一个保证,需要考虑整个软件的一致性和完整性
3. 贯穿项目始终的管理控制能力
在项目开发过程中,不可避免会出现新需求的加入,目标的修正,或者人员的变动等问题,对此进行有效的管理控制是对开发人员的更高要求
......
因为到现在为止,在软件方面,我还只是在别人的程序上修修改改,做增减功能,调试查错等工作,所以只能谈这么多了,也希望大家不吝赐教,共同进步^0^
台湾蔡学镛先生的《JAVA夜未眠》
台湾蔡学镛先生的《JAVA夜未眠》
前言
在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于\"如何学习编程?JAVA该如何学习?\"。类似的问题回答多了,就萌生了写下本文的想法。到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《JAVA学习之路》。拜读过台湾蔡学镛先生的《JAVA夜未眠》,有些文章如《JAVA学习之道》等让我们确实有共鸣,本文题目也由此而来。
软件开发之路是充满荆棘与挑战之路,也是充满希望之路。JAVA学习也是如此,没有捷径可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。每天仰天大叫\"天神啊,请赐给我一本葵花宝典吧\",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了\"东方不败\",倒是成\"西方失败\"的几率高一点。
\"不走弯路,就是捷径\",佛经说的不无道理。
我们今天来谈谈软件开发学习路线
两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。
从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师。不想当元帅的士兵不是好士兵,不想当架构设计师或项
目管理师的程序员也不是好的程序员。我们应该努力往上走。让我们先整理一下开发应用软件需要学习的主要技术。
A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要。如不想成为计算机科学家的话,可以采取\"用到的时候再来学\"的原则。
B.一门编程语言,现在基本上都是面向对象的语言,JAVA/C++/C#等等。如果做WEB开发的话还要学习HTML/JavaScript等等。
C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)。由此而衍生的基于组件开发CBD/面向方面编程AOP等等。
D.一种关系型数据库,ORACLE/SqlServer/DB2/MySQL等等
E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET等。
F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。
G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化。当然还有其他的一些软件工程知识。
H.项目管理、体系结构、框架知识。
正确的路线应该是:B→C→E→F→G→H。
还需要补充几点:
1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。新技术虽然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想的变化却很慢。掌握了编程理论与编程思想你就会有拨云见日之感。面向对象的思想在目前来讲是相当关键的,是强势技术之一,在上面需要多投入时间,给你的回报也会让你惊喜。
2).对于数据库来说是独立学习的,这个时机就由你来决定吧。
3).编程语言作为学习软件开发的主线,而其余的作为辅线。
4).软件工程师着重于B、C、E、 D;软件设计师着重于B、C、E、 D、F;架构设计师着重于C、F、H。
前言
在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于\"如何学习编程?JAVA该如何学习?\"。类似的问题回答多了,就萌生了写下本文的想法。到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《JAVA学习之路》。拜读过台湾蔡学镛先生的《JAVA夜未眠》,有些文章如《JAVA学习之道》等让我们确实有共鸣,本文题目也由此而来。
软件开发之路是充满荆棘与挑战之路,也是充满希望之路。JAVA学习也是如此,没有捷径可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。每天仰天大叫\"天神啊,请赐给我一本葵花宝典吧\",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了\"东方不败\",倒是成\"西方失败\"的几率高一点。
\"不走弯路,就是捷径\",佛经说的不无道理。
我们今天来谈谈如何学习程序设计?
JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。
1 培养兴趣
兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个\"食利阶层\"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。
2 慎选程序设计语言
男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。
如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。如果你
对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域。如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或.NET,甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之,你需要根据自己的特点来选择合适你的编程语言。
3 要脚踏实地,快餐式的学习不可取
先分享一个故事。
有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。 有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。 这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。 但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。
这个故事给我们的启示是:欲速则不达。
浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称\"参加培训,100%就业\",居然报名的学生不少,简直是藐视天下程序员。社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。许多初学者C++/JAVA
没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello World程序,就忙不迭的向世界宣告,\"我会软件开发了\",简历上也大言不惭地写上\"精通VC/JAVA\"。结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧起《C++编程思想》《JAVA编程思想》仔细钻研,早知如此何必当初呀。
\"你现在讲究简单方便,你以后的路就长了\",好象也是佛经中的劝戒。
4 多实践,快实践
彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。
从前,四川边境有两个和尚,一个贫穷,一个有钱。一天,穷和尚对富和尚说:\"我打算去南海朝圣,你看怎么样?\"富和尚说:\"这里离南海有几千里远,你靠什么去呢?\"穷和尚说:\"我只要一个水钵,一个饭碗就够了。\"富和尚为难地说:\"几年前我就打算买条船去南海,可至今没去成,你还是别去吧!\" 一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了。
这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之后,再去干事情。假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。软件开发是一门工程学科,注重的就是实践,\"君子动口不动手\"对软件开发人员来讲根本就是错误的,他们提倡\"动手至上\",但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副\"比尔盖茨\"样。有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。
5 多参考程序代码
程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。
多多参考代码例子,对JAVA而言有参考文献[4.3],有API类的源代码(JDK安装目录下的src.zip文件),也可以研究一些开源的软件或框架。
6 加强英文阅读能力
对学习编程来说,不要求英语, 但不能一点不会,。最起码像JAVA API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个\"金山词霸\"。看多了就会越来越熟练。在学JAVA的同时学习英文,一箭双雕多好。另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。英语好对你学习有很大的帮助。口语好的话更有机会进入管理层,进而可以成为剥削程序员的\"周扒皮\"。
7 万不得已才请教别人
笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。请教别人之前,你应该先回答如下几个问题。
你是否在google中搜索了问题的解决办法?
你是否查看了JAVA API文档?
你是否查找过相关书籍?
你是否写代码测试过?
如果回答都是\"是\"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。
8 多读好书
书中自有颜如玉。比尔·盖茨是一个饱读群书的人。虽然没有读完大学,但九岁的时候比尔·盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔·盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。
笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,\"天呐,这么多书到什么时候才能看完了\",\"学软件开发,感觉上了贼船\"。这时候,我的回答一般是,\"别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的\",学生当场晕倒。(注:这一部分学生是刚学软件开发的)
对于在JAVA开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊妹篇。
9 使用合适的工具
工欲善其事必先利其器。软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮
忙可以说是寸步难行。工具可以提高开发效率,使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的境界几乎不可企及。在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)。
我是一名程序员。三年前,当我在麻绳理工学院读博士的时候,一家公司聘请我完成一个项目。当我完成学业离开美国以后,该公司需要对程序进行修改,于是聘请了一名程序员来完成这项工作。
谦虚的说(我一向很谦虚的):想要理解我编的程序,不是一般人能做到的。在我的程序中,使用了大量的独特算法,富有个性的变量、函数的命名方式,同时,我没有时间给程序作注释!
这名程序员在耗费了60余磅体重(三个月没有吃东西,一吃就吐),14英寸身高(在计算机屏幕前弓着背坐了三个月)后,终于。。。。。。(尽管他的绰号叫“开心的汤姆”)死掉了。据现场的目击者介绍,在他生命的最后一刻,跪倒在电脑台前,双手高举过头顶,然后,趴倒在地上,抬起头,表情安详的对着屏幕说:“英雄!I服了YOU!
尸体解剖时医生发现此人的大脑呈现海绵状,但他从出生就从没吃过任何与肉(牛肉、羊肉、猪肉、鱼肉、鸡肉。。。。。。以及人肉)有关的食物。为此该医生发表了一篇论文《后天性用脑过度缺损综合症》。据悉,凭借该论文,该医生已被内定为下届诺被儿医学奖得主。
微硬公司总裁“比你-该死”听说后,利用三个星期的时间,读懂了我的系统中的一个模块,大喜过望,从中领会到软件设计的精髓,决定推出“.not”计划以对抗“.net”。公司股票在消息发布的两分钟内,暴涨10(此处省略三百二十万字)0%。预计到2100年国际
贸易将全部放弃货币,改为采用微硬的股票,各国央行全部以微硬的股票作为外汇储备。
一位不知名的物理学家躺在浴缸中读懂我的用户需求分析,系统设计书后,突然跳起来,光着身子跑到大街上,欣喜若狂地喊道:“我找到了!我找到了!”。他成为全世界第十三名真正理解“量子力学”的人。其发表的论文《程序设计与用户需求的测不准原理》成为程序员的圣经,并被世界计算机联合会指定为系统分析员考试用教材。
一位气象学家浏览了我的程序的界面后,茅塞顿开。完成了基于“混沌”理论的“北极蝴蝶飞行轨迹影响好望角飓风”的数学模型,并在成功地预报了2002年全球各主要股市的走势(不包括深、沪两市)后,被索洛死指定为量子基金会的接班人(写入量子基金会会章)。
消息传开,我的有关程序设计的各种资料以各种形式广为流传。由于这些信息在网络上频繁交换,全球共有300万台服务器的CPU被烧毁,鹰的耳公司被迫赔偿4948(死就死吧)亿股微硬股票。
一名建筑师通过我的源程序获得灵感,建造了一个迷宫主题公园。对于走出迷宫的游客奖赏10000亿股微硬股票。“截至目前为止,据不完全统计,已经有十二亿三千余万游客在一年时间里陆陆续续进入迷宫,尚无有关领取奖品的报道”(摘自“联合国人口促进委员会有关人口流失的报告”)。
在阅读我的用户手册后,一名音乐家成功地复原了著名钢琴曲《黑色的星期五》。当第100万个在阅读我的用户手册时听钢琴曲《黑色的星期五》的跳楼者诞生后,该音乐家被以“恐怖分子”的罪名逮捕,现被关押在纽约世贸大楼南楼的地下室。
当听完我当初与公司经理进行交涉的谈话录音后,小不死为“倒沙”战争制定了计策:命令全国各媒体公开猜测军事计划,并冠之以“据军方高层透露”。以便将沙打亩彻底搞晕。
联合国秘书长将傻聋和阿拉Fat召集在一起,要求他们选择给我的程序添加注释或是在和平协议上签字。。。。。。我被提名下届诺被儿和平奖。
IBM公司为良好运行我的程序,决定斥巨资进行超超超级计算机的研制。预期性能:采用P42.8G阵列(4294967296个),内存4T字节,1MT容量的硬盘。
经过细致研究我当年的投标书和我所完成的程序功能,一名大导演以超豪华的阵容拍摄了一部巨片(巨烂片的简称)《英雌》,并进行了空前的炒作。
而这家公司的老板将我与他合作的全部过程写成了回忆录,题目叫作《企业要倒闭,就作ERP》。凭其版权收入的税收,使得美国的所得税增幅高达1000%。
俱往已。尽管我为世界作出了如此警世骇俗的贡献,但我毅然回国,在一个只有5台电脑的小网吧里工作,并因在一个月里为电脑全部安装完网络协议而赢得广大网友的尊敬。
前言
在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于\"如何学习编程?JAVA该如何学习?\"。类似的问题回答多了,就萌生了写下本文的想法。到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《JAVA学习之路》。拜读过台湾蔡学镛先生的《JAVA夜未眠》,有些文章如《JAVA学习之道》等让我们确实有共鸣,本文题目也由此而来。
软件开发之路是充满荆棘与挑战之路,也是充满希望之路。JAVA学习也是如此,没有捷径可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。每天仰天大叫\"天神啊,请赐给我一本葵花宝典吧\",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了\"东方不败\",倒是成\"西方失败\"的几率高一点。
\"不走弯路,就是捷径\",佛经说的不无道理。
今天我们来谈谈如何学习Java
1. JAVA学习路线
1.1 基础语法及JAVA原理
基础语法和JAVA原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习JAVA也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的JAVA程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉JAVA基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得\"真正\"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。
1.2 OO思想的领悟
掌握了基础语法和JAVA程序运行原理后,我们就可以用JAVA语言实现面向对象的
思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。
使用面向对象的思想进行开发的基本过程是:
●调查收集需求。
●建立用例模型。
●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。
●细化分析模型到设计模型。
●用具体的技术去实现。
●测试、部署、总结。
1.3 基本API的学习
进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的\"不需要重新发明轮子\"。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查
看,JAVA DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。
基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查JAVA DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。
1.4 特定API的学习
JAVA介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。
1.5 开发工具的用法
在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对JAVA技术本身的注意力。过了这一阶段你就可以开始熟悉IDE了。
程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也
很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。
从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。
JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是JAVA集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的JAVA IDE大战中,以其快速的版本更新击败IBM的Visual Age for JAVA等而成就一番伟业。IBM在Visual Age for JAVA上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓\"柳暗花明又一村\"。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。
1.6 学习软件工程
对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软件工程的必要性才会体现出来。参见\"软件开发学习路线\"小节。
2. 学习要点
确立的学习路线之后,我们还需要总结一下JAVA的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。
2.1勤查API文档
当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用\"javadoc\"工具(包含在JDK中)生成标准的JAVA DOC文档,供同行使用。J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下载地址:http://java.sun.com/j2se/1.5.0/download.jsp,你可以到
搜索
CHM
版本下载。也可以在线查看:
http://java.sun.com/j2se/1.5.0/docs/api/index.html。
对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。
当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:
●找特定的包,包一般根据功能组织。
●找需要使用类,类命名规范的话我们由类的名字可猜出一二。
●选择构造器,大多数使用类的方式是创建对象。
●选择你需要的方法。
2.2 查书/google->写代码测试->查看源代码->请教别人
当我们遇到问题的时候该如何解决?
这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像\"某些类/方法如何使用的问题\",DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人。
2.3学习开源软件的设计思想
JAVA领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。
2.4 规范的重要性
没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.jcp.org下载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。JAVA编码规范到此查看或下载http://java.sun.com/docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。
2.5 不局限于JAVA
很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。
JAVA不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵。
一. 工具的重要性
江湖中人为抢夺\"屠龙刀\"等神兵利器而掀起阵阵腥风血雨。世界列强为称霸世界或求自保而争相研发核武器、航空母舰。为什么?是因为认识到工具对人类的重要性。
《现代汉语词典》上对人的定义是:人是能制造工具并使用工具进行劳动的高等动物。一部生产力发展史,就是人的生产工具不断发明改变的历史;一部社会发展史,是社会工具即组织及其制度发明、运用和变更的历史;而一部科学史,就是人用自然和人工的语言、逻辑规范,以及使用多种实验工具的认识史或发现史。可见工具之于人类是多么的重要。JAVA开发人员当然也不例外,在开发过程中需要用到形形色色的工具,这些工具可以帮助我们高效率的开发出满足客户需要的产品。
2004年01月07日, 由10家软件公司组成的JavaToolsCommunity(JTC)组织宣布成立。该组织致力于为开发商提供更为简单和高效的Java工具。JTC还希望为Java整合开发环境(IDE)提供一个通用的插件(add-on,plug-in)系统。通过建立一个插件与Java工具连接的标准化途径,开发商就能够混合使用来自不同供应商的各种不同工具。JTC目前正在开发一个名为JSR198的插件标准化系统。令人关注的Java工具重量级企业IBM和Borland目前还拒绝加入该组织,原因是什么?笔者认为根本原因在于这两家公司都拥
有出色的JAVA开发工具。Borland的JBuilder,IBM支持的Eclipse,这两种IDE占据了绝大多数的市场份额。因此他们不想加入由SUN公司把持话语权的JTC也就可想而知了。在工具的标准方面,又一场龙虎斗拉开了序幕。
二.工具分类
那么JAVA开发人员需要什么类型的工具?如何选择工具?我们下面就开始分类进行探讨。
1. 纯文本开发工具
在开始学习JAVA的时候,我们一般使用纯文本的开发工具来编写JAVA程序。常见的纯文本编辑工具有Notepad记事本、Editplus、VI、Emacs、JCreator、UltraEdit等等。其中VI、Emacs是在Linux环境下使用,其余工具在Windows下使用。Notepad不支持关键词高亮显示,并且需切换到命令终端编译运行,因此一般使用在机器上没有别的编辑器的临时场合。JCreator支持关键词高亮显示,但只能够用于编写JAVA Applet及Application,在学习J2SE的时候使用的人还挺多的。
UltraEdit是一个很好的文字、Hex、ASCII 码编辑器,它的默认配置可以对C/C++, VB, HTML, Java和 Perl进行语法着色。可同时编辑多个文件。一般常会用其来修改EXE或DLL文件,如破解软件、修改游戏等等。与EditPlus很相似。
EditPlus 是 32 位文本编辑程序器,它可以完全替换记事本,它也提供网页开发人员及程序设计师许多强悍的功能。支持HTML、CSS、PHP、ASP、Perl、C/C++、Java、JavaScript 及 VBScript的语法关键词高亮显示。并且它可以在自定义语法文件后扩充支
持其他的程序设计语言。嵌合网页浏览器作 HTML 页的预览,及 FTP 命令做本地文件上传到 FTP 服务器。在JAVA开发人员中很有市场,尤其是初学者。我们把编辑、编译、运行Applet/Application都集成在Editplus中,可以认为它就是一个小型的IDE。也是笔者钟爱的开发工具,强烈推荐。
2.反编译、混淆器工具
由于黑客的频繁活动,使得Java类文件面临着反编译的挑战。有一些工具能够对Java源代码进行反工程,其结果甚至以比普通Java文件更可读的方式, 尽管普通的Java文件(由于代码风格不同)有注释。许可证和软件过期对于用户们来说将变得无用 。因此,防止软件被反编译或使得反编译的结果变得无意义对于Java来说非常重要。混淆器能够保护软件使之不被反编译。它通过混淆类文件使得反编译无效,并把敏感的名字指代变成另一个名字空间,这样可以使反编译的结果毫无疑义。
反编译器能够把字节码class文件反编译成源代码, 混淆器能够保护软件使之不被反编译, 反编译器与混淆器是矛与盾的关系。
JAD、Decafe Pro、DJ Java Decompiler都是Java Class文件的反编译软件。JAD是字符终端的工具,Decafe Pro与DJ Java Decompiler都是GUI界面,在功能上几乎所有的反编译器都差不多,选择哪种就看你的爱好了。不过值得一提的是DJ Java Decompiler,它不需要额外安装JVM(Java Virtual Machine)或是JDK的工具即可使用。不单如此,DJJava Decompiler也兼具有Java程序编辑工具的角色,提供一些辅助功能便于程序撰写与修改,因此值得推荐。另外还有国内程序员编写的\"小颖JAVA源代码反编译超级引挚\",支持目录级的反编译,为支持国货起见,在此推荐。
DashO是第三代的Java混淆器(obfuscator)、压缩机(compactor)、优化工具和水印工具,功能很强大,它可以为您的JAVA程序提供反编译保护、提高运行速度和减少程序体积,可惜不是免费的。免费的混淆器有ProGuard RetroGuard以及SUN公司的JODE等等。还有就是多数人使用的JBuilder、Eclipse中集成的混淆器。
3.调试工具
在JAVA语言的早期,一个典型的开发者使用非常陈旧的方法调试程序:使用System.out.println() 方法,现在还依然常用。代码的跟踪信息被打印到控制台、文件或者套接字。当要发布我们的软件时不得不逐个找到这些调试输出,把它们注释掉,当需要维护软件时又要去开启这些调试输出,烦不胜烦。因此逐渐发展出其他的一些调试工具。
下面总结几种JAVA调试工具:
●IDE(集成开发环境) 包含它们自己的调试器 (例如JBuilder、Eclipse)
●单独的GUI工具 (例如JIKES, JAVADT, 以及JProbe)
●基于文本和命令行的工具 (例如Sun JDB)
●野蛮的使用编辑器 (例如Notepad 或者 VI) 检查堆栈描绘(stack traces)
IDE 和独立的GUI 调试器对于初学者是最容易的并且被证明是最节省时间的。调试器将引导你到程序崩溃的地方。在调试器里面执行程序,使用鼠标设置断点并穿越代码。使用这些调试器的不利方面是并非所有的IDE调试器都支持最新的Java API和技术 (例如servlets 和 EJB 组件)。
因篇幅问题不能全部显示,请点此查看更多更全内容