这个标题是最近看了Linus Torvalds关于git的演讲2007-05-14,结合最近工作中和同事聊天有感而发的
一、代码的面向对象
作为码农,都知道面向对象的编程语言有三个基本特征,五个基本原则
三大基本特征
1、封装
2、继承
3、多态
五大基本原则
1、单一职责原则(SRP)
2、开放封闭原则(OCP)
3、里氏替换原则(LSP)
4、依赖倒置原则(DIP)
5、接口隔离原则(ISP)
码农,说的低级点是代码搬运工,说的高级点就是上帝,在代码世界中的上帝!
请参见下面三个工人的回答
三个工人在工地砌墙,有人问他们在干嘛?
第一个人没好气说:“砌墙,你没看到吗?”
第二个人笑笑:“我们在盖一幢高楼。”
第三个人笑容满面:“我们正在建一座新城市。”
10年后,第一个人仍在砌墙,第二个人成了工程师,而第三个人,是前两个人的老板。
在代码的世界,码农通过按照上面的基本准则,对代码进行封装、继承、多态、抽象等操作,实现一个函数只干一件事,类内聚性高,同时易于扩展、替换。当有更好的实现方式,因为遵循里氏替换原则、接口隔离原则,这个类可以快速更改或者替换。
二、组织的面向对象
目前遇到的组织结构大部分不是这样的,分层的面向过程的,或者是集中式的,并不遵循面向对象的特征。这应该是很多内外因导致的,比如利益分配在集中式中的分配方式和分布式组织的分配方式是绝然不同的。
Linux Torvalds大神推出开源的分布式版本控制系统git,其中一个目的是为了降低自己在集中式服务器上托管代码的运维成本,当代码数量相当胖的时候,磁盘不坏掉是不可能的,即使出现一次也是不可接受的。这个过程中大神通过开源输出知识,让可信网中协作者一起来协助进行代码托管,大神把运维成本减掉了,协作者涨知识了,双赢,这就是生态,开源的力量。
从组织的角度,需要考虑人力可替换,不能完全依靠一个人撑起来,这样就会把一个人完成的任务分成几个人来完成,比如在技术积累不深的企业,根据Android层次来分出几层,一层一个人,共同完成一个功能。出问题时候,各层都会只看自己层的问题,不管上下游,一个问题看三遍,都不是我的问题,那问题从哪来的,然后只能再出来一个人负责协调这几人的沟通协调。而且,人都是有惰性的,分出层次来后,只管自己这块地方,只管需要我干什么,并不是主动站出来说我要干什么干什么,需要什么资源,其实对个人对组织发展来说都不利。
从个人角度看,就是需要实现个人的不可替代性,为自己争取福利。当主动站出来想干点东西,当在自己可搞定范围内的还好,但是需要团队协作的时候,需要参考面向对象的特性,将任务划分独立、解耦互不关联的子任务,分配出去,这样同时也利于后期考评个人,这样就和上面讲的冲突,组织需要人力可替换,需要将任务分成很细的,导致子任务不解耦。
另外,个人站出来主动作为负责人,就需要有一点管理的艺术。个人并不是其他协作同事的直接上级领导。当遇到积极配合的同事,真的需要感谢感恩。遇到不配合的同事,可以说:“麻烦你告诉这个东西是怎么搞的,我可以试着搞搞,搞不懂再来向你请教可行?”
安慰自己,吃亏是福,技多不压身
三、收获
保持好奇心
时刻学习
学习管理的艺术,机器是最听话的,人是有感情有思维的