极限编程与极限生活

【太长不读版】

“把通常的做法推进到极致”,这个来自极限编程的准则,能解决程序员在职场和生活中所面临的种种问题,并且能把其在职场和生活中的体验带到极致。

要想把事情做到极致,需要“戒贪、专注和反馈”的心态。

极限编程与极限生活_第1张图片

【完整版】

“在不同公司做技术的感受有何不同?”

“你为何搞编程道场?”

“靠技术吃饭在职场到底能走多远?”

“工程师向往的到底是什么样的文化?”

“如果职业生涯再来一遍,你会怎么规划?”

“一些企业开始‘优化’35岁以上的员工,技术人如何应对这种35岁现象的挑战?”

最近我在思考身边朋友所提出的上述问题。

回首工作过的24年,我最初从程序员开始做起,后来转为测试工程师,又转为项目经理,最后转为现在的软件开发咨询师,先后经历了4个角色。所服务的公司从国企开始,转为若干外企和私企,最后又转为现在的外企,先后经历了6家公司。

现在所从事的软件开发咨询工作,虽然不再编写大量的代码,但所涉及的内容都是与软件开发技术有关,所以还算是技术人一枚。如今,这枚技术人已经47岁,超过上面提到的35岁一轮了。

极限编程与极限生活_第2张图片

我在2016年拿到Scrum Master和PO的认证后,就去ThoughtWorks的印度办公室做ThoughtWorks University的新讲师,辅导公司新入职的应届毕业生做软件开发项目。期间我问指导我们这些新讲师的老讲师Susie Marshall:“在ThoughtWorks做开发,是否有Scrum Master?”

她说:“没有。在ThoughtWorks开发团队中,任何人都可以认领Scrum Master应做的事情。咱们更像是在做极限编程。”

极限编程是美国程序员Kent Beck在1999年提出的一种软件开发方法。它的核心理念就是“把通常的软件开发的做法推进到极致”,以便让软件开发能够达到低成本、低缺陷、高产出、高回报的效果。这也是这种方法名字中“极限”的由来。

根据24年的实践经验,我领悟到,“把通常的做法推进到极致”这条来自极限编程的准则,不仅帮助很多ThoughtWorker实现了"追求软件卓越”,比如推出了第一个持续集成工具Cruise Control,并撰写了《持续集成》这本经典之作,还能解决程序员在职场和生活中所面临的上述问题,并且能把其在职场和生活中的体验带到极致。

极限编程与极限生活_第3张图片

这种方法把什么做到极限了呢?比如,在软件开发中,测试是一个通常的做法,一般都会在程序员编写完代码后,由测试工程师来进行测试。Beck把测试这个通常的做法往前推,即在程序员编写代码前,先编写单元测试代码,然后再编写生产代码,让测试运行通过。这样就把测试推进到极致,能让程序员通过自动化单元测试更快发现自己的代码是否有功能性缺陷。

再比如,在软件开发中,代码审查也是一个通常的做法,一般会在程序员编写完代码后,由一两位资深程序员来审议代码的质量。Beck把代码审查这个做法再往前推,即在程序员编写代码前,再另外找一个程序员和他结对编程,在编写代码的过程中随时做代码审查。两人在结对编程过程中,还能互换角色,相互做代码审查。这样就把代码审查推进到极致,能让程序员在结对编程中更快地发现自己的代码是否有问题。

再比如,软件开发一般需要把一个大系统分解为若干模块,每个模块分别开发。等各个模块完成代码编写后,再做集成测试。Beck把集成测试这个做法往前推,即在编写代码的过程中,每过几小时就要进行一次自动化的集成测试,把集成测试推进到极致,能让程序员通过自动化集成测试更快地发现自己的代码是否有集成的缺陷。

极限编程与极限生活_第4张图片

“把通常的做法推进到极致”的准则,如果运用到软件开发中,就是极限编程。如果运用到日常生活中,就是极限生活。

有人会问,”这和工匠精神是不是一样?“我认为两者还是有一些差异的。工匠精神一般指把一门手艺做到精益求精、尽善尽美。其中的那门“手艺”一般不是普通人所能掌握的。比如做拉面、做辣酱、做锤子手机,普通人都做不来。而“极限生活”中的“通常的做法”,都是普通人能做的。比如上面提到的“测试”、“代码审查”和“集成测试”,普通软件开发人员都能做。下面将提到的“吃得好”和“珍惜时间”,普通人也能做到。

极限编程中所描述的种种极致的做法,能让软件开发达到低成本、低缺陷、高产出、高回报的极致效果。那么极限生活也能达到这样的极致效果吗?

根据我最近5年的亲身实践,答案是肯定的。比如,“吃得好、吃得精、活动少”所造成的营养过剩是许多人所面临的问题。身高180厘米的我5年前体重曾经达到85公斤,腰围达到二尺八。后来我把“吃得好和吃得精”向反面推进到极致,改为吃素,是那种能吃“肉边菜”的方便素,不会麻烦身边的人。5年坚持下来,体重能够控制在75公斤左右,腰围减到二尺五,同时也修炼了下面要提到的“戒贪”的心态,情绪变得更加平和。

极限编程与极限生活_第5张图片

再比如,很多人都在感慨“时间都去哪了?”,会在上下班的地铁里珍惜时间来看书。我在听了吴伯凡老师在《得到》App直播中介绍的柳比歇夫的《奇特的一生》一书之后,仿效柳比歇夫,从2017年4月24日开始,每天记时间开销日记。每件事情的耗时精确到分钟,将珍惜时间推进到极致。至今两个月做下来,我知道如果在北京平均每天用在上下班的时间是两个半小时,每日平均睡眠大概是七个半小时,写这篇博客总共花了7小时40分钟。我知道每天的时间都去哪了,今后要在哪里节省时间。这种珍惜时间的极致体验让我感觉活得很踏实。

要想做到“把通常的做法推进到极致”,需要下面的心态。

戒贪

贪心会耗散你宝贵的注意力,让你分辨不出哪个通常的做法值得被推进到极致。比如我在20多年前在国营单位做IT人员的时候,虽然早已发现这个单位并不适合我的个人发展,但是当时贪图国营单位的稳定,在这个单位纠结了7年多才提出辞职。那时一个人如果从国营单位辞职就会被称为“下海”。我在下海前这7年多的时间里,在贪图安逸的心态下,从没有将哪个通常的做法推进到极致,导致下海后一无所长,很长一段时间难以找到称心的工作。

专注

没有了贪心,就能静下心来发现自己的一个喜好和优势。然后在这个点上专注下去,把它做到极致,实现单点突破。比如,我在3年前用裸辞来戒贪,决定要找到一件值得专注的事情。在读书的过程中,我发现“编程操练”是程序员刻意练习编程的好办法。于是就专注于这个点,把这种做法向前推进到极致。我找到一些愿意免费提供场地的公司,办了30多次免费的线下“编程道场”活动。这些经历让我通过编程掌握了不少设计模式和测试驱动开发方法,促使我完成了《驯服烂代码》的写作并出版,并在编程道场中结识了不少好友,有些好友成为了我软件开发咨询的客户。戒贪之后的专注,令我有机会将编程道场做到了极致。

反馈

在“把通常的做法推进到极致”的过程中,你的做法并不一定都是正确的。需要不断收集反馈,并持续调整。比如我最初在撰写《驯服烂代码》的第一章时,使用了类似几何学的逻辑推导的方法来论述测试驱动方法的有效性。将草稿发给机械工业出版社的杨福川老师审阅后,得到了“难以阅读”的反馈。这个反馈促使我开始思考如何才能以吸引读者的方式来组织该书内容。

极限编程与极限生活_第6张图片

我受上面提到的编程道场匠友们的反馈的启发,最后把书的内容演进成写两位程序员用结对编程的方式来进行编程操练。该书出版两年后,得知参加编程道场的中国矿业大学的刘凯欣同学把编程操练推荐给了她的朱老师,并促成学校开始了敏捷软件开发的课程,这令我大为欣喜。上面所说的这些反馈,都帮助我将写书做到极致。

“把通常的做法推进到极致”,用在软件开发中,就是极限编程。用在生活中,就是极限生活。现在看看本文开头的那些问题是否能用极限编程和极限生活来解决。

“在不同公司做技术的感受有何不同?”

我如今在ThoughtWorks公司做技术,能够实现“把通常的做法推进到极致”,比如测试先行、持续集成和结对编程,这是一种极致的体验,是最大的福利。我以前所在的其他公司,都没有这个福利。

“你为何搞编程道场?”

开始是为了写书。现在想来,是在实践”极限生活“。

“工程师向往的到底是什么样的文化?”

我向往极限编程和极限生活的文化。

“如果职业生涯再来一遍,你怎么规划?”

首先建立“戒贪、专注和反馈”的心态,然后持续地做出“把通常的做法推进到极致”的职业规划。

“一些企业开始‘优化’35岁以上的员工,技术人如何应对这种35岁现象的挑战?”“靠技术吃饭在职场到底能走多远?”

我多年的实践表明,只要你能把一个乃至若干个通常的技术做法推进到极致,并能给企业带来价值,那么无论你是多大年纪,你已经获得了职场的主动权。

你可能感兴趣的:(极限编程与极限生活)