分类: IT职场
2010-06-22 20:04:42
一、写这篇文章的原因
1、低水平程序员已经过剩
随着开发工具的可视性、易用性增强,程序开发变得简单了。同时经过这几年大学教育的普及和培训机构的流行,现在,程序员几乎是一个没有门槛的职业, 代码编写变得类似于机械性的动作。这样的程序员顶多只是编码人员,无法进行高水平的程序设计,而众多软件企业所苦苦追求的恰恰是具有丰富项目经验、能够独 立完成程序设计任务的程序员。如果我们不能提高自己的程序设计水平,而去和低水平的程序员抢饭碗,那么我们永远抢不过别人,永远只能处于社会的底层。我们 只有把自己打造成众多软件企业所需要的高水平的程序员,才能保证我们的饭碗。
2.要有危机意思
也许你现在的生活很安稳,也许你现在的工作很平静,但是你有否想过,假如你明天就会失业,你应该怎么办呢?有句话说得好"没有破产的行业,只有破产 的企业",那么同样道理,"没有失业的职业,只有失业的职员"。在《成功是逼出来的》的一书中,说做程序应该想着明天程序就需要完工的心态来对待,那么同 样的,我们也需要明天我就会失业的心态来促使我们进步。
二、如何打造不失业的能力
现在请你闭上眼睛想一想,MicroSoft被称为软件帝国,IBM被称为蓝色巨人,Google被称为搜索大帝,它们靠什么成就了如此的丰功伟 绩?答案其实非常简单——核心竞争力。MicroSoft凭借几乎垄断的操作系统,IBM凭借出色完善的企业解决方案,Google凭借无处不在的电子触 角,它们都把它们的核心竞争力发挥到了极致,所以其它类似企业难以望其项背。那么,作为一个程序员,我们的核心竞争力是什么呢?
程序员应该具备的七种基本素质:
团队精神和协作能力;
良好的文档习惯;
规范化、标准化的代码编写习惯;
需求理解能力;
复用性、模块化的思维能力;
测试习惯;
学习和总结能力。
团队精神和协作能力
所谓团队精神,简单来说就是大局意识、协作精神和服务精神的集中体现。团队精神要求有统一的奋斗目标或价值观,而且需要信赖,需要适度的引导和协调,需要
正确而统一的企业文化理念的传递和灌输。团队精神强调的是组织内部成员间的合作态度,为了一个统一的目标,成员自觉地认同肩负的责任并愿意为此目标共同奉
献。
团队精神和协作能力是一个程序员乃至一个团队安身立命的根本,是最基本的素质之一。个人英雄的年代早已过去了,即使是再伟大的代码英雄也需要组成强 大的团队来创造奇迹。缺乏团队精神和协作能力的程序员是不合格的程序员,是要被淘汰的程序员。
说了这么多,团队到底有什么作用呢?团队的作用是:
第一,它能够对团体内个体的行为产生约束和影响,逐渐形成自身的行为及行事规范。这种规范同时也表现出了这个团队的行为风格和准则。
第二,它使每个个体的期望值保持高度一致。而这个高度一致的期望正是这个团队所要达成的目标。
第三,团队内个体间互助及信息共享,能直接影响这个团队,影响组织内部的沟通和协调,从而对一个组织的工作效率起到深远的影响。
第四,一个优秀的团队通常具有很强的凝聚力,而这是创建学习型组织成败的关键,另一方面,个体在团队中受到影响,往往能发挥出超出个体原有的能力,这种影
响不是主管与部下一对一的互动能够代替的。也正是这种超常的发挥使得优秀组织更加优秀。
既然团队如此重要,那么如何培养团队精神和协作能力呢?
首先要学习团队的积极品质,团队强调的是协同工作,所以团队的工作气氛很重要,它直接影响团队的工作效率。没有完美的个人,在一个团队中,每个成员都有自
己的优点缺点。作为团队的一员应该主动去寻找团队成员的优点和积极品质,学习它,并克服自己的缺点和消极品质,让它在团队合作中被弱化甚至被消灭。如果团
队的每位成员,都主动去寻找其他成员的积极品质,那么团队的协作就会变得很顺畅,工作效率就会提高。
其次要时常检查自己的缺点。团队工作需要成员在一起不断地讨论,如果一个人固执己见,无法听取他人的意见,或无法和他人达成一致,团队的工作就无法进行下
去。团队的效率在于配合的默契,如果达不成这种默契,团队合作就不可能成功。所以要经常检查自己的缺点,如果意识到了自己的缺点,不妨将它坦诚地讲出来,
承认自己的缺点,让大家共同帮助你改进,这是最有效的方法。虽然这做起来很难,但这更能为你赢得理解和帮助。
再次要让大家喜欢你。一个让别人喜欢你的性格是非常重要的,如果有可能,那就培养一个让所有人都喜欢的性格吧。要使自己的工作得到大家的支持和认可,而不
是反对,必须让大家喜欢你。但一个人又如何让别人来喜欢你呢?除了在工作中互相支援、互相鼓励外,还应该尽量和大家一起去参加各种活动,或者礼貌地关心一
下大家的生活。要使大家觉得,你不仅是他们的好同事,还是他们的好朋友,那还会有谁不喜欢与自己的朋友合作吗?
第四要保持足够的谦虚。任何人都不喜欢骄傲自大的人,这种人在团队合作中也不会被大家认可。可能你在某个方面比其他人强,但你更应该将自己的注意力放在他
人的强项上,只有这样,才能看到自己的肤浅和无知。因为团队中的任何一位成员,都有自己的专长,所以必须保持足够的谦虚。谦虚会让你看到自己的短处,这种
压力会促使你在团队中不断地进步。
文档习惯
一个公司的产品再好,技术含量再高,如果没有文档,那么知识就没有继承,公司就缺乏生命力,那么公司永远就只会是一个来料加工的软件作坊。所以,文档是一
个软件系统的生命力,是一个软件部门或企业的生命力。
良好的文档是正规的研发流程中非常重要的一环。一个好的程序总是先写好设计文档才开始编码的,因为在设计文档的指导下才能写出良好,安全的代码。如 果没有文档,一开始就写程序,这样就不会按已设计好的路线走,而是想到哪写到哪。小功能还好说,要是大功能,就容易混乱甚至失控,从而造成重大损失。所以 没有文档的程序员势必会被淘汰的。
软件工程中,要求的文档有很多,但是哪些是我们必需的呢?我们开发一个项目,总需要知道系统的功能和需求吧,那么至少需要一份系统需求分析文档吧; 需求确定以后,技术人员根据需求文档来做可行性分析,来做技术评估,来做总体设计,那么需要一份总体设计文档吧;总体设计确定了,没有条件的就直接进行编 码了,有条件的还会有详细设计文档;代码编写完成后,总要做单元测试,功能测试和集成测试吧,那就需要有测试文档;系统交付给用户,如果操作不是太简单, 总要有份操作说明吧。可以看出编码只是程序设计中的一环,而文档却贯穿程序设计的始终,那么作为一个程序员,花30%--50%时间在文档的编写上是很正 常的事了。
但是有很多程序员是不喜欢写文档的,它们的理由之一是写不好文档。那么,怎样才能写好文档呢?我觉得在动笔写文档之前如果能回答以下几个问题,肯定
会事半功倍的:
一、文档的读者是谁?他们的阅读能力(理解能力)如何?
二、文档主要表述的内容是什么?读者为什么要阅读这些内容?
三、理解文档的内容还需要哪些更多的背景知识?
四、读者读了文档的内容后是否有助于他们正在进行的工作?
在完成了文档后,再回头想一下上面四个问题,是否都做到了,然后再考虑一下文档的结构、遣词造句是否符合读者的习惯,那么,OK,一篇至少是合格水平的文
档就完成了。
规范化,标准化的代码编写习惯
代码具有良好的可读性,可维护性,也是程序员基本的素质。良好的编码习惯包含工程结构的组织,文件和变量的命名方式,文件、模块、函数、行的注释方式,以
及代码的排版方式等一系列的规范,而在这方面已经有很多的说明和例子,我不再多说了。总之记住一句话,良好的编写习惯,不但有助于代码的移植和纠错,更有
助于不同技术人员之间的协作,这也是协作能力的体现。
需求理解能力
要培养自己准确,快速理解需求的能力,做出来的产品不应该和系统需要的功能有偏差。但是也不能仅仅考虑功能需求,要同时考虑系统的稳定需求,安全需求,耐
压需求等。
复用性,模块化思维能力
程序员应该是一个带有创造性性质的工作,而不是一个流水线工作。很多程序员抱怨他们成了码字工,成天重复一些没有新意的代码。其实这正是没有模块化思维能
力的体现。复用性设计,模块化思维就是要求我们在完成一个功能模块或函数的时候,不要局限在仅仅完成目前任务的思路上,要考虑该模块是否可以独立出来,是
否可以仅通过简单的修改参数或设置的情况下就能够应用于其它系统或应用程序环境。只有在每一次研发,每一次设计都都这样考虑,我们才能够从重复性的劳动中
解脱出来,才能够有更多的时间和精力投入到创造性的工作中去。
测试习惯
大家都知道一个道理,那就是问题发现的越早,解决的代价就越低。程序设计作为一项工程,如果程序员的每一段代码,第一个功能模块在完成后都能够进行很好的
单元测试的话,就可以减少很多系统中潜在的危险和Bug,这对整个系统的安全稳定和整个工程的造价都是有很大的贡献的,同时也是自己需求理解能力的体现。
学习和总结的能力
程序员是一个很容易淘汰,很容易落伍的职业,所以程序员如果想安身立命,就必须不断跟进新技术,学习新技能。善于总结也是一种能力,程序员应当在完成一项
任务,完成一段代码后,就随时总结,找出自己的不足,这样才能逐步提高,才能成长起来。
一个不具备成长性的程序员,即使现在是个高手,但终究会有落伍的一天的。
三、如何提高水平
1.扎扎实实地钻研理论,打好基础。技术是用来发明创造的,不是用来跟风的,所以不应该什么技术或编程语言最近比较火,就学习什么技术或编程语言, 而是应该真正静下心来去学习一些原理(如编译原理,数据库原理,操作系统原理等等),数据结构和算法等基础性的知识。所谓"经济基础决定上层建筑",只有 根基牢固了,才会枝繁叶茂;只有源渊了,才能流长。那么同样的,我们学习编程语言,只要基础打好了,任何一门语言的区别便只剩下了语法和规则。
2.加强责任心,提高程序的质量。我们编写软件应该把这看作是一项事业,把这看作是在完成一件作品,在完成一件艺术品,而不是仅仅是一项工作。我们 要对我们的代码精益求精,要使我们的代码成为精品,同时也要考虑一下文档,注释等是否完善,是否可以复用等性能指标。
3.做一个长期规划,不断提高自身价值。去除浮躁的气息,忘却空想般的白日梦,脚踏实地地结合自己的实际能力和水平为自己做一个生涯的规划,然后坚 持不懈地付诸实施,不断地增加自身的价值,总有一天会捧着金饭碗过日子的。
4.把知识学习与企业需求相结合。学校教给我们的只是知识,而企业对我们的需求却是技能,在知识和技能之间的衔接只能由我们自己来做。东软的副总、 CTO方发和这样描述他对IT专业学生的要求:"我们要求学生注重4方面的能力:眼界、学习的方法、技能和规范。要学习如何与别人合作,比如在代码风格上 统一。虽然只是一名程序员,但仍需要站在项目经理的层面上看自己的工作,这样才能更好地融入到团队中。"在企业的发展中寻求自身能力的提高才是最快的捷 径。
5.将技术提升与行业相结合。2000年以后,软件业的编程思维和模式、方法发生了翻天覆地的转变,软件工程流程的普及,使得对程序员的基础要求降 低了,但对系统设计的要求提高了。因此程序员要想出头,不仅要成为技术专家,同时也要提高系统设计能力。而系统设计能力是要与行业结合的,也就是说,要从 一个行业应用软件设计的角度来看待程序员的工作,这不仅能够帮助工作,还为以后的"进阶"提供了保障。
6.把发展方向与自身性格相结合。程序员有几种基本的职业规划:技术专家、软件架构师、实施顾问或销售。最主要的发展方向是技术专家,但技术专家再 往上就比较困难,因为架构师总是只有那么几个。所以,程序员应该根据自己的情况,选择适合自身性格的发展方向。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luoshupeng/archive/2009/07/10/4338262.aspx
chinaunix网友2010-06-25 12:13:50
学习和总结的能力 程序员是一个很容易淘汰,很容易落伍的职业,所以程序员如果想安身立命,就必须不断跟进新技术,学习新技能。善于总结也是一种能力,程序员应当在完成一项任务,完成一段代码后,就随时总结,找出自己的不足,这样才能逐步提高,才能成长起来。 ——是的,没有总结,就没有积淀;总结并传播分享。