Khi nào lập trình cặp làm việc? Khi nào nên tránh?


51

Thay vì lập trình cặp đôi mọi lúc, chúng tôi sử dụng lập trình cặp một cách có chọn lọc trong nhóm của chúng tôi. Tôi nghĩ rằng nó hoạt động tốt nhất trong các trường hợp sau đây:

  • Tăng cường các thành viên nhóm hoàn toàn mới trong một dự án (thay vì để họ tự mình lội qua tài liệu hoặc mã).
  • Có những người đàn em và đàn anh làm việc cùng nhau (giúp thể hiện một số kỹ năng và thủ thuật của các nhà phát triển có kinh nghiệm hơn, cộng với nó cho phép những con chó già đôi khi học được những mánh mới).
  • Khi ai đó đang cố gắng theo dõi một khiếm khuyết, nó thường giúp ghép đôi với một đôi mắt mới.

Khi nào nên sử dụng chương trình cặp và tại sao?

Khi nào cần tránh lập trình cặp? Tại sao?


11
Cố gắng hiểu giá trị và logic của việc đóng câu hỏi này ba năm sau khi nó được trả lời rõ ràng một cách khách quan với các tài liệu tham khảo cho nghiên cứu thực nghiệm. Trong tất cả các thực hành phổ biến đối với Agile, đây là một trong những nghiên cứu và tài liệu được nghiên cứu nhiều nhất. Liệu từ ngữ của câu hỏi cần phải được thay đổi theo một cách nào đó? Có kỳ vọng / tiêu chuẩn thay đổi trong ba năm kể từ khi nó được công bố?
Michael

Câu trả lời:


44

Nghiên cứu được biên soạn bởi Laurie Williams chỉ ra rằng lập trình cặp hoạt động tốt nhất trong các nhóm công nghiệp khi

  • Các cặp làm việc trên đặc tả, thiết kế và các nhiệm vụ lập trình phức tạp - các thử nghiệm chỉ ra rằng không có cải thiện chất lượng nào được hiển thị khi thực hiện các tác vụ đơn giản trong một cặp nhưng có thể có các cải tiến về tốc độ. Cũng lưu ý rằng cặp "lập trình" thường bao gồm các hoạt động khác ngoài viết mã.
  • Mỗi cá nhân trong một cặp có cùng trình độ chuyên môn - trong khi lập trình cặp rất tốt cho đào tạo, các cặp được tham gia nhiều nhất khi họ ở cùng cấp độ.
  • Vai trò xoay thường xuyên - xoay thường xuyên giúp giữ cho phi công phụ hiện tại tham gia vì các cá nhân có xu hướng đóng góp nhiều nhất khi họ lái xe hoặc cảm thấy họ sắp lái.
  • Các cặp xoay thường xuyên - các nhóm đã bày tỏ sự thoải mái khi biết về các phần khác nhau của hệ thống mà họ đang xây dựng. Xoay vòng giúp chuyển giao kiến ​​thức giúp giảm rủi ro nhất định trong dự án. Trong một môi trường học thuật, các cặp thường được chỉ định, tuy nhiên ngành công nghiệp thường được tự gán thường xuyên trong thời gian đứng. Trong cả hai trường hợp, cặp này có hiệu quả nhất khi cả hai cá nhân đều là những người tham gia sẵn sàng nhìn thấy giá trị trong hoạt động ghép đôi.

Theo kinh nghiệm cá nhân của tôi, tôi thấy rằng nhóm XP của tôi dành trung bình khoảng 60% chương trình cặp thời gian phát triển của chúng tôi. Phần còn lại của thời gian là dành cho việc phát triển cá nhân. Không có gì lạ khi kết hợp để tạo ra một thiết kế ban đầu, làm việc một mình trên thiết kế trong vài giờ, sau đó quay lại với nhau để hoàn thành các phần khó khăn hoặc khó khăn của mã.

Tôi cũng thấy rằng lập trình cặp có hiệu quả nhất trong các khối khoảng 1,5 đến 2,5 giờ. Bất cứ điều gì ít hơn có xu hướng đòi hỏi quá nhiều chi phí để thiết lập trong khi nhiều hơn và các cặp có xu hướng trở nên cáu kỉnh và mệt mỏi. Quấy khóc và mệt mỏi có nghĩa là bạn không giao tiếp tốt và có thể để các khiếm khuyết lọt vào hệ thống.


Michael trả lời tuyệt vời. Chấp nhận điều này trong số nhiều câu trả lời hay vì nó có sự pha trộn đúng đắn giữa kinh nghiệm cá nhân và liên kết tuyệt vời đến nghiên cứu.
Paddyslacker

Mặc dù, trớ trêu thay, trong khi liên kết hoạt động khi bạn công bố câu trả lời của mình, giờ đây là 404, doh!
Paddyslacker

Tôi đã sửa siêu liên kết trong câu trả lời của bạn Michael, vì vậy tất cả đều hoạt động tốt trở lại.
Paddyslacker

phần "phức tạp" là rất quan trọng. Nếu bạn làm công việc đánh máy tầm thường, đối tác của bạn sẽ nhanh chán.
Dave O.

3
@DaveO.: Tôi chỉ có thể làm những việc đơn giản bằng lập trình cặp. Đối với các nhiệm vụ phức tạp tôi cần suy nghĩ và lập trình cặp chỉ là một nguồn gây xao lãng (xem câu trả lời của Will Sargent). Tôi vẫn thấy rất hữu ích khi thảo luận các vấn đề phức tạp với các đồng nghiệp, nhưng điều này khác với việc viết toàn bộ mã với nhau.
Giorgio

29

Lập trình cặp đã làm việc cho tôi trong rất, rất ít tình huống.

Trường hợp lập trình cặp thất bại cho tôi

Câu chuyện ngắn là lập trình cặp không hoạt động đối với tôi như là cách chính để phát triển phần mềm. Tôi có thể ghép nối chương trình trong một ngày hoặc có thể một tuần, đặc biệt nếu chúng tôi tập trung vào một vấn đề cụ thể. Nhưng sau đó thì? Tôi đã xong. Bánh mì nướng. Tôi không muốn gặp bất cứ ai, nói chuyện với bất cứ ai và tôi cần ít nhất một vài ngày trong hang động cho đến khi tôi phù hợp với công ty con người một lần nữa.

Đó là một câu chuyện buồn, nhưng điều buồn cười là bây giờ tôi rất hạnh phúc với kết thúc của nó. Tôi vui vẻ làm việc trong một hợp đồng nơi tôi làm việc ở nhà hoặc từ một quán cà phê, và tôi đã kết bạn mới và khám phá nhiều hơn về San Francisco hơn tôi từng nghĩ. Tôi có một chiếc xe đạp và máy tính xách tay, và miễn là tôi đáp ứng thời hạn và kiểm tra mã thường xuyên, thời gian của tôi là của riêng tôi.

Tôi sẽ liệt kê các vấn đề lớn mà tôi gặp phải khi lập trình cặp trước và cung cấp cho bạn chi tiết và giai thoại sau.

  1. Chia trọng tâm.
  2. Không thử nghiệm.
  3. Không có nốt cao.
  4. Không tự hào về quyền sở hữu.
  5. Không lối thoát ...

... Tôi đã hỏi các đồng nghiệp của mình nếu họ thấy những gì tôi thấy, nếu tôi thiếu thứ gì đó, bất cứ điều gì - tôi không thấy cách này có thể hoạt động, làm thế nào mọi người có thể tiếp tục làm điều này. Họ nói rằng tôi đang làm tốt, rằng nó chỉ mất thời gian để ổn định và điều chỉnh. Đó là khó khăn cho tất cả mọi người lúc đầu.

Cuối cùng, tôi rút lui vào chính mình. Giữa những cơn đau đầu chói mắt, mất ngủ và dồn nén, không cần phải viết mã, tôi ngừng đáp ứng với đầu vào. Tôi có thể nhìn chằm chằm vào một màn hình và không thấy gì cả. Ai đó có thể nói chuyện với tôi bất ngờ và tôi sẽ không nghe thấy họ. Tôi đã hoàn thành các yêu cầu vẹt trong công việc của mình, nhưng tôi đã không ở đó. Tôi đã sử dụng hết tất cả mọi thứ tôi vừa xuất hiện trong ngày. Tôi bắt đầu kiểm tra iPhone của mình khi đối tác khác của tôi đang gõ.

Cuối cùng - chỉ mới ba tháng sau, và lần đầu tiên - tôi đã bị sa thải vì không phù hợp với đội khi lập trình cặp.

Không cô đơn

Tôi đã viết điều này không chỉ để hiểu nó, mà còn để có thể nói về nó. Có một giả định rằng lập trình cặp hoạt động với hầu hết mọi người và dễ dàng và nhanh hơn nhiều so với lập trình solo. Điều này có thể hoặc không phải là trường hợp, nhưng như một thực tế lâu dài, lập trình cặp không phù hợp với tôi. Có nhiều người khác cho rằng lập trình cặp không hoạt động. Chúng tôi cũng quan trọng ...


2
Tôi cũng vậy. Khá nhiều chỉ trong theo dõi khiếm khuyết và thậm chí sau đó nó còn động não và triết lý hơn so với lập trình thực tế.
hplbsh

4
+1 Câu trả lời sâu sắc. Dường như đôi khi những người ủng hộ Lập trình Cặp đôi quên chúng ta về những kẻ cô độc và hướng nội. Và thật trùng hợp, nhiều người quan tâm đến lập trình cũng là những người hướng nội ...
Andres F.

6
@AndresF.: Bên cạnh những người cô độc và hướng nội, cũng có những người độc lập và chỉ cần không gian của họ để sắp xếp suy nghĩ của họ. Để truyền bá kiến ​​thức giữa các thành viên trong nhóm, đánh giá mã ít nhất có hiệu quả như lập trình cặp.
Giorgio

2
@Giorgio Đồng ý. Tôi thực sự hỗ trợ Lập trình cặp một phần : giải quyết một số vấn đề khó khăn theo cặp. Nhưng một số người ủng hộ nghĩ rằng nó nên được sử dụng hầu hết thời gian cho hầu hết các nhiệm vụ lập trình, điều mà tôi không đồng ý.
Andres F.

4
@AndresF.: Tôi đồng ý với bạn. "Lập trình cặp một phần" hoặc, sử dụng các từ ít thời trang hơn, "thảo luận về một số vấn đề khó khăn khi cần" là một cách tiếp cận rất hợp lý, không chỉ được sử dụng cho lập trình, mà còn khi học ở trường, v.v. Tuy nhiên, tôi không xem xét thực tiễn này một viên đạn bạc nên được sử dụng tất cả các thời gian.
Giorgio

10

Nhóm của tôi đã thực hiện lập trình cặp kể từ khi thành lập, rất lâu trước khi tôi làm việc ở đó, như là một phần của cửa hàng kiểu "lập trình cực đoan". Lập trình cặp là trạng thái mặc định ; mọi người chỉ thực sự đi đơn lẻ nếu có một số lẻ, hoặc đôi khi để điều tra, đặc biệt là những người sẽ liên quan đến việc gây rối với các thiết bị thù địch và cố gắng làm cho nó hoạt động.

"Thiếu niên / cao cấp" không phải là cách duy nhất để đi. "Trung cấp / thiếu niên" là hữu ích; nó giúp anh chàng trình độ trung cấp tổng hợp kiến ​​thức anh ta có được bằng cách buộc anh ta truyền đạt nó cho người khác. "Trung cấp / Trung cấp" thách thức hai người làm việc cùng nhau để chia sẻ kiến ​​thức, giao tiếp và làm việc như một phần của một nhóm. Và ngay cả khi bạn có hai người thực sự cao cấp, rất có thể họ có các lĩnh vực chuyên môn khác nhau và có thể đưa ra các phương pháp khác nhau. Các khía cạnh chia sẻ kiến ​​thức không kết thúc một khi mơ hồ "tăng tốc" cho một dự án. Thay vào đó, lập trình cặp là mẫu mực của một tổ chức học tập . Các kỹ thuật mới và thực hành tốt nhất lan truyền nhanh chóng.

Lập trình cặp cũng giúp duy trì chất lượng của mã (ít lỗi hơn) và sự tỉnh táo của mã (nó không chỉ làm những gì nó dự định, mà là làm những gì nó nên ... lý tưởng mà không phải đi xuống một con thỏ nhiều tuần- lỗ làm sai, hoặc hai điều đúng khác nhau sẽ xung đột dữ dội). Nó giúp các lập trình viên duy trì sự tập trung của họ: ở trung tâm Thung lũng Silicon, ngôi nhà của tuần làm việc 80 giờ, chúng tôi có thể làm việc chỉ 40 giờ một tuần vì chúng tôi đang thực hiện mã hóa mạnh mẽ trong tám giờ mỗi ngày, chuyển đổi mọi thứ tắt với nhau. (Ngoài ra, nếu bạn mất nhiều thời gian hơn để lập trình cặp, có lẽ bạn sẽ bỏ đi. Hoặc ít nhất là kiệt sức.) Điều này rất tốt cho cân bằng công việc / cuộc sống và nó cũng giúp tổ chức của bạn khi điều quan trọng là phải quay vòng nhanh (đặc biệt là quay vòng có độ trễ thấp).

Đó không phải là tất cả, hoàn toàn, 100% đào và kem; Tôi thấy rằng lập trình cặp đôi khi là một trở ngại đối với việc tôi áp dụng các quy trình não trực quan rất hữu ích cho một số vấn đề nhất định. Gần đây nhất, trong một nhiệm vụ rò rỉ bộ nhớ, tôi đã dành thời gian cả có và không có cặp; không có ai, tôi cảm thấy tự do hơn khi loay hoay và thử các thí nghiệm mà không thực sự biết chính xác làm thế nào để giải thích những gì tôi đang làm bất cứ lúc nào. Ngoài ra còn có một số lợi thế khi làm việc đơn lẻ, có thể đi tiếp tuyến và thực hiện các phép tái cấu trúc hoang dã nhất định (có giá trị trong phương pháp XP) một cách bất chợt.

Nhưng tất cả đã nói, lợi ích vượt xa chi phí và việc ghép đôi đã mang lại kết quả tốt cho chúng tôi: từ giai đoạn khởi nghiệp cho đến khi mua lại bởi một công ty lớn hơn và sự hội nhập sau đó của chúng tôi. (Nói về điều đó, lập trình cặp đã hỗ trợ chúng tôi duy trì sự liên tục của văn hóa thông qua việc mở rộng và mặc dù có một ít doanh thu).

(Chúng tôi phát triển một thiết bị phần mềm trong Perl, ~ $ 4.000 - $ 40.000 giá niêm yết.)


4

Tôi chưa bao giờ làm việc trong một thiết lập "Lập trình cặp" và tôi có thể tuyên bố rằng mình là một phần trong ba trường hợp bạn đã liệt kê. Kịch bản mà bạn đề cập có vẻ "lập trình thông thường" hơn với các giai đoạn trợ giúp / đào tạo được đưa vào. Chúng ta đã không làm tất cả những điều này trước khi "lập trình cặp" ra đời? Lập trình cặp, tôi cho rằng sẽ yêu cầu một cách tiếp cận tận tâm hơn trong đó quá trình chia sẻ trong một nhóm không dừng lại ngay khi bạn giải quyết công việc hoặc vấn đề tức thời. Nhưng đây là những gì tôi "nghĩ" chứ không phải những gì tôi "biết".

Cá nhân cho lập trình cặp Tôi muốn làm việc trong một nhóm nơi tôi có cơ hội học hỏi và chia sẻ kiến ​​thức của mình. Một nhóm không cân bằng, nơi mọi người bạn làm việc cùng đi trước bạn, hoặc cách dưới mệnh giá có thể trở nên khá không thú vị khá nhanh. Ngoài ra, tôi sợ làm việc với những người có niềm tin và khó thuyết phục.


Bạn nói đúng, chúng tôi có thể giải quyết các trường hợp tôi đã đề cập mà không cần lập trình cặp, nhưng chúng tôi sử dụng các kỹ thuật lập trình cặp của một người điều khiển người khác quan sát và tắt chúng theo định kỳ. Đây là một chút trang trọng hơn so với chỉ giúp đỡ / đào tạo. Rất nhiều cửa hàng XP thực hiện lập trình cặp nhiều hơn thế này - tôi tự hỏi số lượng "đúng" của cặp đôi này là gì đối với mọi người.
Paddyslacker

Vâng, tôi cũng muốn nghe từ những người đã làm việc với PP trong thời gian dài. Tôi có thể hiểu làm thế nào các chuyên gia tư vấn làm việc với nhiều công ty hoặc nhóm có thể hưởng lợi từ PP, nhưng các nhiệm vụ này thường kéo dài trong một vài tháng. Thật thú vị khi biết PP hoạt động như thế nào trong một công ty phần mềm điển hình nơi các dự án thường kéo dài hơn một năm.
Preets

2

Chúng tôi đã thử nghiệm lập trình Pair trong nhóm của chúng tôi trong vài tháng qua. Tôi cảm thấy nó khá hữu ích khi bạn đang làm việc trên một cái gì đó mới (công nghệ mới, tính năng mới, v.v.) khi bạn có thể nhanh chóng nảy ý tưởng với một người khác trong nhóm và xác nhận / vô hiệu hóa chúng. Ngoài ra, một đánh giá ngang hàng giúp ngăn chặn lỗi.

Một đồng đội khác đã thử sử dụng lập trình cặp với một bài kiểm tra để thực hiện ATDD và họ khá hài lòng với kết quả (theo tính toán của anh ta, việc tăng 20% ​​chi phí phát triển dẫn đến giảm khoảng 50% thời gian kiểm tra)


1

Chúc ngủ ngon

nhiều lần chúng tôi đã tranh luận về thực hành Lập trình cực đoan và lập trình cặp . Quay ngược thời gian, chúng ta có thể hiểu rằng lập trình là một hoạt động solo vì các lập trình viên cần sự tập trung và cô lập. Các lập trình viên lúc đó đang ở trong khu vực , một trạng thái tinh thần nơi họ có thể tập trung hiệu quả vào mã và đưa ra quyết định sáng tạo và tốt đẹp.

Lập trình cặp dường như cũng có rủi ro nếu bạn giả sử một lập trình viên ngắt lời nhau. Mặt khác, khó khăn hơn để làm gián đoạn hai lập trình viên làm việc cùng nhau. Ví dụ, trong lập trình Solo, sẽ dễ bị gián đoạn hơn, do đó, hầu như không thể lập trình viên solo ở lại "khu vực".

Chất lượng mã là khác khi dòng chết chỉ quanh góc. Mọi người sẽ luôn vội vàng, là một lập trình viên cặp hoặc lập trình viên solo: họ sẽ không áp dụng một số thực tiễn tốt nhất và sẽ quên đi việc kiểm tra đơn vị.

Tôi sẽ gắn bó với lập trình cặp. Bởi vì khi gặp rủi ro, khi một lập trình viên biến mất, bạn sẽ luôn có một người khác để ghi lại quá trình và dạy mọi người khác cách nó hoạt động.


1

Làm việc trên bất cứ điều gì phức tạp không tầm thường có xu hướng là một ứng cử viên tốt cho lập trình cặp để nhiều người hiểu mã hơn là chỉ một nhà phát triển biết một phần của cơ sở mã. Một trường hợp khác là khi ai đó muốn chuyển một số kỹ năng. Một ví dụ ở đây có thể có một người thực sự giỏi trong các bài kiểm tra đơn vị kết hợp với một người không hoàn toàn quen thuộc với khái niệm này và do đó giúp có được thói quen ban đầu về một điều gì đó.

Về nơi để tránh lập trình cặp, các nhiệm vụ công việc đơn giản là nơi tốt hơn nên chia công việc thành hai nhóm và để mỗi nhà phát triển thực hiện một số công việc riêng biệt để hoàn thành công việc. Một số tác vụ có thể chỉ cần gõ một chút công bằng nhưng không lớn đến mức đáng để dành một vài giờ cố gắng tìm cách tốt hơn để làm điều đó vì nó có thể được thực hiện nếu một số nhà phát triển thực hiện một cách tiếp cận mạnh mẽ trong một vài giờ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.