旧文重发:程序员的七种武器

这篇文章发表在《程序员》杂志2007.03期的专辑“程序员的武器大家谈”中。

《程序员》:请谈谈您所定位的优秀程序员应该有哪些技能?您是怎样理解程序员七种武器的?
==============
周爱民:一般来说,剑客用剑、刀客用刀,所以所谓七种武器,用在手上的,或许也就一件两件。但如果以技巧、技法论,却不是一件两件兵器就可以胜出江湖的。例如不懂刀的剑客,遇到用刀的人时便不知道如何刺击了。因为要先知其长短,才能避强而击弱。
不懂刀的剑客与不懂剑的刀客对打起来,大概会如同演舞一般,各练各的招式。
所以,优秀的程序员或程序高手并不是通晓七种武器的全才,必然是精通其一,且概知其它。与江湖不同的是,我们事实上并不拿一种武器去与拿另一种武器的人比斗。我们的对象是一个软件,或者某个工程。我们要克“敌”制胜,而敌是死物,不是活人。换言之,我们了解这些技术方法的目的,并不是要站到擂台上去比较谁懂得多,或者谁精通什么。我们只是要做一个软件或者具体的工程,那么所谓技术方法,只要对这个软件或工程有效即可。因此,用汇编写内核的人不必看不上用C写协议层的人,用C++写平台应用的,也不必看不上用SQL写脚本的人。放在一个团队里,汇编、CC++SQL在一个项目里可能各有其用,非得让这些人分个高下出来,最终是项目的失败。
任何的一种工具都有使用它的境界。很多人看不到这一点,而轻视其它语言或者工具。例如SQL,几乎所有使用高级语言(我当然不是说它比别的语言好而显得“高级”,而只是存在着这么一个分类)的开发人员都认为SQL是“一种相当简单的脚本”。但事实上,我的朋友中就有能把SQL用到出神入化的,他能由SQL的写法来推断数据库设计的失败,或者反过来,为特定的数据库系统写出最优化的SQL。重要的是,这个朋友会针对不同的存取环境、网络结构而设计特定的数据库和SQL,以达到最优。
优秀的程序员是对工具没有偏见的、能适应场合活用语言的人;而程序高手则基于这个前提,并专精其一,进而通一晓十的人。
《程序员》:您认为什么是程序员的基本技能?哪些是最重要的?
==============
周爱民:“七种武器”中,数据结构是成为真正的程序员的基础,而面向对象思想则是门径。
程序员能否在软件开发这条道路上走下去,很大程度上取决于他对数据结构的了解。任何一种新的语言,或者任何一种新的体系结构的出现,都可以在数据结构上找到相关的解释。
因此,程序员如果能精通数据结构,那么相当于拥有了“以不变应万变”的资本。对此,《人月神话》中用一句话指出了关键:“数据的表现形式是编程的根本”。
对象是数据结构抽象的一种,但并不是唯一的一种。从这个角度上来说,对象并不是唯一的编程之道。我曾经说,人造卫星也是在面向过程的时代上的天。也就是说,面向过程也可以组织足够复杂的程序。
然而,所有这些都并不能否认面向对象的价值。面向对象是对事物的本体特性与行为特性的高度抽象,它将数据结构从“死的内存”变成了“活的物件”。面向对象的思想使我们在增强对现实的表达能力的同时,避免了复杂数据结构带来的藕合。由面向对象、信息隐藏和接口抽象三个相关联的概念,构成了整个软件体系设计的理论基础。这三个概念中,面向对象是与软件开发人员关系最密切,最容易理解的,因此它是使你成为真正的程序员,以及从程序员走向程序设计师的最佳门径。
《程序员》:如果用一个问题来测试一个人是不是程序高手,您会怎样问?
==============
周爱民:我的问题是:你参与或组织过怎样的开源项目,如何评价它?
在程序高手这个级别上,能脱颖而出的是那种有合作能力的、思想开放的优秀人才,而绝不是技术高下的简单辨别。而观察他对开源项目的经验和兴趣,是一种不错的方式。
这里说的不是“把源代码公开”就是开源项目了。我说的是真正有组织的、持续的、公开源码的项目运作。之所以做这么多的限定条件,是因为现在很多人都已经接受了“源码公开”的思想,但这仅表明这个人有了分享的精神,并不表明他有组织和管理项目的能力。开源项目的生命力是在项目管理者在长时间的维护过程中得以延续的,同样的,项目管理者也在这个过程中历练了自己的技能与心性。而这些,正是高手在成长中不可或缺的要素。
《程序员》:您在成为一个优秀的开发人员过程中,哪几个阶段是最让您难忘的?
==============
周爱民:我做程序之初,只是喜欢而已,其实真的是楞头青。这个阶段看来,就是代码不规范、接口随意,并且经常会推翻重来。“代码不规范”是非专业人员的通病,我在很长时间里面,都有“自己的风格”,所以还专为这个跟以前的部门经理争辩过:我同意格式化呀,但为什么要按你说的格式呢?“接口随意”是没有设计就开始写代码的表现,而“经常推翻重来”则是其后果。非专业人员最初通常就是一个人开始练手,自己给自己写代码,接口怎么写自己都能理解,所以专门去设计反倒是麻烦。但到了团队里面,过于“独特的”程序接口则是灾难,因为你得去给每个人解释这个接口的用法,说服他们使用这种接口。而这往往会遵行强势原则:你要么屈从“更标准的接口设计”,要么团队就放弃你的这些代码。
做程序再熟练,过不了上面这个阶段就谈不上合作,也谈不上设计。一个人写程序,无需多少设计的功夫。但一个团队合作,没有设计就不行。因此我认为写程序的第二个阶段就是团队开发和专业设计。而这两点,正是从项目管理和技术实现上来组织大规模开发的不二法门。因此,我事实上在这里想说明的是:相对于个体开发,团队开发是更高阶的技术。
在你学会了团队开发,能够轻松地与人合作,或组织小型的开发团队时,要想在这个行业中安身立命就并非难事了。至于用哪种语言,由于你是“优秀的程序员”,因此语言的选择是应项目之所需的,所以不是接下来要谈的关键问题。
第三个阶段是你能否在行业中脱颖而出的关键。但这个关键与技术无关,而是一个人的秉性和个性的问题。我们一方面会很阿Q地说“酒香不怕巷子深”,另一方面又说“千里马常有而伯乐不常有”。问题在于,马不能主动地找伯乐,人又为什么不能呢?马困于厩而显凡俗,人立于世可显不群。有表现自己不凡的品质的空间而不施展,根本上说还是能力问题。所以学会沟通、交往,而不是沉迷于代码,可能是第三个阶段的重要瓶颈。
在第三个阶段,你可能面临非常多的选择。例如技术主管、项目经理或者设计师、分析师之类。但你应该会发现,这所有的选择都将使你被推到团队的前面,你必须面对整个团队,以及项目的干系人(例如客户)。而能否胜任这些,取决于你的综合素质,而非单一的软件开发技能。
最后你得记住一件事,上面的这个过程,不是一朝一夕,也不是一年两年,而是五年十年的时间。在这个过程中,所有成功者都必须具备的,是认真的态度和专业的精神。
《程序员》:请为开发人员提供几点实践性的指导。
==============
周爱民:把语言作为“称手的兵器”,那么基本技能则相当于内家修为。练石锁也能练出个李元霸,这说明单单靠“不停地写程序”,也是能写出高手来的。但是,如果一上手就给个千百斤的大石锁,李元霸没练成便先牺牲了。所以凡事都有个循序渐进,所循的这个“序”,并不要求每个人都相同,别人的经验,大抵上适合做个参考。而我也不能言讲什么指导性的东西,所以上面所谈,大家尽可以当经验来看,当参考来用。是实践,却不是什么指导。
《程序员》:请您谈谈做游戏开发与一般的软件开发,在技能上的要求有什么不同?
==============
周爱民:游戏开发涉及的领域是比较复杂的。例如对界面交互,一般软件开发中有可用性测试,而游戏中叫可玩性测试。可用与可玩,就已经是两种不同的界面交互设计理念了。一般软件开发很少在界面部分应用人体工程学的知识,而游戏界面交互设计中却经常要用到这种知识。但是同样的例子,如果你做游戏开发中的网络传输或者服务器端,就涉及不到人体工程学。所以这里要说的是,现在游戏开发过程被分解得很细,不同的技能在游戏开发领域中都可以找到位置,但不要指望能什么技能都精通,然后一两个人就搞完整套游戏。
大多数游戏开发能涉及到的领域,在一般的软件开发中也同样会涉及到。例如数据库,很多人认为数据库与做游戏风马牛不相及。但事实上,在游戏开发中,后台数据库的存取效能、分布特性等是严重影响游戏体验的。所以你在传统软件开发中做得很好的技能,在游戏开发中一样用得到。
然而不同之处还是有的,其中突出的几点表现在视觉特效、交互特性和网络性能。
一般性的软件开发中,我们会遵从操作系统的惯例为用户提供交互体验,但游戏正好是希望给用户独特的体验,因此通常有不同的交互特性。这可能小到一个按钮的设计,大到整个操作的流程。这种交互特性又与输入输出设备的性质相关,例如手机的屏幕与键盘与PC就不一样。所以游戏对整个系统的输入输出的研究,与操作系统和一般软件是不一样的,根源在于它要提供独特性。
游戏对网络层的研究,也与传统软件不一样,但这不是独特性导致的,而是用户量级的问题。大到银行、电信这样的系统中,人们对数据传输的效能通常是由数据库系统和硬件系统来保证的,因此你只需要研究数据和库的优化。但我们总不能让用户花钱买完mssql、架完专线再来玩游戏,所以游戏开发中要在相当高的数量级上,自己来解决数据传输和数据库使用中的问题。然而游戏是多用户、强交互的系统,因此很快爆发出来的问题是分布问题、并行问题等等。这些原本在其它开发中交给某个专属领域去解决的问题在游戏中都需要用自己的方法去解决。
我们很少去强调游戏开发与一般的应用系统开发在技能方向有什么不同。其根本的原因,在于软件技术以及其它知识都存在共通性。任何一项专精的技术都可以在某个领域上发挥它的独特效果,任何广博的知识也都有助于开发人员找到更合理的解决方案。除开这些之外,我认为更重要的兴趣与态度,例如游戏开发需要你去发现和寻找乐趣,而系统底层的开发则要求你有更加坚韧的毅力与深厚的基础。这些,并不是技能所能弥补的。
阅读更多

程序员七种武器

11-17

程序员的七种武器 rn第一种武器:开发工具 rn至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是我重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而本人对SUN公司的“网络即计算机”的概念相当欣赏,并相信JAVA即其相关的技术集JAVA One会成为未来的主流开发工具之一。其次,如果能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C++ Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。 rn第二种武器:数据库 rn为什么数据库是如此重要?很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。 rn第三种武器:操作系统 rn当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。 rn第四种武器:网络协议TCP/IP rn在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。 rn第五种武器:DCOM/CORBA/XML/WEB Services rn随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间件平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG(object Management group)支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。 rn第六种武器:软件工程与CMM rn现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。 rn第七种武器:强烈的好奇心 rn什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。 rn养成良好的习惯 rn现在很流行的一句话是“性格决定命运”,实际上可以这样理解,你的性格决定你的习惯,而习惯决定你的命运!中国有一句古话叫做:习惯成自然。同时,西方古希腊哲学家亚里士多德也说过:“优秀是一种习惯”,比如你每天早上坚持起来读书,就养成了读书的好习惯。那么懒惰也是一种习惯,不知道在座的各位又没有感觉到,当你睡觉越来越多的时候,你每天都想睡觉,越睡越懒,越坐越瘫。你习惯于10点睡觉7点起床,那就比习惯于11点睡觉6点起床的人少拥有两个小时,而据我所知很多好学习的人都是12点睡觉5点起床的,那你就又比他们每天少拥有4个小时了。 rn在一次次沉重的洗礼后,痛苦地改掉不利于自己发展的不良习惯,从而又一次超越自己。 rn一、适当背诵的习惯 rn新东方有个学员上中学的时候英语特别的差,总是倒数第一名,于是为了提高自己的英文水平他就决定开始背诵新概念英语,结果背到一半2册的时候,他成绩就明显提高了。高考后上了大学,他考上了一所比较著名的大学,他本来不想再背诵了,但是当他背给同学听的时候,其他同学都露出了羡慕的眼光,于是为了这种虚荣心,他就坚持背诵第三册第四册,背得滚瓜烂熟,你说上一句,他就能联出下一句,而且语音非常标准,因为他是模仿磁带背诵的。后来他去了美国的duke大学,第一个星期写文章,教授就把他叫过来说你的文章是剽窃的,他说:“我教了20年的书也没教出这么漂亮的文章来”,这个学生说我没办法证明我能写出这么漂亮的文章,但我告诉你我能背诵108篇文章,你想不想听,于是他就开始背诵,结果他没背完两篇,教授就哭了起来,为什么?这个教授想我教了20年书,居然一篇文章也没有背过,被中国学生背掉了,所以很难过。小时候背诵儿歌的故事,好的算法和好的代码可以重点看一看。 rn二、好为人师的习惯 rn把你认为你懂的东西讲出来吧,将给别人听,你会记忆得更加深刻。成就感是一点一点积累起来的,你考考别人bluetooth、ASP、PDA、CDMA是什么?如果他不懂,你就讲给他听,同时你自己的记忆也在加深。在现代这样一个向开放型过渡的社会里,你要想成功必须要善于表达自己,善于表达自己的观点和思想,并想办法说服别人,做市场作营销当老师当领导者,你要想证明自己有能力,那你就必须学会说出来呀、表达自己,塑造你个人的影响力,人与人之间的交往,就是意志力与意志力的较量,不是我影响你,就是你影响我。 现在最流行的职业:口力劳动者,教师、主持人、歌星、领导、美国总统、市场营销人员等等。 rn三、五官齐用的习惯 rn如果说你看到的东西,你会记住30%,那么你同时看和听就会记住50%,如果你既看又听,手里还在写、嘴里还在念念有词,你就会记住100%,如果日后有时间再复习两至三遍,你就永远不会忘记了。不在于你一次看了多长时间,重要的是你重复了多少次! rn四、学习他人的习惯 rn给自己树立一个目标人物,最好从身边找到一个这样的榜样,你可以跟他交流,这样当你遇到困难的时候想一想你做敬佩的人会怎样做,你就有力量去征服它了。我常以为,这辈子如果能遇到一位好的指导老师讲是一件很幸运的事情。如果身边没有,我上面举了那么多的明星人物,从里面找一个你的努力目标吧!周奕的例子,mp3到光盘刻录、注册码、汇款方式。小的目标大的目标,向他看齐,现在时代,不是个人英雄主义的时代,你要学会从别人身上学习好的东西,拿为己用,你的任务只是在他的基础上能够提升。 rn五、见缝插针的习惯 rn时间像海绵里的水,看你怎样挤出来用,最有效的记忆规律不是你一次记忆多长时间,二是你多长时间重复记忆多少次。把你最喜欢的书随时带在身边,有空就看,不要让大脑闲置太久不用。背单词。 rn六、设立特定的目标并规定期限 rn把你的人生当成程序来设计,制定计划,并限制完成的日期,否则你总会被各种原因而耽误的。比如说参加gre考试,你永远也不敢肯定自己是否已经准备到最充分了,那么是不是就一直不考呢?一直在准备准备、复习复习,直到你筋疲力尽没有力气去考试了,一鼓作气、再而衰、三而竭,再说时间有限,你有多少时间可以浪费呢? rn七、注重实践的习惯 rn无论你的书本知识掌握得多么牢固,你多么的清晰地理解你所学到的知识,你一到实践中去用,你会发现远远不是那么一回事。就像学习游泳,我学游泳的时候,请教了无数的游泳专家,模仿最标准的姿势,练气和技巧,我在陆地上不停的练习、练习、再练习,可是一下水,全完了,还是不会。 做程序员,那得练、不停的练习。最好的学习方法,就是自己写一段小程序。学习开车,我跟我男学开车,每次他开车的时候都告诉我,怎样启动发动机,然后踩离合器,挂档,给油,刹车停车,我对开车的理论和技巧无比熟悉了,自信一定可以开车了,于是就尝试了一下,怎么样,结果不是不堪设想啊,动用了手刹。学员活动调查结果,最短时间内、最快学会编程、成为像你们一样的程序员! rn一点学习经验l rn勤奋练习 rn把书上的例子输进电脑实践一遍,然后进行各种试验,再联想出各种相关的程序,自己写出来,并验证自己的结果。 rn读高手写的程序 rn有了一定的基础的时候,可以尝试去读高手写的程序,解读他们的程序的设计理念、风格、解决问题的思路等。我的程序就和英语一样,一个变量名就是一个句子!写程序很少加注释! rnGNU/Linux为我们提供了一个巨大的源程序宝库,里面有各种各样的程序源代码,详细研究一套你感兴趣的系统,你的水平会得到大幅度提高。 rn不断提高 rn除了多加练习,你还需要多读书,特别是英文书。要适时的选择自己的主攻方向。 rn记笔记的习惯 rn随时拿着你的笔和笔记本,一接收到有用的信息或字急又好的想法就迅速记下来,抓住瞬息即逝的灵感。自己大脑里蹦出来的东西,才是自己的价值和骄傲。 rn学习它是个长期的过程,要不断的总结经验,我们学习就怕不能持之以恒。关于这点大家比我更清楚。一旦你学会了它,其他的语言就可以触类旁通了,例如:C++,C#,JAVA,VB,DELPHI......这些学起来就会比那些C语言基础不扎实的人要轻松得许多!学习的过程是一个不断积累的过程,只有学习的时间积累到一定的程度,才能发生质的提高。经过ACCP接近两年时间学习培养出来的软件工程师才是当前市场上亟需的专业软件人才,才意味着高薪和价值。 rn程序员的分类 rn第一种是初级,这种人数量最多,水平最低。喜欢看报纸上的编程小知识,秘籍和技巧大全之类的东西,这给了他广博的半瓶子醋的学问。这种程序员往往把编程这种脑力劳动变成敲键盘的体力劳动。把软件白领变成了软件蓝领。一些软件公司的Fans们往往拿着吓人的工资、做着吓人的项目,他们做出来的结果也往往很吓人。这些人组成了软件人才市场上的流动大军。 rn第二种是通常意义上的高手,他们有时候觉得自己十分了不起,有时候又觉得自己什么也不是。大部分时候,他没感觉,没激情,没爱,相当于一个血肉机器、曰之为“感情木头”。对于他们来说没有比coding更加有意义的事情了。 rn第三种是大师级的人物。在平凡的外表下,是一个无所不能的人。没有一个人和一条狗不尊敬他。他吐痰的样子也有人模仿。微软公司首席“建筑师”西蒙尼就是一个这样的人物。不过,他说“合作比天才更重要” rn为什么软件市场上人才缺口这么大,每年20万之多,最缺乏的是熟练的程序员,而成千上万的毕业生又找不到工作。大家应该好好想一想: rn软件人才是多了,但多的是没有实际工作经验、技术掌握的层次低的开发人员。这批人频繁地跳槽形成的求职大军营造出中国软件人才一大把的现象。 rn软件人才是少了,少的是具有丰富工作经验,技术扎实精深的工程师一类的开发人员。他们在哪里都是炙手可热的人物,求职大军里自然少有这样的人才。 rn劝每一个学员克服浮躁,踏踏实实地走好每一步!既然要学,就得耐心,你要告诉自己,要用一生的时间去学习它,你就不会急功近利了。 rn俞敏洪总结的成功的四种能力 rn一、忍受孤独的能力是成功者的必经之路 rn不管有多少人在你身边,父母督促你、鼓励你,你要想达到成功最终都要靠你自己,God helps those who help themselves. 如果你想走出平凡,那么请你走进孤独!孤独的人是走得最快的人!去除浮躁,不要总想着你将来会怎样怎样,重要的是现在,自信心是一点一滴积累起来的。 rn二、忍受失败的能力是重新振作的源泉 rn生活中的失败实在是太多了,整个社会的竞争体系是一个金字塔式的结构,你可以说我与世无争,我知足者长乐,当然你可以这样做。可是社会不允许你这样做,因为他不会让你乐太久的,不进则退、优胜劣汰的市场机制会淘汰你,你会被社会抛在金字塔的最底层,你会感到整个金字塔的重量都压在了你的身上,你见不到阳光,你欣赏不到美丽的风景,你感到绝望。所以为了更好的活着,你就要振作、努力。好在机遇是平等的,在机会来临的时候,如果你有能力就会抓住它。 rn三、忍受屈辱的能力是成就大业的基础 rn你去新东安燕莎买东西,如果你没有钱,你会不会感受到售货员对你的态度不一样了呢?你去找工作,被人才市场上的人流挤得东倒西歪,北大清华的请到前面来,男生请到前面来,硕士博士请到前面来……, 你租房子被各种各样的房东赶着跑,一年到头不停的搬家,与小商贩为了几块钱讨价还价,你为了一点点的钱为老板四处奔波。这些都是屈辱,在你成功之前你必须忍受屈辱。 rn四、生理承受能力是成就大业的前提 rn做一件事情,你付出了别人所没有付出的,那你得到的也是别人所没有得到的。当我们已经开始做了某一件事情之后,我们则不宜由于我们现在认为另一件事更理想、更值得做而轻易改变我们的行动。 已经开始做了这件事,已经为此付出了心力;而且,究竟我们现在的认识正确还是过去的认识正确也还有待于检验;因为我们每一个人的生命和精力都是有限的! rn对待学习的态度 rn没有压力就没有动力,要想办法给自己施加压力,平时多看书,多接触相关的知识,保持永远能够学习的惯性,当然专业知识要不断的研究和深入探索;当真正的压力到来时,你的学习效率才是最高的。用任务去学习,没有任务制造任务。 rn我们每天的工作就是接受问题,解决问题,只能就事而论了。主要态度如下:接受它、分析它、解决它、放下它; rn克服学习中的冷热病,有了刺激就去学习,刺激过去了就放松,考试来了就紧张,考试过了就全忘。听了一场讲座或报告就意气风发,苦学三天三夜,然后就又找借口放松。 rn今天想干这个,明天想干那个,结果一事无成。 rn书到用时方恨少,事非经过不知难,书有未曾经我,读事无不可对人 rnrn程序员在线学习园地 www.lisashopping.cn 适合新手学习 对有经历的程序员有帮助 在线文档天天更新

没有更多推荐了,返回首页