第三部分,未来职业生涯规划、家庭环境分析、例如经济状况,家人期望等。感谢您阅读《项目经理眼中的合格程序员》内容,职场资讯网小编向您推荐一些职业规划知识,欢迎参考,希望能帮到你。

一、合作与团队精神及计划性

服从分配的工作,并在保证质量的前提下尽快完成任务。如果接到的新任务没有给出工作量估计,首先估计出完成任务所需要的工作量,并有责任向领导说明其估计的合理性,如果接到的新任务已经给出工作量,除非能提出充分的理由,否则必须接受该工作量估计。提前完成任务时,应该及时通知上级。在同时承担几个模块任务时应能根据优先级的变化及时调整自己的工作时间分配。

二、需求理解能力

在开发过程中,要在需求细节不明的情况下,有责任设法搞清楚,积极学习编程思想和方法,并在设计、编码工作中自觉应用,对有一些复杂程度的设计,主动申请设计审查。并能在开发用户界面之前,尽可能使用界面原型方法获取用户的确认。

三、测试意识

在工作负担允许的情况下,采用测试驱动的编码方式,及时把完成编码的部分提交测试,并及时排错。不断通过自己的测试来驱动程序质量的提升。

四、规范化,标准化的代码编写习惯

良好的文档是正规研发流程中非常重要的环节,作为代码程序员,25%的工作时间写技术文档是很正常的。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。

对正规的企业,会有完整的编码规定,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。代码具有良好的可读性,是程序员基本的素质需求。

五、总结与全局观

以项目全局为重,采取尽可能简捷的解决方案,把完美方案的设想提交设计人员,有问题时首先向同事们征求解决办法,不鼓励花大量时间解决难题,并鼓励给同事提供技术支持。项目结束,做出个人小结,以利个人和集体的改进。

精选阅读

程序物语:项目经理预成长


今天,根据自己的体会,我来谈谈项目经理的初始化阶段。

新人工作一段时间后,或长或短,可能一至两年后,有可能出任项目经理。此时,考验你能力的时候真正来临。项目分很多类,如基础研究项目,大型综合性项目。这里我们选取小的商业应用型项目为例。

刚开始,我们是没什么经验的,好在有热情。但这是项目,是一个讲究人与人之间配合的技巧性的活,光靠热情是难以持久的。退一步说,你是能力很强的聪慧之人,什么都拿得起放得下,那你充其量只是个精兵,而不是一个好的管理者。管理者的目标让整个组织的效率更高,管理者是没有那么多时间老是冲锋在前的,请深刻体会这一点。 因此我们得掌握一些基本的技术,讲究一些策略,力求避免未做勇士,先做烈士。

需要先补的课程是,项目的三要素:时间、成本、范围。

第一:时间

如果三峡项目做得很漂亮,质量很高,专家也很满意,惟一不足的是项目比预期推迟了两年半,那么这个项目的考评可能从A+会直降到C-甚至D-。因为这样一个大项目群,耽误一天便产生数以亿计的成本损耗。我们的项目虽然小,但道理是相通的。所以在执行项目之前。项目的时间至关重要。

客户有个时间表,老板有个预期的时间表,每个项目成员都有个时间表,作为项目经理,必须把这些协调起来,达成一个各方满意的结果、按照利益相关方的优先级别排序。这里有个分析的小技巧:请注意,老板说是下月底完工,你得有两手准备。一方面:alpha版一定要在下月上旬先给老板看下,给他一个初步印象,避免到时心里落差过大,情绪失控,万一有错,也来得及修正。另一方面,不要做得太细太完善,既浪费时间,又不给领导提意见的空间,领导只会怪你不会做事。于是,你得留一些简单的易于完成的小破绽给领导。是不是很委琐?!我相信这 样做,对项目组有利。当然,看具体的人,看性格。

第二:成本

项目花下去多少成本,预算时要心中有数。多大的西瓜多大的秤。这个成本包括时间成本、人力成本、费用成本等。在项目中间要勤计算挣值 。这是一个很关键的指标。投入与产出必须有一定的正相关系数关系。人有多大胆,地有多大产的教训在我身上太深刻了,记住,什么事都不要拍脑门,项目中没有任何板上钉钉的事,特别在公开会议上,要控制自己的情绪和言行。 有时候,一时不必要的斗气,让项目成员苦不堪言。

第三:范围

有了时间、成本的到位分析。范围就是一件简单的事了,简单的说,范围就是项目需要完成的程度。时间长、成本允许,可以内外兼修,各环节都做得漂亮,各方满意,自己也挺有成就。这是理想中的理想,基本上在实际中属于空想的范畴。所以,如何控制好范围,而又保持好项目成员的积极性,是一门学问,水很深哪!项目经理的一个基本观念是:项目是独立核算的,项目的考评是本项目完成到什么程度,而不是为了别的项目组或者为了下一次项目做了多少。如果这个项目可能为了别的项目组做出一些牺牲或额外努力,请尽量避免!如果必须得做,也需要在项目组 会议上言明,为自己项目组争取既得的回报,不一定非得物质的,比如领导的心知肚明,客户的理解和感激等,这些会帮你加分。千万不要偷偷摸摸的干,把项目成员的暗中努力不当回事,我是雷锋我怕谁已经不能用来唬人了,这是个讲究科学、兼顾效益的商业社会。

有人会问,在这三者冲突的情况下,如何取舍。建议很明确:先砍功能,也就是范围,把一些能推到项目二期的先往后推,向范围要时间。所以,在项目开始之前,要给项目孵出20%左右的可压缩时间,这个只有项目经理自己清楚,不必言明。

最不可取的就是项目经理挥刀自宫,让整个项目组在低成本下高速运行,这样的项目最后成败我们先不说,在项目成员的眼中,你基本上与黄世仁无异,甚至不用等到项目结束,就已经牺牲了。所以在第一次项目中一定不要让项目成员感觉跟你就是为了体验雪山草地,他们配合你,一是出于利益,二才是看你这个人值不值得跟。都看着你呢。所以,遇到不顺事先忍着,抓重点,回头再总结。这就是前文所说的做人、做事的原则:为什么级别的事情,就得付出什么级别的代价!

其实,第一次,不要将成败看的太重,教训要自己书写。有人说,哪怕只打一次仗,一个兵才会淬火成为真正的军人。谁没有第一次呢?做人,要经得起失败,但得明明白白地失败。

有人说 程序员的人生有三重境界。第一重、见山是山,见水是水。刚入门的程序员基本只能看到表面的东西,由于各种原因,没法了解更深入。第二重、见山不是山,见 水不是水。成长并有经验后,看到的表面现象渐渐有头脑中成型,犹如行军详细地图已经了然于胸。第三重、见山亦是山,见水亦是水。大悟之后,举重若轻,外松内紧,处事看似笨拙,实则暗藏玄机,惜语如金,然字字珠矶。此时,胸中亦有各种框图,然表面内敛以藏拙,见人说人话,见鬼与鬼语,谓之通灵也。

要想修炼到气定神闲的第三重境界,那就用心和智慧体验吧!

如何从技术专家提升为合格的项目经理[2]


协调项目各个骨干成员的利益

项目经理一方面要对用户及公司负责同时也不要忘记了和你一起出生入死的战友,项目组成员的利益也需要你来维护,这个利益来自两方面一方面要协调各个骨干成员间的利益,另一方面要协调组员与公司间的利益。

以身作则起到表率

项目组建初期,所有的的成员大家都认为项目经理是主心骨,所以无论大小的问题都会找项目经理,并且大家也都关注着你的一言一行,所以项目经理要勇于承担责任,遇事退缩的项目经理会让组员看不起的,同时也失去了威信,发展到最后你会发现已经指挥不动人了。同时要学会合理的把相应的工作分配到不同的组员身上,不然你会发现你的工作应接不暇而部分组员在看小说聊天。所以这些问题都需要责任心来解决,当你用心去安排工作时这些工作会迎刃而解,所以项目经理的责任心是非常重要的。

不断学习不断尝试

在国内的项目经理大部分应该都是出自技术岗位,所以还是要不断学习新技术同时安排解决项目中的技术问题,同时还要加强项目管理的知识及不断丰富自己的管理经验,一方面加强技术学习不但可以把控项目中的技术问题同时可以得到组员的认同,教材上项目管理知识都是理论的,根据不同的环境和情况要不断尝试用新的方式来解决不同的问题。

你的主要工作是管理

正因为很多软件项目的项目经理都是出自技术,所以不同程度的对技术都有一些痴迷,这时候你要清楚你自己的角色,你不是一个程序员,你的目标是管理好一个项目,技术难题要交给能够解决的组员去解决,你更多的精力应该是把控项目的进度质量及与公司领导、用户、客户进行很多的交流工作,同时发挥你的每一个组员的最大能量。

要有一个好的心态

在项目管理过程中你可能会与某些单位的领导或者公司的老总级人物打交道,这时候要把握好自己的心态,不能太卑微同时也不能太张扬,要把握的有礼有节,这些才能得到这个领导及老总的认可。很重要的一个心态就是我是为你服务的,你付给我公司的钱不是我抢来的,是我劳动付出的。所以也要压制某些用户的不平等的心态,如果是原则性的问题该不让步就是不能让步的,如果是你自己把控不了的交到公司由公司领导来权衡。

如何从技术专家提升为合格的项目经理[1]


说到项目管理,我管理的项目不算多,大项目也有那么两三个,小项目也就记不清了。

我做过集成的项目,说实在话没有什么可写的,但软件的项目给我的磨砺可能是这一辈子也抹不去的。

我这人天生喜欢有一定挑战的事。所以从集成转到软件费了不少力气,从一个IT公司的集成部门经理下来做程序员一步一步的又做到软件部门经理,这个区间可能用了一年半的时间。言规正转。

说软件给我比较深刻的影响是因为软件是在创造,不说全部吧,至少大部分。

创造的东西对每个来说都是比较有意思的一件事,而且成就感也是比较强的一件事,同时对个体的打击也是比较多的,更多的时候做软件项目的项目经理让人疲惫不堪。

就我所做项目管理的的几年中总结经验如下:

项目管理第一位,技术要放第二位

年轻的项目经理,如果你想做好一个项目经理而不是一个技术经理那么你就远记住,项目管理是第一位的工作,技术要放到第二位,一个项目的成败不是你的技术用的是多少的先进,你的功能是多么的完善,项目的好与不好只有一个人可能说,那就是你的客户和用户,即使你的项目用的最差的ASP写了一个比较大的应用,如果用户说你好,那么谁都没有理由说你差。

沟通交流放第一位,协调处理放在第二位

在项目管理中首要的一个工作就是沟通与交流,要与你的用户沟通交流,要与你的客户沟通交流,要与你的公司各部门的相关人员沟通交流,要与你的领导沟通交流,要与你的组员沟通交流,首先要清楚,沟通不是要你去协调,是要你知道他们想要去做什么,要做到什么程度,这中间可能有什么问题,是要你先要学会听别人说,然后再考虑你的对策,项目的核心就是你,你要把各方的真实的意见汇总,然后再决定应该怎么去做,这一点很重要。你很重要的一个工作就是听别人说然后拿出自己的想法去解决。

发挥每个项目成员的作用

一个好汉三个帮,任凭你个人能力再好,也有你顾及不到的时候,所以项目组里一定要有能够支持你和积极配合你的哥们,在更多关键的时候他们给你的提醒会让你避免很多错误及能够及时的帮你解决很多难题。同时要认真的对待每一个成员给你的建议,即使是很蹩脚的,因为每个人提出来的建议总是有他提出来的理由。

IT团队管理之项目经理


我和大部人从事IT的人一样,毕业后第一份工作刚开始也是从事软件开发,说得简单点就是程序员,因为刚从学校出来,对这个行业都不懂,但是听社会上工作一两年的人都说,做it要有职业规划。要先做程序员,到转到管理,于是我心里在想,所以我也有一个想法,就是以后要转向做管理。

后来我自己也从项目Leader,做到项目经理。

以前做程序员的时候,认为做项目经理或者项目主管只要在这方面做的时间长,经验丰富,别人遇到问题能解决就可以了,可是真正当我一步一步走上时,我才发现,原来并不这么简单。

刚做项目管理的时候,真的不知道要做些什么,因为我服务的公司不是一个很正规的公司,所以这方面的培训,也没有说教你说做项目主管应该做些什么,或者做项目经理应该做什么,后来我只有从网上找,朋友问,但是这些旁听来的消息,也不知道是真是假,半信半疑。

后来我也卖了一些这方面的书来看,想从中取经。

现在想想刚开始那段时间还真有一点难受,甚至有一段时间我在心里就想不做这个项目主管,让我做个程序员就可以了。

后来慢慢的,我们老总也给我很多帮助,也感谢公司里。net团队和flex团队的两位资深项目经理,他们也不断给我鼓励,给我帮助,让我慢慢的找到正确的路,让我慢慢知道项目经理应该做些什么,怎么样才算是一个好的项目经理。

现在回想起来,做一个项目经理应该具备以下能力:

1.用一句比较常用的话来说:上得了厅堂,下得了厨房。因为做项目经理的时候,难免会与客户打交道,也有可能与合作伙伴打交道。有的人出了公司,见了客户就发虚,底气不足,说话都很抖,让人爱给看扁了。有的甚至一见面就是哦,晕倒,哇靠之类的词就出来了,这样有个客户都会被你吓跑。有的也会很私文,气势都被对方压倒。我本人是07年毕业,到现在才两年多的时间,到现在为止面试的人员差不多有近百了,里面有研究生,有工作很多年的,我记得有一个工作九年的项目经理,能说会道,我和他面谈也很顺利,到面试完后,我才给他说,其实我是07年毕业的,他说真的看不出来。所以作为项目经理,在和自己组员打交道可以 随便点,但是和客户谈话,要注意分寸,有进有退,保持立场。

2.做事要目标明确,抓信问题的关键。不管和客户打交道,还是和程序员打交道,都要能快速的找到问题的关键。很多程序员遇到一个问题,不知道如何下手,其实只要点博一下,找到问题的关键所在,就能很快找到解决问题的办法。在有些场合要与客户谈判或者协商事情的时候,更要注意,更要能够快速找到关键的那一点,比如说人有时候都喜欢来两套,桌面上一套,桌面下一套,有些事在办公室谈不好,说不定到酒桌上就能谈好,但是要看对人,才能使对招,只有这样才能事半功倍。

3.项目经理要有推动力,也就是说你在你的团队,或者在你的谈判中,要能起到推动作用,把事情不断往前推进。让事情向前发展。这就和开会一样,一般来说开会都是遇到什么问题,需要开会来讨论,大家提会提出一些解决问题的办法,大家提出办法后,大家都在那里争论分析几种方法的优缺点,每种情况都有可能失败,都有可能带来损失,大家都不愿承担责任,如果让这种情况一直下去,我敢说他们会讨论几天都可以,这时就需要一个决策者来下结论,决定采用哪一种方法,然后快速的执行下去,而不是在那里无休止的分析。

4.要能承担压力。人遇到压力的时候,都会焦虑,而且有压力的情况下,思路可能会变得不清晰,有时候还会进到死胡同。这时候就需要一个临乱不乱的人,来支撑场面。如果头都乱了,那下面的人一定会乱。我个人认为我本人这一点是没有做好,以前有时候,项目收尾的时候,面对各种压力,比如客户的压力,程序员本身也有压力,还要面对老板的压力,要做到临乱不乱还是有一点难。

5.要有良好的回报心态。不管是在哪一个行来,不管在哪一个公司,也不管在哪一个职位,都要有一个良好的习惯,那就是回报.回报的意思,就是说你要向你直接领导报告你的实时情况,让你的领导随时能够了解你的进度情况,这样就算出了什么事,你的领导多少会有所准备。但是这都是在你回报的情况属实的情况下,我遇到的一个程序员就是每天给你回报说OK,可是真正当项目测试的时候,才发现什么都不OK,让我一点准备都没有。所以回报也一点属实。

以上是我自己的一点心得体会。其中也有些是我没有做好的,我也会在后面的工作中学习,改进,也提升自己。

大项目、小项目都是程序员成熟之道[1]


一下子就跨到了新年,时间真快呀!言归正传,今天谈谈项目问题。

我们常听到同行说自己做过什么项目,说某某做过什么项目。一谈到项目就会眉飞色舞,兴高采烈。而不少新进单位的新大学生、一些编程新手,往往不知道什么项目,不知道项目与自己成长的关系,有的甚至声称编程好几年了,还都没有做过项目的经历。情况确实如此,只有参加过项目的程序员才是真正的程序员。那些没有做过项目的虽然自己编制了不少程序,虽然得意过自己的程序,但是,毕竟和做过项目的程序员有很大的差别,这些差别主要在于:

1、 程序的价值

没有做过项目的程序员,编写程序的目的主要是学习,通过编程来提高自己的编程能力,编啥、怎么编都由自己主观决定,自己能做什么不能做什么都不是太清楚。至于程序能否被别人使用,程序能否卖出价钱,程序员并不太关心。

做项目的程序员则不一样,他编写的程序不是用来学习的(尽管他是抱着学习的态度参加项目的),而是作为商品的一部分出售的,编出的程序要投入日常运行的。他别无选择,必须完成程序功能。程序员的价值通过程序出售的价格以及程序使用来体现。

2、 程序的时间要求

没有做过项目的程序员,编写程序的时间长度是由自己决定的,自己高兴什么时候编好就什么时候编好,遇到其它事打搅,拖个十天半个月也无所谓!

做项目的程序员则不一样,他必须在规定的时间内完成编程,只能提前不能延后,否则整个项目进度就会被它拖后腿,而由于项目延期不能按时交付给客户,其结果就有可能因延误被罚款,甚至取消项目。

3、 团队

没有做过项目的程序员基本上是单枪匹马地编写程序,程序功能相对简单,一个人多花点时间也能完成。

做项目的程序员则成了项目组的一个成员,他只是负责整个项目的一个部分,或者说只编写其中的一段程序,而不是全部。因此,他的程序必须要和其他人编制的程序对接、他的程序必须读别人的数据,他的数据也可能被别人读。这里的每一个环节都不能出错,一个地方出错就会影响整个项目。所以,他必须和团队的其他人很好协作共同来完成自己的程序。

4、 学习氛围

没有做过项目的程序员学习靠自学,靠网上google去学,学的内容随意性很强,学好学坏没有人监督。

做项目的程序员不但靠自学、靠网上google去学,还必须向项目负责人去学、向项目组其他人去学、向客户去学。而且学的东西都有针对性。向项目负责人去学习程序设计详细方案、向项目组其他人去学习程序接口、数据接口、向客户学习业务及需求等。程序的好坏要通过测试环节和用户使用加以验证。

所以,通过参加项目程序员可以克服自以为是的错误观念,树立为客户编程的思想,以软件销售价值来衡量自己的价值;树立团队意识,把自己融入到团队之下中,以团队荣为荣,以团队耻为耻;在项目中学会从大局看待程序设计、学会评判程序难易之处,学习更加实用的程序方法和算法。

那么是什么项目?这里所指的项目可能和一般的项目定义侧重有所不同。这里的项目一般是指客户提出需求,软件公司或企业内部项目小组按照需求进行设计、开发,投产、维护等工作的总和。它只包含软件相关的费用,其他硬件、网络、软件环境费用不在此考虑之列。

项目是有大有小的,有的大的项目以亿为计,有的小项目以千而计,千差万别。由于没有标准,不同的人对项目的大小定义是不同的。例如,有的企业把一百万以上的软件称之为项目,把1千万以上称之为大项目。有的小企业把1万元以上的软件称之为项目,把5万元以上称之大项目。这些项目大小主要取决客户对资金管理范围和等级,一般而言,项目越大,需要单位或企业越高的领导层批准。

大项目、小项目都是程序员成熟之道[2]


而我今天说的项目大小是从软件项目本身来确定的,与客户对项目大小的定义没有什么太大的关系。我认为项目大小可以从以下几个维度去考虑:资金、开发人月、项目复杂度。

1、 资金

我认为在当今物价状态下,5万以上50万以下为小项目。50万以上为大项目,500万以上为特大项目。

2、 开发人月

同理,2.5个人月到25个人月以下为小项目。25个人月以上为大项目。

3、 项目复杂度

软件项目的复杂度还可以用软件的用户使用人数、数据库中表的数量、表的记录数来衡量:

软件使用人数:10-1000人为小项目,1000人以上为大项目。

数据库表的数量:20-100张为小项目,100张以上为大项目。

表中的记录数:10万-1000万为小项目,1000万以上为大项目。

此外,项目运行能够给客户带来的收益大小、项目的业务逻辑的复杂度都可以成为项目大小考量的内容。

如果项目都不能达到小项目的水平,我们这里就不把它看作项目了,因为低于小项目的项目很多是个人编程,这与项目众人参与的特点有点不符。

所以我对程序员的建议是:

1、 要主动参加项目

无论大项目还是小项目程序员都要努力参加进去,因为只有做了项目自己的能力才能提高。不要静静待在那里,等待别人挑选,而是积极主动表示加入项目的愿望。在我负责过的项目过程中,我对主动要求加入项目的程序员往往给与更多的机会,因为这样的程序员具有主动性,工作更好开展。一个项目的出现就是一个机会的出现,把握项目就是把握机会。机不可失,时不在来。

2、 不要放过小项目

程序员不要以小而不为,只有做过若干个小的项目后,程序员才能去做大项目。那些想一步就做大项目的程序员,往往会失去小项目锻炼的机会,往往参加到大项目后,感到力不从心。项目虽小也同样可以锻炼人,程序员可以有更多机会体验项目负责人的脚色。学会从整体角度上来看待编程。

3、 要积极准备参加大项目

对于已参加过小项目的程序员,一定要把握机会,积极准备参加大项目,项目越大,越锻炼人。在大项目中要学会摆正自己的位置、虚心向团队其他成员学习。要在平时没有项目的时候,要多做些技术准备,多关注可能的大项目开发内容。在项目开发中,则可以把重点放在体会不同功能模块之间的关系上。学会从关联的角度上看待编程。

根据我的经验,我认为程序员要经过5-6个小项目的锻炼才能入门,而经历了3个以上的大项目的程序员才开始成熟。当然我们不能排除程序员的天才成分,有的程序员会再很短的时间达到一个很高的水平。但是,绝大多数程序员成长是必须通过项目来催化的,尤其是大的项目催化更加重要。说白了,项目如同阳光,程序员如同禾苗,关系就是那么简单。

合格程序员应该具备的12种能力[2]


4.利用工具能力

工欲善其事,必先利其器。有了趁手的家伙,工作效率可以提升数倍。你编程序,有没有选择一个很好的IDE,以前听说编程高手都用记事本写程序,我觉得那是一种自虐。就像以前看到的一篇文章,说一帮户外旅行爱好者,出去旅游,背了重重的旅行包,里面装着什么压缩饼干等快速食品。他们宁可就着矿泉水啃压缩饼干,也不肯去1里路都不到的快餐店,农家菜馆吃饭。工具是为目的服务的,好用,提高效率就行,形式无所谓。

另外一个常用的工具就是日记本,好听点可以称为知识管理工具,我用的是myBase,感觉非常好用,在之前,我的所有的片段内容都是记录的单独的文本文件里的,非常不好找,管理也很混乱。

经常上互联网,看到好多好的资料想保存下来,作为日后查看之用。一开始,我用的是firefox自带的书签,但是自己分类太累,多了之后不便于查找,很麻烦。后来用了插件,非常方便,现在成为了我必备的一个工具。

还有一个最重要的工具就是搜索引擎了,我装了google for firefox插件,感觉不错,还有英文翻译功能。按照我同事的说法,内事用baidu,外事用google。很多技术资料都是英文的,用google搜索效率高一些。搜索引擎用好了,就等于打开了一扇通向知识宝库的门,使用搜索引擎,关键字选择很重要。

经常去浏览大牛的blog,逐个网站访问很麻烦,去看了又可能没有更新,可以借助于RSS订阅工具,我是用iGoogle桌面工具,每天早上花半个小时扫一下,大牛的最新文章尽收眼底了。

5. 英语能力

新的技术资料都是英文的,英语国家的IT技术走在我们前面至少10年(这是我自己估计的数字,可能正在缩小)。就连印度,一个连基础设施建设都不太完善的国家,因为其英语基础较好,其在软件外包领域的发展也非常迅猛,远远超过了我们。学英语,首先是有信心,其次就是花时间。多阅读英文资料,贵在坚持。

6.学习能力

在IT业混饭吃不容易,整个环境进化的太快,你不学习,就等于落后了。学习要有针对性,别今天学ruby,明天学python,后天php的。首先要认清自己的目标,自己短期目标是什么,1年后,3年后,5年后的目标是什么。结合这些目标,确定自己的学习计划,人的精力毕竟是有限的。当然,多掌握几门编程语言也是好的,可以扩充自己的知识面,重要的是为自己的目标服务。

要想系统的学习一门技术或工具,看书是最好的方法。看完后,然后上网找相关资料,进行深入学习。学习要抓紧一切可以利用的时间,比如电脑启动要花1分多钟,旁边放一本书,可以看上几页了。公交车上,地铁上也可以看。

当然,不能只学习技术,要经常练习自己的软技能,比如沟通能力,表达能力。你可以把自己学到的东西,解释给自己的同事听,既加深了理解,又增进了同事之间的交流。学习的最高境界就是你能够把学到的东西解释给别人听,这才说明你理解了。在学习心理学上,称之为构成主义。

我学一样东西,总是先上网了解有没有相关书籍,如果想学,就买一本或者去图书馆找相关的书来读。我买的书,家里快放不下了(到目前位置,我买了1万多块的书)。我多半是把目录看完,了解这本书讲解的主要内容,然后需要的时候,我就可以立即补充它进入到我的知识结构。每个人可能都有自己的学习方法,意识到学习的重要,并能够根据需要补充自己的知识,这种能力更重要。

合格程序员应该具备的12种能力[1]


毕业四年来,感觉自己也是从一名不合格的程序员一步步走过来的。回头反思一下,合格的程序员有很多标准和要求,下面是我总结的一个合格程序员应该具备的12种能力。中国软件行业的崛起,靠的是合格的程序员。任何华丽的管理制度都不能保证软件项目的成功交付,合格的程序员就是有力的保证,是项目成功的基础。写下这些,是为了给刚刚进入程序员这个职业的新同学们一点参考。我一直以为,当程序员是很辛苦的,如果不是真正的喜欢,很难坚持下去。如果真的不喜欢这个职业,也该尊重这个职业,尊重自己,赶紧改行。

1. 编程语言能力

不用多说,作为合格的程序员,精通一门语言是必须的。这种精通,不是说看了一本《24小时精通XXX》,抄了几个程序就能说精通的,要靠长时间的积累和浸淫。

2.编码能力

我曾经看多很多程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母的。就像一个菜市场,杂乱无比,估计10天后,他自己都无法看的懂。遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严重性。随意堆砌网上搜来的代码,根本不管可读性和可维护性,只要能实现功能就行了,心想做完这个项目,就拍拍屁股走人了,缺少最基本的职责素养。我经常把代码必须成程序员的孩子,你就是是孩子他爹,孩子他妈,是有感情的。对你自己的孩子,你能不仔细呵护吗?你是称职的父母吗?

另外一个就是注释,要注意不是为了注释而注释。对类,以说明职责为主;对方法,以说明意图为主;对方法体,以说明实现思路为主。对于大段大段的代码,要分段,使用空行隔开,并使用行内注释进行说明。

思维的条理性,写代码之前,先简单计划一下,用自然语言把流程写下来,用于整理实现思路。不要看了需求或设计之后,马上就敲代码了,敲完代码马上就debug。花点时间思考,敲代码只是最后一个很简单的工作,不要把自己变成一个代码打字员,编写边想,写了删,删了写。安安静静把实现过程想清楚,在脑子里先实现一遍。再去敲代码,水到渠成。

3.面向对象思维能力

如今,多数编程语言都是面向对象的编程语言。而这些面向对象的编程语言的共同的精髓就是面向对象的思想。掌握这些比面向对象语言本身更重要,比如对继承,多态,重载的理解。对面向对象基本原则的理解,比如开闭原则,接口隔离原则,单一职责原则等。在此基础上,应该掌握常用的设计模式,比如工厂模式,策略模式,观察者模式,模板方法模式,命令模式等等。我面试过很多程序员,没有一个能说得上几句的。

合格程序员应该具备的12种能力[3]


7.创造能力

普遍认为,东方人模仿能力很强,但创造能力差。我见过很多这样的程序员,经常说,这个只能这么解决了,我想不出有什么别的方法。可能他根本都没想过别的方法,或者懒得去想。对任何一个问题,找出两种以上的解决办法都是非常容易的,简单的google一下,可能就是数十种。悲哀的是,有些程序员经常止步于自己构建的狭小领地之内。对待客户也是这种态度,不是积极的帮助客户解决问题,而是推脱这只是唯一解决方案。

打破这一思维定势的首先的一个办法就是在面临一个问题时,首先想到的是没有不可能,或是一切皆有可能,前面那个是阿迪的广告语,后面是李宁的。只有这样去想,才能寻找解决问题的别的出路,即使最后我们试了很多种办法,还是只有着一种解决方案,但我们在这种寻找解决方案的过程中,常常会产生很多好的想法,这样才会使我们真正深刻思考一个问题。

但我认为,坚持认为存在另一种解决方案的信念是第一位的,方法和工具都是其次。

8.文档能力

也许有人会质疑,程序员跟写文档有什么关系。大家开源软件也用过不少,看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他么的tutorial,他们的getstarted,他们的reference文档写的多么的易懂。其实写代码也相当于写文档,只不过用的是编程语言。同样,写文档,用自然语言,也相当于写程序,简单明了,清晰易懂,这样的程序谁看谁舒服。同样,对于想进阶到设计师或者需求分析员角色的程序员,文档能力更是非常重要。

word是一个最实用的工具,很多程序员,多级编号都不会用,索引目录也不知道如何生成,更别灵活应用样式了。很多排版都是所谓的dirty work.垃圾样式一大堆。其实,静下心来,稍微学习一下,就能写出一篇格式漂亮的文档。

9.抽象能力

抽象能力是认识事物从现象到本质的能力。如果你只是停留在见山是山,见水是水的层次,客户说什么,你就做什么,设计怎么做,你就怎么实现,从来不过问为什么,也不去想他是满足了用户哪些方面的需求呢。这样可能只解决了表面的问题,可能会引起返工。认识到本质,才能让你的程序具备更大的灵活性和可扩展性。在做企业应用软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。

10.代码评审能力

代码评审和单元测试是保证代码质量的两种常用手段之一。代码评审能力,说明了你的审美标准,知道什么是好的,什么是不好的,什么是优雅的代码,什么是糟糕的代码,你才能让自己做的更好。

11.单元测试能力

没有单元测试的代码,只能说是半成品。因为没有什么能证明你的代码是可以运行的。测试驱动开发是一个非常好的敏捷过程的最佳实践。单元测试还可以作为回归测试,在修改代码时,起到警戒线标志的作用。是否具有单元测试的意识是区分程序员是否合格的重要标准。写不写单元测试是区分平庸程序员和优秀程序员的重要标杆。

12.DRY

DRY是一种原则,就是Don't Repeat Yourself。这条原则可以用到很多地方,比如你经常要编译,打包,部署应用程序,供集成测试用。每次你都在重复你自己,写一个自动化脚本(比如用ant,批处理命令)来将这些工作自动化,以提高效率。

还有一个就是我们经常在不同的地方切换IP,如果每次手工做,也非常浪费时间,写一个bat命令可以解决,找一个小工具也可以解决。

编码时,对代码的copy复用也是在重复你自己,虽然拷贝过程很爽,但是维护一致性就要付出巨大的工作量,特别是将来维护的人不是你的时候,使用代码生成工具可以解决这个问题。类似的例子太多了,如果你发现你经常做一些重复的工作,就要警惕了,是否违背了这个原则,想一些办法将他们自动化。

何谓程序员?何谓中国的程序员?


程序员,曾经是很多人尤其是计算机初学者为之崇尚的一个职业,仿佛就是理想、激情和事业的象征,从此就开始了IT白领人生。计算机技术发展之初,几乎就是一个个人英雄主义时代。一个天才的程序员,几乎就可以主宰一个计算机时代,创造出无数奇迹和梦想。

今天,计算机技术的发展日新月异,技术朝着愈加复杂和简单的两个看似矛盾其实一致的方向发展。计算机技术越加普及,无数非计算机专业的人群,出于爱好或者生存的需要,也加入了这个程序开发大军,并且都称之为程序员。

软件技术的发展,已经进入了一个大分工、大整合的时代,由此导致了软件开发工作的分层和分类越加细致复杂,同为程序员,彼此之间工作的技术含量可以说有天壤之别。系统软件、应用软件,是一个大的分水岭,几乎大多数程序员,都在应用软件这个层次进行开发,国内的程序员更是几乎全部如此。

既然是应用软件,就必然要和实际应用结合,而实际应用,是非常复杂多变的,尤其是具有中国特色的国内应用。于是乎,大多数程序员都在为开发应用层面的软件忙得不亦乐乎,财务软件、ERP、CRM、OA等等,几乎成了国内软件开发的主流方向,更不用说电信、石化、铁路、电力等具体行业应用软件的开发了,这些早已被称为项目了。国外的应用软件,除了以上业务应用之外,尚且还有像CAD、3D等专业领用的软件,具有一定的核心技术。

很多工作了多年的程序员们,在回首往事的时候突然发现,自己依然是一个辛苦的打工者,一个IT行业的苦力。反思一下,我们这些自认为程序员的工作者,其实是在核心技术的外围做一些表面工作,和那些非软件开发人员相比,我们觉得自己有技术,其实我们到底掌握了多少核心技术呢?现在的很多程序员,连数据结构、编译原理、操作系统等这些基本的知识都掌握得模棱两可,天天跟着老外的屁股后面追捧所谓的新技术、新框架。其实,又有多少是我们自己的呢?作为JAVA程序员,经常听到很多人自称精通Spring、Struts、Hibernate等主流框架,并有大型项目的开发经验,其实我们只不过比那些初学者多干了几年,使用这些框架更加熟练而已。国内软件行业的面试经常有此类现象,一个面试者可能这次面试不合格,但是他回去看一下书之后,再来面试,很可能就通过了。为什么?因为我们的面试太初级,太表象化。

我们经常接触IBM、微软等公司的面试,他们一般情况下是不会考核面试者具体掌握了什么框架、什么语言的,一般都是考核的面试者最基本的逻辑思维能力和分析判断能力。这也说明了,同为程序员,其间的差别是如此之大。

作为一名程序员,尤其是国内的程序员,应该对自己有一个清醒的认识,不要被表面的感觉所迷惑。到了这个时代,不是说程序员已经失去了光彩,而是我们所从事的层次,技术门槛已经大大降低,很多人处于同质化竞争。

怎么办?很多人说软件行业是个辛苦活,国内的很多软件公司更把程序员当牲口使用。其实,根本上还是怪我们自己没有很好的反思和调整。一方面,如果对技术真的有浓厚兴趣和激情,那就不妨向软件的底层核心技术迈进,另一方面,如果觉得自己真的缺乏这方面的潜力,那就努力适应国内环境,实现技术与应用的完美结合,争取向公司的中高层发展,如果不给与机会,那就自己创业,选择好技术和市场的切入点。

此外,一名优秀的程序员,一定不能是一个唯技术论者,如果持这样的观点,即使专心做个技术专家,也会存在发展障碍。微软的例子,sun公司的例子,都生动地说明了技术与市场的辩证关系。

当然,每个人的成败观是不一样的。如果始终把技术追求放在首位,追求技术完美的境界,并以此为乐,也未尝不是一道美丽的风景。

程序员你真的只是程序员吗[1]


你是不是感觉标题有点矛盾啊,是啊,程序员当然就只是程序员而已嘛,还会有其他什么吗?

No,No,No,如果你以前是如此认为的,那看完这篇文章后,请从此打消这个念头,因为你要改变成一个不一样的程序员(怎么还是程序员?)

虽然我工作经验也就6年左右,但经历了很多,也自己创业过,也是从一个初级程序员走起,因为看的比较多了,某些东西也普遍存在着很多程序员身上,希望自己的经验能帮助你们。

当刚踏入程序员这条路的时候,有幸为一家公司开发一个大型的电子商务网站,因为这篇领域当时还算刚刚起步,自己的编程能力还不太好,所以做起来就比较吃力,每天重复着做完PM给的工作,但是做了大概几个星期,我发觉某些地方真的不合理,但自己又仅仅是一个程序员而已,怎么办呢?我还是按照PM的任务一步一步来做,私下里我用了大量的时间去尝试着我的做法,在接下来的几个星期,我试着跟我的PM进行沟通,他也发觉不错,所以一并写了方案提交给上级领导,很好的是,我们的领导发觉建议还不错,所以改变了原先的策略,对我们的网站原先的设计进行了彻底的推翻,一套新的理念就此诞生了。

这只是一个小例子,并不是炫耀自己的能力,我只是想说,程序员,你其实不仅仅是worker,更应该是Ideaer。当你选择程序员这条路时,如果你仅仅为了工作而选择的,我想你的人生真的很灰暗,为什么这么说呢?我面试过很多人,大多都是从培训中心出来的,虽然我也是从那里走出来的,不过我当时是为了学习编程而去培训,但现在更多的人会为了工作而去培训。其实如果你是真正的选择程序员这条路,我想你的思维能力一定不错,因为一般程序员大多是理科出生,理科靠的就是你的思维能力,在某些时候或许你的思维还不够敏捷,但我知道,每个人在接受了一段时间的工作后,就会产生各类的想法,或许某个想法你会改变你公司的命运,可为什么提出观点的人就寥寥无几呢?

我想可能是因为性格吧,因为很多程序员都是内向型,因为我们需要花一定的时间,去沉醉在代码中,因为这是一个奇妙的世界,无法自拔,所以很多时候就忽略了沟通,因为我们打交道最多的是abcd。如果你正是如此,希望你快点走出来吧,分清楚何时沉醉,何时交流才是最好的。我的偶像-唐骏,我看过他的访谈,他在大学时还是一个不会沟通的人,只是偏执于技术,而且和大多人一样,都会觉得自己什么都会,什么都行,是个天才,但在他大三的时候,他意识到了错误,花了几年的时间去学习交流、沟通,在宁愿委屈自己进入微软做程序员,再到无数次发意见给Bill,一步一步成就了这位打工皇帝。

所以,我们每个程序员要做的是,技术和沟通并行提高。在唐骏的话中,我会学到很多东西,他能从容应对每一次挑战,当时有幸成为唐骏的下属,见证过他的能力,虽然他当时只是个技术总监,但他的想法、创意给盛大带来了无比的利益,我不得不佩服他的胆大,不得不佩服他的能力。从他身上还学到了专一,其实很多程序员会在编程的道路上三心二意,这是很正常的,不过我相信一段时间以后你会学会专一的,因为程序真的很美,带来的不仅仅是工作和薪资。

我这里又不得不批判一些年轻程序员了,他们仅仅看中的是工资、福利等,没错,这是考虑工作的一点,但你要知道,有些时候,你第一点的工资,或许你会学到更多的东西呢?我经历过很多,经历过1年工资翻几番,又经历过折一倍,又经历过小公司,又经历过大公司,各种各样看的实在是很多,但我不会说我自己半途而废,因为每次我会把事情做的觉得自己可以了,我才会选择更好的发展前景。我面试过一些人,工作也就2,3年,做过的东西也很多偏向于OA、ERM等项目,就觉得自己很了不起了,工资也是漫天要价,可真正面谈的时候,我才得知,你仅仅是其中的一个小模块,但当我问其项目的整个运维的时候,就会楞个半天,最后来一句,这个模块不是我负责的,敷衍了事。那好,我问你自己负责的模块,如何具体写的,用了何种方式等,基本都会回答,三层架构,什么什么,My god 三层架构是你一个模块就能体现的吗?那好,既然你说三层,何为三层,三层的优点,缺点在哪里?诶~~~~~前几天首页那篇批判大学生的文章,我觉得写的太好了,你们这是在沉醉吗?如果你不喜欢,你为什么非要选择程序员这条路呢?

如何从优秀的程序员成为伟大的程序员[2]


4、对代码的信任

作为项目管理者,你怎么相信他们的代码。有些程序员,你可以对他们说:我星期五就要结果.--星期五到了,你收到了这样的Email:代码我都已经检查过了,现在就等着测试了。你很放心,只会有很少的瑕疵在质量确保的团队被查到。当然,还有些轻率的例子,一些程序员在邮件里是这样说的:我还没弄完,星期一上午我会最先完成它.你不太确信这东西,发现很多Bug,很长时间基本上不能用。又得花上几个星期清理代码中的Bug.

关键:你对一个开发人员越有信心,他离成为一个伟大的程序员的距离就越近。想象你是你的管理者,如果他并不担心你的代码,会给你多少信心和勇气!

5、对方案的信任

和对代码的信任是一回事--如果你手上有伟大的程序员,你就会对解决方案有信心。这些程序员同时也是伟大的建筑师。他们剖析整个问题,指出问题需要怎样去解决。这就不只是用伟大的代码编程的问题了,很大程度取决于你怎样构筑解决方案。这是关键,而且会让你在软件世界里出类拔萃。

6、满足客户需求

一天下来,你写出了最棒的代码、用了最好的框架和最好的解决方案,但这真的能迎合用户的需求吗?恐怕根本不是那么回事儿。你搞砸了。尽管现在多次失手,一个伟大的程序员还是会正中靶心,找出客户需要的,给用户逐步展示他们所需要的无bug的最终版本。需求正中靶心的同时,用户满意了。

7、不断升级

伟大的程序员会积极主动地把自己的技术升级。他们对知识的态度就像饿猫见着了牛奶,他们从不用上级催促给自己设定目标、不用经理要求他们完成任务,因为他们自己就已经安排OK了。

他们发现自己想要参加的大会就会给公司写Email本人非常想参加今年的Tech-Ed大会。我将用心研习,并对作出贡献。我预计这可节省金钱/其他原因.如果可行,不知公司是否帮我支付此行?如果我收到这样的邮件,我不仅会帮他支付参会费用,他的路费我也会全程买单。

伟大的程序员们永远会关注例如。net用户组或Java用户组的所有用户群体。他们参加本地的技术会议,并从中汲取知识。你会看所有最新博客和最新的杂志吗?现在列出你最喜欢的前5个开发博客。你能做到吗?你应该像参加基督教青年会那样轻松做到。做到这些,可以很好的帮助你延伸你的思路!你将会不断获得更好的点子!你会得到更好的回报!

如何从优秀的程序员成为伟大的程序员[5]


15、组织技巧

把所有事情整合在一起的最关键要素是组织。你可能是世界上最好的程序员,但如果你不善于组织你所做的事儿,你的工作将陷入瘫痪,最终丧失优势。伟大的程序员保持自己工作平台的整洁有序,保留所有的笔记并调理清晰。他们标出自己的会议日程表。他们有专门的收件箱给日程邮件、会议和新任务分类。他们保留文档并能在需要时迅速找到所需。

额外要提到的:激情

伟大的程序员如果没有热情,那么他的工作也并不伟大。好的程序员有了热情来对待他的工作、方案和团队,那么他比伟大的程序员还要伟大。

在回顾的时候,我用这些标准来评判我的开发团队。我给我的团队尽可能最好的环境,作为回报,我想要他们都成为最伟大的程序员。你可以用这些标准来评判你的团队,或者你本身就是一名程序员,请用这张列表来尽可能地改造自己来超越同侪。

备注:Generics是程序设计语言的一种技术,指将程序中数据类型进行参数化,它本质上是对程序的数据类型进行一次抽象,扩展语言的表达能力,同时支持更大粒度的代码复用。对于一些数据类型参数化的类和方法来说,它们往往具有更好的可读性、可复用性和可靠性。在设计集合类和它们的抽象操作时,往往需要将它们定义为与具体数据类型无关,在这种情况下,使用Generics就是非常适合的。

IBM Rational总经理谈程序员生涯


上周应邀对IBM软件集团大中华Rational总经理夏然先生进行了专访,期间谈到两点有关程序员职场发展的话题。

新丁

程鸿:现在很多学软件开发的毕业生都反映就业困难,从学软件开发到掌握软件开发技能是否必然需要一个过程?对于他们您有怎样的建议?

夏然:我读研究生的时候,有一年的时间出来跟企业合作。其实是一个大公司的项目外包给学校,学校再安排六七个实习生来做;学生通过完成项目获得学分,学校也从企业那里获得一定的赞助。类似的实战现在各个高校也有,这种方式对于培养实战经验非常有效。我也是做软件开发出身的,这些对我们那时候有非常大的帮助。

在美国,很多读软件开发毕业之后也会选择自己创业。自己创业可能成功也可能失败,但是会给自己非常强的动力,而且创业阶段吃不饱穿不暖的感觉是宝贵的人生财富。

在我眼里,大学毕业之后的软件开发人员需要至少六个月的时间才可以在实际的工作中上手。在我担任IBM开发经理时,见过许多这样的人才。

老人

程鸿:很多人讲程序员通常干到30岁就不行了,不能上管理岗位就只能转行,程序高手再强也不能做一辈子。对此您怎么看?

夏然:真正的程序高手不是那些自以为很了不起,很年轻,很聪明的人,这种人有时候连个合格的项目工程师都做不成。从一小块做起,到负责越来越大的部分,再到最后参与整个项目的架构,30岁的时候能做到这样就很厉害了。

单打独斗的年代早已过去,一个真正的软件产品,一个人是不可能做成的,甚至五十个人也是不可能做成的,往往需要几百人、上千人,花至少六个月到一年的时间才可以做成。对于一个开发者来说,一层一层做产品架构,做QA,参与软件流程的制定,足够丰富的经验是必不可少的前提。

IBM有许多主管开发工作的程序高手,他们一年也写不了几行代码,但是他会看产品如何发展,企业如何往前走,这才是企业灵魂的人才。

以上《项目经理眼中的合格程序员》一文,由编辑精心撰写而成,希望对您的职业规划有所帮助,更多精彩请访问“项目经理的职业规划”专题!

相关文章

最新更新