软件开发的本质
软件开发的本质
软件开发的本质,就是对这个物理空间中的行为模式,进行逻辑的抽象。而且,每个软件背后都体现了设计者的思想和价值观的。刚开始接触开发的程序员,可能会觉得,我不就是写一些代码,实现一些功能嘛,这么纯技术的活,干嘛跟我扯这么远,什么价值观都出来了。
为了理解这个说法,我们先来看一个例子。比如在一个常规的公司中,需要开发一个人力资源的基本组织结构管理和人员信息的管理。在不进行任何深入了解的情况下,拍拍脑袋肯定会觉得,不就是一个公司有多个部门,每个部门下面有多个员工,不就是简单的1对N的关系而已嘛,但是其实事情远没有这么简单。
即使从纯粹技术层面来说,前面说的这是两层结构,实际上,有的公司可能有很多层,据说IBM最多有18层上下级关系,所以必须设计曾灵活的N层关系。这个N层里面,如果是一个集团公司,可能有集团公司-〉区域总公司-〉分公司-〉事业部-〉大部门-〉小部门-〉小组->个人这么多层级。而且会希望在整个集团范围统一管理人员的话,分公司这个层和作为事业部,部门等层级是有一些不一样的,独立的权力会更大一点。然后不同的分公司,可能下级的层级数又不一样。另外,有的做法允许有的人是直属于某个层级的,不属于某个部门,但是有的确要求每个人都在某个部门下,即使总经理也可能属于总经办这么一个组织部门。
列了这么多,似乎有点啰嗦的。其实下面问题就来了。某个员工问:我怎么可以知道公司的组织结构呢?是否提供这样的功能便是一个问题了。
如果允许普通底层员工查询公司的整个组织架构,那么他就可以遍历出公司的所有人员组成,也就是最终他能搞到整个公司的人员清单,在离职的时候,有可能会把这样的清单扩散出去,给到竞争对手,或者猎头,这样对方可以很方便分析公司的情况,并据此来挖人。
如果不允许查询公司的组织结构,那么跨部门找人时,就会碰到不少麻烦,便利性很差。而且员工的感觉很差,会让员工觉得公司对员工不信任。
怎么取舍,这就是一个企业价值观或者老板价值观的问题了,并非开放就是好,或者保密封闭就是不好(据一个朋友说,即使百度这样的公司,组织结构也是保密的),最终要的是要符合这个公司的特性,然后高级管理人员(老板)要接受自己决策带来的相应正负面结果,不能又要保密性好,又要便利性高,这是既要当婊子,又想立贞洁牌坊的节奏,是人都知道最终只有骗得了自己,骗不了别人的。