java自学---如何寻找好书?


如何寻找好书?

转载请注明出处:【http://www.bjsxt.com/books/how_to_find_good_book.html 

所 谓好书,就是适合自己的书!每个人的情况不一样,要根据自身的情况选择书籍,有的同学没有任何编程基础,上来就读设计模式,估计要吐血,有的人已经写过多 个项目,你要他去读Java入门,他也会郁闷,所以,请灵活,千万别把东西学死了,总有同学会认为有那么一条路,沿着路一步一步的走就一定能达到顶峰,我 要告诉你的是,如果真有一条固定死的学习之路,这门学科就没什么可发展的了。不要按照应试教育的思维去考虑实际的问题,请灵活一点,再灵活一点,要有走弯 路、读错书的准备,不能指望一点弯路都不走,哪怕是在别人的指导之下。

这里讲一个简单的找书的方法,非常简单。

比如你要学习JavaScript,那么登陆一个卖书的网站,比如china-pub、dearbook、当当,输入JavaScript进行搜索,按照销量排行,(一定是按照销量排行哦)排在前面的基本上都是不错的书。

如果你慎重的话,应该去下载这本书,或者到书店找到它,读上几章(前后都要读,有的书前面的翻译的不错,后面由于时间紧,翻译就变得特别烂了),感觉对自己有帮助,适合自己的,就可以买了。

不 要害怕买错书,读错书,其实任何一本书,哪怕是用两三周时间,到处扫描抄袭攒出来的书,不可能对你一点帮助没有,观其大略,找到对你有帮助的地方,折上 角,可以了。但是如果你非得一个字一个字去读,一边读一边骂娘,是没什么帮助的,只能让你读书籍市场充满失望。所以,不要这样做,采用正确的读书方法吧。

《尚学堂Java培训:如何读书》


JAVA自学之路 四:要事为先
[转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_4.html]

对待人生的任何事情都要:抓大放小,要事为先

对于一个以前从来没有接触过Java的人,java无疑是庞大的,似乎每个领域都可以拓展开来都是一片开阔地,每一个领域要想深入接触到每一个细节所耗费 的精力都是巨大的。这个时候大家都胸怀壮志,两眼发光的盯着每一个崭新的知识点,遇见了任何一个知识点都恨不得抠的清清楚楚,明明白白。

难道这有什么不对吗?
我的意见是,没什么大毛病,但是学习效率太低了!
我们推荐的学习方式是,抓大放小,要事为先

比如说学习J2SE的时候,学到GUI这一章,有的同学认为,既然学到这儿了,我们去把SWING细细的了解一遍吧;还有的同学,遇到了在Linux下的 Shell编程,就恨不得把Shell先学成专家才肯,或者是才敢,继续往下学习;有没有过这样的感觉,一本书的上册没有学好,觉着下册心里也没底儿,甚 至非要把上册复习一遍才敢继续学习。
如果你也是这样,要去看看心理医生啦,没准儿会有洁癖的毛病:)。
任何事情都要追求完美才敢继续往后进行,是一种性格缺陷

大胆的放弃一些东西吧,有失才有得,把自己有限的、宝贵的精力用在对于就业直接相关的地方,这才是最有效率的学习方式!等你参加工作,有了可持续发展的事业动力和经济基础,有时间有精力闲的没事儿干的时候,再去研究那些其它吧。

曾经有一个故事,说得是产能产量的关系。
一个人喜欢读书,读了一辈子,无所不通,这时候要做任何工作都可以,他的产能到了极致,但是,他老了,即便每天产出大量的东西也不能维持多久了,一辈子的产量并没有多少。
另一个人直接工作,忙,天天在机器旁日复一日,做了一辈子,没时间学习和进修,可以想象,产量能有多大呢。
人的一生,要锻炼产能,也要及时产出,引擎要转,也要停下来加油,这两者平衡的越好,你的贡献和产量就会越大。如果钻研的东西和产能目标(或者说近期的产能目标)无关的话,要舍得放手。

所以,对于SWING,暂时先扔在一边吧。
对于shell,对于各种协议过于详细的细节,对于喜欢的游戏编程,对于JavaScript各种华而不实的效果,都暂时和它们分别吧。
一切和我们的直接工作目标关联不大的东西,扔在一边或者弄清楚到足够支持下一步的学习就可以了。

那这样岂不是妨碍我成为通晓各种细节的高手了吗?
我一向不认为一个人掌握了很多很多知识点的细节就是高手了,一个人如果告诉你,回字有四种写法,你会认为他是高手吗? 毫不客气的说,现在我们所教授的所有知识细节在网上或书中都可以找到,只要你肯花时间花精力去动手试,去钻研,没有什么不能掌握的。struts、 spring你能掌握吗?当然能!但是如果把时间花在spring的各种细节的研究上,花在研究中国企业应用不广泛地的spring mvc上,这个精力就太浪费了,而且学习的积极性会受到打击,谁愿意整天泡在细节的蜘蛛网中挣扎不出来呢?谁愿意天天经历风雨却总是不能见到彩虹呢?

盖房子,要先建骨架,再谈修饰。
画山水,要先画结构,再谈润色。
认识一台结构复杂的机器,应该首先认清楚脉络,然后再逐步认识每一个关节。
为了应付从小学到大学的考试,我们背了各种各样的不应该提前掌握的细节,同时也养成了见到细节就抠的学习习惯。而现在,是到改改的时候了。

请在合适的时间,做合适的事情吧。
把时间和精力花在作项目上面,花在写作品以及锻炼解决问题的能力上面吧,这是迈向高手的正确的而且快速的方向。 

我一直不认为一个课程提供了很多很多的细节就是优秀的价值高的课程了,掌握必要的细节,这个不含糊,至于其他,或者通过视频给出(这样可以给出更多的细 节,但是不占上课时间,课上只讲重要的、必要的细节知识),或者在掌握了自学的能力后自己能够查出,这才是正途。

当你看书到某个地方暂时不理解的时候的,暂时放手吧,追求一些行云流水、自然而然的境界吧,只是不要停下前进的脚步,不要被大路旁边的支根末节干扰了你前进的行程,项目,真实的项目,这才是目的,就在不远的前方。

陶渊明读书,叫做“不求甚解”,但他是大诗人。
诸葛亮读书,总是“观其大略”,但他是大政治家。
作研究的,是在确定了方向之后才详细的研究深入的东西。
到了庐山,脉络形状扔在一边,盯着一棵棵小草、一粒粒石子的看,怎么样才能识得“真面目”? 
作为应用型的人才,是研究回字的n种写法还是抓紧时间向着主要应用的方向努力,请自己作出抉择。

项目驱动自己的学习吧,当把握了技术的脉络之后再去补充细节的研究,是正途。

这辈子就不研究其他的方向了吗?
当然要研究!但是在将来合适的时间再说吧。

所以,抓大放小,要事为先
那么,在JAVA的这些课程中,哪些才是大,才是要事呢?请继续读下去。

JAVA自学之路 七:路线图明细
[转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_7.html]

下面给出第二节《 Java自学路线图》[ http://www.bjsxt.com/zixue/zixuezhilu_2.html] 中知识点的明细:

注:
1:下面大多数的知识点我们已经公布了视频或者会近期公布(几个月之内),请大家关注一下这个网址 http://www.bjsxt.com/download.html ,可以按照该页面的提示,用电驴进行下载
2:这里是为方便大家自学给出的列表,请大家不要同尚学堂的课程画等号,下面的内容要比实际授课简单很多,另外很多知识是融汇在项目开发中的,适合面授,不适合自学。

一: J2SE 
面向对象-封装、继承、多态
内存的分析
递归
集合类、泛型、自动打包与解包、Annotation 
IO 
多线程、线程同步 
TCP/UDP 
AWT、事件模型、匿名类 
正则表达式
反射机制

2:数据库(Oracle或者MySQL)
SQL语句
多表连接,内外连接, 子查询等
管理表、视图、索引、序列、约束等 
树状结构存储
存储过程、触发器 
数据库设计三范式、

3:JDBC
JDBC基础
连接池 
树状结构存储与展现 
DataSource & RowSet 
JDBC连接Oracle及MySQL

4:HTML_CSS_JAVASCRIPT
html、css、JavaScript基础语法
JavaScript Form判断 
Dom编程基础(事件处理等) 
JS常用效果如TreeView、下拉联动等 
JS学习方法 
JS调试方法 
DreamWeaver初步(建立HTML、Table、Form、CSS)等

5:Servlet & JSP

tomcat基础 
servlet基础 
web.xml配置基础 
web application的结构 
servlet生命周期 
request response等常用方法 
ServletContext类 
HTTP协议基础(GET POST) 
Cookie 
Session 
Application 

JSP的几种语法(包括JSTL等)注意在项目中练习,不要拘泥于语法细节而裹步不前。

6:Struts
多层架构理论 
Model 1 and Model 2 
Struts基本概念 
MVC
Action与业务逻辑类的关系 
在Struts与JSP之间传递数据 
Struts处理流程(控制流) 
Struts TagLib(了解常用的) 
JSTL
ActionForm 
字段收集 
上传文件 
类型转换 
DTO 
动态Action Form 
验证框架
ActionForward 转发与重定向 
动态生成ActionForward 
全局与局部的ActionForward 
Action Forward Scope
UnknownActionMapping 
Action的线程安全 
I18N 
如何切换语言环境 
Struts异常处理机制 程序处理 自动处理 自定义异常处理器 
Struts的多模块配置

7:XML
(XML/XSL、XSLT/DTD、SCHEMA等基础的概念、关于Java的编程可以暂时扔在一边)

8: hibernate
OR Mapping原理 
Hibernate基础开发步骤 
Hibernate基本接口(重点Session) 
普通属性映射 
关联关系映射 
Native SQL 
inverse lazy cascade 
继承关系映射 
HQL 
性能优化 一级缓存 二级缓存 查询缓存 
事务与并发 悲观锁、乐观锁 
OpenSessionInView 
CurrentSession 
(至于JTA、联合主键、自然主键、动态主键、Any类型 Creteria Queries Intercepter and Event 自定义类型等,可以暂时扔在一边)

9:spring
IOC/DI 
Spring配置
Spring架构 
AOP及Spring AOP 
声明式事务(AOP) 
Spring + Hibernate Spring支持Web 
Scope 
(其他的Spring模块对于自学来说可以暂时扔在一边)

10:EJB3.0
J2EE架构基础(JTA JMS等) 
EJB基础(地位及基本理论、分类等) 
Annotation 
Ant编译与部署EJB 
Session Bean 
EJB的依赖注入 
Persistence API 
(可以用JBoss学习EJB3.0)

11:至于SOA,对于自学的同学来说,暂时不用特别关注。

梳理一下,你就会发现东西不是想象中的那么多呀!

建议大家优先学习我们公布的视频,然后再去找参考书,因为这个时候就能分辨出来哪些书适合你了。

那么,如何才能找到好书呢?一个简单的办法,在卖书的网站上,比如 http://www.china-pub.com ,搜索你想了解的知识点比如"javascript",按销售排行,排在前几位的,应该就是不错的,记下书名,到书店阅读几章,合适你的就是好书了。没钱买?简单!还有什么google + 电驴找不到的资料吗:)

写了这么多,有一些是广告,在其位,谋其政,但并没有讲假话,还望大家理解,如果大家在自学的过程中有什么问题的话,可以写信给我[email protected]或者[email protected],我愿意随时聆听大家的教诲。



Java学习之路——马士兵老师




Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。

  1.1 培养兴趣

  兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个"食利阶层"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。

  1.2 慎选程序设计语言

  男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。

  如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域。如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或.NET,甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之,你需要根据自己的特点来选择合适你的编程语言。

  1.3 要脚踏实地,快餐式的学习不可取

  先分享一个故事。

  有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。 有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。 这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。 但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。

  这个故事给我们的启示是:欲速则不达。

  浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称"参加培训,100%就业",居然报名的学生不少,简直是藐视天下程序员。社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。许多初学者C++/JAVA没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello World程序,就忙不迭的向世界宣告,"我会软件开发了",简历上也大言不惭地写上"精通VC/JAVA"。结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧起《C++编程思想》《JAVA编程思想》仔细钻研,早知如此何必当初呀。

  "你现在讲究简单方便,你以后的路就长了",好象也是佛经中的劝戒。

  1.4 多实践,快实践

  彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。

  从前,四川边境有两个和尚,一个贫穷,一个有钱。一天,穷和尚对富和尚说:"我打算去南海朝圣,你看怎么样?"富和尚说:"这里离南海有几千里远,你靠什么去呢?"穷和尚说:"我只要一个水钵,一个饭碗就够了。"富和尚为难地说:"几年前我就打算买条船去南海,可至今没去成,你还是别去吧!" 一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了。

  这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之后,再去干事情。假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。软件开发是一门工程学科,注重的就是实践,"君子动口不动手"对软件开发人员来讲根本就是错误的,他们提倡"动手至上",但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副"比尔盖茨"样。有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。

  1.5 多参考程序代码

  程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。

  多多参考代码例子,对JAVA而言有参考文献[4.3],有API类的源代码(JDK安装目录下的src.zip文件),也可以研究一些开源的软件或框架。

  1.6 加强英文阅读能力

  对学习编程来说,不要求英语, 但不能一点不会,。最起码像Java API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个"金山词霸"。看多了就会越来越熟练。在学JAVA的同时学习英文,一箭双雕多好。另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。英语好对你学习有很大的帮助。口语好的话更有机会进入管理层,进而可以成为剥削程序员的"周扒皮"。

  1.7 万不得已才请教别人

  笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。请教别人之前,你应该先回答如下几个问题。

  你是否在google中搜索了问题的解决办法?

  你是否查看了JAVA API文档?

  你是否查找过相关书籍?

  你是否写代码测试过?

  如果回答都是"是"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。

  1.8 多读好书

  书中自有颜如玉。比尔?盖茨是一个饱读群书的人。虽然没有读完大学,但九岁的时候比尔?盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔?盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。

  笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,"天呐,这么多书到什么时候才能看完了","学软件开发,感觉上了贼船"。这时候,我的回答一般是,"别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的",学生当场晕倒。(注:这一部分学生是刚学软件开发的)

  对于在JAVA开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊妹篇。

  1.9 使用合适的工具

  工欲善其事必先利其器。软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮忙可以说是寸步难行。工具可以提高开发效率,使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的境界几乎不可企及。在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)。

  2.软件开发学习路线

  两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。

  从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师。不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员。我们应该努力往上走。让我们先整理一下开发应用软件需要学习的主要技术。

  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。

  3.如何学习JAVA?

  3.1 JAVA学习路线

  3.1.1 基础语法及JAVA原理

  基础语法和JAVA原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习JAVA也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的JAVA程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉JAVA基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得"真正"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。

  3.1.2 OO思想的领悟

  掌握了基础语法和JAVA程序运行原理后,我们就可以用JAVA语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。

  使用面向对象的思想进行开发的基本过程是:

  ●调查收集需求。

  ●建立用例模型。

  ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。

  ●细化分析模型到设计模型。

  ●用具体的技术去实现。

  ●测试、部署、总结。

  3.1.3 基本API的学习

  进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的"不需要重新发明轮子"。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看,JAVA DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。

  基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查JAVA DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。

  3.1.4 特定API的学习

  JAVA介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。

  3.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以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。

  3.1.6 学习软件工程

  对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软件工程的必要性才会体现出来。参见"软件开发学习路线"小节。

  3.2学习要点

  确立的学习路线之后,我们还需要总结一下JAVA的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。

  3.2.1勤查API文档

  当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用"javadoc"工具(包含在JDK中)生成标准的JAVA DOC文档,供同行使用。J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下载地址:http://java.sun.com/j2se/1.5.0/download.jsp,你可以到google搜索CHM版本下载。也可以在线查看:http://java.sun.com/j2se/1.5.0/docs/api/index.html。

  对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。

  当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:

  ●找特定的包,包一般根据功能组织。

  ●找需要使用类,类命名规范的话我们由类的名字可猜出一二。

  ●选择构造器,大多数使用类的方式是创建对象。

  ●选择你需要的方法。

  3.2.2 查书/google->写代码测试->查看源代码->请教别人

  当我们遇到问题的时候该如何解决?

  这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像"某些类/方法如何使用的问题",DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人。

  3.2.3学习开源软件的设计思想

  JAVA领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。

  3.2.4 规范的重要性

  没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.jcp.org下载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。JAVA编码规范到此查看或下载http://java.sun.com/docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。

  3.2.5 不局限于JAVA

  很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。

  JAVA不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。如学习JAVA集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再学"的原则。



Java:如何读书?

转载请注明出处:【http://www.bjsxt.com/books/how_to_read_book.html 

对于没有基础的同学来说,我们强烈推荐使用视频入门,但是当你有了一定的基础之后,尤其是只是想查一查特定的知识点,定位视频就往往不如翻书或者是google方便。

但是即便是好书,读的方法不对的话,也不能产生好的效果。

现在大多数人读书就像是在学校学习教材,一个字一个字的扣,一个知识点非得弄得明明白白彻彻底底,才敢继续往下读继续往下学,而这种读书的方法是要不得的,计算机是应用科学,除了基础的理论,90%的书是用不着去钻研细节的。

建议一定请教一下在IT行业里工作的高手,他们看书有一个特点,就是按需而读,什么时候需要,什么时候读书,不需要的就一笔带过,读一个大概,用的时候能够想的起来去哪里查就行了。

不同的书,有不同的读法。
我们将软件开发的书分成四类,建议使用不同的读法(假设你已经通过视频入了门)

第 一类:说明书型:这种书恨不得把每一个类的每一个方法,或者每一个命令的每一个参数都说的明明白白,大多数的什么XX参考手册、XX百科全书等都是属于这 种类型,我们的意见是,这种书是最不值得从头到尾的细读的,甚至不值得买,因为其实你直接用API、或者帮助文档就可以了。这种书是用来查的!

第 二类:基础理论型:讲一些在软件开发领域经典不衰的结构、算法、设计、分析等特定的理论,应该说这一类的书是值得花时间细细研读的,因为这些不会随着时间 的变化而变化,是放之四海而皆准的东西,比如数据结构、算法、图形学、设计模式、分析模式等等,但是这种书读起来很费力气,建议是在工作之余有时间的情况 下去研究,或者是需要的时候再去研究这个算法,基本上就可以了。不要给自己太大的心理压力,你只是算法的使用者,不要奢望(或者说不要短时间内奢望,针对 学习是为了参加工作的人)自己成为算法的发明者,能够用好这些算法就可以阶段性的满意了,甚至于这些东西的实现的细节可以暂时放在一边,这样这些书读起来 就显得轻松了。

第三类:操作指南型:这种书会一步一步的带你做操作,从实践中总结理论,各种XX in Action、XX cookbook等就是属于这种类型,实际上很多书都有这方面的成分,但是这一类书的操作往往是滞后于软件版本的,所以很多情况下如果你按照里面的指南操 作,会遇到各种各样的问题,出现操作不下去的情况,这个时候就需要你解决问题的能力了,参考:《问题解决之道》,另外,与其看书上讲的操作,不如看视频来的直接和痛快。

第四类:混合型:实际上,90%以上的书属于混合了以上三种类型的书,有一些基础理论,加上一些API的说明,再加上部分的操作指南,一本书就诞生了。对于这一类的书,读的过程之中应该能够分辨哪一部分属于什么类型,采用不同的读法就可以了。

总之,需要认真研读的书就一类,就是经典理论的书,对于其他的大多数,视频入门,然后观其大略,用时按需而查,已经够了。

还有一个问题,如何读英文书呢?当然这里说的是你有了一定的英文基础之后(高中的单词一般就够读英文的软件开发的书了)
要想阅读英文的书,最关键的一点首先要过心理这一关,有很多人认为自己的英文水平不够,所以不敢读英文的书,注意这里说的是不敢,而不是不能。大多数的还 没有上战场,就已经被吓死了。因此,首先一点,你要敢打开英文的书,没有人天生就能读英文,但是如果你不读,肯定就永远不会读了。

先打开英文书,手边备好金山词霸,注意这个时候不要给自己太大的压力,想着非要通过一本书提高自己英文的水平,千万别这样,你会很累而且会有很深的挫折感,想着读书能给自己带来技术和英文上的进步就可以了。

另外建议刚开始的时候选择简单易读的英文书,不要挑选太难的,中英文对照的读效果会更好。英文书读起来也非常忌讳一个字一个字的去读,那就太累人了。

拿 一本讲JavaScript的书举例,《Professional Javascript for Web Developers》,一般是建议有了一定的JavaScript基础,然后就可以尝试读一读英语书了,不建议在一点都不了解JavaScript的时 候进行阅读。

读的时候建议以代码为导向,详读标题,略读内容。

以代码为导向,说的是重点阅读每一段的代码,因为已经有了一定的基础,所以阅读代码就能感觉出来这一段讲的是什么,大多数时候就不需要再细读里面的讲解了,读起来会更轻松。

详 读标题,说的是要仔细阅读每一个小节的标题,因为作为一本不错的书,小节的标题一定是代表了这一小节的内容,如果这一小节已经掌握了,比如说讲的是 “JavaScript Variable”,对于变量我们已经掌握的话,就没有必要去细读其中的内容了。如果有一个小节没有掌握,比如讲的是“JavaScript XML”,那就是需要略读的内容。

没错,略读内容,大略的读懂即可,有一些单词、一些句型不认识是没关系的,只要 能够结合代码大致理解讲的内容就够了,但是如果有一些单词和句型强烈阻碍你的前进,那么一定要把他啃下来,每天不用多,啃个两三个句型,四五个单词,用不 了几个月,市面上大多数的英文书籍对你来说就不是什么问题了。

用这样的方法,去读英文的帮助,API等等,都会轻松很多。不信你可以去试着读一下MySQL的管理员参考手册J

总结:

我曾经有一天读了三本SOA方面的书,2个小时读完一本英文书,怎么读?就是观其大略(诸葛亮读书也是观其大略哦:),读一读要用到的重点,读一读标题,了解整本书的架构,已经足够了。能到什么程度?反正如果要做一个效果不知道如何下手的话,我已经知道去哪里查了,呵呵。

当然,这个是建立在已经有了一定的基础的前提之上。

用视频入门、观其大略、按需而查、心理放松,愉快的去读书吧,去读技术的书籍吧。

学会了读书,但市场上的书多如牛毛,如何才能选到好书呢?
请参考:《 尚学堂Java培训:如何寻找好书》



你可能感兴趣的:(java自学---如何寻找好书?)