周五帮以前部门的同事查一个测试环境的权限错误的问题。一个用户在系统里的权限设置,一切很正常。但是从中间层的权限检查老报错。虽然这个系统的权限检查部分是我一年多以前做的,而我已经换到另外一个部门有一段时间了,但是看到同事为难的表情,还是义不容辞的过去帮了忙。
大家把问题的排查主要集中在权限检查部分。其实,这个权限检查的设计很简单,当时由于检查的数据非常多,而且全部存在一个数据库中,所以我把核心逻辑全部封装在一个数据库函数中,然后为不同的检查情况提供了不同的存储过程接口。核心逻辑在当时根据不同数据情况也设计了上千个单元测试。每次对核心逻辑进行修改或者优化的时候,都要经过严格的测试检查。同事给我看了用户的权限设置,和中间件的存储过程调用,都没有问题,但是为什么会报错呢?而且这个权限模块当时经过了严格的测试,难道真的到两年后会找到这么明显的问题?经历了一个小时的痛苦调试,最后终于发现问题不是发生在权限模块,而是在前端的Flex部分。前端在界面切换的时候错误的使用了缓存中的信息,导致把错误的参数发到了中间件中,造成真个的问题。
问题找到了之后,我自然接受了一顿感谢。看着同事给前端和中间件的程序员打电话解释问题,又写了一封冗长的邮件要求他们修改代码,我只能一笑:一个小时前还颐指气使的前端程序员有的忙了。这个故事其实很平淡无奇,每天发生在不同的IT公司,不同的IT部门。写程序就是这样,发现问题永远比解决问题难,更有意思的是问题往往不在我们所关注的地方,所以程序员加班调程序找bug,可以说是再正常不过的了。
看到这里,大家肯定要问你为什么要在周末花时间写这么一个无聊的故事呢?难道真的是闲的蛋疼?你不嫌浪费时间,不要浪费我们看的时间啊。呵呵,其实下面开始才是今天要讨论的问题,那就是IT开发部门的分工和协作问题。这个问题在很多年以前其实本不是问题。在那时候,大多数程序员都是像Iron Man一样的孤单英雄,一个人从客户需求,编写代码,到测试,上线和生产支持全部搞定。随着软件开发产业化和规模化,这个手工作坊式的经营慢慢被抛弃了。一是由于一个人的精力实在有限,二是随着IT系统越来越重要,公司无法接受这种一人包揽的风险性。IT软件行业的第一次分工也就这样形成了:软件需求,软件开发,软件测试,软件部署,软件维护。
今天我们不在这里讨论以上分工是否合理,不去研究为什么搞需求的为什么后来都成了项目经理,而写代码的却还是程序猿。我们在这里只看软件开发这部分。随着软件越来越庞大,软件开发分层理论的提出,软件功能又被细分为表示层,中间件,后台,和数据库。很多公司也就根据这种横向的软件层次划分对开发部门进行行政划分和管理,程序员也就根据自己的术业专攻被安排在某一个功能层面上了。很多程序员也乐于这种模式,因为这样可以专注于某一领域,而不是什么都搞,什么都不精通。这样的模式使用长了,IT公司和部门也就自然而然的按照这种模式去划分公司的行政部门了。发展到这个阶段,一旦软件出现问题,我们就会看到几个部门的经理在一起和自己底下的程序员加班加点,问题严重的话,不免也会互相推卸责任。而程序员呢?由于只了解自己的代码,但只见树木不见森林,所以不免相互推脱。这样不但解决问题的效率非常低,而且会产生很多不必要的人事矛盾。
其实,我们应该更推崇另外一种IT部门管理模式,那就是根据业务的功能划分,每一个小组来实现Front to back的功能,这样,一个小组,一拨人会掌握一个相关功能的全部知识,当问题出现了,由于整个功能都是一个部门做的,不但不会有互相推卸责任的问题,问题解决起来也会比较快,因为每一个程序员都应该对整个业务流程有理解和认识。
对上面说的这种模式,很多IT管理者都会不以为然,因为,他们会认为这样做的话我要为每个团队配备DBA,中间件开发,和前端开发的人,他们还要干自己不精通的东西,这不是重复劳动和提高成本了吗?其实不然,只要作为管理者鼓励这些团队互相交流,并且对每个团队的技术方案进行整体审批,当你打开了大家交流的通道,聪明的程序员们都会自己互相学习的。管理这方面其实我不想多说,因为明白的管理者是不需要我说的,而糊涂的管理者看到我说的也不会去改变什么。当然,还有一种管理者,他们明白事情该怎么样,而自己的影响力却不能改变什么。
从我们每个程序员的角度来说,究竟哪种模式好呢?很多人会认为精通一个领域,成为专家大牛是理想的,所以前一种模式会优于后一种。我个人并不否认成为技术大牛是很厉害的,但是在这里我提出一种新的思维方式。首先,我们要考虑几个问题,有多少程序员可以成为领域的大牛呢?有多少企业在IT领域是靠技术吃饭的?有多少IT项目是因为技术而不是人事管理搞砸的?在公司招人的时候,是一个高级管理难找,还是一个会特定技术的人难找?这些问题的答案告诉我们两点,那就是,成为技术大牛很难,而技术不是在IT行业最安身立命的本钱。对于像我一样的大多数程序员来说,其实一味的去钻营技术并不是什么好的出路。相反,学会在IT公司于人打交道,把事情做成,将会使你的职业发展如虎添翼。作为一名程序员,如果你现在的工作允许你接触很多东西,请你一定要珍惜。如果你现在的工作只是整个软件中一个层中的一小部分,那么,其实也不要担心,没有条件,我们可以创造条件。这几年流行跨界,其实程序员,最需要跨界。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)