浅谈编程能力的培养与提高_第1页
浅谈编程能力的培养与提高_第2页
浅谈编程能力的培养与提高_第3页
浅谈编程能力的培养与提高_第4页
浅谈编程能力的培养与提高_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、浅谈编程能力的培养与提高任何科技前进的方向永远都是让更多的人能够更轻松的掌握和使用,因此计算机语言也已经不再是什么高深莫测的天书, 很多非计算机专业出身的人都能使用计算机语言来编写程序。无论是一个计算机爱好者, 还是一个从事计算机相关行业工作的人,都有可能会使用计算机语言。然而,很多初学者常常为如何培养自己的编 程能力以及如何写出优秀的程序而困惑,即使是掌握多门计算机语言, 或者某些信息学竞赛的获奖者,再或者是有过一定编程经验的人也都会在达到一定程度后,因为无法再向前走一步而苦恼。计算机程序设计的世界如果缤纷多彩,为什么很多人 只能在门外徘徊而苦于无从下手呢?编程的能力和技巧又应当如何培养呢?

2、笔者 在此希望从自身的经历谈些看法。.写给编程初学者的话计算机程序设计的世界瑰丽而多彩,很多人对此都有着浓厚的兴趣。作为一个 初学者或许你已经在门外徘徊许久,但仍然不得其法。因此,我希望结合我个人的 一些经验,首先为初学者提一些建议和意见。.基础扎实真的很重要,什么语言其实不重要我和我的同龄人应该都算是比较幸运的一代了,活在春风里,长在红旗下,优越的条件和幸福的时光允许我们有些闲暇的时间,更重要是有更多的机会去接触我们父母一代接触不到的事物, 探索我们父母一代未曾触及的世界。 记得我最初接触 电脑是在上小学的时候,哈哈,那真是遥远的日子啊。那是我们用的电脑还都是486,但在当时已经属于比较先进

3、的机器啦。 现在的孩子只能从教科书上去了解 486 的历史了,也只能从教科书上才能看到软盘,软驱之类的东西了。那时是父母基于很偶然的原因把我送去了一个电脑班,而为我们授课的老师是 一个计算机专业的大学本科毕业生。 在那个遥远的年代,这种计算机专业的大学毕 业生可是非常 稀有”的啊。出于老师的专业性,所谓的电脑班其实成了编程班。多 年以后,等我上了高中,计算机在中国的普及率大大提高,大街小巷星罗棋布着各 种各样的电脑学习班,偶然接到过一些招生宣传单, 上面赫然写着高级班授课内容 包括:上网冲浪、QQ聊天真是不禁让我无语一一当然那已经是多年前的往事 了。我的建议是可以直接从 C语言开始。一般人学习

4、C语言最大的困难往往就是指 针。因为指针的存在很多人对此望而生畏,所以也有人据此认为C不是一个好的入门语言。然而,如果将 C中的指针完全抛开,那么从基础语法功能来说,剩余 的C又和BASIC差多少呢。再说,C目前依然拥有非常大的应用领域,用 C来做 一些底层的开发仍然不失为理想的选择。从C再向C+过渡,也相对更容易些,从C+那里我们可以学到基本的面向对象思想,这是C+与C的最大不同。C+是我们值得去学的,而且是应当学好的一门语言。 如果C+掌握得很熟练,那就已 经可以算得上是具有一定技术实力的开发人员了。这个时候再学其他语言将会非常得心应手了,事实上,选择学习哪种语言并不 重要,因为任何一种语

5、言学好了都是很不错的。而学习多少种语言也不一定是我们的目的,其实只要上了道,语言基本上是一通百通。这个时候,你可以学习C#或者Java ,这对于一个C+掌握得非常牢靠的人来说,学习 C#或者Java并不是什 么难事。学习C#或者Java首先要深化的面向对象的思想,它们都是非常纯粹的面 向对象语言,而C+的面向对象程度并不高。但是具体选择 C+还是Java则可是 泾渭分明的大抉择啊。选择 Java语言,意味着你将来打算在 Java方向上发展, 这可能包括J2EE或者J2ME,将来还将接触到的可能是 Hibernate、Struct和Tomcat等。另一方面,如果选择 C#,则意味着在.Net平台

6、下发展。当然,仅仅学 到C+就打住,然后坚持从事 C+开发,也是大有可为的。而且其实这个层次和 要求会更高些。C和C+能够完成一些更加专而深的开发工作,那时你可能就要冲 着一个方向不断地向深发展了。当然,这些都是后话,对于初学者来说可能还无需 考虑那么长远。何况,IT技术发展迅速,风云莫测,做长期规划和构想意义不大。我郑重地提醒读者,什么时候起步并不是问题,关键在于你自己,在于你肯不 肯用心,肯不肯花时间。当我还是学生的时候,曾经在学校里当过专业课的助教。 很多从农村来的学生别说编程了, 就是电脑键盘也有没摸过的。但是有的学生很要 强,不但学得很认真,而且凡事都动手实践,最终这些从来没摸过键盘

7、”的学生反而成了尖子。当然,也有些学生抵不住花花世界的诱惑,有的被网络游戏所麻痹, 有的被花前月下所催眠,最后纷纷掉了队。对于学习编程,应当记住这样三句话 经得起诱惑,耐得住寂寞,受得了挫折不仅仅是编程,人要想干成点什么事,无不是要做到这三点的。通过前面的论述,我想阐明的一个观点是:从哪种语言入手其实并不重要,只 要上了道,语言基本上是一通百通。唯一的需要跨越的地方可能是在从传统面向过 程语言向面向对象语言过渡时如何建立面向对象编程的认识。当然这里的一通百通是指在掌握了一种语言之后, 再上手其他语言会显得非常容易, 但任何一种语言要 想精通当然还是需要下一些功夫的。语言与语言之间总是有着这样或

8、那样的联系, 这种联系就决定了学习哪种语言并不是一个应该费力思考的问题。但是越往后发 展,基础是否扎实就变成了你能否成为一名优秀程序开发人员的至关重要的限制条 件。基础中的基础应该是数学。数学是自然科学的基础,计算机科学本来就是从数学发展而来的,最初的计算机科学家同时也都是优秀的数学家,譬如冯诺依曼、图灵等。要成为一名优秀的程序员,数学是十分重要的。很多学习编程的朋友对数学 觉得不屑一顾,觉得数学和编程没有什么关系。然而,优秀程序员和一般程序员之 间的任何不同最根本上来说就是数学基础的好坏。不幸的现状是数学普遍是广大程序员的薄弱环节。当然,我这里所说的数学好坏并不是指考微积分能考多少分,或 者

9、知不知道拉格朗日中值定理。 数学最主要的功效是帮助我们建立一种分析问题和 解均问题的思想及方法,然后再考虑通过编程去实现它。 很多从事医学影像相关研 发的人,都具有计算机和数学的双重背景。一方面,计算机中的许多原理都牵涉到 复杂的数学知识,比如进行运动物体估计时所使用的卡尔曼滤波,以及进行图像编解码时所使用的傅立叶变换等。 另一方面,一些大型项目有时需要很复杂的数学建 模和利用数学进行统计分析等, 而一般程序员对于这些项目可能是一筹莫展的。而当一般程序员无能为力时, 优秀程序员的价值也就表现出来了。 真正优秀的程序员 就得具有这种能力,他们应当能够通过自己的知识来解决一般程序员所无法完成的 问

10、题,而其中一个很重要的环节就是数学能力的强弱。除了笼统地谈数学以外,数据结构和算法知识的掌握与运用能力也是衡量一名 程序员编程能力的一个很重要的指标,更是普通程序员和优秀程序员之间一道难以 跨越的鸿沟。数据结构原名离散数据结构,是由离散数学发展而来的,而离散数学 则是数学的一个分支。数据结构和算法知识正是计算机专业的学生与非计算机专业 的最根本的差别。很多人或许对链表,栈,二叉树,图这些东西略知一二,又或者 一窍不通,这种人很难成为一名优秀的程序员。 所选数据结构和算法和优劣从本质 上决定了一个程序的性能高低。 就是大学毕业找工作的时候, 那些参加过信息学竞 赛或者在ACM大赛中获过奖的学生也

11、着实显得高人一等。很多知名大公司(例如 微软、谷歌等)招聘时总是离不开那些有趣的数据结构与算法题目。你看看微软员 工编写的编程之美一书就知道数据结构与算法知识在他们的工作中是多么重要了。有经验的人都应该知道,面试百度、腾讯这些公司时,数据结构与算法也是必 不可少的。可见数据结构和算法对于一个优秀程序员是多么的重要啊!2.兴趣是最好的老师,实践是进步的捷径,需求是灵感的源泉编程是一件很有意思的事情,很多人都这么认为。但是就如同你问一个没吃过 鱼的人,鱼肉的问道怎么样,其实对方根本没办法回答你。所以如果你不会编程, 那即使我将编程形容得如何天花乱坠也无济于事。如果将编程看成一种任务,甚至是负担,那

12、此中的快乐就可能在你的每个厌倦的眼神中悄悄溜掉。人的生命是有限的,而人的创造力是无限。汉字是有限的,但用汉字写成的文学作品是无限的。之 所以有这无限的文学作品存在,最重要的是人类的无限的创造力赋予了汉字活力。这个逻辑关系可以用来解释我们所要讨论的问题。编程语言的语法规则是有限的, 但你可以用它来描绘出 风光无限”的计算机程序。这个从无到有的过程中,你的创 造力起了决定性的作用。只要你足够出色,你就有可以利用计算机编程语言来构建 任何旖旎多姿的程序。这怎能不说得上是一件乐事。如果你用一颗好奇的心去学习, 去探索,那么每一份发现都会带来一种获得新知的乐趣。在大科学家牛顿功成名就之时,他却谦虚地说:

13、 我只是一个在海边捡拾贝壳的小孩儿,偶尔为一片捡到的 精美贝壳欣喜若狂,却对呈现在我眼前的浩瀚无垠的知识海洋视而不见笛卡尔也曾经有类似的表述: 我不断地探索和学习,却只是越发地发现自己的无知这就是求知的乐趣,这就是探索的魅力。世间每件精美绝伦的艺术品无不是注入了艺 术家鲜活的艺术灵感而焕发出诱人光辉的。这一针一线、一雕一刻、一笔一墨都是 作者思想的凝聚。一个程序设计高手的乐趣就汇聚在那一行一行的代码里。程序设计可能是你谋生的手段,也可能是你拿到一个计算机等级证书的武器, 当然你也可以只把它当作是一种乐趣,一种爱好。如果你问一个计算机程序设计高 手他爱不爱编程,你猜他会怎么回答,我想他一定会说他

14、很喜欢编程。你觉得他是 一生下来就爱上编程的吗?记得小时候,学校课本上讲过达芬奇画蛋的故事。据说达芬奇刚开始跟随老师 学习画画时,老师就整天让他画鸡蛋。后来达芬奇实在无可耐烦了就问老师为什么 老是让自己画鸡蛋,所有鸡蛋看上去不是都一样吗。 老师却说鸡蛋看上去好像都一 样,但世界上其实根本不存在两个一模一样的鸡蛋,这种细微差别的洞察力正是成为一名出色画家所必须具备的能力。 达芬奇明白了老师的深刻用心, 就静下心来继 续画蛋。最后达芬奇成了一位伟大的艺术家。你觉得达芬奇生下来就热爱画画吗? 肯定不是。他之所成功,是因为他爱画画,但他之所以爱画画,那是因为他对画画 倾注了太多的汗水。试问有几人能够整

15、天面对一堆鸡蛋反反复复地画呢?管理学大师、资深经理人余世维博士曾经讲过这样一个故事。他有一次在日本 应朋友的邀请去参加一个陶艺大师的作品展。期间,朋友介绍那位陶艺大师给余世维认识。陶艺大师和余世维亲切的握手, 身边的朋友就问余世维是否发现大师有什 么不一样的地方。经朋友这么突然一问,余世维一时不知该如何回答。朋友指着陶 艺大师的手说,大师是没有指纹的。余世维睁大眼睛一看,果然如此,不禁叹服: 原来做陶艺,做到指纹都被磨掉,就成了 陶艺大师了”。如果让你做一件你非常讨厌的事情,恐怕你是很难做好的。除非你喜欢这件事, 否则你一定不会出类拔萃。但是要想喜欢一件事,除非你用心,除非你付出,否则 又很难

16、建立起一种依恋的情感。这个逻辑关系尽管好像有点绕,但实际情况却就是 如此,如果你不为一件事付出汗水和心血,你就不可能真正地喜欢它,你也永远无 法体会到过程中的无穷乐趣。兴趣是最好的老师,它会让你安心地坐下来,而不是浮躁抓狂地问自己为什么 学不好;它也会帮助你不受外界的影响和诱惑,一心一意地为此付出,而不会三天打鱼,两天晒网、虎头蛇尾,半途而废;它也会让你面对困难变得坚强,而不是就 此一蹶不振,消极逃避。因此,你必须学会去热爱你所从事的事业, 热爱你的工作。 如果你想学好编程,也请热爱编程。编程不能纸上谈兵,必须真刀真枪地干。你所需要的并不是一堆堆的教科书, 而是你指尖下嘛嘛啪啪敲出来的一行行代

17、码。 世界上本来就没有从来不练琴的钢琴 家,当然也不会有从来不写代码的编程高手。核心技术必须掌握在自己手里才能确 保立于不败之地。自己到底掌握的牢不牢靠,自己应该心知肚明。如果你想学好, 千万不要高举 拿来主义”的大旗,干着 复制粘帖”的勾当。现代软件开发讲求高效率的复用, 因此他山之石,可以攻玉”的思想已被广为接 受。加之网上资料丰富,很多经典的程序片段都能够在网上找得到。在学习阶段, 阅读他人的代码的确能够让自己功力大增。这就有点像武侠小说天龙八部里, 丁春秋修炼的吸星大法。但是这跟只知道一味抄袭他人代码是有本质不同的。关键的区别在于是否有内化的过程。你有一个苹果,别人有一个梨,你们俩交换

18、一下之后,没人还是只有一个水果。但是如果你一个方法,别人也有一个方法,你俩再交换一下之后,你们就都有了两 个方法。要尝试学习别人的好处,弥补自己的短处。这个过程就要求杜绝好逸恶劳, 坐享其成的念头。如果只是在需要的时候,上网随便剽窃一下别人的代码,那么到 头只是自欺欺人,一事无成。记得我上大学的时候,讲授C语言的老师曾经留过的题目,包括写一个 汉诺塔”程序,写一个成绩管理程序,写一个进制转换程序或 者写一个求水仙花数的程序等等, 那时完全没想过要到网上去搜一个来用。 后来上 网多了,发现原来这些程序网上都有, 甚至很多教科书习题的配套答案网上也能找 得到。如果将网络资源好好的利用,那么的确可以

19、帮助我们加深所学,事半功倍。但是如果利用得不好就会养成我们懒惰和虚伪和恶习很多人都一再告诫初学者应不断强化自己的动手能力,多多实践。但很多基础薄弱,学艺不精的人往往遇到一丁半点的问题就懒得自己去想,只是想到网上搜一个,或者找被人代写一个,若此一来久而久之,自己基本就残废了。很多编程书籍上都包含有大量的示例程序代码。懒惰的人把程序看一遍就不了 了之,或者为了安慰自己就把随书附带的光盘中的源代码拷贝到电脑上,在开发环境下编译运行再看看结果。好像觉得自己已经知道是怎么回事了。其实, You still have lots more to work on!动手编码的过程是强化记忆的过程,是发现问题的过

20、程,更是锻炼能力的过程。编程的实践在于你能不能利用编程语言解决实际问题,而不是你是不是记住了书上的几个概念。动手编码的时候,你可能遇到的问题还有很多,比如编译不过,运行 结果出乎意料,学习调试程序,发现问题,也是这个过程中需要训练和强化的。当你把一门计算机语言的基本语法掌握了之后,你所能完成的程序的代码量也 可能仅限于百行以内。通常一本入门级的书,里面的程序可能最长不超过一百行。 不是说这种书不好,这种书的作用就是让你入门,并且把基本语法学扎实。但仅仅 掌握基本的语法是不行的,必须要结合一定的编程实践来提高自己的实际开发能 力。这个能力提高的过程也会逐渐让你找准自己的定位,发现自己的长处,决定

21、自 己的方向。需求是灵感的源泉。从事一些编码实践,不能仅限于完成教科书后面的习题。应该问问自己有没有在实际中遇到困难,有没有什么软件用得不爽。只要我们有需求,我们就可以按照自己的想法去编写一些适合自己的软件。这个过程充满挑战, 更充满乐趣。例如在上个世纪 90年代初,芬兰赫尔辛基大学学生 Linus Torvalds 就是因为不满意Minix这个教学用的操作系统,出于爱好,才设计了系统核心Linux 0.01 ,也就是后来的Linux操作系统的最初版本。再比如,1989年圣诞节期间,身在阿姆斯特丹的Guido van Rossum为了打发圣诞节的无趣,索性就发明了当今 最流行的计算机语言之一的

22、 Python。很多计算机奇迹的诞生最初都只是发明人的 一时兴起,更准确地说是他们个人的需求。我也建议那些希望在计算机程序设计方 面学有所成的读者,在掌握一定的基础之后,不妨根据自己的设想来尝试着编写一 些实用软件。只要你能坚持不懈地把它写完,必定会收获不小。熊猫烧香”就是这么诞生的吗?呵呵,当然这是个反面的例子,不建议大家去编写病毒。还是编一 些能够造福人类,服务社会的东西吧。编程的无穷乐趣就在其中,正等待着你去发 掘!3. 一本好书的作用不可忽视现如今,走进任何一家像模像样的书店,其科技类图书卖区中,最庞大的一个集群就是计算机程序设计类的图书。管它什么水利、农牧、航天等等任何一个科技 图书

23、门类,都无法有计算机类图书的排场, 而计算机图书中又以程序设计类图书居 冠。这个原因当然是多方面的,一方面至少说明从事该领域的作者为数众多,另一 方面也说明这类书有着巨大的市场。因为计算机的普及,程序设计语言已经不再是神坛上的摆设可望而不可及了, 无论你是专业的程序员,还是业余的爱好者都有潜 力成为一名编程高手。但是面对这样众多的计算机图书, 要想挑到一本好书谈何容 易。一本讲授计算机程序设计方法的书籍能够称得上好,本身就不容易。首先,这 本书应该能够容易让人看懂, 让人理解,这就要求作者必须在讲述的方式上下些苦 工。其次,在于这本书的内容应当充实、知识点讲述没有谬误,这就要求读者不但要有相当

24、深厚的学识,更要在前期对图书的整体结构有一个相对完善的设计和构 想。这样的一本好书,其作用是不可估量的。初学者入门是很关键的时期,一方面 他们怀有着对于知识的渴望和崇敬,另一方面,他们的能力和基础又相对薄弱。如 果书中的讲述方法尚有欠缺,且文字晦涩难懂,破绽百出,这不但是让初学者感到 吃力,更重要的是有可能打击他们学习的积极性。如果书籍的架构不够完善,且知 识介绍上存在谬误,不但让人不能系统地学到知识,更有可能灌输一些错误的思想, 这种书只会误人子弟、贻毒大众。然而,初学者由于知识积累有限,往往很难分辨一本书的好坏。再说,倘若一 本书真的属于书中经典,但其并非是面向初学者的,这样读者即使很认真

25、地去钻研 书中的精妙,往往也只能事倍功半、白费力气。所以,读者首先应该学会如何选择 一本好书。选书首先可以选择一些知名技术作家的作品,或者选择一些长期盘踞畅销榜前 列的书,再看看网上的相关评论怎么样。当然,众口难调,网上的评论也不可能一 边倒,肯定是有的支持,有的骂。这个时候要理性对待这些评论。不能因少数人的 少数言论而断定书的好坏。 通常比较好的书引起的反响也比较强烈, 一个重要的表 现就是其评论数量比较大。有说好,有说坏,争论之下,各不相让,这种书往往可 以考虑考虑。而如果是众口一词的说这书太烂,那这本书基本上就应该被枪毙了。另外一方面,读者也应时刻保留一种心态,即书本没有好与坏,只有是不

26、是适 合你。如果你是一个初学者,那一定要结合自己的实际,千万不要好高警远而买一 些很高深的书来看。就像有些名家大作、畅销书籍往往都有可能是不适合初学者的, 因此读者基于作者是否知名、书籍是否畅销等问题选出的一部分书就可以被淘汰。通常书籍的内容简介或者前言中,都会介绍这本书的读者对象,以及看懂它所需的 一些储备知识。因此,看一本书绝对不能看着封面花哨就急于下手。至少应当把书 的内容简介和前言看仔细,然后再看看书的目录编排是否与内容简介所提到的东西 相一致。基本上述的过程已经可以淘到一些不错的书了。但是还有一些小忠告需要告诉 读者首先,配不配光盘不应该是选择图书的标准,重要的书的内容。很多读者都有买那些带光盘的图书的习惯,多半是为了里面的代码或者视频讲解。请注意,光盘 附代码只会耽误你。作为一个初学者,自己动手写代码的机会弥足珍贵,如果只是 依靠光盘里的内容,走马观花,那你将永远学不到真本事。另外,学习一门计算机 语言是不需要什么视频讲解的。 而且带视频讲解的书多半是教读者如何使用开发环 境来编程的。注意掌握开发环境跟掌握一门计算机语言是两个概念

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论