重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
image image
10年积累的网站制作、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有新乡免费网站建设让你可以放心的选择与我们合作。
本文由 黑壳博客 转载
本文来源 什么是REST以及 RESTful??
imagepng imagepng
自从Roy Fielding博士在2000年他的博士论文中提出 REST (Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。
什么是Web API呢?
如果我们想要获取某个电商网站的某个商品,输入 ,就可以看到id为123的商品页面,但这个结果是HTML页面,它同时混合包含了Product的数据和Product的展示两个部分。对于用户来说,阅读起来没有问题,但是,如果机器读取,就很难从HTML中解析出Product的数据。
如果一个URL返回的不是HTML,而是机器能直接解析的数据,这个URL就可以看成是一个Web API。比如,读取 ,如果能直接返回Product的数据,那么机器就可以直接读取。
REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,以JSON格式编写的REST风格的API具有简单、易读、易用的特点。
编写API有什么好处呢?由于API就是把Web App的功能全部封装了,所以,通过API操作数据,可以极大地把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单。
此外,如果我们把前端页面看作是一种用于展示的客户端,那么API就是为客户端提供数据、操作数据的接口。这种设计可以获得极高的扩展性。例如,当用户需要在手机上购买商品时,只需要开发针对iOS和Android的两个客户端,通过客户端访问API,就可以完成通过浏览器页面提供的功能,而后端代码基本无需改动。
当一个Web应用以API的形式对外提供功能时,整个应用的结构就扩展为:
REST-arch REST-arch
把网页视为一种客户端,是REST架构可扩展的一个关键。
** 网络上的所有事物都被抽象为资源**
** 每个资源都有一个唯一的资源标识符**
** 同一个资源具有多种表现形式(xml,json等)**
** 对资源的各种操作不会改变资源标识符**
** 所有的操作都是无状态的**
** 符合REST原则的架构方式即可称为RESTful**
REST主要对以下两方面进行了规范
-定位资源的URL风格,例如
-如何对资源操作
采用HTTP协议规定的GET、POST、PUT、DELETE动作处理资源的增删该查操作
image image
对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务;rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构).
符合REST约束风格和原则的应用程序或设计就是RESTful.
- Spring MVC 对 RESTful应用提供了以下支持
- 利用@RequestMapping 指定要处理请求的URI模板和HTTP请求的动作类型
- 利用@PathVariable讲URI请求模板中的变量映射到处理方法参数上
- 利用Ajax,在客户端发出PUT、DELETE动作的请求
** 可以采用Ajax方式发送PUT和DELETE请求**
采用RESTful架构后,需要将web.xml中控制器拦截的请求设置为/,这样会将css,js等静态资源进行拦截,发送404错误。
解决方法:
本篇文章参考了一部分 ,
程序员是个辛苦的职业
请善待你们身边的每一位程序员~
欢迎在评论写下你的程序员趣事,程序员不是一个死板的职业~~
欢迎扫描二维码加入我们的小组织 ,大家都叫我壳叔,很期待你的到来。
黑壳网交流群 Q 群: 200408242
11a84075a304ac57f6d37323512fd24cde9836350b9d80148b282eeaa188b196c2358d4ffd7006cbpng 11a84075a304ac57f6d37323512fd24cde9836350b9d80148b282eeaa188b196c2358d4ffd7006cbpng
我们的生活离不开水,我们依靠水生存。但现如今我们的生活中总有一些人毫不吝惜地去用水,长此下去,也许在某年某月的某一天,世上可能只剩下一滴水,那可能就是我们的眼泪,这可不是危言耸听……
当家中的自来水“哗啦哗啦”地响个不停;当刚洗完菜后,就把满盆的水泼向远方;当轿车上有了一丁点儿的尘土,就用水洗了一遍又一遍;当天稍微有一点热时,就回家用淋浴冲洗好几遍;当……
我们与水为伴,它为我们奉献了全部,可我们却一次次地忽略它,使它没能体现它的价值所在。因此我们要用心和它相处,这样才能和睦到永久。当自来水“哗啦”作响时,我们应该健步走上前去,关上水龙头;当洗过菜后,我们还可以用它刷洗碗碟;当轿车上有了尘土,我们可以用抹布把它擦去;天热了,洗个脸就行了,到了晚上我们再痛痛快快地洗个澡。
在学校里,我们也与水为伴,当我们洗了脸后,我们可以把水存起来,晚上用来洗脚,时时刻刻把节约用水记在心上,只有这样我们的校园才会变得有欢声笑语,让人心情舒畅。
水是灵动的,它像一串美妙的音符,我愿为它谱上一段动人的乐曲,它像一本古旧的书本,在里面你可以寻找到许多故事,“小桥流水,江南人家”这样的仙境,谁不想去体会一番?“大江东去,滔滔河水”这样的壮志凌云,谁又不爱呢?它的存在让世间变得五彩缤纷,因为有了它的渲染,我们的祖国变得更加秀美。水不会因为我们的贪婪而不理我们,不会因为我们的自私而逃避我们。但当它一天天的变得混沌,原本洁净的它却被我们搞得越来越黑时,我们又于心何忍呢?
也许到了某个特定的时段,一杯饮用水也可能需要竟拍,也可能在你苍老之时,你的孙儿依在你的膀弯里,好奇地问:“爷爷,饮用水是什么颜色的呀?”到了那时,你可能会无言以对,因为你也解释不清。
上海市因为大量地抽取地下水,导致其地表不断下沉,作为一个繁华的商业大都会,将来可能会沉入海底,成为永久的水下奇观。
保护我们的水资源吧,从我做起,从现在做起,做一个节约水资源的小卫士,牵着你父母的手,带着你的亲戚朋友,一起为节约水资源而努力吧。我想当我们凝成一股绳,用心在一起,节约用水这场战役,我们一定会胜利。
刚刚过去的“5·12”汶川大地震,对于那些从死亡边缘上又爬回来的人们对水一定会有说不尽的感情。想想看,当我们在家洗了苹果,躺在沙发上看电视时,他们也许只想得到一口水,这样就增强了生存的希望。所以当我们看见水“哗啦”流逝时,应该有一种紧迫感,一种使命感,应立即健步上前,关上水龙头。
我们很怀念那“一江春水向东流”的闲情,那“大江东去浪淘尽”的雄壮,那“水面初平云脚低”的别致,那“不尽长江滚滚来”的气派……我们更会怀念故乡那浅浅的河湾,我们一起嬉闹的情景,那比自己大上好多倍的老井,那甜甜的清清的故乡水。可当我们毫无保留地去使用它,它只会变得越来越少,终将会从我们的视线里消失。
作为祖国未来的建设者,我们应该把节约用水作为己任,带动周围、带动大家、带动全社会、一起节约用水,这样的话我们才能与清清的河水永存。朋友们,加油吧!你节约一些,我节约一些,他节约一些,我们一定会成功的。
节约用水——我们义不容辞的责任!
桑桑是作家曹文轩写的《草房子》中的人物。他机智勇敢,有爱心,喜欢养他的那群鸽子,但又淘气。虽然有时会因为好奇心做出一些让人啼笑皆非的事情,可总的来说,他还是有自己思想,讲道理的
O’Reilly出品的动物丛书在IT界可谓妇孺皆知,它有很多昵称,如动物世界、饲养员指南等,这些昵称均一定程度上反映了广大读者对该系列丛书的喜爱之情(好吧或者其它什么的各种感情)。没必要多介绍,想必知道动物丛书的人都知道这系列书最显著的特点,就是封皮上会有一只手绘的动物坐镇,基本格式如右图所示(右图有一点不是很标准,一般书的标题会用一个巨大的色块+白色字)。
看过那么多动物丛书,有时候好奇心就突然来了:为什么O’Reilly要用动物形象来做书籍封面?这是来自哪的灵感?封面的动物是怎么挑的?和内容有关系吗?有些诡异的动物都叫什么名字?
应该是太多人问过这样的问题吧,可爱的O’Reilly在官网上就发表了很完美的文章解释,我就图省事翻译一下重点吧(原文地址都附在文中)。
起源:为什么用动物形象做封面
O’Reilly动物丛书的最初设计是由Edie Freedman 完成的,她十年前(2000年) 在O’Reilly官网上发表了一篇文章对动物丛书的封面进行了一定程度的解释 (还是保留了一部分神秘感),并讲了一些封面带来的趣事:
事情要追溯到上世纪80年代末期,Edie接手了第一本动物丛书封皮设计的工作。之后她就被各种涌来的关于动物选择的问题淹没,比如为什么这个内容会选那个动物之类,连作者也会追问,有些作者甚至不爽自己封皮上的动物,怕读者会误以为作者像河马一样胖或者像蓝脚鲣鸟一样笨,但是她从来没有解释过这些选择背后的原因,文章里当然也没有明确解释出来,只是说每个选择并不是随便挑出来的,的确有着某种原因(强烈谴责卖关子行为)。
动物丛书的第一本书和UNIX相关,在此之前Edie只是听说过UNIX,并不清楚具体是什么。突然接触到vi、sedawk、uucp、lex、yacc这些不知所云的词(UNIX词汇),让她觉得这些词都像来自于当时正流行的游戏“龙与地下城”,于是她心目中UNIX程序员的形象就是一个龙与地下城的玩家(强囧)。开始给书设计封皮的时候,Edie在一系列19世纪的木版画中找到了灵感。画中诡异的动物刚好和那些高深的UNIX术语是绝配。 不过当Edie把这个封面交给O’Reilly的时候,他们的反应不大好。有人说太丑了,有人觉得太恐怖了,还有人说没人会买画着这种封面的书。不过O’Reilly的创始人Tim很喜欢这种诡异的风格,认为这能让这套书在众多出版社的书里脱颖而出。事实证明动物丛书的封皮获得了巨大的成功(左图就是动物丛书第一批之一sedawk初版封面)。
此后,他们从作者和读者那学到了各种和动物相关的知识。有个作者执意要在封面画上象鼻虫(boll weevil),他给Edie发了无数的关于象鼻虫的资料,仔细的解释了象鼻虫应该放在该内容书籍封皮的原因(为什么眼前浮现出来的是Sheldon追着Penny给她讲呢)。最终Edie采纳了他的意见,于是O’Reilly出版的《Oracle Web Applications》一书的封面就是一大一小两只象鼻虫。
有时会因为在动物知识上的欠缺,出现一些认错版画中动物的情况。有一次Edie把一只猴子说成了黑猩猩,结果收到铺天盖地的读者邮件指出,黑猩猩是绝对没有尾巴的!
此外还有一个意料之外的问题,有些读者因恐惧症而无法阅读书籍,比如蜘蛛、蛇、猫。有一个读者的老公就曾给出版社写信,抱怨《Webmaster in a Nutshell》(蜘蛛恐惧症勿点)一书封面上的蜘蛛让他老婆大人不敢看书,他只好通篇翻阅该书,用白胶布把书中的每章章首的蜘蛛图案贴上(模范老公啊)。还有一个读者愤怒的说不会在他们的网站上买任何东西,因为在“如何订购”的网页上有蛇(考虑到生意问题,O’Reilly已经换掉了蛇的图案)。
还有一件更严肃的事情,出版动物丛书让Edie更加注意到生态问题。很多封面动物已经濒临灭绝,而在版画绘制的时期(19世纪),这些动物还是大量存活的。O’Reilly也希望他们使用这些动物做封面能够引起人们对动物保护的关注。
先看一下这个文章吧......首先确定一个你要学习的语言.然后找对应的教材视频....求学习方法...多练,多问,找个好点的扣群..不用先学什么VB,C,C++那些乱七八糟的 ---- 在学习之前,请允许自己先问下自己:我为什么要做这样的事。对于编程,我会先问一下,你为什么要学习编程?你会怎么回答? A:兴趣; B:读书需要; C:传闻是高薪职业; D:容易就业; E:被逼的; F:无聊学学; 这个你会怎么选择;什么样的目的,得到什么样的结果。如果你选择(A)我会开心,兴趣就是动力,就算没有人教,你也会鼓足勇气去学习,就我个人来说,我是那种屁股坐不稳的人,你叫我坐在那里什么都不做半个小时,我会全身都不舒服的。但是一说到计算机,编程我可以一坐就是7,8个小时自己还没感觉。兴趣第一,很好,你以这个为目的我相信你一定能学好。相信你也有自己的一套学习方式。 如果你选择的是B:那么你也有一定的成功几率,首先你要是一个会读书的人,可以说读书就是你的兴趣,那么你也可以学好。当然如果只是随潮流大家都读所以我也要读,那么你只能学不好了。 如果你选择的是C:那么你还是早点放弃吧,那些拥有高薪的都是十分牛的人,其实的广大程序员还是挣扎在生活的水平线上。混饭吃而已,所以如果你抱着高薪去学习编程,你一定肯痛苦。这类也是最能有成就的一类,编程是技术需要的是一份执着,但是你的执着只是金钱。技术现在并不等于金钱。。。。 如果你选择的是D:我还是劝你早点放弃,现在的就业也不乐观啊,失业大军里计算机就占了很大的一部分比重,你随时都可能是其中的一分子。 如果你选择的是E:很好,你也有可能学好,前提是逼你的人能一直强逼你下去,让你进步,一句非常经典的话:“人都是被逼出来的。。。。。”。你出生的时候的确是被逼出来的,被你妈妈逼出来,呵呵! 如果你选择的是F:也不错,起码你无聊的时候想到的居然是编程,证明编程还能给你带来乐趣。 既然你已经知道为什么学习编程,那么我们要做的就是怎么去学习了。现在的编程语言很多,上百个语言,但是无论什么语言,都会有共同性的。所以你要学习编程那么就要先学习编程的思想,这个编程的思想你也只能看一下而已。了解一下计算机如何去读这些编程语言这个很重要。不了解过个你学习任何编程语言都很难做到灵活运用。 你明白了计算机是如何读编程语言是的这个时候你就可以开始选择你学习的语言了。至少这些编程语言都是我能看懂的,可以说是自己学过的。也会解析一下学习这些语言的一些特点。 A: c#.NET B: Java C: C/C++ D: PHP E: JavaScript F: lua 我只列出了五种,其实还有更多的语言,有兴趣可以自己去找下这些语言的特色.其实我了出的这些都有一个特色.都是跟C语言有一定的相似的. A: C#这个语言是微软推出的,目前大部分应用都是应用在WIN平台上,虽然LINUX也能用,但支持还不是太好.编程风格上我觉得是最优美.至少看起来很舒适,强大的智能感知.编程的学习难度分级是:初学偏易,一般编程中等,高级编程难。梯度不算陡峭。虽然是面向对象,但是现在大部分的人都很用到面向对象至少我在国内反编译很多的应用系统的时候很多都没有用到编程思想的,虽多就是把类用来实现脚本编程闭包功能而已。真正使用到面向对象的继承多态的并不多。当然也有很多是使用了面向对象思想的,所以我觉得初学C#的时候完全可以放弃对象的继承,多态这类比较复杂的东西。专心学习他的语法糖,还有封装好的API,其实C#这个语言已经有个很完善的API基本上的应用都可以直接使用API来实现,而且从算法构造上也不算复杂。再加上IDE的智能感知,新手只需要了解各个命名空间的作用就可以了,智能感知会帮助我们完成API的调用(至少你要知道那些方法在那个空间,怎么用)。所以初学我把它定义在上手“易”。现在的学习其实并非一定要从记事本开始。学会使用IDE学习其实也是一项技能。编程很重要的一点。就是你动了多少手,你就收获了多少,无论你看了多少别人的代码,如果你不自己动手去写一下,你永远没办法感受到内涵,之前我有部分同学,他们跟我说,现在网上大把代码,那里需要自己敲得那么辛苦干嘛上网COPY一下就什么都有了,傻瓜才自己手写。好吧我承认我傻瓜。但是自少我现在的水平我敢说,,你只需要给我2样东西我一样能写出你上网找的那些代码。一样是VS,另一样是帮助文档。说起这个事又令我想起最近公司招聘的一些趣事。最近公司面试了接近80个人吧,因为我们公司的上机考试是不允许上网的。呵呵!你们可以想象一下,不能上网后只有30个能勉强敲的出代码的。能做出题目的更是少得可怜。突然我就想,这些人到底有没基础的,一个简单的登录功能和上传文件功能不能上网就不会写,我真是狂汗。。。一些号称三年五年工作经验的,居然还写不出一个简单的交叉表查询。(其实就10句代码。。。。)。所以啊过分依靠网络怎么可能有自己的技术积累呢,这些人在我眼里三年五年也成不了构架师。。可能十年也去不到构架师的水平。 B:JAVA 跟C#类似,传闻微软推出C#也是为了对抗JAVA而搞出来的。这两种语言有很多相似的地方什么是命名的方式上都有很多相似的地方,JAVA也是从C语言里发展起来的。不过我觉得在学习曲线上,初学要比C#难,中国人普遍英语不太好。而且在IDE上微软的VS要比JAVA的各类编辑器要优胜,主要是在智能感知上,还有一些辅助上。可能很多JAVA的铁杆FANS会给我丢西瓜,丢鸡蛋了。但我敢说,我说的是事实,JAVA位置一个环境都很辛苦,至少我学习的时候是这样。免费啊,JAVA很多东西都是免费的,微软要收费的,收费肯定好了。。。。我会偷偷的笑。。。你丫就不用盗版?有了光荣的盗版。收费问题根本就不是问题,再说从学习的角度。。盗版这些东西根本就无关痛痒的。。反而更容易召集人气。。。 C: C语言可以说是非常牛逼的语言,长期位居第一。但是需要投入的精力也不少啊,智能感知一直进步不大,可能是因为万恶的宏定义呵呵(这个万恶可不是我说的。)当然学习C语言如果你不懂使用宏定义那么你肯定没学过C语言,C语言的宏定义虽然一直在C语言的书本上很少描述但是实际应用却是不可缺少的,我看过IDSOFT的DOOM的源代码里简直就是神一般。但是看起来也真是辛苦。题外话,其实上面很多语言都是根据C语言衍生出来的,什么很多特性都是参照了C语言。用很玄幻的说话。C语言是远古时代遗留的强大魔法。既然是远古学习曲线自然就陡峭得可以,我个人感觉我的C语言水平其实都只是菜鸟而已。C++一样是菜鸟。C++和C其实我觉得是2个语言根本不能混为一谈的,但是很多招聘之的都把C/C++归为一类,所以我也把它归为一类,很多人想问学C++是不是要先学C。而且C++的分支多得吓人。内涵也丰富得吓人。。C语言个人技术化,我个人觉得C/C++起码要4年才算出师,JAVA是2年,C#都是2年。而且还需要一系列的计算机基础,算法基础等一些东西。而JAVA和C#都把这些东西封装了成标准的API了,我们只需要使用。但是C/C++这些东西都没有一个确定的标准例如界面库,有人用QT有人用MFC。这些都是不一样的所以选择的路也多,学的东西自然也更多了。但从编程上,并非就是C++的就比用C#的牛。C++只是拥有深厚的历史,有自己独特的文明。是因为它的文明而牛。 D:PHP 接触不深,但是我觉得它是一个制作网页的好语言,其他领域我并不怎么看好他,我觉得PHP在开发网页上有很大的优势,但是开发B/S级系统应用就现得比较力不从心了。所以如果你定位自己作为一个网页开发人员的话,你就应该学习这种语言。如果是B/S级的应用的话,就应该使用C#或者JAVA,或者其他的语言。 E:JavaScript,非常有名的脚本语言,如果你想从事B/S的开发,网页开发,你就一定要学这个,是一个必须掌握的技能。学习曲线相对比较平坦,而且内容也不算多,但是应用却十分灵活的语言。强烈推荐初学者先学习这个语言,来寻找感觉,因为这个语言完全不存在编程环境的问题,你只需要有浏览器,记事本,两样任何系统都有的软件就可以编写它。所以我觉得首先学习它会对你理解编程思想有一定帮助。 F:LUA这个也是一个脚本语言,成就这个语言的名声是来自一个叫“魔兽世界”的游戏,目前我了解LUA应用的领域比较多都是作为一种嵌入语言,嵌入到C或者C++中去使用,在国内很多游戏公司都会有LUA程序员,部分会由C语言程序员去兼任。因为LUA在语法上和C有很相似的地方,基本对旧的C语言程序员学习LUA是无难度的。当然也有它的局限性,作为脚本语言它本身就存在不足,而且这个语言本身就是作为C语言的扩展来用的所以,学习这个语言的话,建议先学习C语言。或者成就更高(或者而已!) 我个人是选择C#作为长期发展的语言的。我觉得这个语言比较适合我这种英语不算好,但是又喜欢编程的人。 PS:真心想学编程的必须要学习一定的英语能力,因为很多编程的先进思想都是英文的。所以英语好,对成为高手起很大作用的。 知道为什么学习编程,又选择了目标语言,接下来就是基础学习了。 这个基础学习,我觉得首先要对一些语法糖熟悉,第二件事情就是要多编,多看,可能你买的书都附带着实例代码的,我觉得对于初学者,首先你把书上的程序都照着编一次,在这期间,你一定会遇到无数的错误,但是这些错误将会是重复出现的,这个时候你就学会了如何排错,有人说过编程不是一口气写出来的,是修改出来的。所以学习排错是编程的第一步,虽然随书光盘有很多代码,但是这些代码都不属于你的。没有入你脑,唯一让这些代码属于你的办法就是多抄(打)几次。当你把一本编程的基础书都看透了。。至少别人问你这本书的知识你能答得上口,那就是你度过了第一时期了。你可以进入一搬阶段了。 一般的阶段,这个阶段我把它定义为是把这些语法组织成句子,组织成文章的时期。我想问下,大家都上过语文课吧,我们来回想一下,我们学习语文的过程 字=》词=》句=》文章; 而编程的学习则是这样的; 变量=》函数=》类=》架构 所以我们在初学阶段做的都是学那些字,那些词(其实就是语法糖)然后我们就会学造句,造句的时候就会涉及到把什么词语组合起来会得到优美的句子,而合理的句子,加上合理的逻辑就会变成一篇优美的文章。但是一篇优美的文章并非那么简单的。也就是一个程序架构的优美一样没那么简单一样,需要很多很多学识
Java学习心得
引言
软件开发之路是充满荆棘与挑战之路,也是充满希望之路。Java学习也是如此,没有捷径可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。每天仰天大叫"天神啊,请赐给我一本葵花宝典吧",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了"东方不败",倒是成"西方失败"的几率高一点。
"不走弯路,就是捷径",佛经说的不无道理。
1.如何学习程序设计?
Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用。有编程高手认为,Java也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。
1.1 培养兴趣
兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个"食利阶层"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。
1.2 慎选程序设计语言
男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。
如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域。如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。
如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或.NET,甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之,你需要根据自己的特点来选择合适你的编程语言。
1.3 要脚踏实地,快餐式的学习不可取
先分享一个故事。
有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。
这个故事给我们的启示是:欲速则不达。
浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入***主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。就拿我比较熟悉的大连大工IT职业培训来说吧,居然打广告宣称"20多年的计算机职业教育,辽宁省十佳学校",殊不知中国计算机发展才几年,软件发展才几年,居然去报名的学生不少,简直是藐视天下程序员。培训出来的“程序员”大多不知道OO,OP为何物?社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。许多初学者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 万不得已才请教别人
笔者在Martix与Java论坛的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。请教别人之前,你应该先回答如下几个问题。
你是否在google中搜索了问题的解决办法?
你是否查看了Java API文档?
你是否查找过相关书籍?
你是否写代码测试过?
如果回答都是"是"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。
1.8 多读好书
书中自有颜如玉。比尔盖茨是一个饱读群书的人。虽然没有读完大学,但九岁的时候比尔盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔?茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。
笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,"天呐,这么多书到什么时候才能看完了","学软件开发,感觉上了贼船 "。这时候,我的回答一般是,"别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的 ",学生当场晕倒。(注:这一部分学生是刚学软件开发的)
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文档官方下载地址:,你可以到google搜索CHM版本下载。也可以在线查看:。
对待DOC文档要像毛语录,早上起床念一遍,吃饭睡觉前念一遍。
当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:
●找特定的包,包一般根据功能组织。
●找需要使用类,类命名规范的话我们由类的名字可猜出一二。
●选择构造器,大多数使用类的方式是创建对象。
●选择你需要的方法。
3.2.2 查书/google-写代码测试-查看源代码-请教别人
当我们遇到问题的时候该如何解决?
这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像"某些类/方法如何使用的问题",DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看 API的源代码验证你的想法。万不得已才去请教别人。
3.2.3学习开源软件的设计思想
Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。
3.2.4 规范的重要性
没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到下载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。Java编码规范到此查看或下载,中文的也有,啊,还要问我在哪,请参考3.2.2节。
3.2.5 不局限于Java
很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。
Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再学"的原则。
4.结束语
需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也欣慰了。哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比…… 拖起明天的梦想还得靠自己!