我最近读了小说《安德的游戏》,作者奥森·斯科特·卡特,这是一个关于小孩的科幻小说,他正训练成为下一代的军事天才,他可以挽救地球于从外星生物的破坏性的攻击中。
我读了小说后,我脑海里跳出4个和软件开发有关的主题。故事的英雄,安德,有许多的物品和天赋,但是我认为这仅是使得他成功的一个方面:
控制突发行为(Harness Emergence)
安德知道精心设计的作战编队实际上是过于严格的,只是排演,这样可能会被打垮。为了与敏捷而有爆发力的作战原则一致,他把作战团队分成了小的、自治的单元。每个单元给一个由他调整的战略目标,但如何完成目标的战术细节留给了最底层的单个个体。
这是对弥漫在学校中“命令和控制”逻辑的挑战,但是随着安德的团队每次和又大又富有经验的军模拟战役的胜利而变成了一个巨大的成功。
同样,通过下放控制权到最底层,允许他们更灵活的适应当场变化的情况,我们可以在团队中控制突发行为,这就是商业或软件开发中敏捷性的整体观点。
同样我们可以在编码中控制突发行为。不要创建一个单一“命令和控制”的实体——它在系统中做出所有的决定和判断,的架构,这是一个不好的面向对象的设计,对吧?实际上你应该尽可能的推迟和下放决定和判断,最后到最低层的对象将不得不处理这些决定和判断。
集中绝对优势兵力(Overwhelming Force)
安德是为了生存而竞赛的。他不是一个杀手,但他在允许的情况下可以轻松杀死对手。在开始便以次轻量的绝对优势兵力攻击对手,他的对手根本不知道,因为他们永远不会有第二次机会了。
有人可能认为安德在没有合适的理由下屠杀是极度暴力和反应过度的。但对于安德而言这是有理由的,他只是简单的去赢得胜利,用优势兵力赢得,给将来的战争留下更少的机会和更少的风险。
军事教教义的“绝对优势兵力”在商业和开发中有相同之处。绝对优势力量是进行风险管理的简单方法,如果你比对手准备的非常好、有足够大的力量,那么失败的风险就非常小,对比越大,风险越小。
不幸的是,很多公司的经济条件使我们以“仅仅恰当”的力量进入了软件项目的战役,而不是它的项目团队有绝对优势力量。
绝对优势力量并不是必须有绝对优势的开支,这只是必须有充分的力量去赢得胜利。这样总是赢得胜利。
实践(Practice)
记住这个古老的玩笑,旅行者在纽约街上问人们“你怎么进入卡内记大厦”,聪明的东部旅游者说“实践,实践”。
安德的战斗团队比学校里的任何其他人都训练的多。除了学校组织的定期的活动外,安德有她自己的训练课程。他们坚持不断的训练,最后他和他的团队非常熟练实践活动,以至于真实的战斗就像是另一场实践课。
戴夫乐于指出,实践使你变得更有技巧适应。实践的智力训练和技巧——这是你需要成为或不断的努力成为一个优秀的程序员的,编码的套路招数是他应用在他的blog(译者:一个软件系统)上的第一步。
没有实践,许多个人和团队就像足球新手一样,在照相机和其他东西下,他们直直的抛球,结果当然不好。
不断学习(Continual Learning)
安德的一个最令我着迷的特点是他不断学习的风格,这是注重实效的程序员的特性,戴夫和我经常说这些是这是最重要的,包括不断学习技术、人力、团队的动力学,甚至是你自己。
安德确实是专于这个领域,在不可思议的贫乏的条件下,甚至是被威吓、被权威者或平等的人不平等的对待,安德的反应即不生气也不愤怒,只是简单的”作一个记录”,敌人的进攻正好反映了他们自己的有用的信息.,可以在反击中利用的信息。
所以,安德每一刻都在学习,从他的同伴、敌人、独裁系统和他自己。无论给他的是什么痛苦或耻辱,他都承受,他决定从这些地方学习。
我们总是要犯错误的,但最大的错误是不从这些错误中学习。
——从一个写于20年前的虚构的作品中得到这不是一个不好的教训。
——安迪。