长时间摸鱼不如结对编程

记一次公司结对编程的经历javascript

摸鱼

这应该是一个广泛现象了。公司可能某一段事件内没有任务,或者任务权重低,因而乎神经不紧绷,手头空闲,开启了群聊,开始了一天的摸鱼时光。欢乐的时光就要开始了,扯房子,扯车子,扯日子,扯薪资,装萌新,就是不来提高本身。不是不想提高,控制力敌不过懒惰,摸鱼更具备吸引力。css

结对编程

有一个颇有趣的现象。不少人喜欢打游戏,可是不会很愿意一我的单独打。这也多是更愿意摸鱼的缘由吧。一我的编码学习老是枯燥无味。因而有了一个敏捷开发模式-结对编程。两个程序员在一个计算机上共同工做。一我的输入代码,而另外一我的审查他输入的每一行代码。输入代码的人称做驾驶员,审查代码的人称做观察员(或导航员)。两个程序员常常互换角色。html

经历

我最近就和其余同事结对编程了。最开始是我作导航员,他作驾驶员。前端

1.须要知道2的32次方是多少?我第一想到的就是java

const m = (a,n)=> n==0?1:a*m(a,n-1);// 前提为n为正数
m(2,32);
复制代码

而后同事写的代码:程序员

2**32
复制代码

我:???原来还能这样?我怀疑我是一个假的三年前端。编程

2.看到同事老是使用a.indexOf(b)>-1来判断a字符串中是否包含b字符。这里我就分享了我喜欢的一个用法:api

var a = 'abc';
console.log(~a.indexOf(b))
复制代码

用位运算符~ 。当b不存在于a字符串中,那么indexOf方法会返回-1,~ -1等于0,js中0则为false。这种换位取反的方式能够是代码看上去更加简洁,B格更高。固然还有扩展,~~能够用来取整数,相似Math.floor()。数组

3.看同事刷力扣,有一个题目颇有意思.leetcode-cn.com/problems/zi… 此时我和同事的思惟就分散开了。咱们都没有看其余解析思惟哦。 我想着就是找寻其中规律,经过Index的方式来获取字符串并拼接。经过画图比对,我找到了其中规律。每个长的竖排与前面竖排相差值都会为(numRows - 1) * 2,因而代码就出来了前端工程师

/** * @param {string} s * @param {number} numRows * @return {string} */
var convert = function(s, numRows) {
    if(numRows==1){
    return s
  }
  var dvalue = (numRows - 1) * 2;// 找到竖排差值
  var str = '';
  for (var i = 0; i < numRows; i++) {
    var df = true; //若是index超出s长度则跳出轮询
    var dd = true; // 折线规律体现状况参数
    var num = i
    while (df) {                                                       
      if (s[num]) {
        str += s[num]
      } else {
        df = false;
      }
      if (i == 0 || i == numRows - 1) {
        num = num + dvalue;
      } else {
        num = dd ? num + dvalue - i * 2 : num + i * 2;
        dd = !dd
      }
    }
  }
  return str;
};
复制代码

正当我洋洋得意看同事作好没,发现他的思路和我彻底不一样。他是先建立相应行数的数组,而后将字符串依次分解填充到对应数组中再返回数据的。代码以下

/** * @param {string} s * @param {number} numRows * @return {string} */
var convert = function(s, numRows) {
    if(numRows==1){
        return s
    }
    var ar = [];
   for(var i =0;i<numRows;i++){
       ar.push([])
   }
    var plus = true; //字符串填充数据方向
    var nm = 0;
    for(var i =0;i<s.length;i++){
        ar[nm].push(s[i]);
        if(nm==numRows-1 || nm ==0 ){
            plus = !plus
        }
        if(plus){
             nm++;
        }else{
             nm--;
        } 
    }
    return ar.reduce((a,b)=>a+b.join(''),'')
};
复制代码

代码简洁思路清晰。可是落后于个人时间,能够发现领航员能够经过画图等方式思考问题,比驾驶员敲代码思考的时间更长,能更早的想到和编写方法代码。

我作驾驶员期间有时候,首先本身不多用某些api,加上有人看代码质量,多少有点紧张,屡次翻阅百度查找api的结构用法。同时对这个api的记忆更加深入了。

优劣势

1.结对编程能够发现本身和别人的思惟方式的区别。思惟模式上对本身的一个补充。
2.结对编程可让本身更加熟记少见的api。
3.结对编程是一个很好的学习机会。
4.结对编程能更少的出现烂代码。
5.结对编程最好只在空闲时间作,非空闲时间就是对人力的浪费。
6.性格不合不适合结对编程
复制代码

总结

空闲时间老是会有的,偶尔摸摸鱼也是挺好的。可是对于长时间摸鱼不肯意学习,我更加愿意结对编程。

原文连接:tech.gtxlab.com/together.ht…

*做者简介: 张栓,人和将来大数据前端工程师,专一于html/css/js的学习与开发。

相关文章
相关标签/搜索