UML软件工程组织

到国内软件企业就职的思考[转载] 
我是南京的一名程序员,有高级程序员证书,大学毕业三年,从事Java开发工作。
我以前在一家台湾软件公司,公司管理不错,但由于一些原因,我重新找工作了。
我在网络上找到了一家公司, 5月底我去面试了。面试了两次很顺利,公司的面试的经理讲话很谦虚,很诚恳,很务实,没有为难我,对我的评价很高;认为我水平能力都不错。几天后得到通知我被录用了,2003年6月20日 星期五 到公司报到。
先介绍一下这公司吧,南京XXX科技股份公司(www.xwtec.com)前身是江苏XXX,公司地址 江苏软件园XXX号。我看中了的是他名气不错,在江苏软件园里也是个大公司。

2003年6月20日 星期五,我到XXX试用的第一天。
第一天就签合同,合同期两年,试用期三个月。
2003年6月23日 星期一,我到XXX试用的第二天。
2003年6月24日 星期三,我办理解除合同的手续。

我把眼睛看到和与同事的对话说到的再加上用脑子的思考得出的,写下来供广大程序员参考。
用对话加评论的形式叙述,前后次序有些乱,望读者见谅。
第一天, 我主要的收获是看到部门在技术上,开发管理上存在一些问题,比较严重。
第二天, 我看到公司在人的管理上存在问题,不可接受。

先描述一下环境。工作环境和气氛对人很重要:
办完报到手续后,(办理人事关系的人接待很好)被带到我部门的办公室,也就是一个开发的房间。房间四面都是玻璃,光线很好。外面的人一眼就能看到房间里的人在做什么,利于监督。我的机器一开始没有到位。我领到计算机后,打开看,是全新的。只有操作系统,我问我的主管(可能在那里不称为主管,也就是负责这个房间的人),给我一个Ip地址(Ip地址是要申请的)和代理服务器地址。配置好后我发现无法上网。主管告诉我这里上外网需要申请。那我的机器需要安装一些开发工具到哪里下载!我问他有没有文件服务器,我得把这些工具装起来呀。回答是没有专门的文件服务器,你到\\192.168.8.25\E$ 那台服务器上看看吧,用administrator登录,密码为空。我上去看看没有找到我要的工具但,发现,这太机器是这里的唯一的服务器,数据库SQLServer在这台机器上,Tomcat在这机器上,VSS(版本控制的相当于CVS)在这机器上,以前项目的文档和源程序的备份都在上面。我是一个新来的人,怎么能让我这么容易接触这些东西呢!硬盘上的东西全都能删除,安全何在! 我不能上网,工具没有,我不知道该做什么了。第二天上午他们出差还把那台服务器抬走了。
房间里很嘈杂,通过打电话和面对面讲来交流,文件交换靠共享文件夹。房间里有两块小黑板(白板),一块上面写的是值日表,一块是出差人员的手机号码表,对面会议室没有黑板。我问旁边的人你们怎么不用MSN或QQ呢,用这个就不用讲话了!有啊FreeICQ只能在公司内部用,MSN上不了外网就无法登录,他们那些人能上网是一代一,一代二代出去的,还不能让领导知道,公司规定上班不许上网,否则罚款1000。我觉得无法与外界交流是一个非常难受的约束,软件行业新的技术层出不穷,无法得到新的知识是一个很危险的事,靠买几本技术书是没有多大用处的。内部人员交流时不在黑板上,写写画画,只靠电话里说能说出什么来呢?座在我旁边的人告诉我:你项目组里大部分人都走了。
我通过我的主管知道:上个月项目组封闭试开发了一个月把项目做完了,现在暂时没有项目任务。封闭试开发 是公司在句蓉(南京市旁一个小城市)包了一个宾馆给项目组的人用,吃住开发都在里面。我的部门出差数量基本上占50%。这么关键的事在面试的时候居然没有提到,我惊恐。。。。

抛开技术不说,说说人。程序员是脑力工作者,软件开发有很多人的因素:
我第二天到公司上班,早上没有来得及吃早饭,在江苏软件园门口买了一大杯绿豆汤,带到我的座位上。打开计算机后,我喝起了绿豆汤。坐在我左边的同事小张(可能不姓张,我还不知道他的全名呢,我前一天与他们谈了些技术问题,我们讲话很直接)很惊讶说:你怎么在办公室里吃东西的!公司规定在办公室里喝饮料要罚款的。我也很惊讶:不会吧!真会罚款啊? 小张:真的,吃东西罚1000块。小张跟他旁边的小陈(为了避免给他们带来麻烦不透露真实姓名)讲:上次我听耳机不就被罚了1000块。小张对我说:“4月份我听耳机,被王总从后面看到了(我们座位靠门口);王总说,你在干什么?听音乐。当天下午王总在大会上通报批评:张XX,上班听耳机…… 后来从工资里扣了1000块,幸亏项目经理给我说了几句好话,不然开除了。当时就想辞职走了。” 小张补充:“现在我不是合同到期要走嘛,当时我想离合同到期就一个月了,要是当时辞职就要付违约金,不值得,就一个月了,熬一熬吧。”我没有听他们的继续喝我的绿豆汤。我对小陈讲:绿豆汤味道不错,还是冰的。小陈向四周张望:“真的,这边想扣你钱时,事先招呼都不打的,3月份说我上班迟到罚款,我根本没有迟到,结果是他们搞错了;扣钱也不通知我一声”。
在中饭后我从小陈那里了解到,他们项目组里就剩他们两人了,他不走是因为违约金太高了,他项目组里有个人一共才拿了10个月的工资走时出了5个月的违约金。我说公司制度严明,你不违反不就可以了嘛!小陈:哪里呀!莫名其妙就扣你的钱,2月份部门人员重新评定,(偷看到的),部门的人分等级:核心程序员,骨干程序员,一般程序员,普通程序员;我被定为一般程序员。我问,评定有什么用处啊? 当然有用处,核心程序员工资加20%,骨干程序员的工资不变,我一般程序员减10%,那些普通程序员就惨了减20%。这是偷看到的,扣工资不打招呼的。违约金算法是:前一年工资总额的20%,工资总额 = 当前基本工资 * 前一年工作月数 。2月份正好是新的一年开始,不服从评定,如果你要走就付违约金。小张算了一下他如果付违约金的话,要靠近1万。以上些关于人的还不能说明公司制度的恶劣性,下面举一个例子保准看的人会吐血。小陈是一个项目小主管(我估计的,他能知道这么多事,再有他带我看了他们做的项目代码,从这些判断的)我从他那里知道一件最恶心的事。在去年对面那个大房间有个人走了,他是为什么走的呢。他做项目出差回来,有另外一个项目很急,经理让他帮忙一起加班做一下;那天是星期六项目组加班干通宵,他晚上12点提出回家睡一觉,出差回来很累,请求没有得到同意,他回去睡了。下个星期正好发工资,他被罚了1000块,理由是说他不服从项目安排。我们这个行业加班没有加班工资,我们都认了,但也不要因为加班扣工资。程序员是人啊!再从技术相关方面讲讲,我一直认为在技术上不成熟,是可以接受的,也是可以改变的。
我第一天去,看出在项目开发过程里存在一些问题,我准备多做些事情,改变它;第二天我发现在这里项目质量的不是程序员能控制的,我无力改变了。

说说怎么做软件吧。项目是做MIS系统的,用JAVA开发。我问我的主管这里java开发工具用那种。什么开发工具都有,主要有四种:JBuilder7,JCreator,UltraEdit.你的机器性能好可以装WSAD (IBM EJB开发工具,内含了eclipse)。我问为什么不统一呢!统一不起来,你习惯用eclipse就用eclipse吧没关系。项目组里人要出差他们打包发布遇到问题,用Jbuilder两个文件夹怎么也打不进去,用WSAD就没有问题了。刚才提到的192.168.8.25那台服务器SQLServer和Tomcat在这机器上当然程序也在上面跑,下午一个小时内SQLServer和Tomcat就被几个人启动停止好几次,只有一个服务器服务调试都靠它呢。我得出第一点结论,开发IDE统一。自己的程序在别人的机器上运行不起来。调试环境不统一化标准化,调试过程中开发人员相互影响。软件发布过程不统一不规范,容易半路出差子。唯一标准的是使用VSS进行版本控制。经常听到这样的声音:xxx,你CheckIn,我要改这程序;这是最新的吧我export出来没问题吧。网络不通或不习惯用文字来交流,只能用语言了。

在评论一个项目管理是否有效,经常是用另一个项目来对照,比较中看出优劣。我就用我以前公司的项目来对比。我与小陈讲我以前公司是怎么做软件的。他叹息:与外面的差距这么大。下面用对比:

小陈:你以前还经常加班啊?
我说:很少几乎没有,我们分工很明确的,项目计划具体到某一天做什么,每天你做完你的事情就回去了。
小陈:程序交叉多的时候怎么办?
我说:交叉不多,项目负责人已经分好模块了,几乎不需要太多模块交差。关键看你软件的结构了。分层分块很明确的,你不需要知道别人在做什么。只要知道你自己的事就行了
小陈: 我这边从头到尾都要你自己管着,从JSP 到Bean到数据库每一步都要自己做,上次我都做得差不多了,居然发现数据库里字段类型不对,不知道被谁改了。
我说:啊,分层啊,管数据库的管数据库bean,管逻辑的管逻辑。有没有通用工具包
小陈: 没有,什么工具包,自己写自己的,每个人都写一遍。
我说:我们以前有一个工具包,连接数据库的工作全由一个Bean,我们根本不需要知道我的程序是怎么连接数据库的,数据库在哪里都可以不知道。反正他有返回嘛,返回XML格式都定好了自己去解析了就可以用了。
小陈: 啊
我说:那有通用类库方法库吗?象xml解析这种事,你完全可以不会,只要输入一个XML字符串,你要取哪个节点的值就取哪个节点的值,你根本不需要知道他是怎么解析xml的。这样开发速度才能快!出错也少啊。
小陈: 还有你们JSP怎么调试的。
我说:调试!在程序里写log不就可以了吗,你一天到晚候在Tomcat窗口上面能看到什么!出错了看看log文件就全知道了。
小陈: 每个类里都写吗?
我说:看你需要呀,不然它运行出错了,什么都没有留下你怎么知道他错在哪里了。
小陈:是啊,我们一次操作的时候有错,再来一遍又没有错。有时候真搞不清楚。
我说:我们要求在程序里除了注释,不允许有一个中文字。有配置文件的,调试输出的中文来自你的配置文件。
小陈:好象我们都是写死了的,不都一样嘛
我说:你程序要是在没有中文的系统里运行,不全是乱码!!我们配置文件至少有两个版本:GB232,Big5的。要是你的程序到繁体台湾码上怎么运行!
小陈:哪里会考虑这么多呢!
我说:这就是国际化,卖给用户,每一个总有些不同的呀,尽量少改代码了。
我说:这里有调试工具包嘛?我们以前有一个能在IE上调用你写的Class。是一个容器,启动这容器服务,只要把请求写在表格里,你要调用那个类哪个方法,运行后返回值是什么都可以看到。写程序确实很快的,根本不需要跟其它人的程序交流。
小陈:唉!什么都没有。一个项目来了,经理把需求报告仍给你,就说你在这个时间里去把这做了吧。其它他不管,总说:你们弄好了没有,我要测试了……
我说:需求报告写得怎么样?
小陈:没有一个需求报告是没有问题的。我们看了报告还是不知道用户要怎么做。
我说:那PM做什么事?
小陈:要什么PM呀,用户打来电话,经理就拉一个人去接。不管你以前做什么的,经理想要你做什么就得做什么。谁谁你接电话,谁谁你把这事解决掉,也不管与这事是否有关。
我说:没有一个协调人啊!
小陈:比这个更绝的,你是做java的吧?
我说:恩
小陈:不管你以前是学C++的还是PB的,你到这公司来了就只做Java。先去接电话,什么都让你干。
我说:C++的转做java也是很快的。
小陈:待会我给你看看,我们的编码风格,一个项目几套风格,那个以前做C++,写出来的Java也是C++风格的。包括包命名,类命名,变量命名,一看就知道他以前是写C++的。
我说:怎么不改呢!
小陈:到这里来后,人都懒得改懒得学了。
我说:你不是说,经理让你们必须这样必须那样。怎么不统一风格呢!
小陈:谁知道呀。
我说:是啊!在这里学习交流的环境都没有,也不能上网,能上网的还要偷偷摸摸的。
小陈:是不许上网,上次谁上网被查到了,还被罚款的呢,其实他那次还真是做与工作有关的事呢。小张(说话的时候小张不在)不是合同到期了嘛,以前还会点EJB现在都忘了,还要重新学,再出去面试。
我说:呵呵。
小陈:确实在这里,以前还有一点水平的呢,干上一年,你的水平也倒退了。你的这个部门是新成立的,里面的人大多数是新来的还好。
小陈:你看,就是对面那个女的经理。(那个大房间里很多人,我不知道他指哪个)
我说:她怎么了
小陈:声音小一点。我说给你听,你不要笑。我的一个项目就不允许用JSP只能用Servlet。你说一个管理系统,也就是MIS系统这么多页面,都用Servlet写。
我说:Servlet也可以写的呀。
小陈:所有的HTML标签都用out.write();那个C++的小伙子就写了100多个标签类。那些都用类来完成组合。不只是这个,他们三个人就有三种写法,谁也不买谁的帐,都自己调用自己的类。项目里乱得很。
我说:怎么调试。为什么不能用JSP呢?
小陈:是啊!编译调试麻烦得很。她就说我们要用java做。她不会jsp。还说什么客户要求的。
我说:她又不需要学jsp有手下人做就是了。
小陈:你说多恶心啊。现在结构定了,程序里封装了HttpServletRequest和Response,还有OutputStream ,现在遇到问题想转发到jsp处理都转发不了。
我说:jsp接不了ServletOutputStream吗?
小陈:我为这事还被训了一顿呢。
我说:那你看看Tomcat原代码,正好学习一下嘛。
小陈:算了,现在不是我管了,我也管不了这么多了。
我说:那软件产品质量怎么保证呢!
小陈:是啊,公司没有一个项目通过初检。
我说:都没有通过初检!!
……
我说:从那台机器上可以得到全部源代码,你们不怕小涂(项目主管),突然走人,把项目和客户都带走了怎么办?或者说技术泄露怎么办?
小陈:随便没人管。
我说:我以前公司每个人只做的自己的那部分,别人的模块他是看不到源代码的。那些公共的工具包是加了密的,只能引用,反编译都反编译不了。你只有自己的那部分源代码有个屁用。
小陈:是嘛!
……
……

我走时提出我不要这两天工资了,你把这60块钱体检费报销掉吧。我的手臂上抽血时留下的那个青块 现在还没有消掉。管招聘的人说公司的规定,到职要体检,体检费自己出,不报销的。

我没有时间写下去了,以后补充吧。

**公开声明 ---关于帖子《为什么我试用期两天就辞职了 ----到国内软件企业就职的思考》**

非常感谢大家能这样热情地回复我这篇随笔,看了大家的评论,昨晚,我冷静思考了很久。其实这篇文章在不经意中也造成了很多伤害,思前想后,我决定贴出以下这段文字来弥补我造成的损失。

首先,须郑重声明的是,此文仅仅是我个人见解,我本意只是想从技术管理的角度解析软件公司中程序员遇到的问题和困惑,并非针对欣网视讯公司。再次,我要向我在文中提到的欣网公司公开道歉,我为我的鲁莽和冲动表示歉意。我也曾贴出过我与一位同学的对话。这位同学很中肯地指出,每个人都有自己的立场和角度。的确,我应该辨证地看待这个问题。程序员有程序员的立场,公司的管理者有管理者的立场,两者要达到一致,本来就是所有企业为之不懈努力的目标。管理本身就一门很深的学问,每个公司都有他的弊端和问题。我一时义愤,不加思索地登出自己个人的想法确实欠缺妥当,我也坦承自身的缺点:不够宽宏和稳重。同时也真心地接受朋友们对我的批评。希望管理者们能原谅我的年轻气盛和做事武断,同时也重视自身存在的问题。
最后,我为《为什么我试用期两天就辞职了 ----到国内软件企业就职的思考》一文在CSDN这样的网站上贴出造成的影响非常抱歉和惭愧,希望得到大家的谅解

 

版权所有:UML软件工程组织