1.如何学习编程?
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开发一个HelloWorld程序,就忙不迭的向世界宣告,"我会软件开发了",简历上也大言不惭地写上"精通VC/JAVA"。
结果到软件公司面试时要么被三两下打发走了。要么被驳的体无完肤。无地自容。到处碰壁之后才知道捧起《C++编程思想》《JAVA编程思想》细致钻研,早知如此何必当初呀。
"你如今讲究简单方便,你以后的路就长了",好象也是佛经中的劝戒。
1.4 多实践,快实践
彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。
从前。四川边境有两个和尚。一个贫穷,一个有钱。一天,穷和尚对富和尚说:"我打算去南海朝圣,你看怎么样?"富和尚说:"这里离南海有几千里远。你靠什么去呢?"穷和尚说:"我仅仅要一个水钵,一个饭碗就够了。"富和尚为难地说:"几年前我就打算买条船去南海,可至今没去成,你还是别去吧!"一年以后。富和尚还在为租赁船仅仅筹钱,穷和尚却已经从南海朝圣回来了。
这个故事可解读为:不论什么事情,一旦考虑好了,就要立即上路,不要等到准备周全之后,再去干事情。假如事情准备考虑周全了再上路的话。别人恐怕捷足先登了。软件开发是一门project学科,注重的就是实践,"君子动口不动手"对软件开发者来讲根本就是错误的,他们提倡"动手至上"。但别害怕,他们大多温文尔雅,没有暴力倾向,尽管有时候蓬头垢面的一副"比尔盖茨"样。有前辈高人觉得。学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。不仅要多实践,并且要快实践。
我们在看书的时候,不要等到你全然理解了才动手写程序,而是应该在看书的同一时候写程序,程序执行的各种情况能够让你更快更坚固的掌握知识点。
1.5 多參考程序代码
程序代码是软件开发最重要的成果之中的一个。当中渗透了程序猿的思想与灵魂。很多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。
为什么要以悲剧结尾?据说是由于写《仙剑奇侠传》的程序猿失恋而安排了这种结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。
多多參考代码样例,对JAVA而言有參考文献[4.3],有API类的源码(安装JDK文件夹下的src.zip文件),也能够研究一些开源的软件或框架。
1.6 加强英文阅读能力
对学习编程来说,不要求英语,但不能一点不会,。
最起码像JAVAAPI文档(參考文献[4.4])这些东西还是要能看懂的,连猜带懵都能够;旁边再开启一个"金山词霸"。看多了就会越来越熟练。在学JAVA的同一时候学习英文,一箭双雕多好。另外好多软件须要到英文站点下载。你要能够找到它们。这些是最主要的要求。英语好对你学习有非常大的帮助。口语好的话更有机会进入管理层。进而能够成为剥削程序猿的"周扒皮"。
1.7 万不得已才请教别人
笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现。大部分的问题学生稍做思考就能够解决。请教别人之前,你应该先回答例如以下几个问题。
你是否在google中搜索了问题的解决的方法?
你是否查看了JAVAAPI文档?
你是否查找过相关书籍?
你是否写代码測试过?
假设回答都是"是"的话,并且还没有找到解决的方法,再问别人不迟。要知道独立思考的能力对你非常重要。要知道程序猿的时间是非常宝贵的。
1.8 多读好书
书中自有颜如玉。比尔?
盖茨是一个饱读群书的人。尽管没有读完大学,但九岁的时候比尔?
盖茨就已经读完了全部的百科全书。所以他精通天文、历史、地理等等各类学科。能够说比尔?盖茨不仅是当今世界上金钱的首富。并且也能够称得上是知识的巨富。
笔者在给学生上课的时候常常会给他们推荐书籍,到后来学生实在忍无可忍開始抱怨,"天呐。这么多书到什么时候才干看完了"。"学软件开发,感觉上了贼船"。
这时候。我的回答通常是,"别着急。什么时候带你们去看看我的书房,到如今每月花在技术书籍上的钱400元,这在软件开发者之中还仅仅可以算是中等的",学生当场晕倒。(注:这一部分学生是刚学软件开发的)
对于在JAVA开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊妹篇。
1.9 使用合适的工具
工欲善其事必先利其器。软件开发包括各种各样的活动。需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自己主动化測试、持续集成等等,没有工具帮忙能够说是寸步难行。工具能够提高开发效率,使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境地就非常高了,无招胜有招,手中无剑心中有剑这种境地差点儿不可企及。在笔者另外一篇文章中会专门阐述怎样选择合适的工具(该文章也可作为本文的姊妹篇)。
2.软件开发学习路线
两千多年的儒家思想孔孟之道。中庸的思想透入骨髓,既不冒进也不保守并不是中庸之道,而是找寻学习软件开发的正确路线与规律。
从软件开发者的生涯规划来讲,我们能够大致分为三个阶段,软件project师→软件设计师→架构设计师或项目管理师。
不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序猿也不是好的程序猿。
我们应该努力往上走。让我们先整理一下开发应用软件须要学习的主要技术。
A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并不是不重要。
如不想成为计算机科学家的话,能够採取"用到的时候再来学"的原则。
B.一门编程语言。如今基本上都是面向对象的语言。JAVA/C++/C#等等。假设做WEB开发的话还要学习HTML/Jav**ript等等。
C.一种方法学或者说思想,如今基本都是面向对象思想(OOA/OOD/设计模式)。由此而衍生的基于组件开发CBD/面向方面编程AOP等等。
D.一种关系型数据库。ORACLE/SqlServer/DB2/MySQL等等
E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET等。
F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。
G.一种软件过程,RUP/XP/CMM等等。通过软件过程来组织软件开发的众多活动。使开发流程专业化规范化。当然还有其它的一些软件project知识。
H.项目管理、体系结构、框架知识。
正确的路线应该是:B→C→E→F→G→H。
还须要补充几点:
1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。新技术尽管不断涌现。更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想的变化却非常慢。掌握了编程理论与编程思想你就会有拨云见日之感。
面向对象的思想在眼下来讲是相当关键的,是强势技术之中的一个,在上面须要多投入时间,给你的回报也会让你惊喜。
2).对于数据库来说是独立学习的,这个时机就由你来决定吧。
3).编程语言作为学习软件开发的主线。而其余的作为辅线。
4).软件project师着重于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公司的project师打国际长途甚至飘洋过海来告诉你他编写的类该怎样使用吧。他们仅仅能提供文档给我们查看,JAVADOC文档(參考文献4.4)就是这种文档。它能够说是程序猿与程序猿交流的文档。
基本API指的是实现了一些底层功能的类,通用性较强的API。如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查JAVADOC文档(參考文献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了。
程序猿日常工作包含非常多活动。编辑、编译及构建、调试、单元測试、版本号控制、维持模型与代码同步、文档的更新等等,差点儿每一项活动都有专门的工具,假设独立使用这些工具的话。你将会非常痛苦,你须要在堆满工具的任务栏上不断的切换。效率非常低下。也非常easy出错。在JBuilder、Eclipse等IDE中已经自己主动集成编辑器、编译器、调试器、单元測试工具JUnit、自己主动构建工具ANT、版本号控制工具CVS、DOC文档生成与更新等等,甚至能够把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的差点儿全部工具。
从开发效率的角度考虑。使用IDE是必经之路,也是从一个学生到一个职业程序猿转变的里程碑。
JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是JAVA集成开发环境中的霸主。它是由备受程序猿尊敬的Borland公司开发。在硝烟弥漫的JAVAIDE大战中,以其高速的版本号更新击败IBM的VisualAgeforJAVA等而成就一番伟业。IBM在VisualAgeforJAVA上已经无利可图之下,干脆将之贡献给开源社区。成为Eclipse的前身。真所谓"柳暗花明又一村"。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序猿(包含差点儿全部的骨灰级程序猿)的青睐。极具发展潜力。
3.1.6 学习软件project
对小型项目而言,你可能觉得软件project没太大的必要。随着项目的复杂性越来越高。软件project的必要性才会体现出来。參见"软件开发学习路线"小节。
3.2 学习要点
确立的学习路线之后,我们还须要总结一下JAVA的学习要点,这些要点在前文多多少少提到过,仅仅是笔者认为这些地方特别要注意才对它们进行汇总。不要嫌我婆婆妈妈啊。
3.2.1 勤查API文档
当程序猿编写好某些类,认为非常有成就感,想把它贡献给各位苦难的同行。这时候你要使用"javadoc"工具(包括在JDK中)生成标准的JAVADOC文档,供同行使用。
J2SE/J2EE/J2ME的DOC文档是程序猿与程序猿交流的工具。差点儿人手一份。除了菜鸟之外。
J2SEDOC文档官方下载地址: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规范,多读规范,这是最权威准确最新的教材。
第二层含义是编程规范。假设你使用了大量的独特算法。富有个性的变量及方法的命名方式;同一时候。没给程序作凝视。以显示你的编程功底是多么的深厚。这种代码别人看起来像天书,要理解谈何easy,更不用说维护了,必定会被无情地扫入垃圾堆。
JAVA编码规范到此查看或下载http://java.sun.com/docs/codeconv/,中文的也有。啊,还要问我在哪。请參考3.2.2节。
3.2.5 不局限于JAVA
非常不幸。非常幸运。要学习的东西还有非常多。不幸的是由于要学的东西太多且多变,没时间陪老婆家人或女朋友。导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事。他们或她们须要付出非常多才干达成心愿。
JAVA不要孤立地去学习,须要综合学习数据结构、OOP、软件project、UML、网络编程、数据库技术等知识,用横向纵向的比較联想的方式去学习会更有效。如学习JAVA集合的时候找数据结构的书看看。学JDBC的时候复习数据库技术;採取的依旧是"须要的时候再学"的原则。
版权声明:本文博主原创文章。博客,未经同意不得转载。
Java学习路径:不走弯路,这是一条捷径的更多相关文章
-
Java学习路径(抛光砖)
这就是我刚刚在五孔问答中找到的Java学习路线图抛光砖价格.我个人认为,这条Java学习路线是可以的.它是2018年相对较新的Java学习路线,更符合企业就业标准. Java学习路径的第一阶段:Jav ...
-
Java学习路径及练手项目合集
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...
-
Java学习路径
-------第一部分:基础语法-------- 1.输出语句 1.1 hello world 1.2 拼接输出.换行和不换行输出 1.3 拼接变量输出 2.输入语句: 2.1 定义变量,赋值(整数. ...
-
Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
-
Java学习-043-获取文件在目录中的路径
我们在日常的电脑使用中,经常需要在当前目录或当期目录及其子目录中查找文件,并获取相应的文件路径名.在我们的自动化测试中,也经常需要确认文件在目录中是否成功生成或已存在,因而我写了一个小方法来实现. 获 ...
-
Java学习-009-文件名称及路径获取实例及源代码
此文源码主要为应用 Java 获取文件名称及文件目录的源码及其测试源码.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-2-3 00:02:27,请知悉. Java获取文件名称的 ...
-
JAVA学习,是一条漫长的道路
我在Java 1.0正式问世前就开始学习Java,这么多年过去了,到现在我的Java学习历程还没有停过.我阅读原文书,研究原始码,撰写程序,自认为走得扎实,不奢望一步登天.像我这样老式的学习方式,显然 ...
-
python爬虫 | 一条高效的学习路径
数据是创造和决策的原材料,高质量的数据都价值不菲.而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣.知乎:爬取优质答案,筛选出各话题下热门内容,探索用户的舆论导向. 淘宝 ...
-
亲爱的,我是一条Linux运维技术学习路径呀。
根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...
随机推荐
-
Egret Wiing3快捷键
删除当前行 ( Ctrl+Shift+k ),EgretWing2.5下为 Ctrl+D 折叠 ( Ctrl+Shift+[ ) 展开 ( Ctrl+Shift+] ) Ctrl+Shift+P呼出面 ...
- idea community 配置已有的scala工程
-
PHP高效率写法(详解原因)
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.当然了,这个测试方法需要在十万级以上次执行,效果才明显.其实静态方法和非静态方法的效率 ...
-
POJ--1416
#include <stdio.h> #include <stdlib.h> ]={};//代表有没有切割的数组 ;//输入的要被切割的数字 ]={};//切完输出的数组成的数 ...
-
最简单的基于FFMPEG+SDL的视频播放器 ver2 (採用SDL2.0)
===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...
-
zend studio代码字体修改字体和大小.
第一步:进入设置窗口 windows -> preferences 第二步:进入修改字体的选项卡. General -> Appearance -> Colors and ...
-
调整CentOS的文字登陆界面的分辨率
通过文字界面登陆到系统,切换到root权限. 用vi打开 /boot/grub/menu.lst 文件 ,因为menu.lst是grub.conf文件的快捷方式,终于打开的还是grub.conf文 ...
-
CF 365 div2 D
http://codeforces.com/contest/703/problem/D 题目大意:给你一个长度为n数组,有q个询问,每次询问一个区间[l,r],这个区间的val就是所有数值为偶数个的数 ...
-
uva 10600 ACM Contest And Blackout
题意: 求最小生成树和次小生成树的总权值. 思路: 第一种做法,适用于规模较小的时候,prim算法进行的时候维护在树中两点之间路径中边的最大值,复杂度O(n^2),枚举边O(m),总复杂度O(n^2) ...
-
WebSphere安装教程(WAS6.1为例)
1.网络准备 我们选择图形界面安装,如果堡垒机是windows则要在目标机器安装桌面环境并开启vcnserver:如果堡垒机是Linux则在堡垒机安装桌面环境和vncserver,然后将目标机的DIS ...