当前位置: 首页 > news >正文

我的项目管理之路

俗语云“不想当元帅的兵不是好兵”、“宁为鸡首,不做凤尾”,这种传统的思想已经深深地镌刻在我们每一个人的心中了。走上项目管理 乃至管理岗位成了每一个 IT 人员的梦想,不能说这个想法错误,实乃大环境使然,我们暂且不表。然而如何成就自己的项目管理之路呢,且听我这个菜鸟说上几句。
 
程序员之路
本人文科出身,大学就读的是文理兼收的信息管理系,荒废了几年学业之后,到了找工作的时候,靠着学校的光环,无奈选择了一家航空公司的系统管理员;就我个人而言,也许读读文学,研习历史、书法绘画更是我的爱好和特长。
系统管理员更像是个打杂的角色,平日的工作就是和关系不错的领导吹吹牛,机型不能满足要求的事情打个报告申请机器,帮别人拆卸一下机器,安装一下操作系统和网络,维护一下应用软件(当然大多数时候还是得请教开发商了),与系统开发商联系协调开发进度和日程;当然我也做过几件漂亮的事情, 2000 年的时候在一个人的情况下为部门开发了一个基于 WEB 的业务查询系统(最古老的 ASP 和 Oracle ),然后根据当时的需要,做过一些 Powerbuilder 的外围业务系统;拿着一本 SQLServer 的书籍开始学习 Oracle 的征程,结果到最后也不过只是写写数据库 脚本和备份 一下数据库了。一晃眼过了三年,才发现自己一无是处,便产生了严重的危机感,不知道自己能干啥?当然也是年轻气盛在起作用,其实混下去应该比现在强多了。其实我从内心感谢我的第一位经理,虽然他不是做 IT 的,但从来都是平等相待的那种朋友关系,对于刚参加工作的职业人来说,还有什么比一位朋友兼上级更幸运的呢?
离职后又在一家国企下面的小公司做了一年, 2004 年碰巧 HW 和中兴南研所招人(之所以选择南京,因为大学四年在此就读),就赶过去面试了一把,很顺利,两个 Offer 都拿下了,在中兴的测试岗位和 HW 的研发岗位面前我选择了 HW ,事后证明也许是个错误。很简单的例子,虽然我 base 在南京,但是 2 年零 2 个月的 HW 日子里总共在南京呆了 8 个月(不过也确实帮我省了不少房费)。
2004 年 3 月到 6 月在深圳研发中心开发知识库模块,技术 Java (JavaScript,HTML,CSS,JSP,XML,XSL)
2004 年 6 月到 9 月开发深圳联通呼叫中心项目,技术 Java 和 Oracle 。
2004 年 10 月到 11 月开发广东联通呼叫中心项目,技术 Java 和 Oracle 、 Sybase (数据迁移)。
2004 年 11 月到 2005 年 3 月份开发广东联通呼叫中心数据仓库项目( SQLServer2000+Fenet )。
2005 年 3 月份到 2005 年月份开发广东(六个区域呼叫中心)移动呼叫中数据仓库项目( SQLServer2000+Fenet )。
2005 年 6 月份到 2005 年 9 月份开发河南移动呼叫中心数据仓库项目( SQLServer2000+Fenet )。
2005 年 10 月份到 2006 年 1 月份,支持各个联通局点 Oracle 数据库性能优化。
2006 年 2 月份到 2006 年 3 月份,开发浙江电信 114 号码百事通 WebService 接口以及浙江 11 地市数据迁移 (Java 、 Oracle) 。
2006 年 4 月份休整一个月离职。
在 HW 的日子里,被高压环境逼着学了很多东西,说实话我厌恶 HW 的生活,让我觉得除了老板的大口号,实在没有做人的尊严,没有生活的乐趣;离职后的两年断断续续新闻报道了几个人的不幸身亡,可 HW 始终否认是过劳死,我们又能怎么样呢,我们是弱者。在 HW 工作的人实在需要一个健康的体魄和过人的心脏。 HW 提倡“烧不死的鸟就是凤凰”,可鸟无论如何也成不了凤凰; HW 也不可能成长为 CISCO 和诺基亚之类的行业 leader ,一头土狼也许能战胜一头衰老多病的狮子,无论如何也战胜不了一头健康的狮子。
在 HW 的最后一个月,因为身体实在疲惫,我想了很多,已近三十,而我呢,却没有丝毫的长进,技术上都是一知半解, java 如是、 Powerbuilder 如是, Oracle 也如是;我自己的强项在哪里呢?是自己该转变的时刻了,也是该寻找自己生活的时刻了。想来想去觉得还是数据仓库,毕竟系统的做了一年的数据仓库了, ETL 、报表工具、数据库、 OLAP 自己虽算不上专家,却也还过得去;我弱在全面,可胜也在全面。感谢 HP GDCC 圆了我的梦。
对于程序员来说,我实在不建议您去这样的企业,因为这已经超出了一个正常人所能承受的范围——我们不能以年轻为借口以健康为代价,何况 HW 高薪资的时代已经过去了;不过我倒是建议先去其他通讯企业,然后再跳到 HW 去,也许您会有更高的起点。 HW 已经拥有数十万相关 IT 人的简历库了,如果您收到他的面试邀请时,请毫不犹豫地 say no 。
 
回顾与思索
2006 年 5 月份带着对 HP 的无限憧憬和尊崇,来到了上海 ;在最初的日子里十分的不习惯,就像一个被囚禁了很久的小鸟突然放飞了,反而无所适从;最不习惯的是整天要看很多的英文邮件,回邮件也要写英文;其次是因为项目比较少,留给自己的时间太多了,不知道该干吗,不做事情呢,怕 manager 有意见,做事情呢,不知道做什么,和 manager 沟通了几次,也借着和其他人了解的时间,才明白了外企的工作方式。才知道还有每年必须要完成的培训任务,才知道还有每个季度必须的和 manager 的沟通,才知道还有大量可以自我调节的学习时间,才知道这才是外企的人性化管理;为什么我们那些高喊着“牺牲自我成就大我的”、争当国际一流企业的民族企业就不能认真去学一学呢?
开始的时候我也不知道该学什么,就把部门配置库和公司内网上的文档资料阅读了一遍,其中包括大量的技术 (informatica 、 BO 、 Hyperion 、 Oracle 、 SQLServer etc) 和项目管理 ( 不同的项目开工会文档、总结文档、需求文档、技术靓点、解决方案等等 ) 资料,读完之后顿时觉得豁然开朗,发现原来自己过于沉迷于具体的技术了,并没有认真思考数据仓库的架构和项目管理过程;于是重新回顾原来项目中的一些实践过程和技术细节,把原来的实践和理论相互印证,把印证的结果写成文章输出出来,当发现自己的理论知识有限或者遇到坎的时候,又购买了一些书籍或者查阅网站,不断阅读和总结;要知道编码是学习,回顾是学习,阅读是学习,写成文章则是这三个学习的结合,是脱离技术细节、纯理论最终变成自己的知识的过程。然后把写出来的文章放到论坛上放到博客上和大家相互学习、讨论,不要怕错,只有批评和建议才能有更大的提高。
当然因为工作的缘故也还是学习了很多纯技术的工具,像 informatica 、 BO 、 Hyperion ,并且阅读了大量的 Oracle 官方文档,也接受了很多相关技术培训;其次通过很多内部培训甚至包括不同项目组的会议也大有裨益。
总的来说,经过几个月的学习和总结,感觉已经能够达到架构师的水平了。
很不幸,其间还是遭遇到过一次打击,有次到客户方谈需求,我尽量倾听客户的想法和讲解,可回来之后项目经理却不是我,直到后来那位兄弟才告诉我,在客户面前一定要表现的积极一些,可我当时的态度却是“慎思而少说”,也许当时我还确实不具备项目经理的资格,至少从心理上还不具备吧。
接下来就被派驻武汉做 IPCC 项目去了,估计是 HW 给我的阴影太深了,对这些始终无法提起兴趣来,百无聊赖,只好继续看些数据仓库和 Oracle 相关的书籍了,感觉看不下去了就开始阅读起一些项目管理、风险管理之类的书籍。这些书籍看起来确实很枯燥,都是硬着头皮读下去的,很难说自己到底理解有多少。不过还好为后面的面试倒是奠定了基础。
 
项目管理之路
我实在不喜欢 IPCC 的东西,可短时间又无法回去,只好另谋高就了。其实就我个人而言,我更喜欢偏技术一点, 类似系统架构师之类的职位,但我也相信岗位能够决定人的思维,换言之,把你放在什么样的位置上,自然而然就会考虑什么样的事情,不过这个转型需要时间需要一定的心理承受能力来转变,也需要一定的知识储备。一方面屁股决定脑袋,但是一方面机会是留给有准备的人的。
通过猎头联系了一家另外一家外资公司,我本来面试的是应聘的架构师,可是到手的 offer 却变成了项目经理,待遇也还不错,就这样算是正式进入项目经理的岗位了。
新公司的前两个项目是做需求建议书,其中一个台湾的银行项目比较有意思,包含了数据仓库、 EAI 、 ETL 、 Java web 和一堆的应用程序修改,目标是把所有分散的系统整合成一个新系统,但是又没人说得明白到底用户的明确目的,几乎把所有的知识都用上了,感觉还算满意,洋洋洒洒写了几十页,项目最终不知道是否拿下来了没有 … 不过这也是项目经理工作的一部分吧——支持售前工作。
第三个项目是个报表项目,是个大项目下的子项目,报表约有 100 多个,从讨论需求、报表分析设计、水晶报表解决方案、水晶报表和 Java 集成方案,报表展现和技术难题样例,包括最后的集成测试、数据测试,前后经历了 4 个月;日常工作主要是根据项目总体实践要求对现有的报表需求分析、设计、开发工作进行分配,对人力资源进行管理和分配,并及时跟踪项目进度和实际完成情况,纠正进度偏差。
这个项目应该算是一个相当完整的项目了,涵盖的整个软件工程的全过程,包括需求规格、需求分析、详细设计、开发、测试;记得刚开始接手该项目时,面对几个 team member 还有点胆怯,不知道怎么和他们沟通,甚至不知道该说些什么;后来逐渐的给自己在上午留出 1 个多小时专门去思考如何安排任务、跟踪开发进度,并及时修正偏差,这样才能做到心中有数,实际上开发的时间分配都是留有余地的,这样可以给 team member 一个比较宽松的环境,有利于自身的学习提高,同时也可以为突发困难留有研究的时间;因为水晶报表要和 java 进行集成,还专门写了个需求设计,并就这个解决方案与 java 开发人员进行讨论,逐渐发现自己和开发人员的思想越来越不太一致了,开发人员总是从纯技术的角度思考问题,无法从总体上把握,导致这项开发延迟了一周;项目经理的另一项重要职责是保障 Team 的稳定 ,尽量减少 team member 的流动性,这个时候要敢于拒绝上司的安排,很多时候上司总认为给你双倍的人就可以减少一半的开发时间,这个想法是严重错误的;最后项目经理要尽量充分意识到项目中的突发风险,当然包括人员和技术上的, java 和水晶报表的集成原来估计是 2 周完成,实际上的时间至少经历了四周以上,水晶报表的 java 接口实在太不成熟了,而且有太多的 bug 存在,不支持 Excel 导出,频繁的异常抛出,大量的报表错误,从这方面来说,项目经理也需要高超的技术经验和能够克服任何困难的信心。
另外说句不该说的话,个人认为报表项目应该在应用项目完成之后再做的,本身该应用项目的需求就不是很明确,需求从项目初期到将近完毕一直在变动,导致数据结构不断地变化,所以报表也在不断的返工,无奈人微言轻啊。
第四个项目是个系统评估项目,对客户已有的项目进行评估和整理。
总的来说,本人觉得做项目经理还是需要综合全面的知识,毕竟很多整体方案和架构甚至一些技术上疑难还是需要自己去做的,不可能当甩手掌柜,把困难留给 team member ,至少能够给下属提供指导意见。当然也要认清自己的工作本分,自己是项目的总体负责人,要对整个项目的进度、质量负责,进度则意味着成本和利润,质量则意味着效率,同时也会在很大程度上影响成本,甚至用户的信任;给自己的工作安排一个优先级,尽量避免落入具体的技术和编码细节以及其他的额外工作中。
对于自己来说,最大的不足主要是语言方面的;英语的听说读写能力自进入公司以来确实提高了不少,可是沟通还是有很大障碍;导致无法和项目的总负责人进行平等的交流。
 
外企和内企的项目经理之比较
在外企中,通常会在项目经理职务上设置 Program Manger 一职,由 Program Manger 负责人力资源的调配,同时对下面的项目进行总体进度监控, CMM 满足程度,项目经理的考核等等。
外企的项目经理即 Project Manager ,通常自由度比较大,可以完全不懂技术,而纯粹做管理,当然主要是老外了,他们的工作好像主要就是和客户沟通,客户当然也是老外了,然后就会细分模块分配工作给各个 Team leader ,其他工作就是填写一下 CMM 的相关流程了;其实我觉得应该增设一个技术项目经理职位或者技术架构师,经常由于项目经理不懂技术,加之语言沟通问题,导致工作分配不尽合理,而研发人员苦于无法开口以至于项目存在延期风险,增设技术经理和技术架构师,可以从项目初期就保证一个良好的开发架构,帮助 team 中的人员解决技术问题,协助项目经理进行项目进度和分配,代表开发人员和项目经理进行沟通。
另外一方面外企中的闲置人员有时候会很多,出于成本和资金考虑,经常会不断安排其他技能的人进入项目,以那个大项目为例,最高时有将近 30 人的开发规模,可是源源不断的流出流入竟然达到了 100 多人次,不过很奇怪项目居然能够进行下去。
对于国内企业的项目经理来说,通常的报告对象就是部门经理,对项目经理来说需要更加全面的综合知识,项目经理一定要有高超的技术能力,帮助 Team member 解决技术难题;很多项目经理就是完全由高级程序员担当的,不可避免的会以技术为出发点,而忽视了项目管理的本质要求。国内 IT 企业的规模一般都不大,导致项目经理过于年轻化,项目管理经验也相对不足。国内项目经理对 team member 的管理通常基于个人的主观判断,缺乏量化管理,对软件生命周期缺乏足够的认知。

 

相关文章:

  • jQuery - AJAX load() 方法
  • editplus与正则替换
  • Android PopupWindow 的使用
  • 两个条件求和
  • 菜鸟学exchange之二:如何管理邮件用户以及邮件策略的设置
  • php自定义json_encode()和json_decode()函数
  • Servlet高级应用---Servlet与缓存
  • SQL注入语句 (很全)
  • 封装TeeChart控件
  • WinAPI: SetTextCharacterExtra - 设置字符间距
  • 图像特征提取:斑点检测
  • FastDFS分布式文件系统的客户端
  • Michael Jackson This is it
  • 配置SELinux
  • 使用 Spring 2 Portlet MVC 框架构建 Portlet 应用
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • bearychat的java client
  • C++类的相互关联
  • C++入门教程(10):for 语句
  • ES学习笔记(12)--Symbol
  • express.js的介绍及使用
  • IDEA 插件开发入门教程
  • PAT A1050
  • React-生命周期杂记
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 简单实现一个textarea自适应高度
  • 前端攻城师
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 详解移动APP与web APP的区别
  • 责任链模式的两种实现
  • 怎样选择前端框架
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • !!java web学习笔记(一到五)
  • ()、[]、{}、(())、[[]]命令替换
  • (C++)八皇后问题
  • (LeetCode 49)Anagrams
  • (二)WCF的Binding模型
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Linq学习笔记
  • .NET 使用 XPath 来读写 XML 文件
  • .project文件
  • @RequestMapping用法详解
  • @RequestParam详解
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [CTF]php is_numeric绕过
  • [ERROR] Plugin 'InnoDB' init function returned error
  • [hihocoder1395] 最大权闭合子图
  • [HNOI2008]Cards
  • [JS]变量
  • [Machine Learning] Learning with Noisy Labels
  • [MySQL]视图索引以及连接查询案列