吃完晚饭,接到一个朋友的电话:大意是要来上海工作,让我帮忙了解一下行情。我就去51job上逛了一圈;想到自己的简历也是放在那边n久都没动过了,就去点了一下。我倒是没去更新我的简历信息,只是当看到简历上的工作经历和项目经验时,真是感叹时光飞逝,往事如烟啊。一转眼到现在的公司都超过一年了,纠结了很久,还是觉得有必要对我在前一家公司的工作做一个总结。
在现在的时代背景下,我算是为数不多的幸运儿,在大学毕业一个星期之内就找到了一份当时令自己比较满意的工作:在一家IT公司上班。上班的第一天,我就给自己下了死命令:第一个公司,一定要待满3年,就算忍也要忍3年(我希望各位刚刚毕业或者频繁换工作的朋友们能看到这句话)。虽然最后我离3年还差2个月19天的时候离开了,但是我还算是挺了过来。
这家公司是做教育行业软件的,面试那天吓我一跳,看到办公桌很多,很多人的样子。事实上确实是很多人,进公司的那天是70个人(看人员联系表知道的,后来最多的时候有90个人),但过了3天才知道开发人员只有10个人左右,余下的除了几个人事和财务以外都是销售,因为公司刚刚开始开发软件,没有软件卖啊,所以销售也是混沌状态,混的人多,做事的人少。那个时候老板有钱(以前是做房地产起家的,嘿嘿),可能也是心高气傲吧,或者说有那种房地产开发商一贯的作风吧,只做产品不做项目。结果养着一帮子碌碌无为的销售等着亏钱。好景不长,我去了半年就开始裁人,销售几乎全部kill,最后就剩下了2个人,这两个人到现在还在公司,我们的私交也不错。后来了解到当时的想法很傻很天真:一个人一年卖出去2套,那么那么多的销售人员就能卖出去很多套,那么公司的利润就有了,颇有点掩耳盗铃,自欺欺人的意思。这个信息给创业的朋友,千万不要这么想。
在这半年的时间里面,其实对我的提高是很大的,我从一个只会写c#的“伪程序员”到一个“全才”。到现在还记得,对我帮助最大的两个项目是刚刚进去就接手的“升级”和一个报表。“升级”是指当到了一个学年后,把学生和教师的信息升级到新的年级。这个功能其实是软件设计的缺陷,属于擦屁股项目。这个项目我做了3个月,重写了6次。中间的过程太繁琐,但是给我的教训总结是:在没有想好之前别动手;考虑问题看主要目标,分析从目前状况达到目标的最短路径,把它实现,这就是程序员应该做的事情。第二个项目是一个报表,放到现在很简单,现成的控件多的是,随便找一个就ok,但是在当时.net开源“物质匮乏”的年代,那是比较难实现的。扰头了半天,最后找了一个javascript的客户端报表组件,大学时代我从来没写过js,根本不知道怎么写的,这是有生以来的第一次,这个项目花了2个月时间,虽然磕磕绊绊,终于算是搞定了。这个项目给我的感觉就是:我通过努力达到了自己想要的结果。为什么这么说呢?其实我毕业的时候就想去小公司,小公司会给你提供当时很多的初级工作的机会,而且小公司会因为种种原因让你不停做相同的事情。所以你的技术会得到锻炼并巩固。小公司还往往希望你什么都会,是全才,就算不是全才也把你培养成全才。所以个人认为毕业生比较适合去小公司锻炼技术,然后再去大公司发展,毕竟你要往上发展,没有一点过硬的技术是不行的,特别是在中国这种环境。
时间很快半年过去了,过年的时候公司开始战略转型,估计是钱撑不下去了。而且过年吃年夜饭没有发年终奖,连一个小红包都没有。但是当时对我这个刚刚毕业的穷学生来说,我也没有这个奢望,只要每月按时给我工资能让我在上海活下去我就心满意足了。这里得出的结论是:在小公司就要经得起这种折磨。在过年放假的前几天和来上班的后几天,公司发生了一次“变相的集体辞职”。一个项目组除PM以外的所有开发人员全部辞职,台面上各有原因,台面下的原因是待在那个项目组不爽;还有是他们在做一个已经差不多被公司废弃的产品;还有就是觉得公司没有前途和希望;还有就是和PM的关系问题,所以就商量集体辞职。这次辞职我看在眼里,想在心里。从这件事件的发生和发展到最后的结果来看,公司其实并未重视人才,或者说无力重视人才,所以这个也是小公司的一个特点。这次辞职事件过去后,我惊讶的发现我一下子变成了老员工?!
年后,公司开始重点进行项目的开发,产品的开发被冷落,直至最后抛弃。公司也开始招新员工,组成新的项目组。但是公司招的几乎都是新人(以前都是招有经验的人,我是第一个应届毕业生,但不是最后一个),我也变成了老手,可以开始指指点点。这里就慢慢的有了小公司特有循环的开始:带薪实践性培训机构(我给一些小公司的一个新定义)。
一段时间后,我们发现了以前公司类库是非常不健全的,而且使用非常麻烦。我们开始计划升级类库。当时我很有希望接手这份工作,与至于我把升级计划都已经写好了,结果最终这份工作给了一个比我技术差,但是比我资历老一个月的同事。虽然我觉得很不公平,但是当时的环境我也无能为力,为了生存,只能选择承受。我也明白了:技术往往不是决定一切的,资历往往有的时候比技术更有用。也就是部门经理的这个决定,导致了以后类库版本的“dll地域”。因为这个原先就不完善的类库版本被改的还不如以前,bug太多,导致了PM直接拿到源代码自己写,而不是用发布版本。所以各有各的版本,最后发展到自己的项目都无法正常运转。你别张大嘴巴做“O”状,小公司是没有测试的,自己测试,然后大家一集成ok就算过了(集成也是项目才有,像这种类库根本不会集成测试),所以很多时候bug都是无法测试出来的,只能到真枪实弹的时候才能发现。至于PM能拿到源码,你也别惊讶,小公司的开发是非常不规范的,所以才适合毕业生嘛(当然毕业生要自己多关心一下规范的公司怎么做的),因为乱世出英雄。你能锻炼到技术,那么你总得失去点什么吧?嘿嘿。
也就是在这个类库开发完成后不久,这位类库的升级者提出来加薪,从2700直接加到6k,对于这种MIS项目型的小公司,6k已经非常高了,至少需要工作3年才能是这个薪资水平。所以部门经理拒绝了。然后自然而然的类库的升级者选择了离开。这点上我倒是觉得公司没有什么不对,不是因为他前面抢了我的“生意”,而是我觉得“一个只会写写Insert,update,dalete,select,sql语句的人,就开始不知道自己的分量,倒是眼高手低了”。也有可能是他自以为做的不错。后来,我在很多的论坛上发现了很多人都是只会写写adonet和aspnet就意味自己什么都会了,开始心高气傲起来,其实这个现象到现在还有,而且比较普遍。这个不得不说是MS的千方百计设计Net易用性的一个“意外的杯具”。再到后来,第一也是因为用的不爽,第二是实在太无语了,忍无可忍之下就把类库重写了。
在这段时间,我开始尝试一个新的东西:制作installshiled的安装包。我花了两个月的时间,从开始连installshiled是什么都不知道,到制作成一个公司通用的安装包基础版本。这里我要感谢我当时的PM,他帮我顶住了小公司特有的压力,给了我足够的时间,当然我也交了一份让他当时脸上有光的答卷。其实这个安装包的基础代码版本有点乱,但还是一直沿用至今,这点也让我倍感欣慰。所以小公司是看完成功能的,功能完成了就ok,好用不好用再说。因为小公司没有多少的时间去做易用性等等,特别是这些只有公司内部使用的东西。
在制作这个安装包的过程中,我搬了新家。也就是在这个时候,我认识了我以前的女朋友,现在的老婆。嘿嘿i。
制作完这个安装包,我们项目组开始准备做一个外省市的教育局项目,在这个项目即将启动的时候,我的合同到期了。公司开始和我续谈合同。第一年我的工资是2500,我要求加到4k,公司开始只给3500,我表示不同意后,就开始准备写离职前的交接文档,并且也去参加了一些面试(没办法,为了生存需要两手准备)。这些面试现在看来真是太无语了……。不过当时看来技术含量还蛮高的,解决方案巨牛B。我的PM知道情况后,开始给我找部门经理谈话,经过努力,公司最后同意了4K的要求。这点也让我明白了:当你手上有资源或者公司对你有利可图的时候,你才能表示硬的立场;一个好的PM会为下面的人争取最好的条件;在公司里,权利和福利都是要靠自己争取的;工作就像买菜,一定要讨价还价。
第一年就这样过去了。第二年,职位开始提升,但是我继续在公司里面忍受着,也经历了更多的事情,也开始慢慢明白了老板的无奈。