在ChinaITLAB导师制辅导中笔者发现问得最多问题莫过于"如何学习编程?Java该如何学习?"类似问题回答多了难免会感觉厌烦就萌生了写下本文想法到时候再有人问起类似问题我可以告诉他(她)请你去看看Java学习的路拜读过台湾蔡学镛先生Java夜未眠有些文章如Java学习的道等让我们确实有共鸣本文题目也由此而来
软件Software开发的路是充满荆棘和挑战的路,也是充满希望的路Java学习也是如此没有捷径可走梦想像天龙 8部中虚竹样被无崖子醍醐灌顶而轻松获得甲子功力是很不现实每天仰天大叫"天神啊请赐给我本葵花宝典吧"殊不知即使你获得了葵花宝典除了受自宫其身的苦外你也不定成得了"东方不败"倒是成"西方失败"几率高点
"不走弯路就是捷径"佛经说不无道理
1.如何学习设计?
Java是种平台也是种设计语言如何学好设计不仅仅适用于Java对C等其他设计语言也样管用有编程高手认为Java也好C也好没什么分别拿来就用为什么他们能达到如此境界?我想是编程语言的间有共通的处领会了编程精髓自然能够做到通百通如何学习设计理所当然也有许多共通地方
1.1 培养兴趣
兴趣是能够让你坚持下去动力如果只是把写作为谋生手段话你会活很累也太对不起自己了多关心些行业趣事多想想盖茨不是提倡天天做白日梦但人要是没有了梦想你觉得有味道吗?可能像许多深圳本地农民样打打麻将喝喝功夫茶拜拜财神爷;每个月就有几万十几万甚至更多进帐凭空多出个"食利阶层"你认为这样有味道吗?有空多到些员论坛转转你会发现他们其实很乐观幽默时不时会冒出智慧火花
1.2 慎选设计语言
男怕入错行女怕嫁错郎初学者选择设计语言需要谨慎对待软件Software开发不仅仅是掌握门编程语言了事它还需要其他很多方面背景知识软件Software开发也不仅仅局限于某几个领域而是已经渗透到了各行各业几乎每个角落
如果你对硬件比较感兴趣你可以学习C语言/汇编语言进入硬件开发领域如果你对电信行业知识及网络比较熟悉你可以在C/C等的上多花时间以期进入电信软件Software开发领域如果你对操作系统比较熟悉你可以学习C/Linux等等,为Linux内核开发/驱动开发/嵌入式开发打基础
如果你想介入到应用范围最广泛应用软件Software开发(包括电子商务电子政务系统)话你可以选择J2EE或.NET甚至LAMP组合每个领域要求背景知识不样做应用软件Software需要对数据库等很熟悉总的你需要根据自己特点来选择合适你编程语言
1.3 要脚踏实地,快餐式学习不可取
先分享个故事
有个小朋友他很喜欢研究生物学很想知道那些蝴蝶如何从蛹壳里出来变成蝴蝶便会飞有次他走到草原上面看见个蛹便取了回家然后看着过了几天以后这个蛹出了条裂痕看见里面蝴蝶开始挣扎想抓破蛹壳飞出来 这个过程达数小时的久蝴蝶在蛹里面很辛苦地拼命挣扎如何也没法子走出来这个小孩看着看着不忍心就想不如让我帮帮它吧便随手拿起剪刀在蛹上剪开使蝴蝶破蛹而出 但蝴蝶出来以后翅膀不够力变得很臃肿飞不起来
这个故事给我们启示是:欲速则不达
浮躁是现代人最普遍心态能怪谁?也许是贫穷落后了这么多年缘故就像当年大跃进样都想大步跨入共产主义社会现在软件Software公司、客户、政府、学校、培训机构等等到处弥漫着浮躁的气就拿笔者比较熟悉深圳IT培训行业来说吧居然有打广告宣称"参加培训100%就业"居然报名学生不少简直是藐视天下员社会环境如是我们不能改变只能改变自己,闹市中安宁弥足珍贵许多初学者C/Java没开始学立马使用VC/JBuilder,会使用VC/JBuilder开发个Hello World就忙不迭向世界宣告"我会软件Software开发了"简历上也大言不惭地写上"精通VC/Java"结果到软件Software公司面试时要么被 3两下打发走了要么被驳体无完肤无地自容到处碰壁的后才知道捧起C编程思想Java编程思想仔细钻研早知如此何必当初呀
"你现在讲究简单方便你以后路就长了"好象也是佛经中劝戒
1.4 多实战,快实战
彭端淑为学首示子侄中有穷和尚和富和尚故事
从前 4川边境有两个和尚个贫穷个有钱天穷和尚对富和尚说:"我打算去南海朝圣你看如何样?"富和尚说:"这里离南海有几千里远你靠什么去呢?"穷和尚说:"我只要个水钵个饭碗就够了"富和尚为难地说:"几年前我就打算买条船去南海可至今没去成你还是别去吧!" 年以后富和尚还在为租赁船只筹钱穷和尚却已经从南海朝圣回来了
这个故事可解读为:任何事情旦考虑好了就要马上上路不要等到准备周全的后再去干事情假如事情准备考虑周全了再上路话别人恐怕捷足先登了软件Software开发是门工程学科注重就是实战"君子动口不动手"对软件Software开发人员来讲根本就是他们提倡"动手至上"但别害怕他们大多温文尔雅没有暴力倾向虽然有时候蓬头垢面副"比尔盖茨"样有前辈高人认为学习编程秘诀是:编程、编程、再编程笔者深表赞同不仅要多实战而且要快实战我们在看书时候不要等到你完全理解了才动手敲代码而是应该在看书同时敲代码运行各种情况可以让你更快更牢固掌握知识点
1.5 多参考代码
代码是软件Software开发最重要成果的其中渗透了员思想和灵魂许多人被仙剑奇侠传中凄美爱情故事感动,悲剧结局更有种缺憾美为什么要以悲剧结尾?据说是写仙剑奇侠传员失恋而安排了这样结局他把自己感觉融入到游戏中却让众多仙剑迷扼腕叹息
多多参考代码例子对Java而言有参考文献[4.3],有API类源代码(JDK安装目录下src.zip文件)也可以研究些开源软件Software或框架
1.6 加强英文阅读能力
对学习编程来说不要求英语, 但不能点不会,最起码像Java API文档(参考文献[4.4])这些东西还是要能看懂,连猜带懵都可以;旁边再开启个"金山词霸"看多了就会越来越熟练在学Java同时学习英文箭双雕多好另外好多软件Software需要到英文网站WebSite下载你要能够找到它们这些是最基本要求英语好对你学习有很大帮助口语好话更有机会进入管理层进而可以成为剥削员"周扒皮"
1.7 万不得已才请教别人
笔者在ChinaITLab网校在线辅导系统中解决学生问题时发现大部分问题学生稍做研究就可以解决请教别人的前你应该先回答如下几个问题
你是否在google中搜索了问题解决办法?
你是否查看了Java API文档?
你是否查找过相关书籍?
你是否写代码测试过?
如果回答都是"是"话而且还没有找到解决办法再问别人不迟要知道独立研究能力对你很重要要知道员时间是很宝贵
1.8 多读好书
书中自有颜如玉比尔?盖茨是个饱读群书人虽然没有读完大学但 9岁时候比尔?盖茨就已经读完了所有百科全书所以他精通天文、历史、地理等等各类学科可以说比尔?盖茨不仅是当今世界上金钱首富而且也可以称得上是知识巨富
笔者在给学生上课时候经常会给他们推荐书籍到后来学生实在忍无可忍开始抱怨"天呐这么多书到什么时候才能看完了""学软件Software开发感觉上了贼船"这时候我回答般是"别着急什么时候带你们去看看我书房到现在每月花在技术书籍上钱400元这在软件Software开发人员的中还只能够算是中等"学生当场晕倒(注:这部分学生是刚学软件Software开发)
对于在Java开发领域好书在笔者另外篇文章中会专门点评该文章可作为本文姊妹篇
1.9 使用合适工具
工欲善其事必先利其器软件Software开发包含各种各样活动需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试、自动化测试、持续集成等等没有工具帮忙可以说是寸步难行工具可以提高开发效率使软件Software质量更高BUG更少组合称手武器到飞花摘叶皆可伤人境界就很高了无招胜有招手中无剑心中有剑这样境界几乎不可企及在笔者另外篇文章中会专门阐述如何选择合适工具(该文章也可作为本文姊妹篇)
2.软件Software开发学习路线
两千多年儒家思想孔孟的道中庸思想透入骨髓既不冒进也不保守并非中庸的道而是找寻学习软件Software开发正确路线和规律
从软件Software开发人员生涯规划来讲我们可以大致分为 3个阶段软件Software工程师→软件Software设计师→架构设计师或项目管理(project management)师不想当元帅士兵不是好士兵不想当架构设计师或项目管理(project management)师员也不是好员我们应该努力往上走让我们先整理下开发应用软件Software需要学习主要技术
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.种软件Software过程RUP/XP/CMM等等通过软件Software过程来组织软件Software开发众多活动使开发流程专业化规范标准化当然还有其他些软件Software工程知识
H.项目管理(project management)、体系结构、框架知识
正确路线应该是:B→C→E→F→G→H
还需要补充几点:
1).对于A和C要补充是我们应该在实战中逐步领悟编程理论和编程思想新技术虽然不断涌现更新速度令人眼花燎乱雾里看花;但万变不离其宗编程理论和编程思想变化却很慢掌握了编程理论和编程思想你就会有拨云见日的感面向对象思想在目前来讲是相当关键是强势技术的在上面需要多投入时间给你回报也会让你惊喜
2).对于数据库来说是独立学习这个时机就由你来决定吧
3).编程语言作为学习软件Software开发主线而其余作为辅线
4).软件Software工程师着重于B、C、E、D;软件Software设计师着重于B、C、E、D、F;架构设计师着重于C、F、H
3.如何学习Java?
3.1 Java学习路线
prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />
基础语法和Java原理是地基地基不牢靠犹如沙地上建摩天大厦是相当危险学习Java也是如此必须要有扎实基础你才能在J2EE、J2ME领域游刃有余参加SCJP(SUN公司认证Java员)考试不失为个好思路方法原因的是为了对得起你交1200大洋考试费你会更努力学习原因的 2是SCJP考试能够让你把基础打得很牢靠它要求你跟JDK样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起就能够获得软件Software公司青睐就能够获取高薪这样想法也是很危险获得"真正"SCJP只能证明你基础还过得去但离实际开发还有很长段路要走
3.1.2 OO思想领悟
掌握了基础语法和Java运行原理后我们就可以用Java语言实现面向对象思想了面向对象是种思路方法学;是独立于语言的外编程思想;是CBD基于组件开发基础;属于强势技术的当以后因工作需要转到别面向对象语言时候你会感到特别熟悉亲切学起来像喝凉水这么简单
使用面向对象思想进行开发基本过程是:
●调查收集需求
●建立用例模型
●从用例模型中识别分析类及类和类的间静态动态关系从而建立分析模型
●细化分析模型到设计模型
●用具体技术去实现
●测试、部署、整理总结
3.1.3 基本API学习
进行软件Software开发时候并不是什么功能都需要我们去实现也就是经典名言所说"不需要重新发明轮子"我们可以利用现成类、组件、框架来搭建我们应用如SUN公司编写好了众多类实现些底层功能以及我们下载过来JAR文件中包含类,我们可以类中思路方法来完成某些功能或继承它那么这些类中究竟提供了哪些思路方法给我们使用?思路方法参数个数及类型是?类构造器需不需要参数?总不可能SUN公司工程师打国际长途甚至飘洋过海来告诉你他编写类该如何使用吧他们只能提供文档给我们查看Java DOC文档(参考文献4.4)就是这样文档它可以说是员和员交流文档
基本API指是实现了些底层功能类通用性较强API如串处理/输入输出等等我们又把它成为类库熟悉API思路方法是多查Java DOC文档(参考文献4.4) 2是使用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发展趋势就是集成软件Software开发中要用到几乎所有工具
从开发效率角度考虑使用IDE是必经的路也是从个学生到个职业员转变里程碑
Java开发使用IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有市场份额是最大JBuilder在近几年来直是Java集成开发环境中霸主它是由备受员尊敬Borland公司开发在硝烟弥漫Java IDE大战中,以其快速版本更新击败IBMVisual Age for Java等而成就番伟业IBM在Visual Age for Java上已经无利可图的下干脆将的贡献给开源社区成为Eclipse前身真所谓"柳暗花明又村"浴火重生Eclipse以其开放式插件扩展机制、免费开源获得广大员(包括几乎所有骨灰级员)青睐极具发展潜力
3.1.6 学习软件Software工程
对小型项目而言你可能认为软件Software工程没太大必要随着项目复杂性越来越高软件Software工程必要性才会体现出来参见"软件Software开发学习路线"小节
3.2学习要点
确立学习路线的后我们还需要整理总结下Java学习要点这些要点在前文多多少少提到过只是笔者觉得这些地方特别要注意才对它们进行汇总不要嫌我婆婆妈妈啊
3.2.1勤查API文档
当员编写好某些类觉得很有成就感,想把它贡献给各位苦难同行这时候你要使用"Javadoc"工具(包含在JDK中)生成标准Java DOC文档,供同行使用J2SE/J2EE/J2MEDOC文档是员和员交流工具几乎人手份除了菜鸟的外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文档看看有没有现成实现有话就不必劳神费心了直接用就可以了找不到时候才考虑自己实现使用步骤般如下:
●找特定包包般根据功能组织
●找需要使用类类命名规范标准话我们由类名字可猜出 2
●选择构造器大多数使用类方式是创建对象
●选择你需要思路方法
3.2.2 查书/google->写代码测试->查看源代码->请教别人
当我们遇到问题时候该如何解决?
这时候不要急着问别人太简单问题没经过研究问题别人会因此而瞧不起你可以先找找书到google中搜下看看绝大部分问题基本就解决了而像"某些类/思路方法如何使用问题"DOC文档就是答案对某些知识点有疑惑是写代码测试下会给你留下深刻印象而有问题你可能需要直接看API源代码验证你想法万不得已才去请教别人
3.2.3学习开源软件Software设计思想
Java领域有许多源代码开放工具、组件、框架JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛这些可是前辈给我们留下瑰宝呀入宝山而空手归你心甘吗?对这些工具、框架进行分析领会其中设计思想有朝日说不定你也能写个XXX框架什么风光把分析开源软件Software其实是你提高技术、提高实战能力便捷思路方法
3.2.4 规范标准重要性
没有规矩不成方圆这里规范标准有两层含义第层含义是技术规范标准多到http://www.jcp.org下载JSRXXX规范标准多读规范标准这是最权威准确最新教材第 2层含义是编程规范标准如果你使用了大量独特算法富有个性变量及思路方法命名方式;同时没给作注释以显示你编程功底是多么深厚这样代码别人看起来像天书要理解谈何容易更不用说维护了必然会被无情地扫入垃圾堆Java编码规范标准到此查看或下载http://Java.sun.com/docs/codeconv/中文也有啊还要问我在哪请参考3.2.2节
3.2.5 不局限于Java
很不幸很幸运要学习东西还有很多不幸是要学东西太多且多变没时间陪老婆家人或女朋友导致身心疲惫严重者甚至导致抑郁症幸运是别人要抢你饭碗绝非易事他们或她们需要付出很多才能达成心愿
Java不要孤立地去学习需要综合学习数据结构、OOP、软件Software工程、UML、网络编程、数据库技术等知识用横向纵向比较联想方式去学习会更有效如学习Java集合时候找数据结构书看看;学JDBC时候复习数据库技术;采取依然是"需要时候再学"原则
4.结束语
需要强调是学习软件Software开发确实有定难度也很辛苦需要付出很多努力但千万不要半途而废本文如果能对直徘徊在Java神殿的外朋友有所帮助话笔者也欣慰了哈哈如何听起来老气横秋呀?没办法在电脑长期辐射的下都快变成小老头了最后奉劝各位员尤其是MM员完成工作后赶快远离电脑据胡播乱报报道电脑辐射会在白皙皮肤上面点缀些小黑点看起来鲜艳无比……
TAG: Java JAVA java 捷径 学习 走弯路
最新评论