资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
浅谈编程能力的培养与提高任何科技前进的方向永远都是让更多的人能够更轻松的掌握和使用,因此计算机语言也已经不再是什么高深莫测的天书,很多非计算机专业出身的人都能使用计算机语言来编写程序。无论是一个计算机爱好者,还是一个从事计算机相关行业工作的人,都有可能会使用计算机语言。然而,很多初学者常常为如何培养自己的编程能力以及如何写出优秀的程序而困惑,即使是掌握多门计算机语言,或者某些信息学竞赛的获奖者,再或者是有过一定编程经验的人也都会在达到一定程度后,因为无法再向前走一步而苦恼。计算机程序设计的世界如果缤纷多彩,为什么很多人只能在门外徘徊而苦于无从下手呢?编程的能力和技巧又应当如何培养呢?笔者在此希望从自身的经历谈些看法。1. 写给编程初学者的话计算机程序设计的世界瑰丽而多彩,很多人对此都有着浓厚的兴趣。作为一个初学者或许你已经在门外徘徊许久,但仍然不得其法。因此,我希望结合我个人的一些经验,首先为初学者提一些建议和意见。1. 基础扎实真的很重要,什么语言其实不重要我和我的同龄人应该都算是比较幸运的一代了,活在春风里,长在红旗下,优越的条件和幸福的时光允许我们有些闲暇的时间,更重要是有更多的机会去接触我们父母一代接触不到的事物,探索我们父母一代未曾触及的世界。记得我最初接触电脑是在上小学的时候,哈哈,那真是遥远的日子啊。那是我们用的电脑还都是 486,但在当时已经属于比较先进的机器啦。现在的孩子只能从教科书上去了解 486 的历史了,也只能从教科书上才能看到软盘,软驱之类的东西了。那时是父母基于很偶然的原因把我送去了一个电脑班,而为我们授课的老师是一个计算机专业的大学本科毕业生。在那个遥远的年代,这种计算机专业的大学毕业生可是非常“稀有”的啊。出于老师的专业性,所谓的电脑班其实成了编程班。多年以后,等我上了高中,计算机在中国的普及率大大提高,大街小巷星罗棋布着各种各样的电脑学习班,偶然接到过一些招生宣传单,上面赫然写着高级班授课内容包括:上网冲浪、QQ 聊天真是不禁让我无语 当然那已经是多年前的往事了。我的建议是可以直接从 C 语言开始。一般人学习 C 语言最大的困难往往就是指针。因为指针的存在很多人对此望而生畏,所以也有人据此认为 C 不是一个好的入门语言。然而,如果将 C 中的指针完全抛开,那么从基础语法功能来说,剩余的 C 又和 BASIC 差多少呢。再说,C 目前依然拥有非常大的应用领域,用 C来做一些底层的开发仍然不失为理想的选择。从 C 再向 C+过渡,也相对更容易些,从 C+那里我们可以学到基本的面向对象思想,这是 C+与 C 的最大不同。C+是我们值得去学的,而且是应当学好的一门语言。如果 C+掌握得很熟练,那就已经可以算得上是具有一定技术实力的开发人员了。这个时候再学其他语言将会非常得心应手了,事实上,选择学习哪种语言并不重要,因为任何一种语言学好了都是很不错的。而学习多少种语言也不一定是我们的目的,其实只要上了道,语言基本上是一通百通。这个时候,你可以学习 C#或者 Java,这对于一个 C+掌握得非常牢靠的人来说,学习 C#或者 Java 并不是什么难事。学习 C#或者 Java 首先要深化的面向对象的思想,它们都是非常纯粹的面向对象语言,而 C+的面向对象程度并不高。但是具体选择 C+还是 Java则可是泾渭分明的大抉择啊。选择 Java 语言,意味着你将来打算在 Java 方向上发展,这可能包括 J2EE 或者 J2ME,将来还将接触到的可能是Hibernate、Struct 和 Tomcat 等。另一方面,如果选择 C#,则意味着在.Net 平台下发展。当然,仅仅学到 C+就打住,然后坚持从事 C+开发,也是大有可为的。而且其实这个层次和要求会更高些。C 和 C+能够完成一些更加专而深的开发工作,那时你可能就要冲着一个方向不断地向深发展了。当然,这些都是后话,对于初学者来说可能还无需考虑那么长远。何况,IT 技术发展迅速,风云莫测,做长期规划和构想意义不大。我郑重地提醒读者,什么时候起步并不是问题,关键在于你自己,在于你肯不肯用心,肯不肯花时间。当我还是学生的时候,曾经在学校里当过专业课的助教。很多从农村来的学生别说编程了,就是电脑键盘也有没摸过的。但是有的学生很要强,不但学得很认真,而且凡事都动手实践,最终这些“从来没摸过键盘”的学生反而成了尖子。当然,也有些学生抵不住花花世界的诱惑,有的被网络游戏所麻痹,有的被花前月下所催眠,最后纷纷掉了队。对于学习编程,应当记住这样三句话“经得起诱惑,耐得住寂寞,受得了挫折”。不仅仅是编程,人要想干成点什么事,无不是要做到这三点的。通过前面的论述,我想阐明的一个观点是:从哪种语言入手其实并不重要,只要上了道,语言基本上是一通百通。唯一的需要跨越的地方可能是在从传统面向过程语言向面向对象语言过渡时如何建立面向对象编程的认识。当然这里的一通百通是指在掌握了一种语言之后,再上手其他语言会显得非常容易,但任何一种语言要想精通当然还是需要下一些功夫的。语言与语言之间总是有着这样或那样的联系,这种联系就决定了学习哪种语言并不是一个应该费力思考的问题。但是越往后发展,基础是否扎实就变成了你能否成为一名优秀程序开发人员的至关重要的限制条件。基础中的基础应该是数学。数学是自然科学的基础,计算机科学本来就是从数学发展而来的,最初的计算机科学家同时也都是优秀的数学家,譬如冯诺依曼、图灵等。要成为一名优秀的程序员,数学是十分重要的。很多学习编程的朋友对数学觉得不屑一顾,觉得数学和编程没有什么关系。然而,优秀程序员和一般程序员之间的任何不同最根本上来说就是数学基础的好坏。不幸的现状是数学普遍是广大程序员的薄弱环节。当然,我这里所说的数学好坏并不是指考微积分能考多少分,或者知不知道拉格朗日中值定理。数学最主要的功效是帮助我们建立一种分析问题和解均问题的思想及方法,然后再考虑通过编程去实现它。很多从事医学影像相关研发的人,都具有计算机和数学的双重背景。一方面,计算机中的许多原理都牵涉到复杂的数学知识,比如进行运动物体估计时所使用的卡尔曼滤波,以及进行图像编解码时所使用的傅立叶变换等。另一方面,一些大型项目有时需要很复杂的数学建模和利用数学进行统计分析等,而一般程序员对于这些项目可能是一筹莫展的。而当一般程序员无能为力时,优秀程序员的价值也就表现出来了。真正优秀的程序员就得具有这种能力,他们应当能够通过自己的知识来解决一般程序员所无法完成的问题,而其中一个很重要的环节就是数学能力的强弱。除了笼统地谈数学以外,数据结构和算法知识的掌握与运用能力也是衡量一名程序员编程能力的一个很重要的指标,更是普通程序员和优秀程序员之间一道难以跨越的鸿沟。数据结构原名离散数据结构,是由离散数学发展而来的,而离散数学则是数学的一个分支。数据结构和算法知识正是计算机专业的学生与非计算机专业的最根本的差别。很多人或许对链表,栈,二叉树,图这些东西略知一二,又或者一窍不通,这种人很难成为一名优秀的程序员。所选数据结构和算法和优劣从本质上决定了一个程序的性能高低。就是大学毕业找工作的时候,那些参加过信息学竞赛或者在 ACM 大赛中获过奖的学生也着实显得高人一等。很多知名大公司(例如微软、谷歌等)招聘时总是离不开那些有趣的数据结构与算法题目。你看看微软员工编写的编程之美一书就知道数据结构与算法知识在他们的工作中是多么重要了。有经验的人都应该知道,面试百度、腾讯这些公司时,数据结构与算法也是必不可少的。可见数据结构和算法对于一个优秀程序员是多么的重要啊!2. 兴趣是最好的老师,实践是进步的捷径,需求是灵感的源泉编程是一件很有意思的事情,很多人都这么认为。但是就如同你问一个没吃过鱼的人,鱼肉的问道怎么样,其实对方根本没办法回答你。所以如果你不会编程,那即使我将编程形容得如何天花乱坠也无济于事。如果将编程看成一种任务,甚至是负担,那此中的快乐就可能在你的每个厌倦的眼神中悄悄溜掉。人的生命是有限的,而人的创造力是无限。汉字是有限的,但用汉字写成的文学作品是无限的。之所以有这无限的文学作品存在,最重要的是人类的无限的创造力赋予了汉字活力。这个逻辑关系可以用来解释我们所要讨论的问题。编程语言的语法规则是有限的,但你可以用它来描绘出“风光无限”的计算机程序。这个从无到有的过程中,你的创造力起了决定性的作用。只要你足够出色,你就有可以利用计算机编程语言来构建任何旖旎多姿的程序。这怎能不说得上是一件乐事。如果你用一颗好奇的心去学习,去探索,那么每一份发现都会带来一种获得新知的乐趣。在大科学家牛顿功成名就之时,他却谦虚地说:“我只是一个在海边捡拾贝壳的小孩儿,偶尔为一片捡到的精美贝壳欣喜若狂,却对呈现在我眼前的浩瀚无垠的知识海洋视而不见”。笛卡尔也曾经有类似的表述: “我不断地探索和学习,却只是越发地发现自己的无知” 。这就是求知的乐趣,这就是探索的魅力。世间每件精美绝伦的艺术品无不是注入了艺术家鲜活的艺术灵感而焕发出诱人光辉的。这一针一线、一雕一刻、一笔一墨都是作者思想的凝聚。一个程序设计高手的乐趣就汇聚在那一行一行的代码里。程序设计可能是你谋生的手段,也可能是你拿到一个计算机等级证书的武器,当然你也可以只把它当作是一种乐趣,一种爱好。如果你问一个计算机程序设计高手他爱不爱编程,你猜他会怎么回答,我想他一定会说他很喜欢编程。你觉得他是一生下来就爱上编程的吗?记得小时候,学校课本上讲过达芬奇画蛋的故事。据说达芬奇刚开始跟随老师学习画画时,老师就整天让他画鸡蛋。后来达芬奇实在无可耐烦了就问老师为什么老是让自己画鸡蛋,所有鸡蛋看上去不是都一样吗。老师却说鸡蛋看上去好像都一样,但世界上其实根本不存在两个一模一样的鸡蛋,这种细微差别的洞察力正是成为一名出色画家所必须具备的能力。达芬奇明白了老师的深刻用心,就静下心来继续画蛋。最后达芬奇成了一位伟大的艺术家。你觉得达芬奇生下来就热爱画画吗?肯定不是。他之所成功,是因为他爱画画,但他之所以爱画画,那是因为他对画画倾注了太多的汗水。试问有几人能够整天面对一堆鸡蛋反反复复地画呢?管理学大师、资深经理人余世维博士曾经讲过这样一个故事。他有一次在日本应朋友的邀请去参加一个陶艺大师的作品展。期间,朋友介绍那位陶艺大师给余世维认识。陶艺大师和余世维亲切的握手,身边的朋友就问余世维是否发现大师有什么不一样的地方。经朋友这么突然一问,余世维一时不知该如何回答。朋友指着陶艺大师的手说,大师是没有指纹的。余世维睁大眼睛一看,果然如此,不禁叹服:“原来做陶艺,做到指纹都被磨掉,就成了陶艺大师了”。如果让你做一件你非常讨厌的事情,恐怕你是很难做好的。除非你喜欢这件事,否则你一定不会出类拔萃。但是要想喜欢一件事,除非你用心,除非你付出,否则又很难建立起一种依恋的情感。这个逻辑关系尽管好像有点绕,但实际情况却就是如此,如果你不为一件事付出汗水和心血,你就不可能真正地喜欢它,你也永远无法体会到过程中的无穷乐趣。兴趣是最好的老师,它会让你安心地坐下来,而不是浮躁抓狂地问自己为什么学不好;它也会帮助你不受外界的影响和诱惑,一心一意地为此付出,而不会三天打鱼,两天晒网、虎头蛇尾,半途而废;它也会让你面对困难变得坚强,而不是就此一蹶不振,消极逃避。因此,你必须学会去热爱你所从事的事业,热爱你的工作。如果你想学好编程,也请热爱编程。编程不能纸上谈兵,必须真刀真枪地干。你所需要的并不是一堆堆的教科书,而是你指尖下噼噼啪啪敲出来的一行行代码。世界上本来就没有从来不练琴的钢琴家,当然也不会有从来不写代码的编程高手。核心技术必须掌握在自己手里才能确保立于不败之地。自己到底掌握的牢不牢靠,自己应该心知肚明。如果你想学好,千万不要高举“拿来主义”的大旗,干着“复制粘帖 ”的勾当。现代软件开发讲求高效率的复用,因此“他山之石,可以攻玉”的思想已被广为接受。加之网上资料丰富,很多经典的程序片段都能够在网上找得到。在学习阶段,阅读他人的代码的确能够让
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号