程序开发也是讲究文化的。团队里的所有成员需要像一个乐队在演唱会中所扮演的角色一样,为了共同的目标而努力。当然,程序开发还是和一般的文艺工作者不同,作为一个开发团队,每个团队成员必须要有一些相同的特点和天赋。要不然就算你是世界上最好的软件工程师或者是系统管理员,如果你没有“开发特质”,很快你就会发现自己和团队格格不入,最终会被团队一脚踢出去。
高效的开发团队会激发起每一个团队成员的活力,向着共同的目标前进。如果有一个团队成员并不能全身心的投入,那么他们很快就会感觉自己处的非常别扭,同时也会发现自己变成了项目成功的瓶颈。
接下来,我所列出的是任何一个想要在当下从事DevOps工作的人需要具备的9种品质。这其中有一些可能并不是人所天生的,但是通过实践和努力,所有这些都能够变成后天的性格,帮助DevOps成为高效开发团队的一部分,建立起一个成功的职业生涯。
1.你喜欢偷懒
这个品质听起来太违背常理了,但是确实存在这样的道理。当然了,懒惰本身绝对不是在办公室里受到欢迎的品质,但是你为了偷懒而做的事情可就大有价值了。程序开发的一个核心原则就是自动化,而这个会让开发团队交付出可靠的,兼容性强的和带有前瞻性的代码。因为只要是用人工来完成代码部署工作,那么总会不断的出现这样那样的错误。
如果你是一个天生的懒人,那么你肯定会讨厌做重复的工作。这太没有效率了,而且完全是浪费时间。如果你真的这么认为,那么恭喜你已经有了第一个了不起的品质。打个比方说,如果你花了一个小时写了一段很重要的代码,但是却忘了把代码提交到资源池,同时你的开发工具又突然崩溃掉了。这太扫兴了。没人想把同样的代码写上两次。这就是我的观点,虽然看上去有些极端,但为什么要一遍又一遍的重复做同样的事情呢?
真正“懒惰”的技术人员绝对也会讨厌把同样的事情做上两遍的,而这种工作态度很自然的导向了自动化。为什么要像对待婴儿那样费心的呵护你的服务器呢?为每一台服务器都单独的安装相同的软件,然后再给它们做完全一样的配置,这对我来说真是折磨。把这些安装与配置管理工作都写成脚本自动化完成,这样就不用再为它们操心了。
2.你乐于改变
人们总是生来就要过一成不变的生活。我们早上起床,白天工作,晚上睡觉。这就是我们的生物钟让我们做的事情。我们大多会欣赏规律的生活,这是出自于本能的。然而,在循规蹈矩的生活中,思考变得困难而且费力,这是因为我们将思考放到了潜意识中,而将我们的日常行为认为是自然而然的事情。这是可以理解的,但是要想成为一个开发大师,就必须要把这些本能抛到一边,反过来对着干。
这个世界上唯一不会变化的常量就是变化本身,这在开发工作的环境中更是颠覆不破的真理。在开发的过程中,我们查找问题,解决问题,把补丁加到自动化的测试中,然后迭代,就这样循环往复。然而,要想成为一个成功的DevOps高手,你就需要把这一套常规的思路完全抛开。要时刻意识到开发工作是一个不稳定的工作环境,变化随时都会发生。我们不可能一年做一次计划,而只能一小步一小步往前走,不断获得反馈,然后尽快迭代。不会有一天是循规蹈矩的、重复的、可以预测的——这就是一个DevOps大师的一生。
3.喜欢与人交往
在现在这个时代,作为一个DevOps,你已经不能再把午餐打包带进办公室,关上门,然后仅仅在放松的时候出门溜达几步了。你必须要喜欢与人交往,和团队的其他人一起工作。你要把开发当做是一项团队运动而且并不是像高尔夫那样的单人运动,而是篮球或者足球这样的集体运动。团队中的每个人都要为获取胜利做出努力,队友们必须要相互协作。
很久很久以前,IT工作被认为是一个业务支持部门。IT部门常常被安排在地下室,工作内容也仅仅是保证企业的电脑能够正常运做而已。因此,在那个时候,行业选择的是那个时代的人,那些喜欢在黑暗的环境里埋头敲代码或者管理系统的“怪人”。他们几乎不会跟别人说话,生怕自己的思路会被别人带乱。但是当今不同了,如果你还是习惯于处在这种完全沉默的环境中的话,那么你就无法在现今的开发环境中生存了。
没有人会逼你喜欢别人,但是我们必须有能力让别人高兴,和他们沟通。如果你不这样做,很快你就会像行尸走肉一样。换句话说,如果你对解决方案没有贡献,那么你就会对解决方案带来麻烦。
4.从大场面着想
如果你在程序开发时没有足够的远见,那么技术上累积下来的麻烦就会很快找上门来。“我们之后会解决这个问题”,“这个版本不会再出现问题了”,还有“我专门帮你调整”这些就会成为你常说的话。如果你在敲代码或者做系统配置时并不能预见到你的程序在每秒接受成千上万次请求的情况下会出现什么状况,那么在如今的DevOps世界中,这就是你的弱点了。
而DevOps高手们是能够提前预见到并且规划出解决方案的,他们所做的绝不会是仅仅针对于当前的用户数据,一个真正的DevOps高手在做产品规划时,就已经想好了未来新用户大量蜂拥而入时的应对方案。
5.喜爱分享
你喜欢帮助别人吗?就我个人而言,如果有人找到我并且我帮助了他们,那么我会非常喜欢这种感受。因为我知道其他人分享我的经验,这会让我很高兴。如果你想成为一个DevOps高手,你也一定要有这种分享的心态。没有人会因此抢走你的工作,也没有人会特意“偷窃”你的想法或是劳动成果。当你真心为了团队工作和思考的时候,你就会把个人的问题放到一边。
好的DevOps团队是鼓励分享成功与失败的,这会帮助其他人从中学到很多。成功的团队中不会有自大的人。任何一次失败都会被看做一个学习的机会,而每一次成功也会获得别人的赞扬。
你必须要把你的心态完全放开,每天都和团队成员们进行分享。这样你们就会发现开发的程序中哪些部分是有用的,哪些是没有必要的。
6. 能够做到“放手”
DevOps团队的根基是相互信任。团队中的任何成员都要能够信任其他人,并且能够相信他们也能做的和你一样好,甚至比你做得更好。
你可能会经常碰到这样的情况来挑战你对队友的信任程度。那就是当你完成了一个特定的功能,这个功能是一开始从设想、计划到编写部署都是你一个人完成的。而当你必须去做另一个项目的时候,你需要将你的这个宝贝孩子交到另一个开发者的手上。这时候你就需要能够做到完全的放手。你要信任继任者不会随便乱改你的代码,或者让它完全没有按照你之前的设想成长。即使这样的情况发生了,你也需要理解,因为他这样做也是用户和业务的需要。
你必须要能够依靠你的团队成员。如果你觉得你不行,那么你就要找到他们,并且进行一次尴尬的谈话。当然,如果他们拥有像第三条中所说的喜欢与人交流的品质,那么这也会是很简单的事情。
7.你的字典里没有“这不是我的工作”这样的话
“这不是我的工作”,“这件事儿不该我干”,像这样的话应该从DevOps的字典里完全抹去了。当然这并不是说你必须要为每个人做每件工作。正相反,这指的是你应该能够适度的帮助别人,或者说告诉他们应该是找到谁去帮忙?
这项技能是关于对“工作”这个词的重新定义。我们每个人都有自己的专长,但是真正的DevOps高手是多才多艺的。程序员不仅要对他们的代码负责,在服务器资源需求突然出现暴涨的时也需要协助系统管理员。另一方面,系统管理员也应该能够大体读懂程序员写的代码,这样在服务器出现问题的时候也能迅速找到相应的程序员来帮忙。
这意味着你要重新意识到你并不是一匹戴着眼罩在大街上行走的马了,不是只需要认识眼前的那条路就可以。如今的时代要求你摘下眼罩,并不仅仅关注自己的主攻方向,而且需要对团队中其他人所处的位置都非常了解。
8.使用配置管理工具
无论DevOps工作的变化有多快,部署总是最终的目标。这也意味着一件事情,那就是速度。没有合适的工具,你永远不会跟上开发迭代的速度。这和我们所说的第六条密切相关。不具备放手能力的软件开发者一般趋向于完美主义,有些甚至到了讨厌自动化的程度。他们并不信任工具,而是自己不停的一遍一遍重新发明车轮,做着在他们自己眼中认为正确的事情。
然而要想成为一个真正的DevOps高手,你必须要意识到工具对你的成功是极其关键的。当然,许多强大的开发团队会建立自己的工具,他们有很好的理由。不过,我坚持推荐使用配置管理工具。开发团队没有理由不选择使用配置管理工具,作为配置管理的需要。
配置管理工具可以自动化完成许多任务,让你能够把重点放在真正重要的地方:编写代码,并且部署给用户。
9.在代码层面思考
这种技能更适合于系统管理员。软件工程师们编写代码,把产品做好,然后这些产品会被打包后安置在底层架构中,为用户提供服务。如果开发者需要对产品做更改,他们不再需要亲身走到数据中心,然后在服务器上操作了。一切都可以在远程完成,只需要在办公桌上敲几下代码就可以了。
作为运维管理的高手,他们必须要看到“底层架构作为代码”这个新范式的好处。虽然对于大多数的系统管理员来说,这还是个新的概念,但是你必须要能够意识到将底层设施作为代码管理确实比物理设备好处要多,你必须要理解“一次性服务器”的概念。
你必须要理解服务器本身就是主机而已,能够快速的让用户从服务宕机情况恢复的是代码本身。打比方说,如果你的房子倒塌了必须要重建,但是最初的蓝图没有了,那么你要有从头开始建造一栋房子的本事。
永远不要隐藏你的才能
实话实说,对于一个DevOps高手来说不存在什么“隐藏”的才能。如果你不将你的才能展示出来,那么没有人会认为你是一个高手。我这里所说的9项才能是所有的成功DevOps团队中的成员都会拥有的,而且在他们的每天的日常开发工作中都会充分地展示出来。如果你也具有这些隐藏才能,那么就把它们展示出来吧!你的企业或是团队会注意到并且欣赏这些才能的。如果你为了待在一个并不欣赏这些技能的企业中而特意隐藏你的才能,那么我只能说,你失去的是进入那些能够给你提供更高薪水的企业的机会。