長時間摸魚不如結對編程

記一次公司結對編程的經歷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的學習與開發。

相關文章
相關標籤/搜索