7.项目管理
好了,由于此系列的名字定义为程序员如何成长,如何进阶,那么能读到这个时候的,基本上应该是希望能够进阶的中级程序员了。
那么我所说的内容就不能太初级了。
我们回到中级程序员的特点上来,也就是看看什么样的程序员算是中级程序员。
对于这个中级程序员的定义,我觉得国家考试中对他的定位是不准确的。我们的有证的等级考试不能完全描述一个完全水平的中级程序员,因为原本人家定义的这个“中级程序员”不是应试教育的结果,就是从外国抄来的,与我们的国情下的中级程序员就不匹配。
让我们重新梳理一下中级程序员应该具备的素质条件:
- 中级程序员应该精通一门编程语言,这里说的精通,并不是能看懂别人写的东西,而是能够使用这种语言编写工作中遇到的绝大多数的项目内容。而且能够解答使用这种编程语言开发项目时自己和初级程序员遇到的各种问题。
- 能够完成一个项目中独立模块的设计、开发、集成、测试、维护、数据处理等相关能容,注意,是独立处理!不需要项目经理或者更高级的程序员介入的!
- 具备技术管理能力,能够移植已有代码在不同项目之间的应用,对项目模块的健壮度有一定的控制力,能够控制、安排、指导手底下初级程序员的工作,必要时能够替换他们的岗位;
- 沟通顺畅,能够与负责其他模块和资源的,包括测试人员顺畅交流,提出意见和建议;
- 具备资源管理能力。
基本就这样了。
在神州,这样的程序员才是大量的存在,其实我们可以在软件公司看到他们忙碌的身影,回过头来对对看,光通过国家中级程序员考试的人,未必能够胜任这样的工作。没办法,这是我们的国情决定了的。
那么作为这一部分人,该怎么寻找未来?难道做了五六年了,还要在程序员的位置上继续下去?我碰到的人给我说过他的迷茫。
那么我就在这里提出我的意见吧,或许不是很合适,但是希望给大家一个思路。
按照正常的思路,其实这一部分的朋友都是向着高级程序员方向走得,对于高级程序员来说,其要求基本上我们前面已经说过了。
这中间有一个名词很引人瞩目——系统架构师。
同样,我们不要用考试中的系统架构师来描述我们现在的职位,我们面对的实际职位,会远比那张纸要复杂得多。
这个职位应该是走技术路线的程序员的峰顶了。
有人说CTO,CTO也是这个职位描述范围内的人。
他们挥斥方遒,他们吞云吐雾……
但是那个在每个公司要的职位是有限的……
所以,最实际的目标,还是先到高级程序员阶段吧。
那么,怎么到高级程序员?
其实弹出这一步不难,先学习项目管理。
我前面说过高级程序员需要具备的能力,那么在这里说怎么达到高级程序员高度的能力时,所需要的东西就是反的。也就是说,这是你要考虑的不要太复杂,只需要考虑一下做好一个项目的管理需要怎么做?按照你的思路去做,好了你自然会想着高级程序员的阶段大步迈进了。
在我看来,最简单的思路,就是把上面列出来合格中级程序员需要完成的事情给它扩张一下:
- 中级程序员应该精通一门编程语言,这里说的精通,并不是能看懂别人写的东西,而是能够使用这种语言编写工作中遇到的绝大多数的项目内容。而且能够解答使用这种编程语言开发项目时自己和初级程序员遇到的各种问题。====》精通两到三门语言,能够用着两三门语言解决各种问题。
- 能够完成一个项目中独立模块的设计、开发、集成、测试、维护、数据处理等相关能容,注意,是独立处理!不需要项目经理或者更高级的程序员介入的!========》能够完成多模块的……………………========》能够完成一个项目所有模块的……
- 具备技术管理能力,能够移植已有代码在不同项目之间的应用,对项目模块的健壮度有一定的控制力,能够控制、安排、指导手底下初级程序员的工作,必要时能够替换他们的岗位;======》能够管好一个项目,并能把控公司不同项目之间的差异,制定合理的框架来开发不同的项目,在公司技术架构方面拥有发言权
- 沟通顺畅,能够与负责其他模块和资源的,包括测试人员顺畅交流,提出意见和建议;======》谁不服我,怼他!还能怼胜。
- 具备资源管理能力。============》公司资源只有我门清,都是我安排的。
哈哈,看到了么?这里面我们充分体会了一个道理:量变会引起质变。
当你的掌控能力足够的时候,你自然就能从中级程序员跃升到高级程序员。说白了,中级程序员到高级程序员就差一个量的关系。这个量是经验,也是知识体系的框架话。当一切困难被你踩在脚底下的时候,你会发现你在公司内已经站在技术山头上了。这时候,即便你不想、你没有那张纸,你也是公司的系统架构师了。
我曾经是学化工的,工厂里面有“总工程师”,他是副总级别的一个职位,就是从技术结构上全面把握厂子里工作的,同样,系统架构师在软件公司起到的作用也是从技术结构上全面把握公司里工作的,所以,他们是等当的一个职位。
但是,中间的困难需要你注意。
在这个困难上我前面说过,会有瓶颈。
瓶颈出现的地方在不同的人身上会有不同的表现,如果你觉得自己没有提升,那就要找找你自己的瓶颈在哪里。
我见过的瓶颈列表如下:
- 性格问题。有的静不下来,有的却是不爱说话,有的过于张扬,有的是过于不自信,性格决定命运,这句话不是我说的。
- 钻牛角尖问题。程序工作是一个需要问为什么的工作,但是这需要控制。怎么控制?请参考上一篇的60%~80%继承问题。有的东西你老去问为什么,不如先把它用起来,等你用到得心应手的,你才会明白这答案或许根本就没法回答。因为这些东西的边界很模糊,没有办法有一个清晰的描述能够说清楚。
- 心理对抗。有个程序员,我给他说,给领导汇报一定不要太谦虚,如果能把握好,回报自然没有问题,但是不能一上来就说还有很多问题。他不,一上来非要谦虚,说还有很多问题,领导一听就木了,直接很不留情面训斥:给了你们这么长时间,怎么还有这么多问题?
……还有很多。所以作为前进者,找到自己的瓶颈并努力突破它是让自己前进的目标!