结对编程成员:
蔡佳泉 1711216
刘子义 1759132
一、前言:
以下是本次结对编程的要求:
我们决定用c语言写一个在命令行窗口的四则运算练习的软件。刘子义(1759132)负责写代码,蔡佳泉(1711216)负责审查与测试代码。
我们预计第一版用时2小时开发出来,说干就干。
二、第一版
第一版的速度比我们的预期还要快只花了1小时的时间就写了出来。
以下是第一版的代码以及运行结果:
1 #include<stdio.h> 2 #include<time.h> 3 #include<stdlib.h> 4 5 6 int main(){ 7 8 //设置变量 9 int count = 0,rand1 = 0,rand2 = 0,end = 0;//计算题数量,参数1,参数2,计算结果 10 int sign = 0; //四则运算符 11 int get = 0; //得分 12 13 14 //主体架构 15 do{ 16 srand((int)time(0)); 17 rand1 = rand()%100+1;//第一个随机数 18 rand2 = rand()%100+1;//第二个随机数 19 sign = rand()%4+1; //四则运算符随机 20 21 //根据四则运算符分类 22 //加法 23 if(sign==1){ 24 end = rand1+rand2; 25 if(0<end && end<101){ 26 count++; 27 printf("(%d)%d + %d = ",count,rand1,rand2); 28 int end1; 29 scanf("%d",&end1); 30 //printf("%d",end1); 31 if(end1==end){ 32 printf("Good Work!"); 33 get++; 34 } 35 else printf("Wrong! 正确答案:%d",end); 36 printf("\n"); 37 38 } 39 else count = count; 40 //printf("%d + %d = %d",rand1,rand2,end); 41 } 42 43 44 //减法 45 if(sign==2){ 46 end = rand1-rand2; 47 if(0<end && end<101){ 48 count++; 49 printf("(%d)%d - %d = ",count,rand1,rand2); 50 int end1; 51 scanf("%d",&end1); 52 //printf("%d",end1); 53 if(end1==end){ 54 printf("Good Work!"); 55 get++; 56 } 57 else printf("Wrong! 正确答案:%d",end); 58 printf("\n"); 59 //count++; 60 } 61 else count = count; 62 //printf("%d - %d = %d",rand1,rand2,end); 63 } 64 65 66 //乘法 67 if(sign==3){ 68 end = rand1*rand2; 69 if(0<end && end<101){ 70 count++; 71 printf("(%d)%d * %d = ",count,rand1,rand2); 72 int end1; 73 scanf("%d",&end1); 74 //printf("%d",end1); 75 if(end1==end){ 76 printf("Good Work!"); 77 get++; 78 } 79 else printf("Wrong! 正确答案:%d",end); 80 printf("\n"); 81 //count++; 82 } 83 else count = count; 84 //printf("%d * %d=%d",rand1,rand2,end); 85 } 86 87 88 //除法 89 if(sign==4){ 90 end = rand1/rand2; 91 if(0<end && end<101 && rand1%rand2==0){ 92 count++; 93 printf("(%d)%d ÷%d = ",count,rand1,rand2); 94 int end1; 95 scanf("%d",&end1); 96 if(end1==end){ 97 printf("Good Work!"); 98 get++; 99 } 100 else printf("Wrong! 正确答案:%d",end); 101 printf("\n"); 102 } 103 else count = count; 104 //printf("%d ÷%d=%d",rand1,rand2,end); 105 } 106 }while(count!=300);//达到三百时结束 107 108 printf("总得分为%d",get/3.0); 109 return 0; 110 }
一审查,咦????好像不太对啊,出现了以下严重的问题:
1.要求是两个运算符,这里只有一个运算符呀。原来是我们前期没有进行合适的沟通,要求没整明白就咵咵的打了代码。
2.生成计算公式的速度非常的慢。
3.我们错误的理解了结对编程,结对编程应该是两人用一台电脑同时进行写代码以及审查,而不是分别进行的。这样才能即使发现问题并解决问题,并且能及时沟通和学习。
接下来我们就运用结对编程的方法准备写第二版,预计时间1小时。
三、第二版
通过你写一行我审查一行的同时编写,我们花的时间和预计时间差不多。
以下是第二版的代码以及运行结果:
1 #include<stdio.h> 2 #include<time.h> 3 #include<stdlib.h> 4 5 int main(){ 6 7 //设置变量 8 int count = 0,rand1 = 0,rand2 = 0,rand3 = 0,end = 0;//计算题数量,参数1,参数2,计算结果 9 int sign1 = 0,sign2 = 0; //四则运算符 10 int get = 0; //得分 11 12 13 //主体架构 14 do{ 15 srand((int)time(0)); 16 rand1 = rand()%100+1;//第一个随机数 17 rand2 = rand()%100+1;//第二个随机数 18 rand3 = rand()%100+1;//第三个随机数 19 sign1 = rand()%4+1; //第一个四则运算符随机 20 sign2 = rand()%4+1; //第二个四则运算符随机 21 22 /********************* 23 根据四则运算符分类 24 1.加法 2.减法 25 3.乘法 4.除法 26 ********************/ 27 //加法 28 if(sign1==1){ 29 if(sign2==1) { 30 end = rand1+rand2+rand3; 31 if(0<end && end<101){ 32 count++; 33 printf("(%d)%d + %d + %d= ",count,rand1,rand2,rand3); 34 int end1; 35 scanf("%d",&end1); 36 //printf("%d",end1); 37 if(end1==end){ 38 printf("Good Work!"); 39 get++; 40 } 41 else printf("Wrong! 正确答案:%d",end); 42 printf("\n"); 43 } 44 } 45 else if(sign2==2) { 46 end = rand1+rand2-rand3; 47 if(0<end && end<101){ 48 count++; 49 printf("(%d)%d + %d - %d= ",count,rand1,rand2,rand3); 50 int end1; 51 scanf("%d",&end1); 52 //printf("%d",end1); 53 if(end1==end){ 54 printf("Good Work!"); 55 get++; 56 } 57 else printf("Wrong! 正确答案:%d",end); 58 printf("\n"); 59 } 60 } 61 else if(sign2==3) { 62 end = (rand1+rand2)*rand3; 63 if(0<end && end<101){ 64 count++; 65 printf("(%d)(%d + %d) * %d= ",count,rand1,rand2,rand3); 66 int end1; 67 scanf("%d",&end1); 68 //printf("%d",end1); 69 if(end1==end){ 70 printf("Good Work!"); 71 get++; 72 } 73 else printf("Wrong! 正确答案:%d",end); 74 printf("\n"); 75 } 76 } 77 else { 78 end = (rand1+rand2)/rand3; 79 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 80 count++; 81 printf("(%d)(%d + %d) ÷%d= ",count,rand1,rand2,rand3); 82 int end1; 83 scanf("%d",&end1); 84 //printf("%d",end1); 85 if(end1==end){ 86 printf("Good Work!"); 87 get++; 88 } 89 else printf("Wrong! 正确答案:%d",end); 90 printf("\n"); 91 } 92 } 93 //else count = count; 94 //printf("%d + %d = %d",rand1,rand2,end); 95 } 96 97 98 //减法 99 else if(sign1==2){ 100 if(sign2==1) { 101 end = rand1-rand2+rand3; 102 if(0<end && end<101){ 103 count++; 104 printf("(%d)%d - %d + %d= ",count,rand1,rand2,rand3); 105 int end1; 106 scanf("%d",&end1); 107 //printf("%d",end1); 108 if(end1==end){ 109 printf("Good Work!"); 110 get++; 111 } 112 else printf("Wrong! 正确答案:%d",end); 113 printf("\n"); 114 } 115 } 116 else if(sign2==2) { 117 end = rand1-rand2-rand3; 118 if(0<end && end<101){ 119 count++; 120 printf("(%d)%d - %d - %d= ",count,rand1,rand2,rand3); 121 int end1; 122 scanf("%d",&end1); 123 //printf("%d",end1); 124 if(end1==end){ 125 printf("Good Work!"); 126 get++; 127 } 128 else printf("Wrong! 正确答案:%d",end); 129 printf("\n"); 130 } 131 } 132 else if(sign2==3) { 133 end = (rand1-rand2)*rand3; 134 if(0<end && end<101){ 135 count++; 136 printf("(%d)(%d - %d) * %d= ",count,rand1,rand2,rand3); 137 int end1; 138 scanf("%d",&end1); 139 //printf("%d",end1); 140 if(end1==end){ 141 printf("Good Work!"); 142 get++; 143 } 144 else printf("Wrong! 正确答案:%d",end); 145 printf("\n"); 146 } 147 } 148 else { 149 end = (rand1-rand2)/rand3; 150 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 151 count++; 152 printf("(%d)(%d - %d) ÷%d= ",count,rand1,rand2,rand3); 153 int end1; 154 scanf("%d",&end1); 155 //printf("%d",end1); 156 if(end1==end){ 157 printf("Good Work!"); 158 get++; 159 } 160 else printf("Wrong! 正确答案:%d",end); 161 printf("\n"); 162 } 163 } 164 //else count = count; 165 //printf("%d + %d = %d",rand1,rand2,end); 166 } 167 168 169 //乘法 170 else if(sign1==3){ 171 if(sign2==1) { 172 end = rand1*rand2+rand3; 173 if(0<end && end<101){ 174 count++; 175 printf("(%d)%d * %d + %d= ",count,rand1,rand2,rand3); 176 int end1; 177 scanf("%d",&end1); 178 //printf("%d",end1); 179 if(end1==end){ 180 printf("Good Work!"); 181 get++; 182 } 183 else printf("Wrong! 正确答案:%d",end); 184 printf("\n"); 185 } 186 } 187 else if(sign2==2) { 188 end = rand1*rand2-rand3; 189 if(0<end && end<101){ 190 count++; 191 printf("(%d)%d * %d - %d= ",count,rand1,rand2,rand3); 192 int end1; 193 scanf("%d",&end1); 194 //printf("%d",end1); 195 if(end1==end){ 196 printf("Good Work!"); 197 get++; 198 } 199 else printf("Wrong! 正确答案:%d",end); 200 printf("\n"); 201 } 202 } 203 else if(sign2==3) { 204 end = rand1*rand2*rand3; 205 if(0<end && end<101){ 206 count++; 207 printf("(%d)%d * %d * %d= ",count,rand1,rand2,rand3); 208 int end1; 209 scanf("%d",&end1); 210 //printf("%d",end1); 211 if(end1==end){ 212 printf("Good Work!"); 213 get++; 214 } 215 else printf("Wrong! 正确答案:%d",end); 216 printf("\n"); 217 } 218 } 219 else { 220 end = (rand1*rand2)/rand3; 221 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 222 count++; 223 printf("(%d)(%d * %d) ÷%d= ",count,rand1,rand2,rand3); 224 int end1; 225 scanf("%d",&end1); 226 //printf("%d",end1); 227 if(end1==end){ 228 printf("Good Work!"); 229 get++; 230 } 231 else printf("Wrong! 正确答案:%d",end); 232 printf("\n"); 233 } 234 } 235 //else count = count; 236 //printf("%d + %d = %d",rand1,rand2,end); 237 } 238 239 240 //除法 241 else { 242 if(sign2==1) { 243 end = rand1/rand2+rand3; 244 if(0<end && end<101){ 245 count++; 246 printf("(%d)%d / %d + %d= ",count,rand1,rand2,rand3); 247 int end1; 248 scanf("%d",&end1); 249 //printf("%d",end1); 250 if(end1==end){ 251 printf("Good Work!"); 252 get++; 253 } 254 else printf("Wrong! 正确答案:%d",end); 255 printf("\n"); 256 } 257 } 258 else if(sign2==2) { 259 end = rand1/rand2-rand3; 260 if(0<end && end<101){ 261 count++; 262 printf("(%d)%d / %d - %d= ",count,rand1,rand2,rand3); 263 int end1; 264 scanf("%d",&end1); 265 //printf("%d",end1); 266 if(end1==end){ 267 printf("Good Work!"); 268 get++; 269 } 270 else printf("Wrong! 正确答案:%d",end); 271 printf("\n"); 272 } 273 } 274 else if(sign2==3) { 275 end = (rand1/rand2)*rand3; 276 if(0<end && end<101){ 277 count++; 278 printf("(%d)(%d ÷%d)* %d= ",count,rand1,rand2,rand3); 279 int end1; 280 scanf("%d",&end1); 281 //printf("%d",end1); 282 if(end1==end){ 283 printf("Good Work!"); 284 get++; 285 } 286 else printf("Wrong! 正确答案:%d",end); 287 printf("\n"); 288 } 289 } 290 else { 291 end = rand1/rand2/rand3; 292 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 293 count++; 294 printf("(%d)%d / %d ÷%d= ",count,rand1,rand2,rand3); 295 int end1; 296 scanf("%d",&end1); 297 //printf("%d",end1); 298 if(end1==end){ 299 printf("Good Work!"); 300 get++; 301 } 302 else printf("Wrong! 正确答案:%d",end); 303 printf("\n"); 304 } 305 } 306 //else count = count; 307 //printf("%d + %d = %d",rand1,rand2,end); 308 } 309 }while(count!=300);//达到三百时结束 310 311 printf("总得分为%d",get/3.0); 312 return 0; 313 }
虽然通过你写一行我看一行的方式写出了第二版,并且没有语法错误,编译通过。
但是经过审查员的后续测试发现还是问题多多:
1.数字都是用int类型储存,电脑算出来的结果都是直接省略掉小数点后后面的数字。
2.如果我输入的答案不是数字,而是字母或特殊符号会出现下面直接跳出相同的300道题目的bug:
3.出题的速度还是特别的慢。
接着我们就只能继续改进......
三、第三版
以下是第三版的代码以及运行结果:
1 #include<stdio.h> 2 #include<time.h> 3 #include<stdlib.h> 4 5 6 int main(){ 7 8 //设置变量 9 int count = 0,rand1 = 0,rand2 = 0,rand3 = 0,end = 0;//计算题数量,参数1,参数2,计算结果 10 int sign1 = 0,sign2 = 0; //四则运算符 11 int get = 0; //得分 12 13 14 //主体架构 15 do{ 16 srand((int)time(0)); 17 rand1 = rand()%100+1;//第一个随机数 18 rand2 = rand()%100+1;//第二个随机数 19 rand3 = rand()%100+1;//第三个随机数 20 sign1 = rand()%4+1; //第一个四则运算符随机 21 sign2 = rand()%4+1; //第二个四则运算符随机 22 23 /********************* 24 根据四则运算符分类 25 1.加法 2.减法 26 3.乘法 4.除法 27 ********************/ 28 //加法 29 if(sign1==1){ 30 if(sign2==1) { 31 end = rand1+rand2+rand3; 32 if(0<end && end<101){ 33 count++; 34 printf("(%d)%d + %d + %d= ",count,rand1,rand2,rand3); 35 int end1; 36 scanf("%d",&end1); 37 //printf("%d",end1); 38 if(end1==end){ 39 printf("Good Work!"); 40 get++; 41 } 42 else printf("Wrong! 正确答案:%d",end); 43 printf("\n"); 44 } 45 } 46 else if(sign2==2) { 47 end = rand1+rand2-rand3; 48 if(0<end && end<101){ 49 count++; 50 printf("(%d)%d + %d - %d= ",count,rand1,rand2,rand3); 51 int end1; 52 scanf("%d",&end1); 53 //printf("%d",end1); 54 if(end1==end){ 55 printf("Good Work!"); 56 get++; 57 } 58 else printf("Wrong! 正确答案:%d",end); 59 printf("\n"); 60 } 61 } 62 else if(sign2==3) { 63 end = (rand1+rand2)*rand3; 64 if(0<end && end<101){ 65 count++; 66 printf("(%d)(%d + %d) * %d= ",count,rand1,rand2,rand3); 67 int end1; 68 scanf("%d",&end1); 69 //printf("%d",end1); 70 if(end1==end){ 71 printf("Good Work!"); 72 get++; 73 } 74 else printf("Wrong! 正确答案:%d",end); 75 printf("\n"); 76 } 77 } 78 else { 79 end = (rand1+rand2)/rand3; 80 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 81 count++; 82 printf("(%d)(%d + %d) ÷%d= ",count,rand1,rand2,rand3); 83 int end1; 84 scanf("%d",&end1); 85 //printf("%d",end1); 86 if(end1==end){ 87 printf("Good Work!"); 88 get++; 89 } 90 else printf("Wrong! 正确答案:%d",end); 91 printf("\n"); 92 } 93 } 94 //else count = count; 95 //printf("%d + %d = %d",rand1,rand2,end); 96 } 97 98 99 //减法 100 else if(sign1==2){ 101 if(sign2==1) { 102 end = rand1-rand2+rand3; 103 if(0<end && end<101){ 104 count++; 105 printf("(%d)%d - %d + %d= ",count,rand1,rand2,rand3); 106 int end1; 107 scanf("%d",&end1); 108 //printf("%d",end1); 109 if(end1==end){ 110 printf("Good Work!"); 111 get++; 112 } 113 else printf("Wrong! 正确答案:%d",end); 114 printf("\n"); 115 } 116 } 117 else if(sign2==2) { 118 end = rand1-rand2-rand3; 119 if(0<end && end<101){ 120 count++; 121 printf("(%d)%d - %d - %d= ",count,rand1,rand2,rand3); 122 int end1; 123 scanf("%d",&end1); 124 //printf("%d",end1); 125 if(end1==end){ 126 printf("Good Work!"); 127 get++; 128 } 129 else printf("Wrong! 正确答案:%d",end); 130 printf("\n"); 131 } 132 } 133 else if(sign2==3) { 134 end = (rand1-rand2)*rand3; 135 if(0<end && end<101){ 136 count++; 137 printf("(%d)(%d - %d) * %d= ",count,rand1,rand2,rand3); 138 int end1; 139 scanf("%d",&end1); 140 //printf("%d",end1); 141 if(end1==end){ 142 printf("Good Work!"); 143 get++; 144 } 145 else printf("Wrong! 正确答案:%d",end); 146 printf("\n"); 147 } 148 } 149 else { 150 end = (rand1-rand2)/rand3; 151 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 152 count++; 153 printf("(%d)(%d - %d) ÷%d= ",count,rand1,rand2,rand3); 154 int end1; 155 scanf("%d",&end1); 156 //printf("%d",end1); 157 if(end1==end){ 158 printf("Good Work!"); 159 get++; 160 } 161 else printf("Wrong! 正确答案:%d",end); 162 printf("\n"); 163 } 164 } 165 //else count = count; 166 //printf("%d + %d = %d",rand1,rand2,end); 167 } 168 169 170 //乘法 171 else if(sign1==3){ 172 if(sign2==1) { 173 end = rand1*rand2+rand3; 174 if(0<end && end<101){ 175 count++; 176 printf("(%d)%d * %d + %d= ",count,rand1,rand2,rand3); 177 int end1; 178 scanf("%d",&end1); 179 //printf("%d",end1); 180 if(end1==end){ 181 printf("Good Work!"); 182 get++; 183 } 184 else printf("Wrong! 正确答案:%d",end); 185 printf("\n"); 186 } 187 } 188 else if(sign2==2) { 189 end = rand1*rand2-rand3; 190 if(0<end && end<101){ 191 count++; 192 printf("(%d)%d * %d - %d= ",count,rand1,rand2,rand3); 193 int end1; 194 scanf("%d",&end1); 195 //printf("%d",end1); 196 if(end1==end){ 197 printf("Good Work!"); 198 get++; 199 } 200 else printf("Wrong! 正确答案:%d",end); 201 printf("\n"); 202 } 203 } 204 else if(sign2==3) { 205 end = rand1*rand2*rand3; 206 if(0<end && end<101){ 207 count++; 208 printf("(%d)%d * %d * %d= ",count,rand1,rand2,rand3); 209 int end1; 210 scanf("%d",&end1); 211 //printf("%d",end1); 212 if(end1==end){ 213 printf("Good Work!"); 214 get++; 215 } 216 else printf("Wrong! 正确答案:%d",end); 217 printf("\n"); 218 } 219 } 220 else { 221 end = (rand1*rand2)/rand3; 222 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 223 count++; 224 printf("(%d)(%d * %d) ÷%d= ",count,rand1,rand2,rand3); 225 int end1; 226 scanf("%d",&end1); 227 //printf("%d",end1); 228 if(end1==end){ 229 printf("Good Work!"); 230 get++; 231 } 232 else printf("Wrong! 正确答案:%d",end); 233 printf("\n"); 234 } 235 } 236 //else count = count; 237 //printf("%d + %d = %d",rand1,rand2,end); 238 } 239 240 241 //除法 242 else { 243 if(sign2==1) { 244 end = rand1/rand2+rand3; 245 if(0<end && end<101){ 246 count++; 247 printf("(%d)%d / %d + %d= ",count,rand1,rand2,rand3); 248 int end1; 249 scanf("%d",&end1); 250 //printf("%d",end1); 251 if(end1==end){ 252 printf("Good Work!"); 253 get++; 254 } 255 else printf("Wrong! 正确答案:%d",end); 256 printf("\n"); 257 } 258 } 259 else if(sign2==2) { 260 end = rand1/rand2-rand3; 261 if(0<end && end<101){ 262 count++; 263 printf("(%d)%d / %d - %d= ",count,rand1,rand2,rand3); 264 int end1; 265 scanf("%d",&end1); 266 //printf("%d",end1); 267 if(end1==end){ 268 printf("Good Work!"); 269 get++; 270 } 271 else printf("Wrong! 正确答案:%d",end); 272 printf("\n"); 273 } 274 } 275 else if(sign2==3) { 276 end = (rand1/rand2)*rand3; 277 if(0<end && end<101){ 278 count++; 279 printf("(%d)(%d ÷%d)* %d= ",count,rand1,rand2,rand3); 280 int end1; 281 scanf("%d",&end1); 282 //printf("%d",end1); 283 if(end1==end){ 284 printf("Good Work!"); 285 get++; 286 } 287 else printf("Wrong! 正确答案:%d",end); 288 printf("\n"); 289 } 290 } 291 else { 292 end = rand1/rand2/rand3; 293 if(0<end && end<101 && (rand1+rand2)%rand3==0){ 294 count++; 295 printf("(%d)%d / %d ÷%d= ",count,rand1,rand2,rand3); 296 int end1; 297 scanf("%d",&end1); 298 //printf("%d",end1); 299 if(end1==end){ 300 printf("Good Work!"); 301 get++; 302 } 303 else printf("Wrong! 正确答案:%d",end); 304 printf("\n"); 305 } 306 } 307 //else count = count; 308 //printf("%d + %d = %d",rand1,rand2,end); 309 } 310 }while(count!=300);//达到三百时结束 311 312 printf("总得分为%d",get/3.0); 313 return 0; 314 }
通过刚刚的第三版的改bug,我们终于达到了预期的效果,但是运行效率较低。
四、总结
1.结对编程中出现的问题:
1)开始没有理解结对编程的含义,错误的进行了编程流程。
2)编程前没有做好适当的沟通、需求规划以及程序整体架构算法规划,导致后续要花更多的时间去debug,甚至整体代码框架不如推翻重新来过更好。
3)代码选择的是从c语言,是面向过程的编程语言,有局限性,没法运用面向对象的思想去写这个程序,导致代码复用率低下,很难进行功能上的拓展,后期也不好维护。
4)很多地方出现了大段的重复代码,一开始应该把有些功能用函数封装起来,这样有利于代码的复用率。
2.通过此次对结对编程的理解:
结对编程是两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。
3.此次结对编程的心得:
1)耐心和尊重很重要,在这个过程中一定要互相尊重,每个人都有自己的强弱项。作为领航员,当驾驶员不明白的地方要耐心解释,不要一把把控制权抢过来自己来写,一定要给伙伴足够的时间去消化和练习。还有不需要评价伙伴写代码的风格,这不是审查的重点。
2)编程前一定要做好需求分析,不然做出来的东西很大概率会不符合要求,看似需求分析很麻烦很费时间,但是做好规划后续出现的问题少了才更节省时间。
3)通过结对编程中的讨论,可以相互学习对方的思路,发现自己在编程上的不足与缺点。看似在短期非常消耗时间,两个人同时做一件事情。但是就长期来讲,是对效率有提升的,因为代码质量提高了,并且通过知识分享团队成员能够互相为对方做 Backup。
4.对结对编程的评价:
我觉得并不是所有的项目都适合结对编程,也不是为了结对而结对,要做有价值的结对编程。我理解的有价值的结对编程就是在一些需求稍微高于自己能力的项目中进行,因为这样两个人可以做知识分享、相互提升。并且学习他人之长,去自己之短。