有人的地方就有江湖。
人是容易犯错的。从认知心理学来讲,人的眼耳鼻等感官器官是有局限的,人的大脑也是有局限的,你不能过目不忘,记住所有东西,也很难同时处理两件以上的事情。但人把对外界的某些反应固化为意识之后,是可以同时做两件事的,比如你可以边开车边打电话(危险),这在刚学开车是不可能的。
反过来说,人也在不断犯错中学习成长的,一个组织的成长也要经历这个过程。不断的犯错误,不断的吸取教训,不断的纠正错误。
人犯错误有因为主观故意,也有因为过失。
为了避免人故意犯错误,于是有了法律。法律是由立法者制定的,在我国是全过人民代表大会。法律要作为强制行为规范要执行的,这就有了公安局。犯了法要受到惩罚,由法院来决定需要给予多大惩罚。为了避免执法、惩罚过程中出现违法行为,就有了检察院来对这个过程进行监督。
人之初,性本恶,靠道德是无法让社会中的每个人基本权益得到保障。
回到软件开发范畴,程序员也是人,写程序是会犯错误的。我相信大部分程序员不会故意犯错误,明知故犯。但是关键一点,有些程序员能够经常自己检查自己,纠正错误并避免下次再犯。有些程序员则经常犯同样的错误,而且没意识到 自己犯错。对于后者,就需要类似于法律的行为规范的约束,比如编码规范,工作规范。
理想情况是,人人自律,约束自己。但毕竟是理想,这就像在社会上靠道德来约束人的行为规范一样,是不现实的。
在一个公司里,还是有可能实现这种理想的,就是招聘人时,保证进来的人都有一样的道德品质和价值观。这种情况下,有可能实现自治,不需要法治。但林子大了,什么鸟都可能有,随着公司规模的扩大,自治变得越来越不现实,法治是唯一的办法。
现在软件公司里引入法治模式,就是引入SQA(Software Quality Assure),即软件质量保证。主要目的是为了监督所有软件开发过程中所有人的行为。这个是成本很高的,包括立法和执法。一般软件公司很少有司法的,也就是相当于检察院的,对SQA再进行监督的。
引入法治模式,好处是有法可依,规定了哪些工作一定要如何和做,哪些东西不能做。坏处是,完美的法律是没有的,是法律就有漏洞,中国都进化了5000年,法律也不能密不透风。更别说,少数几个人制定出来的软件开发过程规范了。
好了,假设说我是一个程序员,叫张三,我开发过程完全符合公司规范,我的工作产品也勉强合格。从各方面来看,都满足公司要求了。但有一点,我的代码可以写的更好,算法效率可以更高,但我没动力改进了,符合规范就ok了,仅此而已。我想表达的意思是,规范在规定了不能做哪些,必须做哪些事情的同时,它也丧失了鼓励的机会。 也就是说,我可以轻松应对行为规范检查,但我的工作产品却不一定好。尤其是,在形成某种对立时,这种本来鼓励大家做的更好的的福利就更难获取了。
总结一下:
1) 公司大了,引入法治是必须,但也必须能承受得起因此而带来的成本和人均效率的降低。
2) 小公司,依靠人和,价值观和自治策略为上,因为你没有那么大本钱法治。
3) 敏捷开发团是自治的,适合小公司。
4) 很多小公司在进行CMMI评估,想法治,我感觉这是一条错误的道路。
至于多大公司算小,多大公司算大,我也不知道。我只知道:
有人的地方就有江湖,江湖上什么样的鸟都有,在江湖上生存各有各的门道。
胡说一通,仅此而已。