1.5 怎么学习Java
学习Java语言,先要解决入门的问题。要找到阻碍入门的难点,一个一个地克服,这样才能有效率。本节分析了读者在学习Java语言过程中可能遇到的困难,并提出了有针对性的解决方法。
1.5.1 入门之道
人们发明工具扩展自己的能力。飞机使人“飞翔”在天空、潜艇使人“遨游”在深海。使用任何工具都需要学习工具的用法。工具越复杂,学习越费时间。学习开飞机一定比学习骑自行车费时。计算机是人类一项伟大的发明,它是用来帮助人们进行脑力劳动的机器。因为它复杂,所以,需要较长的时间来学习。
人们常说:万事开头难。程序设计入门之难,难在何处?只有锁定难点,才能攻坚克难。
(1)难在基础知识不具备。对于学习Java所需要的基础知识我们为读者进行了全面的梳理,在本章的插页中对于Java的基础知识分别做了系统讲解。如果对计算机的基本组成和工作原理以及计算机解题过程不了解,如果没有掌握某些必备的基础知识,例如数制知识和数在内存中的存储形式,就不能很好地理解位的左右移算符的操作。如果不知道数的补码表示,就不能得出并理解如图1-15所示的代码的运行结果,就不知道0-1的结果是-1,不知道int型最大正整数2147483647+1,得到的是int型最小负整数-2147483648,详见图1-15所示的代码和运行结果。
图1-15 int的最大值和最小值
(2)难在目的不清晰。如果对程序设计语言以及编写程序的目的和意义不甚了解,学习写程序就没有目的,也建立不起来兴趣,不可能有持久的动力。
(3)难在语法知识不准确、不扎实。如果对程序设计语言的语法知识掌握不全面、不准确,那么写程序就会困难重重。语法知识是枯燥乏味的,在这一点上计算机语言和自然语言是一致的。如果识字不多、词汇量缺乏,不懂语法规则,写文章的难度可想而知。同样地,对程序设计语言的语法规则不熟悉,写不出程序,或者即使勉强写出程序,也是错误连篇的。
(4)难在数学基础薄弱,抽象思维能力不强,对数学的作用认识不清晰。例如要求编写用梯形法计算定积分的程序,如果不知道梯形法求定积分的数学原理,写程序就无从下手。
(5)难在知识的综合运用。算法和数据结构通常属于程序语言课程的后续课。但是,尼克劳斯·沃思(Niklaus.Wirth)的著名公式:程序=算法+数据结构指出了算法和数据结构对于程序设计的重要性。所以,读者需要超前学习一些常用算法和数据结构知识。
(6)难在问题分析不准确。编写的程序不能正确实现问题自身的计算和逻辑,执行结果会显得答非所问。
(7)难在思维方式不匹配。如果从人类解题方式到机器解题方式的转变(Transition)不做充分的训练,二者之间的思维方式差异将成为学习编程序最大的绊脚石。
我们常说用汉语思维、用英语思维,是指用语言建模我们的思维过程,表达思维结果。计算机语言是形式语言,和自然语言在表达思维的形式上差异很大。
(1)自然语言词汇丰富、语法复杂、有引申义、有歧义、有冗余、有模糊表达。
(2)形式语言词汇和语法规则有限、无引申义、无歧义、无冗余、要精确表达。
例如说:
“如果我们不能按期完成,如果我们不能保证质量,那么我们的工程是失败的。”
在计算机程序中,直接翻译成下面的逻辑是错误的。
if(finished Date>expired Date)
if(quality Level<disigned Level)
printf(“The engineering is failed.”);
为什么这个逻辑是错误的?显然,自然语言中两个如果叠句之间是或的关系,但是,在计算机语言中,连续的两个if语句的条件表达式是与的关系。后面的if是前者的嵌套的if语句。因此需要修改成下面的格式才能与自然语言逻辑一致。
if(finished Date>expired Date ||quality Level<disigned Level)
printf(“The engineering is failed.”);
再如,自然语言中某数x的n次方,有多种表达方式,写成数学式子也有x^n、xn等形式。但是在Java语言中,只能是Math.pow(x,n)这种形式了。如果写成下面的形式,那就已经不是表达式了。
for(inti = 1; i <=n; i++) y = y*x;
初学者普遍有一种感觉是高级语言死板。但如果高级语言定义不严格,恐怕编译器就受不了了。
读者学习高级语言的语法语义规则,及程序结构知识,通过对具体问题求解过程的积累,可逐步达成从人类解题方式到机器解题方式的转变。
概括地说,读者只有打好坚实的基础,写程序才能快速入门。从手工计算到利用计算机,正如从步行到乘飞机,计算速度有了大幅度提高。人类只有为计算机编程序,才能“乘机”而行,享受高速计算带来的快乐。而编程序,需要具有的基础知识和能力类似于图1-16所示的梯级上升状,让我们拾级而上,踏上编程之旅吧!
图1-16 编程需要的基础知识
1.5.2 精通之路
俗话说:师父领进门,修行在个人。入门不能一蹴而就,精通更需要较长时间。读者在学习过程中应注重实践、多做编程练习,同时还需要注意,方向正确、方法得当。
所谓方向正确指的是:要进行Java知识的拓展。Java的类数量多,从最初的几百个类到目前的几千个类,不可能在一本书中完全讲解。程序员由于不知道类库中有某个现成的类可用,自己辛辛苦苦地从头写一个,浪费了宝贵时间。在充分理解本书所讲解内容的基础上,读者应多研读一些Java经典著作,诸如《Head First设计模式》、《Java Language Specification》(Third Edition)(James Gosling著)、《Thinking in Java》(Bruce Eckel著)、《Effective Java中文版》、《Java并发编程实战》、《重构改善既有代码的设计》等书。
所谓方法得当,读者应注意实现几个转变:从语法到语用的转变、代码数量积累到代码质量提高的转变、学习Java语言到研究Java技术的转变、写程序(program)到做项目(project)的转变。
总体而言,读者要通过扩展阅读、研究技术、完成项目,逐渐走向精通Java的境界。
拓展知识
James Gosling,Java之父
James Gosling 在12岁时已经能设计电子游戏机,帮助邻居修理收割机。他大学时期在天文系担任程序开发工读生,并于1977年获得了加拿大卡尔加里大学计算机科学学士学位。1981年James Gosling开发了Unix上运行的Emacs类编辑器Gosling Emacs(以C语言编写)。1983年他获得了美国卡内基梅隆大学计算机科学博士学位。毕业后James Gosling来到IBM工作,设计出了IBM第一代工作站系统,但不受重视。后来他转至Sun公司工作。
1990年,James Gosling与Patrick Naughton和Mike Sheridan等人合作开发了“绿色计划”项目,该项目后来发展成了一套语言叫做“Oak”,后改名为Java。1994年底,James Gosling在硅谷召开的“技术、教育和设计大会”上展示了Java程序。2000年,Java成为世界上最流行的计算机语言。
2009年4月,Sun公司被甲骨文公司并购。James Gosling于2010年4月时宣布从甲骨文公司离职。2011年3月29日,他宣布加入Google。
2011年8月30日,仅仅加入Google数月之后的James Gosling宣布离开,加盟了一家从事海洋机器人研究的创业公司Liquid Robotics,并担任首席软件架构师。
2017年5月22日,James Gosling加盟亚马逊云计算部门。