`
helpbs
  • 浏览: 1163488 次
文章分类
社区版块
存档分类
最新评论

第十章:优秀程序员之道

 
阅读更多

前面多章都讲述了自己在成长过程中遇到的种种经历,困难和挑战。很多网友回复说,除了希望看到能引起他们共鸣的东西外,还希望从中能学到一些对他们在程序员道路上尽快成长能起作用的东西。

我理解他们的心情,在压力如此之大的今天,谁都希望能够缩短成为高手,或者成为熟手的过程,这样才能为自己争取到主动权。正如练武之人,都希望得到一份武林秘笈,让自己早日进入新的境界,虽不至于欺负别人,但至少可以用于自保。

这里我总结自己对于成长的一点认识。当然,也许对你有用,也许又没用。

首先我要强调程序员的基本素质。这正如你想练武,那么首先得看你有没有练武的资质。在这些资质中,我又比较强调以下几点:

一是热爱

所谓做一行,爱一行。只有当你热爱编程,热爱你的工作时,你才可能全身心的投入,才可能精神饱满,才可能不知疲倦。如果你只是把编程当成一种维持生存的工作,而缺乏投入,那你就不可能为之付出努力,也自然不可能成为一个优秀的程序员。

二是勤奋

对于我来说,一个程序员可以没有天赋,但绝对不能没有勤奋。很多程序员经常加班加点,有些是被迫的,但有些是自愿的。当你热爱它时,你应该会忘记时间,忘我投入。有些程序员,每天准点上班,和工厂上班一样。对于我来说,当手头的工作没有一个阶段结果时,比如函数还没有编写完,编译还存在若干个错误需要修正等,是不可能马上走人的,必然要到解决了这些问题才算结束。

对于我周围的年轻人来说,有这样心态的人越来越少。对于这点很是遗憾。年轻气盛的时候不愿意付出,不尽快积累经验,提高自己的能力。那么以后就很难有很好的竞争力。等到成家后,就更难有机会了。反而是现在三十岁以上的程序员,还具有十年前的勤奋努力的作风,往往是公司里下班最晚的那一批。难道这不值得年轻人学习么。

三是责任

程序的质量可以说代表着一个程序员的优秀程度。编写千疮百孔的代码的程序员,不可能是优秀的程序员。一个优秀的程序员,要具有敏锐的眼光,能够捕捉到程序潜在的问题,能够快速的定位到错误的位置并找到原因。这个素质,来自于责任心。不负责任的程序员,马马虎虎的程序员,是不可能具备这个素质的。

我的同事经常很佩服我,为什么总能发现别人没有发现的错误。举个简单的例子,比如一个文档中的错别字,一段代码中的逻辑错误。这一方面来自于经验的积累,这个大家随着时间的推移都会具备;另一方面则来自于自己对问题的敏感,我的第一感觉就会去寻找各种可能存在的问题,所以我能发现这些问题。如果你不把它当做一种责任,那么你就会漠视它。曾经有个同事,写的代码就让我痛苦万分。很多浅层次的问题都没有发现,居然就告诉我已经完成任务。从别人出现的错误类型,我就可以说这个人到底有没有责任心。

也许他会辩解说他就是没有发现,并非主观故意。那我只能说,他不适合做程序员,更不可能成为一个优秀的程序员。

四是进取

进取是程序员成长的必然环节。不思进取的自然不用说了,永远原地踏步是不可能成为优秀的程序员的,而且只会被日新月异的新技术所淘汰。有一颗进取心是必要条件。但你还需要掌握合适的学习方法和学习途径。比如,从网络中搜索所需的知识,能够充分利用网络资源,找到自己所需的材料,能够将新的技术和方法引入自己的系统;从别人的代码中学习编程的思想,能够理解别人代码的思路,能够改写他人的代码为自己的系统所用;从工作中进行经验的积累,能够对自己的工作进行改进和重构,能够总结自己的进步和不足,能够进行自我完善。

当然,还有很多其它的基本素质。对于成为优秀的程序员来说,都是相当重要的。

其次就是评价一下自己。我只能属于一个比普通程序员强,但还不够优秀程序员标准的程序员。这并不是谦虚,而是有理由的。

从大学开始到现在,从来没有学习过C++语言和WINDOWS编程。大学里只有C语言课程。工作了直接使用VC++进行排版软件的开发。和大家一样,都从HELLO WORLD起步。由于跳过了C++语言这一步,因此到现在对一些基础的概念还不是很清楚,可以说是一知半解。由于WINDOWS编程没有学习过,因此,论坛中很多帖子问道一些知识性或原理性的内容时,我一般保持缄默,因为自己实在是不知道为什么。

到现在为止,只看过一本VC++ 5.0的扫盲书,主要看的是界面和控件的使用方法。其它的就没有看了。我不是一个爱看书的人。所以很多网友问要看什么书才能更快的进阶或入门,我实在是没有什么发言权。但是从我个人的成长历程来说,由于没有预先对一些知识的了解和掌握,确实让自己走了很多的弯路。可以说,自己的经验积累,更多是靠失败的教训得来的。通过失败,我明白哪种方法可以,哪种方法不可以。但又缺少理论支持,不清楚为什么这种方法可以,那种方法不可以。

我想这些就够说明我还没有达到优秀程序员的境界,还有很多优秀程序员的基本素质不能满足。我感觉自己就像个有许多实践经验的文盲,靠经历明白事理,但却又无法给自己解释。

最后我想说一下自己的一些学习方法。我想文盲也是有自己的学习方法的。

第一就是实践

我从来不愿埋头看书。因为人的抽象能力有限。也许书本的前几章能够理解,但后续的章节,基本上是很难吸收的,因为对前几章的基础还没有深刻的理解。那么要想理解,那就只有付诸于实践。就像游泳一样,不下水,看再多再全的动作要领也是没有作用的。有些网友确实也进行了实践,但往往过于简单。我所说的实践,应该是在一个较大的项目中的实践。因为小项目的代码,很多编程的思想难以体现,比如封装,多态,继承等。所以一定要在较大的项目中,通过反复提炼,反复重构来使得代码达到一个最佳的实践。

很多程序员,往往浅尝辄止。不求代码的优化,不求结构的合理,只管完成任务。那么,你就很难有提高。只有在优化和重构中,你才能收获自己编写代码的最佳实践,形成自己的编码风格和程序结构设计思路。

第二就是拿来主义

做项目和搞研究不同,往往工期压力很大。那么,为了达到一个理想的效果,对于一些技术问题,却没有足够的时间来完成,怎么办。此时就要用到拿来主义。现今网络技术非常发达,开源比比皆是。我们要充分利用这些资源。从中获取我们需要的东西,直接或者稍加修改,就可以应用到项目中。比如一个控件,一个表格,一个文件解析模块等等。但我们的目标不能仅仅到这一步。其后要对这些内容进行理解,至少要做到能够进行修改。比如一个控件实际需要的效果有所差异时,我们能够改进;功能有缺陷时,我们能够解决。这才达到拿来主义的效果。

有些程序员喜欢自己从零开始编写基本模块。例如编写自绘制控件,自己从CWnd类派生后进行所有的处理来完成功能。我不赞成这样,除非别无选择,或者公司从战略上需要有自己独立的界面库。这些程序员,往往过于追求底层的技术开发,而忽略对系统业务的理解。我只能说,他们更适合于一些有特殊需求的单位。

第三就是交流

有些程序员,不善于交流。自己一个人蒙头干。当单位中有经验丰富的程序员时,也不向对方请教。交流是程序员成长很重要的方法。通过交流可以学习他人所长,更加重要的是,可以大大缩短自己成长的周期。有些人遇到一个问题往往会卡住半天,最后可能出来一个不理想的结果。殊不知他的问题别人早就有很好的解决办法,甚至都已经有现有模块可以使用。如果善于交流,那么你早就解决了问题,并且可以向别人学习到为什么这么做,优点是什么,这样就可以把这部分知识吸收为己用了。

所以,如果你身边有一个优秀的程序员,那么,请你在有一定思考的前提下,多问问吧。这比你自己琢磨和看书不知道要强多少倍。当然,切记提问一定要有一个很好的态度。也许这算是成为优秀程序员的一个捷径吧。就和武侠小说中说的那样,要多和高手过招才能更快提高。

总之,想成为优秀的程序员,除了需要一定的天赋外,更需要具备优秀程序员的基本素质。然后辅以适合自己的学习方法,那么你就有希望成为一名优秀的程序员。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics