敏捷小游戏的思考[上]

最近,我们团队为了进一步提高协作效率,组织了一次趣味分享活动,希望通过游戏的方式,帮助技术部门的同事们更好地理解和实践敏捷开发的方法。

在这次活动中,“哪种行动方式更敏捷”、“为什么采用这种方法”等关乎敏捷概念理论和实践方法的思考被伙伴们提出来并公开讨论。作为开发小组的成员,我获益颇多,特将此次活动中的思考总结下来分享给大家,共同成长~

游戏规则


10个人翻30张牌,每个人要把这30张牌的每1张牌都翻一遍,计算第1个人翻完30张牌所耗费的时间和所有人翻完30张牌所耗费的时间~
在这里插入图片描述
假设每一个红色方块耗时x,每一个橙色方块耗时y,每一个黄色方块耗时z (x, y, z > 0)
在这里插入图片描述
方案1: 第n个人必须等第n-1个人翻完所有的30张牌才能开始翻牌,第1个人不用等

那么我们参考上图的结构,先计算第1~5个人的翻完30张牌的时间,然后再乘以2就是总计用时(不存在影响时间的意外情况):

T1 = ((5 + 1) * 5 / 2 * x + (4 + 1) * 4 / 2 * y + 25 * 5 * z) * 2 =30x + 20y + 250z

方案2:第n个人必须等第n-1个人翻完第5张牌才能开始翻牌,第1个人不用等;且第n个人必须等第n-1个人翻完第m张牌,才能翻第m张牌,第1个人不用等。

参考上图结构,先计算1 ~ 10个人翻完前5张牌的时间,然后再计算第10个人翻完6 ~ 25张牌的时间就是总计用时(不存在影响时间的意外情况):

T2= ((5 + 1) * 5 / 2 * x + (4 + 1) * 4 / 2 * y) * 2 + 25 * z = 30x + 20y + 25z

方案3:第n个人必须等第n-1个人翻完第m张牌,才能翻第m张牌,第1个人不用等。

参考上图结构:先计算1 ~ 10个人翻完第1张牌的时间,然后再计算第10个人翻完第2 ~ 5张牌的时间,最后再加上第10个人翻完第6 ~ 30张牌的时间就是总计用时(不存在影响时间的意外情况):T3= 10x + 4y + 25z

最终结果


下面我们用程序来验证结论的正确性。假设 x = y = z = 1s,那最终结果应该是:

T1 = 30 + 20 + 250 = 300s

T2 = 30 + 20 + 25 = 75s

T3 = 10 + 4 + 25 = 39s

实际结果:


public class AgileTest {
   

    private static final Logger LOGGER = LoggerFactory.getLogger(AgileTest.class);

    public static void main(String[] args) {
   
        long time1 = way1();
        long time2 = way2();
        long time3 = way3();
        LOGGER.info("time1: {} ms", time1);
        LOGGER.info("time2: {} ms", time2);
        LOGGER.info("time3: {} ms", time3);
    }

    /**
     * <p>方案1</p>
     * <p>第n个人必须等第n-1个人翻完所有的30张牌才能开始翻牌,第1个人不用等。</p>
     * @return 耗时 ms
     */
    public static long way1() {
   
        final String way = "way1";
        long startTime = System.currentTimeMillis();
        // 1.10个人
        for (int i = 1; i < 11; i++) {
   
            AtomicInteger atomicI = new AtomicInteger(i);
            // 2.30张牌,每个人翻完30张牌,下个人才能开始
            for (int j = 1; j < 31; j++) {
   
                node(way, atomicI, j);
            }
        }
        long endTime = System.currentTimeMillis();
        return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值