从学校到企业:如何转换角色?

 

从学校到企业:如何转换角色?

 

已迎来一年一度的招聘、应聘高峰,一连几天,我都在面试,这让我联想起成千上万的应届毕业生马上就要奔赴企业工作,经历由学校到企业,由学生到员工的转变。为帮助学生尽快适应工作环境,尽快完成角色转换,根据本人实践经验,谈点想法供即将参加工作的同学参考。

 

一、    尽快熟悉公司的开发流程

相信刚刚入职的你,一定不会忘记:尽快熟悉你将开展的业务,软件的需求在哪里,开发环境怎么搭建,用到什么知识和平台。但根据我的经验,你不一定关心公司的开发流程。掌握公司的开发流程,对你快速进入工作角色是至关重要的。若埋头工作,不知道流程,会和团队其他成员显得格格不入,既影响工作效率,还不易被同事接纳和认可。

也许一开始人力资源部或办公室的人会给你介绍一批又一批的同事,等介绍完了,人们都认识你了,但你能记住的只有直接上司和极少数最重要的人;也许会有人想你介绍大概的工作流程,但你能记住的却少之由少。如何开始工作,向谁汇报,和谁协作,还需要较长时间摸索。

在软件企业,这个问题更加突出。仅开发流程就是一本文件,完全掌握它是一件不容易的事。这就需要你做个有心人。快速熟悉流程的途径大致有这么几条:一是向你直接上司和周围的人询问,并用心记录下来;二是查阅公司的开发流程文件,认真学习。

不仅是公司的流程,团队的成员也应该尽快熟悉。开发者不仅要和开发者沟通,还应该熟悉文档由谁写作,测试负责人是谁?遇到问题也要知道找谁处理?比如邮件系统问题由谁负责,电脑及软件由谁安装,网络出了故障由谁处理。在一个大的团队,做到这一点不容易。但一般情况下,在这样的团队里,项目组的组织结构会有书面文档可以供你查阅,不仅有同事的名字,一般还会有他的角色和联系方式。

软件开发规范在哪里?代码走查的检查单在哪里?软件质量目标是什么?诸如此类的问题都要搞清楚。在一个成熟的软件开发公司,应该有一个新人入职的向导材料,你不妨问一下人力资源部和你的直接上司,如果有,你将会省下很多时间,少麻烦很多人。

 

二、    熟悉公司文化和价值观念

熟悉公司饿文化和价值观念是你融入团队的最有效的方式。因为只有当了解了公司的文化之后,你才被同事接纳和欢迎;只有理解了公司的价值观念,你才知道你做事的标准。

总的来讲,公司文化和学校文化是不一样的,学校相对比较宽松和自由,学术和科研气氛较浓;企业是商业机构,节奏快,压力大,商业气氛很浓。在学校,讲究的是“水平”,在企业,讲究的是市场。再有水平的技术和产品,如果没有市场,公司是不会欢迎的。

细分起来,企业和企业也不一样。业务不同,文化和价值观念亦不同。在一个以应用系统开发为主的公司,看重的是对现有技术的了解和掌握,强调的是按照用户的要求实现快速和高质量的交付;在自主产品开发为主的公司,强调的是需求的整理和产品的设计、测试等环节。

一位同学的第一份工作是公务员,刚刚毕业的他,刚入职不久,写了一篇论文并被一个全国性的会议所录用,接通知后他兴奋地找到领导,申请出差参加会议,以为领导一定会批准也会为他高兴。但让他没有想到的是,领导似乎却不以为然。于是他百思不得其解:这要在学校可是被老师夸奖的好事啊,可现在领导的反应为什么这样漠然呢?虽然这位同学一再坚持,领导勉强让他出差参加会议,但这件事给领导留下了一个不太好的印象。若干年之后,想起这事,他还觉得自己书生气太浓。政府机关的价值观念与学校是不一样的,这一点企业和政府机关是一样的。另一位同学刚加入到一个外包公司,公司承接的是一个电信系统的计费系统。他的上级给他分配了一个任务,按照已经写好的SQL语句和规格说明,写一段程序,从数据库中读取数据即可。按照要求,这位同学很快完成了任务,之后,他向老板提了很多建议,修改了设计思路。殊不知,老板并不鼓励他这样做,因为老板并不想让你知道任务的背景,只需要你按照他给你的说明完成任务即可,其它事情自有人处理,不要你来操心。但同样这件事,要是在一个创新型的企业里,他的建议却被得到重视。

 

三、    了解商用软件开发规律

我们暂且把公司开发的软件叫做商用软件。商用软件的开发和学校作业是迥然不同的。在面对公司分派的任务的时候,我们一定不能以完成老师布置作业的心态去完成。

商用软件,之所以叫商用,其最大的特点就在于它是用作商业目的的,它最起码的要求是“能用”,能解决实际问题;其次是好用,否则客户会选择你竞争对手的产品。商用软件的用户是广大用户,而学校作业除了你的老师评阅之外,可能永远也不会有人会真用。商用软件是解决实际问题,给客户带来利益,而学校作业是老师为了考察学生对课堂上讲的知识是否掌握,如语法、概念、算法、数据结构之类的,出的题目都是一些简单功能的实现,答题的结果是独立的小程序,和外界根本没有关系。商用软件的“能用”不仅指功能、性能上满足客户需要,还包括后期的可维护,学校作业不会考虑升级、补丁、数据迁移和系统参数设置、配置管理等等。

作为刚刚入门的程序员,一般不需要你去确定软件需求、架构设计,而是要求你做相对简单的工作,如按照需求和架构设计来编写程序。即使这样,你也免不了做一些详细设计方面的决定,必须考虑软件是否能用,是否好用。

下面我举几个简单的例子:

第一个例子是XML数据系统。这是我在美国公司开发的一款商用系统,它和我们经常使用的关系型数据有某些相同之处,里面都有userrole的概念,user可以允许向数据库中加入XML文档,加入XML文档的user就是这个文档的拥有者(Owner)。问题出来了:要是你是在做作业,你一定认为删除一个user的操作是个很简单吧,不会考虑很多,也无必要考虑太多。可是,作为商用软件,当你把一个user简单地删除之后,那么这个user以前加入的那些XML文档归谁所有呢?作为商用产品的开发者,你必须要处理类似这样的问题。

还比如,关闭(Shut down)数据库管理系统看起来也是个很简单的操作,但实际上,当数据库被很多人都在连接使用的时候,你去关闭数据库系统,必将造成很多用户的连接(Connection)和事务(Transaction)被中断,进而导致数据紊乱。停止数据库服务模块必须要考虑这个因素。一般来讲,当停止数据库服务的命令下达后,数据库要等一段时间(如10分钟),看看是不是所有的用户都断开了连接,看是否还有Transaction未结束,如果没有,则停止数据库是安全的;如果还有用户在使用数据库,数据库服务可以强行停止,但在下次数据库启动时,要将紊乱的数据恢复过来。

第二个例子是关于大数据量处理的。我们一定有过这样的体会,将小批量的文件从硬盘(比如C盘)拷贝到U盘是轻而易举的事。但当我们拷贝大量文件的时候,总会遇到很多麻烦,比如U盘满,拷贝程序被迫中止;比如源文件是隐藏的,系统提问你:要不要拷贝这些文件?如果你不在现场,系统一直在那里等,直到你看到提示、并给出明确回答为止。类似的,我们也有一个功能模块,要将服务器上大量的数据进行备份,以防止数据丢失。数据量少在几十G、几百G,多则几个T。服务器上的数据有文件系统里的文件,也有数据库里的表。一位工程师做完了程序,简单地用几十M数据做了测试,就准备交付。

第三个例子是数据备份。如果你开发的系统中用到了数据库管理系统,即你开发的是基于数据库的应用系统,你一定还要考虑到:数据库不可能无限制地膨胀,在开发完功能之外,你不得不开发另一个相应的工具,将数据库定期备份和恢复,以腾出空间给未来使用。如此等等,学校作业都不可能涉及到。

在上面的例子中,我们看出,程序员不解决这些问题,系统将无法使用。

下面的例子是关于系统好不好用的问题。一个初出茅庐的毕业生开发一个功能模块,该模块负责将一些文件从服务器推送到成百上千的计算机上去。该生开发出来的软件,用户只能一次推送到一台计算机,一千台计算机,用户需要推送一千次。从理论上讲,只要用户一次输入一台计算机的名字(或IP地址),也能完成所有计算机的推送任务。但是,这个软件好用吗?如果允许用户一次填写所有计算机的名字,然后发一个命令去推送呢?毫无疑问,用户的使用体验是完全不一样的。实际上,没有哪一个用户会去使用前一种蹩脚的方式。

到此,你也许已经看出,商用软件开发和学校作业之不同。商用软件除了运用编程语言的基本知识实现需求中的功能之外,还有很多事情要考虑。比如事务(Transaction)、伸缩性(Scalability)、稳定性(Stability)、可靠性(Reliability)、可扩展性(Extensibility)、安全性(Security)等等。

在长期的开发和教学实践中,我发现很多同学都有一种担心,担心自己的技术不行,一开始生怕自己对语言的掌握不及老员工,心想只要掌握了语言的编程技能和技巧,也就能立住脚了,可以作为跳槽的资本。作为过来人,我发现技能问题并不是想象那样中的那么可怕,反倒是编程之外的其他问题,成为商用软件的关键。

 

四、    学校和公司承受的压力不同

软件开发项目的商业流程、团队合作的经营理念,这些在学校里面学不到。学校是一个比较自由的地方,大学里面没有八小时概念,也很少有把事按时做完的压力,而当这一切变成了商业承诺,就完全是另一回事。所以,学校里培养不出企业真正需要的工程师,尤其培养不出合格的项目经理。公司则不同,是一个约束相对较多的地方,一切以商业合同为依据,作为供应商,公司必须在规定的成本、时间和质量范围内交付产品,否则,视为违约、导致公司利益损失。

刚刚参加工作的同学,一开始往往感受不到这种压力的存在,需要比较长的过程。缩短这个过程,有利于将角色从学生转换到工作。

通常,研发内部有很多计划,外部对客户和其它兄弟部门有很多承诺,计划是相对稳定的,外部承诺多却是随即的,“计划没有变化快”,计划不可避免地受到外部承诺的冲击。在计划和承诺产生矛盾的时候,应以外部承诺优先,这是公司特有的性质和压力所决定的。这里有一个例子:

某软件的开发任务基本上完成、即将发布的时候,客户因特殊需要要求软件公司修改软件名称。修改软件产品名称涉及到著作权登记。公司里,著作权登记涉及到三个部门:第一个是产品研发部门,该部门负责修改软件名称、与软件名称相关的图片和相应的文档;第二个部门是产品著作权登记部门,他们负责将研发部门准备好的软件送交著作权登记;第三个是软件资产管理部门,他们对著作权登记的时间性提出要求。2007929日,三个部门在一起讨论的结果是,108日,研发部门的各项准备工作就绪。因为中间是国庆长假,实际上只有两个工作日,时间很紧张。对研发部门来讲,既然领走了软件修改的任务,实际上就形成了一种对外部(其它两个部门)的承诺,时间虽紧张,也要保证按时、按质完成任务。29日,研发部门负责该项目的项目经理,接到修改软件任务时,顺便安排了软件资源提取工作,资源提取显然属于产品内部优化。他的用意是好的,借修改软件名称的机会,将软件的资源文件整理得好一些。但是,他把软件名称修改和资源提取工作牵扯到一起,也就是说,把对外部承诺的软件名称修改和内部对资源文件的整合放在同一个优先级上。结果,在时间紧张的情况下,两项任务同时进行,没有履行对外部的承诺,到了108日那天,研发部门并没有完成相应的修改任务。

优先级安排适当,导致项目滞后、甚至项目失败的例子应该很多很多,这只是其中的一个。对外部的承诺,尤其是书面合同式的承诺,应该是第一位的。当合同总履行不了的时候,我们会失去外部信任,严重影响公司利益。

在学校,学生的计划性一般不强,但在公司,事事、人人都有计划,每项开发任务都分配有责任人,事事都有起始、完成时间和质量要求。计划一旦批准,实际上形成了各方的约束力。计划对任何一方来讲,都是对其它各方的承诺,所有涉及到计划的修改都必须得到控制,所以你必须尊重计划,以实际工作维护计划的权威性。

 

总而言之,作为新毕业即将走向软件开发企业的你,一定要尽快熟悉公司的开发流程,理解公司的文化和价值取向,掌握商用软件的开发规律,和企业一起承担压力。只有这样,才能较快完成从学生到工程师、从学校到企业的角色转换。

 

20091226日星期六晚

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值